diff --git a/substrate/.gitignore b/substrate/.gitignore index 0a2ce91ba0..526a534817 100644 --- a/substrate/.gitignore +++ b/substrate/.gitignore @@ -11,6 +11,7 @@ pwasm-alloc/Cargo.lock pwasm-libc/Cargo.lock node/runtime/wasm/target/ **/._* +**/.criterion/ .vscode polkadot.* .DS_Store diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock index 087c169c14..5996bf2002 100644 --- a/substrate/Cargo.lock +++ b/substrate/Cargo.lock @@ -209,6 +209,11 @@ dependencies = [ "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "cast" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "cc" version = "1.0.17" @@ -291,6 +296,47 @@ dependencies = [ "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "criterion" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", + "criterion-plot 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "criterion-stats 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "failure_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "isatty 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "itertools 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)", + "simplelog 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "criterion-plot" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "cast 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "itertools 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "criterion-stats" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cast 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", + "thread-scoped 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "crossbeam" version = "0.2.12" @@ -518,6 +564,26 @@ dependencies = [ "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "failure" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "backtrace 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "failure_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "failure_derive" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)", + "synstructure 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "fake-simd" version = "0.1.2" @@ -628,11 +694,16 @@ dependencies = [ ] [[package]] -name = "hashdb" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" +name = "hash-db" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#b3b3209e0122f394c2b63620ffcf68d503558109" + +[[package]] +name = "hash256-std-hasher" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#b3b3209e0122f394c2b63620ffcf68d503558109" dependencies = [ - "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -748,6 +819,30 @@ dependencies = [ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "isatty" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "itertools" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "itertools" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "itoa" version = "0.4.1" @@ -825,6 +920,16 @@ dependencies = [ "ws 0.7.5 (git+https://github.com/tomusdrw/ws-rs)", ] +[[package]] +name = "keccak-hasher" +version = "0.1.0" +source = "git+https://github.com/paritytech/trie#b3b3209e0122f394c2b63620ffcf68d503558109" +dependencies = [ + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "hash256-std-hasher 0.9.0 (git+https://github.com/paritytech/trie)", + "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "kernel32-sys" version = "0.2.2" @@ -1249,7 +1354,7 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1270,23 +1375,20 @@ name = "memoffset" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "memory-db" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#b3b3209e0122f394c2b63620ffcf68d503558109" +dependencies = [ + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "memory_units" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "memorydb" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "plain_hasher 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "mime" version = "0.2.6" @@ -1472,7 +1574,7 @@ dependencies = [ "node-primitives 0.1.0", "node-runtime 0.1.0", "node-transaction-pool 0.1.0", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "rhododendron 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0", @@ -1490,7 +1592,7 @@ dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "node-primitives 0.1.0", "node-runtime 0.1.0", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "srml-balances 0.1.0", @@ -1505,7 +1607,8 @@ dependencies = [ "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", "substrate-state-machine 0.1.0", - "triehash 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-trie 0.4.0", + "trie-root 0.9.0 (git+https://github.com/paritytech/trie)", ] [[package]] @@ -1528,8 +1631,8 @@ dependencies = [ name = "node-primitives" version = "0.1.0" dependencies = [ - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1545,7 +1648,7 @@ version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "node-primitives 0.1.0", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1606,7 +1709,7 @@ dependencies = [ "node-api 0.1.0", "node-primitives 0.1.0", "node-runtime 0.1.0", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0", "substrate-client 0.1.0", @@ -1628,11 +1731,27 @@ dependencies = [ "num-traits 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "num-traits" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "num-traits" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "num_cpus" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "num_cpus" version = "1.8.0" @@ -1688,7 +1807,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "parity-codec" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1699,9 +1818,19 @@ name = "parity-codec-derive" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parity-codec-derive" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1791,18 +1920,6 @@ dependencies = [ "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "patricia-trie" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "percent-encoding" version = "1.0.1" @@ -1813,14 +1930,6 @@ name = "pkg-config" version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "plain_hasher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "pretty_assertions" version = "0.4.1" @@ -1854,7 +1963,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "proc-macro2" -version = "0.4.4" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1898,7 +2007,7 @@ name = "quote" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2194,9 +2303,9 @@ name = "serde_derive" version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2244,6 +2353,16 @@ dependencies = [ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "simplelog" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "term 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "skeptic" version = "0.4.0" @@ -2327,14 +2446,13 @@ name = "sr-io" version = "0.1.0" dependencies = [ "environmental 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "sr-std 0.1.0", "substrate-primitives 0.1.0", "substrate-state-machine 0.1.0", - "triehash 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-trie 0.4.0", ] [[package]] @@ -2344,7 +2462,7 @@ dependencies = [ "integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2359,7 +2477,7 @@ name = "sr-sandbox" version = "0.1.0" dependencies = [ "assert_matches 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-std 0.1.0", @@ -2379,7 +2497,7 @@ dependencies = [ name = "sr-version" version = "0.1.0" dependencies = [ - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2391,7 +2509,7 @@ name = "srml-balances" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2410,7 +2528,7 @@ name = "srml-consensus" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2427,7 +2545,7 @@ name = "srml-contract" version = "0.1.0" dependencies = [ "assert_matches 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-wasm 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)", "pwasm-utils 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2449,7 +2567,7 @@ version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2471,7 +2589,7 @@ name = "srml-democracy" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2491,7 +2609,7 @@ name = "srml-example" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2509,7 +2627,7 @@ name = "srml-executive" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2527,7 +2645,7 @@ name = "srml-session" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2548,7 +2666,7 @@ name = "srml-staking" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2573,7 +2691,7 @@ version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "mashup 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "pretty_assertions 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2589,7 +2707,7 @@ name = "srml-system" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2606,7 +2724,7 @@ name = "srml-timestamp" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", @@ -2623,7 +2741,7 @@ name = "srml-treasury" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2677,7 +2795,7 @@ dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "rhododendron 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0", @@ -2726,14 +2844,13 @@ dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "memorydb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "memory-db 0.9.0 (git+https://github.com/paritytech/trie)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", @@ -2745,20 +2862,22 @@ dependencies = [ "substrate-state-machine 0.1.0", "substrate-telemetry 0.3.0", "substrate-test-client 0.1.0", - "triehash 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-trie 0.4.0", + "trie-db 0.9.0 (git+https://github.com/paritytech/trie)", + "trie-root 0.9.0 (git+https://github.com/paritytech/trie)", ] [[package]] name = "substrate-client-db" version = "0.1.0" dependencies = [ - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", "kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "kvdb-memorydb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "kvdb-rocksdb 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "memorydb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "memory-db 0.9.0 (git+https://github.com/paritytech/trie)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0", @@ -2767,6 +2886,7 @@ dependencies = [ "substrate-primitives 0.1.0", "substrate-state-db 0.1.0", "substrate-state-machine 0.1.0", + "substrate-trie 0.4.0", ] [[package]] @@ -2776,11 +2896,11 @@ dependencies = [ "assert_matches 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2789,7 +2909,8 @@ dependencies = [ "substrate-primitives 0.1.0", "substrate-serializer 0.1.0", "substrate-state-machine 0.1.0", - "triehash 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-trie 0.4.0", + "trie-root 0.9.0 (git+https://github.com/paritytech/trie)", "twox-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "wabt 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2824,7 +2945,7 @@ dependencies = [ name = "substrate-metadata" version = "0.1.0" dependencies = [ - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2834,7 +2955,7 @@ dependencies = [ name = "substrate-misbehavior-check" version = "0.1.0" dependencies = [ - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "rhododendron 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", @@ -2853,7 +2974,7 @@ dependencies = [ "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "linked-hash-map 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2900,13 +3021,12 @@ dependencies = [ "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "hash256-std-hasher 0.9.0 (git+https://github.com/paritytech/trie)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "plain_hasher 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2931,7 +3051,7 @@ dependencies = [ "jsonrpc-macros 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)", "jsonrpc-pubsub 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2977,7 +3097,7 @@ dependencies = [ "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3005,7 +3125,7 @@ version = "0.1.0" dependencies = [ "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-primitives 0.1.0", @@ -3016,17 +3136,18 @@ name = "substrate-state-machine" version = "0.1.0" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "memorydb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "memory-db 0.9.0 (git+https://github.com/paritytech/trie)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-primitives 0.1.0", - "triehash 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-trie 0.4.0", + "trie-db 0.9.0 (git+https://github.com/paritytech/trie)", + "trie-root 0.9.0 (git+https://github.com/paritytech/trie)", ] [[package]] @@ -3047,8 +3168,8 @@ dependencies = [ name = "substrate-test-client" version = "0.1.0" dependencies = [ - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "rhododendron 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0", "srml-support 0.1.0", @@ -3066,7 +3187,7 @@ version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3086,7 +3207,7 @@ dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3096,6 +3217,23 @@ dependencies = [ "transaction-pool 1.13.2 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "substrate-trie" +version = "0.4.0" +dependencies = [ + "criterion 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "keccak-hasher 0.1.0 (git+https://github.com/paritytech/trie)", + "memory-db 0.9.0 (git+https://github.com/paritytech/trie)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-primitives 0.1.0", + "trie-bench 0.9.0 (git+https://github.com/paritytech/trie)", + "trie-db 0.9.0 (git+https://github.com/paritytech/trie)", + "trie-root 0.9.0 (git+https://github.com/paritytech/trie)", + "trie-standardmap 0.9.0 (git+https://github.com/paritytech/trie)", +] + [[package]] name = "subtle" version = "0.5.1" @@ -3103,14 +3241,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "syn" -version = "0.14.1" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "synstructure" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "sysinfo" version = "0.5.7" @@ -3158,6 +3307,15 @@ dependencies = [ "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "term" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "termion" version = "1.5.1" @@ -3176,6 +3334,11 @@ dependencies = [ "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "thread-scoped" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "thread_local" version = "0.3.5" @@ -3447,13 +3610,47 @@ dependencies = [ ] [[package]] -name = "triehash" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" +name = "trie-bench" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#b3b3209e0122f394c2b63620ffcf68d503558109" +dependencies = [ + "criterion 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "keccak-hasher 0.1.0 (git+https://github.com/paritytech/trie)", + "memory-db 0.9.0 (git+https://github.com/paritytech/trie)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "trie-db 0.9.0 (git+https://github.com/paritytech/trie)", + "trie-root 0.9.0 (git+https://github.com/paritytech/trie)", + "trie-standardmap 0.9.0 (git+https://github.com/paritytech/trie)", +] + +[[package]] +name = "trie-db" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#b3b3209e0122f394c2b63620ffcf68d503558109" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "trie-root" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#b3b3209e0122f394c2b63620ffcf68d503558109" +dependencies = [ + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", +] + +[[package]] +name = "trie-standardmap" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#b3b3209e0122f394c2b63620ffcf68d503558109" +dependencies = [ + "criterion 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "keccak-hasher 0.1.0 (git+https://github.com/paritytech/trie)", ] [[package]] @@ -3798,6 +3995,7 @@ dependencies = [ "checksum byteorder 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "96c8b41881888cc08af32d47ac4edd52bc7fa27fef774be47a92443756451304" "checksum byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "74c0b906e9446b0a2e4f760cdb3fa4b2c48cdc6db8766a845c54b6ff063fd2e9" "checksum bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7dd32989a66957d3f0cba6588f15d4281a733f4e9ffc43fcd2385f57d3bf99ff" +"checksum cast 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "011941fb53da1a8ac3e4132a1becc367c44fe13f630769f3143d8c66c91c6cb6" "checksum cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)" = "49ec142f5768efb5b7622aebc3fdbdbb8950a4b9ba996393cb76ef7466e8747d" "checksum cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "405216fd8fe65f718daa7102ea808a946b6ce40c742998fbfd3463645552de18" "checksum chashmap 2.2.1 (git+https://github.com/redox-os/tfs)" = "" @@ -3808,6 +4006,9 @@ dependencies = [ "checksum constant_time_eq 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8ff012e225ce166d4422e0e78419d901719760f62ae2b7969ca6b564d1b54a9e" "checksum core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "25bfd746d203017f7d5cbd31ee5d8e17f94b6521c7af77ece6c9e4b2d4b16c67" "checksum core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "065a5d7ffdcbc8fa145d6f0746f3555025b9097a9e9cda59f7467abae670c78d" +"checksum criterion 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f58b0200bf321214bdda8c797cf0071bcc638171c40ec198c3f652a4edaacde3" +"checksum criterion-plot 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "885431f7865f9d4956b466126674e5ea40a0f193d42157e56630c356c5501957" +"checksum criterion-stats 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c71521cb4c7b7eac76b540e75447fb0172c4234d6333729001b886aaa21d6da4" "checksum crossbeam 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "bd66663db5a988098a89599d4857919b3acf7f61402e61365acfd3919857b9be" "checksum crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f739f8c5363aca78cfb059edf753d8f0d36908c348f3d8d1503f03d8b75d9cf3" "checksum crossbeam-deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fe8153ef04a7594ded05b427ffad46ddeaf22e63fd48d42b3e1e3bb4db07cae7" @@ -3835,6 +4036,8 @@ dependencies = [ "checksum ethereum-types-serialize 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ac59a21a9ce98e188f3dace9eb67a6c4a3c67ec7fbc7218cb827852679dc002" "checksum etrace 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "5a3eb49b4ae7e88cc23caa812e8072c9f83a3e202e0b789ff4f9319cf796d8ca" "checksum exit-future 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9aa7b56cef68c4182db7212dece19cc9f6e2916cf9412e57e6cea53ec02f316d" +"checksum failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7efb22686e4a466b1ec1a15c2898f91fa9cb340452496dca654032de20ff95b9" +"checksum failure_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "946d0e98a50d9831f5d589038d2ca7f8f455b1c21028c0db0e84116a12696426" "checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" "checksum fdlimit 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b1ee15a7050e5580b3712877157068ea713b245b080ff302ae2ca973cfcd9baa" "checksum fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0d5ec8112f00ea8a483e04748a85522184418fd1cf02890b626d8fc28683f7de" @@ -3850,7 +4053,8 @@ dependencies = [ "checksum generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d" "checksum getopts 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)" = "b900c08c1939860ce8b54dc6a89e26e00c04c380fd0e09796799bd7f12861e05" "checksum globset 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "142754da2c9b3722affd909f9e27f2a6700a7a303f362971e0a74c652005a43d" -"checksum hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f1c71fc577cde89b3345d5f2880fecaf462a32e96c619f431279bdaf1ba5ddb1" +"checksum hash-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" +"checksum hash256-std-hasher 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1679e6ea370dee694f91f1dc469bf94cf8f52051d147aec3e1f9497c6fc22461" "checksum hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" "checksum hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4da5f0e01bd8a71a224a4eedecaacfcabda388dbb7a80faf04d3514287572d95" @@ -3863,6 +4067,9 @@ dependencies = [ "checksum integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)" = "" "checksum interleaved-ordered 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "141340095b15ed7491bd3d4ced9d20cebfb826174b6bb03386381f62b01e3d77" "checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" +"checksum isatty 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e31a8281fc93ec9693494da65fbf28c0c2aa60a2eaec25dc58e2f31952e95edc" +"checksum itertools 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)" = "c4a9b56eb56058f43dc66e58f40a214b2ccbc9f3df51861b63d51dec7b65bc3f" +"checksum itertools 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4833d6978da405305126af4ac88569b5d71ff758581ce5a987dbfa3755f694fc" "checksum itoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c069bbec61e1ca5a596166e55dfe4773ff745c3d16b700013bcaff9a6df2c682" "checksum jsonrpc-core 8.0.2 (git+https://github.com/paritytech/jsonrpc.git)" = "" "checksum jsonrpc-http-server 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)" = "" @@ -3870,6 +4077,7 @@ dependencies = [ "checksum jsonrpc-pubsub 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)" = "" "checksum jsonrpc-server-utils 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)" = "" "checksum jsonrpc-ws-server 8.0.0 (git+https://github.com/paritytech/jsonrpc.git)" = "" +"checksum keccak-hasher 0.1.0 (git+https://github.com/paritytech/trie)" = "" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" "checksum kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "72ae89206cea31c32014b39d5a454b96135894221610dbfd19cf4d2d044fa546" "checksum kvdb-memorydb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "45bcdf5eb083602cff61a6f8438dce2a7900d714e893fc48781c39fb119d37aa" @@ -3907,8 +4115,8 @@ dependencies = [ "checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376" "checksum memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "796fba70e76612589ed2ce7f45282f5af869e0fdd7cc6199fa1aa1f1d591ba9d" "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" +"checksum memory-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum memory_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" -"checksum memorydb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f72c93304ad51e21230ecbd0d2b58a3f94703bf9339d14aed88c3aaf5e8b7a56" "checksum mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" "checksum mime 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "0b28683d0b09bbc20be1c9b3f6f24854efb1356ffcffee08ea3f6e65596e85fa" "checksum mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)" = "6d771e3ef92d58a8da8df7d6976bfca9371ed1de6619d9d5a5ce5b1f29b85bfe" @@ -3925,15 +4133,18 @@ dependencies = [ "checksum nix 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d37e713a259ff641624b6cb20e3b12b2952313ba36b6823c0f16e6cfd9e5de17" "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2" "checksum num-integer 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)" = "6ac0ea58d64a89d9d6b7688031b3be9358d6c919badcf7fbb0527ccfd891ee45" +"checksum num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" "checksum num-traits 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "775393e285254d2f5004596d69bb8bc1149754570dcc08cf30cabeba67955e28" +"checksum num_cpus 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "cee7e88156f3f9e19bdd598f8d6c9db7bf4078f99f8381f43a55b09648d1a6e3" "checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30" "checksum ole32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2c49021782e5233cd243168edfa8037574afed4eba4bbaf538b3d8d1789d8c" "checksum openssl 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)" = "a3605c298474a3aa69de92d21139fb5e2a81688d308262359d85cdd0d12a7985" "checksum openssl-sys 0.9.33 (registry+https://github.com/rust-lang/crates.io-index)" = "d8abc04833dcedef24221a91852931df2f63e3369ae003134e70aff3645775cc" "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" "checksum parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fa5168b4cf41f3835e4bc6ffb32f51bc9365dc50cb351904595b3931d917fd0c" -"checksum parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "48db1d9442469191a590498ab734a85d98848873267d3e93b37b03538399bd2c" +"checksum parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2b47e0394c3720edecb4815258c28e848012a833b649fbf7dce6174365203a2d" "checksum parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1eda64d782c342261aea4ca047a609f9bd92d5f9dafabe6b5a396caf5c7b8827" +"checksum parity-codec-derive 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8ad82895f41c3880de6fcb532455ac89c8e499eaed918beb75070c6cde85bba0" "checksum parity-crypto 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c1117f6574377d21309bfa1f7d69ff734120685d92b02c3f362b122585758840" "checksum parity-rocksdb 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cd55d2d6d6000ec99f021cf52c9acc7d2a402e14f95ced4c5de230696fabe00b" "checksum parity-rocksdb-sys 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9ae07d4bfb2759541957c19f471996b807fc09ef3a5bdce14409b57f038de49f" @@ -3943,15 +4154,13 @@ dependencies = [ "checksum parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d4d05f1349491390b1730afba60bb20d55761bef489a954546b58b4b34e1e2ac" "checksum parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "901d6514273469bb17380c1ac3f51fb3ce54be1f960e51a6f04901eba313ab8d" "checksum parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "4db1a8ccf734a7bce794cc19b3df06ed87ab2f3907036b693c68f56b4d4537fa" -"checksum patricia-trie 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fa27fc4a972a03d64e5170d7facd2c84c6ed425b38ce62ad98dcfee2f7845b3b" "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" "checksum pkg-config 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = "110d5ee3593dbb73f56294327fe5668bcc997897097cbc76b51e7aed3f52452f" -"checksum plain_hasher 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "95fa6386b1d34aaf0adb9b7dd2885dbe7c34190e6263785e5a7ec2b19044a90f" "checksum pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "28ea5118e2f41bfbc974b28d88c07621befd1fa5d6ec23549be96302a1a59dd2" "checksum pretty_assertions 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3a029430f0d744bc3d15dd474d591bed2402b645d024583082b9f63bb936dac6" "checksum proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2c725b36c99df7af7bf9324e9c999b9e37d92c8f8caf106d82e1d7953218d2d8" "checksum proc-macro-hack-impl 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2b753ad9ed99dd8efeaa7d2fb8453c8f6bc3e54b97966d35f1bc77ca6865254a" -"checksum proc-macro2 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1fa93823f53cfd0f5ac117b189aed6cfdfb2cfc0a9d82e956dd7927595ed7d46" +"checksum proc-macro2 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)" = "ffe022fb8c8bd254524b0b3305906c1921fa37a84a644e29079a9e62200c3901" "checksum protobuf 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7fec4b8f0fa26c52d29c66e93e8624aad859458ec5e5d4f6ddf923954293436a" "checksum pulldown-cmark 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8361e81576d2e02643b04950e487ec172b687180da65c731c03cf336784e6c07" "checksum pwasm-utils 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "efd695333cfae6e9dbe2703a6d040e252b57a6fc3b9a65c712615ac042b2e0c5" @@ -4000,6 +4209,7 @@ dependencies = [ "checksum sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" "checksum sha2 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9eb6be24e4c23a84d7184280d2722f7f2731fcdd4a9d886efbfe4413e4847ea0" "checksum shell32-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9ee04b46101f57121c9da2b151988283b6beb79b34f5bb29a58ee48cb695122c" +"checksum simplelog 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "24b615b1a3cc51ffa565d9a1d0cfcc49fe7d64737ada84eca284cddb0292d125" "checksum skeptic 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "24ebf8a06f5f8bae61ae5bbc7af7aac4ef6907ae975130faba1199e5fe82256a" "checksum slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17b4fcaed89ab08ef143da37bc52adbcc04d4a69014f4c1208d6b51f0c47bc23" "checksum slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5f9776d6b986f77b35c6cf846c11ad986ff128fe0b2b63a3628e3755e8d3102d" @@ -4015,15 +4225,18 @@ dependencies = [ "checksum stdweb 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ef5430c8e36b713e13b48a9f709cc21e046723fe44ce34587b73a830203b533e" "checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550" "checksum subtle 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc7f6353c2ee5407358d063a14cccc1630804527090a6fb5a9489ce4924280fb" -"checksum syn 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6dfd71b2be5a58ee30a6f8ea355ba8290d397131c00dfa55c3d34e6e13db5101" +"checksum syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)" = "261ae9ecaa397c42b960649561949d69311f08eeaea86a65696e6e46517cf741" +"checksum synstructure 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "85bb9b7550d063ea184027c9b8c20ac167cd36d3e06b3a40bceb9d746dc1a7b7" "checksum sysinfo 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)" = "394abcf30852ac00878ab01642b13668db48d166d945f250c7bdbb9e12d75ad0" "checksum take 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b157868d8ac1f56b64604539990685fa7611d8fa9e5476cf0c02cf34d32917c5" "checksum take_mut 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60" "checksum target_info 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c63f48baada5c52e65a29eef93ab4f8982681b67f9e8d29c7b05abcfec2b9ffe" "checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" "checksum tempfile 3.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c4b103c6d08d323b92ff42c8ce62abcd83ca8efa7fd5bf7927efefec75f58c76" +"checksum term 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "fa63644f74ce96fbeb9b794f66aff2a52d601cbd5e80f4b97123e3899f4570f1" "checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096" "checksum textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "307686869c93e71f94da64286f9a9524c0f308a9e1c87a583de8e9c9039ad3f6" +"checksum thread-scoped 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bcbb6aa301e5d3b0b5ef639c9a9c7e2f1c944f177b460c04dc24c69b1fa2bd99" "checksum thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "279ef31c19ededf577bfd12dfae728040a21f635b06a24cd670ff510edd38963" "checksum time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "d825be0eb33fda1a7e68012d51e9c7f451dc1a69391e7fdc197060bb8c56667b" "checksum tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e9175261fbdb60781fcd388a4d6cc7e14764a2b629a7ad94abb439aed223a44f" @@ -4048,7 +4261,10 @@ dependencies = [ "checksum trace-time 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5aea07da6582e957c6e737eeb63a5af79e648eeeaaaba8fd9a417f1124bafa41" "checksum traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" "checksum transaction-pool 1.13.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fdb8870eea404a57e2f62056ac45067a53a6207fd31866122356481d3c2e1a30" -"checksum triehash 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3da77dc2c88bac48769c53f2c7675d99d522a7fc8130da3fadf29d7c6f94c9ac" +"checksum trie-bench 0.9.0 (git+https://github.com/paritytech/trie)" = "" +"checksum trie-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" +"checksum trie-root 0.9.0 (git+https://github.com/paritytech/trie)" = "" +"checksum trie-standardmap 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum try-lock 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee2aa4715743892880f70885373966c83d73ef1b0838a664ef0c76fffd35e7c2" "checksum twox-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "475352206e7a290c5fccc27624a163e8d0d115f7bb60ca18a64fc9ce056d7435" "checksum typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887" diff --git a/substrate/Cargo.toml b/substrate/Cargo.toml index cabd3e22dc..7f8e806add 100644 --- a/substrate/Cargo.toml +++ b/substrate/Cargo.toml @@ -17,8 +17,6 @@ ctrlc = { version = "3.0", features = ["termination"] } [build-dependencies] vergen = "0.1" - - [workspace] members = [ "core/bft", @@ -58,6 +56,7 @@ members = [ "core/state-machine", "core/test-runtime", "core/telemetry", + "core/trie", "core/keystore", "node/cli", "node/api", diff --git a/substrate/core/client/Cargo.toml b/substrate/core/client/Cargo.toml index 17fbe686ab..aed5c795a0 100644 --- a/substrate/core/client/Cargo.toml +++ b/substrate/core/client/Cargo.toml @@ -8,7 +8,7 @@ error-chain = "0.12" fnv = "1.0" log = "0.3" parking_lot = "0.4" -triehash = "0.2" +trie-root = { git = "https://github.com/paritytech/trie" } hex-literal = "0.1" futures = "0.1.17" slog = "^2" @@ -20,12 +20,13 @@ substrate-primitives = { path = "../primitives" } sr-io = { path = "../sr-io" } sr-primitives = { path = "../sr-primitives" } substrate-state-machine = { path = "../state-machine" } -substrate-keyring = { path = "../../core/keyring" } +substrate-keyring = { path = "../keyring" } +substrate-trie = { path = "../trie" } substrate-telemetry = { path = "../telemetry" } -hashdb = "0.2.1" -patricia-trie = "0.2.1" +hash-db = { git = "https://github.com/paritytech/trie" } +trie-db = { git = "https://github.com/paritytech/trie" } rlp = "0.2.4" -memorydb = "0.2.1" +memory-db = { git = "https://github.com/paritytech/trie" } [dev-dependencies] substrate-test-client = { path = "../test-client" } diff --git a/substrate/core/client/db/Cargo.toml b/substrate/core/client/db/Cargo.toml index 77dfc1f1b5..fb094d2144 100644 --- a/substrate/core/client/db/Cargo.toml +++ b/substrate/core/client/db/Cargo.toml @@ -8,16 +8,17 @@ parking_lot = "0.4" log = "0.3" kvdb = "0.1" kvdb-rocksdb = "0.1.3" -hashdb = "0.2.1" -memorydb = "0.2.1" -substrate-primitives = { path = "../../../core/primitives" } -sr-primitives = { path = "../../../core/sr-primitives" } -substrate-client = { path = "../../../core/client" } -substrate-state-machine = { path = "../../../core/state-machine" } +hash-db = { git = "https://github.com/paritytech/trie" } +memory-db = { git = "https://github.com/paritytech/trie" } +substrate-primitives = { path = "../../primitives" } +sr-primitives = { path = "../../sr-primitives" } +substrate-client = { path = "../../client" } +substrate-state-machine = { path = "../../state-machine" } parity-codec = { version = "2.0" } parity-codec-derive = { version = "~1.0" } -substrate-executor = { path = "../../../core/executor" } -substrate-state-db = { path = "../../../core/state-db" } +substrate-executor = { path = "../../executor" } +substrate-state-db = { path = "../../state-db" } +substrate-trie = { path = "../../trie" } [dev-dependencies] kvdb-memorydb = "0.1" diff --git a/substrate/core/client/db/src/lib.rs b/substrate/core/client/db/src/lib.rs index 521781fc64..ee58e60ccc 100644 --- a/substrate/core/client/db/src/lib.rs +++ b/substrate/core/client/db/src/lib.rs @@ -21,8 +21,8 @@ extern crate substrate_client as client; extern crate kvdb_rocksdb; extern crate kvdb; -extern crate hashdb; -extern crate memorydb; +extern crate hash_db; +extern crate memory_db; extern crate parking_lot; extern crate substrate_state_machine as state_machine; extern crate substrate_primitives as primitives; @@ -30,6 +30,7 @@ extern crate sr_primitives as runtime_primitives; extern crate parity_codec as codec; extern crate substrate_executor as executor; extern crate substrate_state_db as state_db; +extern crate substrate_trie as trie; #[macro_use] extern crate log; @@ -51,11 +52,11 @@ use std::io; use client::backend::NewBlockState; use codec::{Decode, Encode}; -use hashdb::Hasher; +use hash_db::Hasher; use kvdb::{KeyValueDB, DBTransaction}; -use memorydb::MemoryDB; +use trie::MemoryDB; use parking_lot::RwLock; -use primitives::{H256, AuthorityId, Blake2Hasher, RlpCodec}; +use primitives::{H256, AuthorityId, Blake2Hasher}; use runtime_primitives::generic::BlockId; use runtime_primitives::bft::Justification; use runtime_primitives::traits::{Block as BlockT, Header as HeaderT, As, NumberFor, Zero, Digest, DigestItem}; @@ -70,7 +71,7 @@ pub use state_db::PruningMode; const FINALIZATION_WINDOW: u64 = 32; /// DB-backed patricia trie state, transaction type is an overlay of changes to commit. -pub type DbState = state_machine::TrieBackend>, Blake2Hasher, RlpCodec>; +pub type DbState = state_machine::TrieBackend>, Blake2Hasher>; /// Database settings. pub struct DatabaseSettings { @@ -249,7 +250,7 @@ pub struct BlockImportOperation { pending_block: Option>, } -impl client::backend::BlockImportOperation +impl client::backend::BlockImportOperation for BlockImportOperation where Block: BlockT, { @@ -324,8 +325,8 @@ struct DbGenesisStorage(pub H256); impl DbGenesisStorage { pub fn new() -> Self { let mut root = H256::default(); - let mut mdb = MemoryDB::::new(); - state_machine::TrieDBMut::::new(&mut mdb, &mut root); + let mut mdb = MemoryDB::::default(); // TODO: use new() to make it more correct + state_machine::TrieDBMut::::new(&mut mdb, &mut root); DbGenesisStorage(root) } } @@ -476,7 +477,7 @@ fn apply_changes_trie_commit(transaction: &mut DBTransaction, mut commit: Memory } } -impl client::backend::Backend for Backend where Block: BlockT { +impl client::backend::Backend for Backend where Block: BlockT { type BlockImportOperation = BlockImportOperation; type Blockchain = BlockchainDb; type State = DbState; @@ -671,12 +672,12 @@ impl client::backend::Backend for Backend< } } -impl client::backend::LocalBackend for Backend +impl client::backend::LocalBackend for Backend where Block: BlockT {} #[cfg(test)] mod tests { - use hashdb::HashDB; + use hash_db::HashDB; use super::*; use client::backend::Backend as BTrait; use client::backend::BlockImportOperation as Op; @@ -688,9 +689,9 @@ mod tests { fn prepare_changes(changes: Vec<(Vec, Vec)>) -> (H256, MemoryDB) { let mut changes_root = H256::default(); - let mut changes_trie_update = MemoryDB::::new(); + let mut changes_trie_update = MemoryDB::::default(); // TODO: change to new() to make more correct { - let mut trie = TrieDBMut::::new( + let mut trie = TrieDBMut::::new( &mut changes_trie_update, &mut changes_root ); diff --git a/substrate/core/client/db/src/utils.rs b/substrate/core/client/db/src/utils.rs index 8754ac2701..2719ae5bae 100644 --- a/substrate/core/client/db/src/utils.rs +++ b/substrate/core/client/db/src/utils.rs @@ -25,7 +25,7 @@ use kvdb_rocksdb::{Database, DatabaseConfig}; use client; use codec::Decode; -use hashdb::DBValue; +use trie::DBValue; use runtime_primitives::generic::BlockId; use runtime_primitives::traits::{As, Block as BlockT, Header as HeaderT, Zero}; use DatabaseSettings; diff --git a/substrate/core/client/src/backend.rs b/substrate/core/client/src/backend.rs index aec4572b6c..4213453542 100644 --- a/substrate/core/client/src/backend.rs +++ b/substrate/core/client/src/backend.rs @@ -23,9 +23,8 @@ use runtime_primitives::generic::BlockId; use runtime_primitives::traits::{Block as BlockT, NumberFor}; use state_machine::backend::Backend as StateBackend; use state_machine::ChangesTrieStorage as StateChangesTrieStorage; -use patricia_trie::NodeCodec; -use hashdb::Hasher; -use memorydb::MemoryDB; +use hash_db::Hasher; +use trie::MemoryDB; /// State of a new block. #[derive(Debug, Clone, Copy, PartialEq, Eq)] @@ -49,14 +48,14 @@ impl NewBlockState { } /// Block insertion operation. Keeps hold if the inserted block state and data. -pub trait BlockImportOperation +pub trait BlockImportOperation where Block: BlockT, H: Hasher, - C: NodeCodec, + { /// Associated state backend type. - type State: StateBackend; + type State: StateBackend; /// Returns pending state. Returns None for backends with locally-unavailable state data. fn state(&self) -> error::Result>; @@ -73,7 +72,7 @@ where /// has been used to check justification of this block). fn update_authorities(&mut self, authorities: Vec); /// Inject storage data into the database. - fn update_storage(&mut self, update: >::Transaction) -> error::Result<()>; + fn update_storage(&mut self, update: >::Transaction) -> error::Result<()>; /// Inject storage data into the database replacing any existing data. fn reset_storage, Vec)>>(&mut self, iter: I) -> error::Result<()>; /// Inject changes trie data into the database. @@ -88,18 +87,18 @@ where /// /// The same applies for live `BlockImportOperation`s: while an import operation building on a parent `P` /// is alive, the state for `P` should not be pruned. -pub trait Backend: Send + Sync +pub trait Backend: Send + Sync where Block: BlockT, H: Hasher, - C: NodeCodec, + { /// Associated block insertion operation type. - type BlockImportOperation: BlockImportOperation; + type BlockImportOperation: BlockImportOperation; /// Associated blockchain backend type. type Blockchain: ::blockchain::Backend; /// Associated state backend type. - type State: StateBackend; + type State: StateBackend; /// Changes trie storage. type ChangesTrieStorage: StateChangesTrieStorage; @@ -123,17 +122,17 @@ where } /// Mark for all Backend implementations, that are making use of state data, stored locally. -pub trait LocalBackend: Backend +pub trait LocalBackend: Backend where Block: BlockT, H: Hasher, - C: NodeCodec, + {} /// Mark for all Backend implementations, that are fetching required state data from remote nodes. -pub trait RemoteBackend: Backend +pub trait RemoteBackend: Backend where Block: BlockT, H: Hasher, - C: NodeCodec, + {} diff --git a/substrate/core/client/src/block_builder.rs b/substrate/core/client/src/block_builder.rs index 9f2c8fdfb2..ced6ee0875 100644 --- a/substrate/core/client/src/block_builder.rs +++ b/substrate/core/client/src/block_builder.rs @@ -23,20 +23,18 @@ use runtime_primitives::traits::{Header as HeaderT, Hash, Block as BlockT, One, use runtime_primitives::generic::BlockId; use {backend, error, Client, CallExecutor}; use runtime_primitives::{ApplyResult, ApplyOutcome}; -use patricia_trie::NodeCodec; -use primitives::{Blake2Hasher, RlpCodec}; -use hashdb::Hasher; -use rlp::Encodable; +use primitives::{Blake2Hasher}; +use hash_db::Hasher; /// Utility for building new (valid) blocks from a stream of extrinsics. -pub struct BlockBuilder +pub struct BlockBuilder where - B: backend::Backend, - E: CallExecutor + Clone, + B: backend::Backend, + E: CallExecutor + Clone, Block: BlockT, H: Hasher, - H::Out: Encodable + Ord, - C: NodeCodec, + H::Out: Ord, + { header: ::Header, extrinsics: Vec<::Extrinsic>, @@ -45,10 +43,10 @@ where changes: state_machine::OverlayedChanges, } -impl BlockBuilder +impl BlockBuilder where - B: backend::Backend, - E: CallExecutor + Clone, + B: backend::Backend, + E: CallExecutor + Clone, Block: BlockT, { /// Create a new instance of builder from the given client, building on the latest block. diff --git a/substrate/core/client/src/call_executor.rs b/substrate/core/client/src/call_executor.rs index c8351aa6c4..aa86290450 100644 --- a/substrate/core/client/src/call_executor.rs +++ b/substrate/core/client/src/call_executor.rs @@ -21,12 +21,10 @@ use runtime_primitives::traits::Block as BlockT; use state_machine::{self, OverlayedChanges, Ext, CodeExecutor, ExecutionManager, native_when_possible}; use executor::{RuntimeVersion, RuntimeInfo}; -use patricia_trie::NodeCodec; -use hashdb::Hasher; -use rlp::Encodable; -use memorydb::MemoryDB; +use hash_db::Hasher; +use trie::MemoryDB; use codec::Decode; -use primitives::{Blake2Hasher, RlpCodec}; +use primitives::{Blake2Hasher}; use primitives::storage::well_known_keys; use backend; @@ -42,12 +40,12 @@ pub struct CallResult { } /// Method call executor. -pub trait CallExecutor +pub trait CallExecutor where B: BlockT, H: Hasher, - H::Out: Ord + Encodable, - C: NodeCodec, + H::Out: Ord, + { /// Externalities error type. type Error: state_machine::Error; @@ -70,7 +68,7 @@ where /// /// No changes are made. fn call_at_state< - S: state_machine::Backend, + S: state_machine::Backend, F: FnOnce(Result, Self::Error>, Result, Self::Error>) -> Result, Self::Error>, >(&self, state: &S, @@ -83,7 +81,7 @@ where /// Execute a call to a contract on top of given state, gathering execution proof. /// /// No changes are made. - fn prove_at_state>(&self, + fn prove_at_state>(&self, state: S, overlay: &mut OverlayedChanges, method: &str, @@ -117,9 +115,9 @@ impl Clone for LocalCallExecutor where E: Clone { } } -impl CallExecutor for LocalCallExecutor +impl CallExecutor for LocalCallExecutor where - B: backend::LocalBackend, + B: backend::LocalBackend, E: CodeExecutor + RuntimeInfo, Block: BlockT, { @@ -160,7 +158,7 @@ where } fn call_at_state< - S: state_machine::Backend, + S: state_machine::Backend, F: FnOnce(Result, Self::Error>, Result, Self::Error>) -> Result, Self::Error>, >(&self, state: &S, @@ -180,7 +178,7 @@ where ).map_err(Into::into) } - fn prove_at_state>(&self, + fn prove_at_state>(&self, state: S, changes: &mut OverlayedChanges, method: &str, diff --git a/substrate/core/client/src/cht.rs b/substrate/core/client/src/cht.rs index 09ba0dac63..3abd6c73a9 100644 --- a/substrate/core/client/src/cht.rs +++ b/substrate/core/client/src/cht.rs @@ -23,11 +23,9 @@ //! root has. A correct proof implies that the claimed block is identical to the one //! we discarded. -use hashdb; +use hash_db; use heapsize::HeapSizeOf; -use patricia_trie::NodeCodec; -use rlp::Encodable; -use triehash; +use trie; use primitives::H256; use runtime_primitives::traits::{As, Header as HeaderT, SimpleArithmetic, One}; @@ -68,16 +66,16 @@ pub fn compute_root( ) -> Option where Header: HeaderT, - Hasher: hashdb::Hasher, - Hasher::Out: Ord + Encodable, + Hasher: hash_db::Hasher, + Hasher::Out: Ord, I: IntoIterator>, { build_pairs::(cht_size, cht_num, hashes) - .map(|pairs| triehash::trie_root::(pairs)) + .map(|pairs| trie::trie_root::(pairs)) } /// Build CHT-based header proof. -pub fn build_proof( +pub fn build_proof( cht_size: u64, cht_num: Header::Number, block_num: Header::Number, @@ -85,16 +83,15 @@ pub fn build_proof( ) -> Option>> where Header: HeaderT, - Hasher: hashdb::Hasher, - Hasher::Out: Ord + Encodable + HeapSizeOf, - Codec: NodeCodec, + Hasher: hash_db::Hasher, + Hasher::Out: Ord + HeapSizeOf, I: IntoIterator>, { let transaction = build_pairs::(cht_size, cht_num, hashes)? .into_iter() .map(|(k, v)| (k, Some(v))) .collect::>(); - let storage = InMemoryState::::default().update(transaction); + let storage = InMemoryState::::default().update(transaction); let (value, proof) = prove_read(storage, &encode_cht_key(block_num)).ok()?; if value.is_none() { None @@ -104,7 +101,7 @@ pub fn build_proof( } /// Check CHT-based header proof. -pub fn check_proof( +pub fn check_proof( local_root: Header::Hash, local_number: Header::Number, remote_hash: Header::Hash, @@ -113,14 +110,13 @@ pub fn check_proof( where Header: HeaderT, Header::Hash: AsRef<[u8]>, - Hasher: hashdb::Hasher, - Hasher::Out: Ord + Encodable + HeapSizeOf, - Codec: NodeCodec, + Hasher: hash_db::Hasher, + Hasher::Out: Ord + HeapSizeOf, { let mut root: Hasher::Out = Default::default(); root.as_mut().copy_from_slice(local_root.as_ref()); let local_cht_key = encode_cht_key(local_number); - let local_cht_value = read_proof_check::(root, remote_proof, + let local_cht_value = read_proof_check::(root, remote_proof, &local_cht_key).map_err(|e| ClientError::from(e))?; let local_cht_value = local_cht_value.ok_or_else(|| ClientErrorKind::InvalidHeaderProof)?; let local_hash = decode_cht_value(&local_cht_value).ok_or_else(|| ClientErrorKind::InvalidHeaderProof)?; @@ -214,7 +210,7 @@ pub fn decode_cht_value(value: &[u8]) -> Option { #[cfg(test)] mod tests { - use primitives::{Blake2Hasher, RlpCodec}; + use primitives::{Blake2Hasher}; use test_client::runtime::Header; use super::*; @@ -263,13 +259,13 @@ mod tests { #[test] fn build_proof_fails_when_querying_wrong_block() { - assert!(build_proof::( + assert!(build_proof::( SIZE, 0, (SIZE * 1000) as u64, vec![Some(1.into()); SIZE as usize]).is_none()); } #[test] fn build_proof_works() { - assert!(build_proof::( + assert!(build_proof::( SIZE, 0, (SIZE / 2) as u64, vec![Some(1.into()); SIZE as usize]).is_some()); } } diff --git a/substrate/core/client/src/client.rs b/substrate/core/client/src/client.rs index 43d04c2b72..580c6f689c 100644 --- a/substrate/core/client/src/client.rs +++ b/substrate/core/client/src/client.rs @@ -23,7 +23,7 @@ use primitives::AuthorityId; use runtime_primitives::{bft::Justification, generic::{BlockId, SignedBlock, Block as RuntimeBlock}}; use runtime_primitives::traits::{Block as BlockT, Header as HeaderT, Zero, As, NumberFor, CurrentHeight, BlockNumberToHash}; use runtime_primitives::BuildStorage; -use primitives::{Blake2Hasher, RlpCodec, H256}; +use primitives::{Blake2Hasher, H256}; use primitives::storage::{StorageKey, StorageData}; use primitives::storage::well_known_keys; use codec::{Encode, Decode}; @@ -183,7 +183,7 @@ impl JustifiedHeader { pub fn new_in_mem( executor: E, genesis_storage: S, -) -> error::Result, LocalCallExecutor, E>, Block>> +) -> error::Result, LocalCallExecutor, E>, Block>> where E: CodeExecutor + RuntimeInfo, S: BuildStorage, @@ -196,8 +196,8 @@ pub fn new_in_mem( } impl Client where - B: backend::Backend, - E: CallExecutor, + B: backend::Backend, + E: CallExecutor, Block: BlockT, { /// Creates new Substrate Client with given blockchain and code executor. @@ -311,20 +311,20 @@ impl Client where let cht_num = cht::block_to_cht_number(cht_size, block_num).ok_or_else(proof_error)?; let cht_start = cht::start_number(cht_size, cht_num); let headers = (cht_start.as_()..).map(|num| self.block_hash(As::sa(num)).unwrap_or_default()); - let proof = cht::build_proof::(cht_size, cht_num, block_num, headers) + let proof = cht::build_proof::(cht_size, cht_num, block_num, headers) .ok_or_else(proof_error)?; Ok((header, proof)) } /// Create a new block, built on the head of the chain. - pub fn new_block(&self) -> error::Result> + pub fn new_block(&self) -> error::Result> where E: Clone { block_builder::BlockBuilder::new(self) } /// Create a new block, built on top of `parent`. - pub fn new_block_at(&self, parent: &BlockId) -> error::Result> + pub fn new_block_at(&self, parent: &BlockId) -> error::Result> where E: Clone { block_builder::BlockBuilder::at_block(parent, &self) @@ -726,8 +726,8 @@ impl Client where } impl CurrentHeight for Client where - B: backend::Backend, - E: CallExecutor + Clone, + B: backend::Backend, + E: CallExecutor + Clone, Block: BlockT, { type BlockNumber = ::Number; @@ -737,8 +737,8 @@ impl CurrentHeight for Client where } impl BlockNumberToHash for Client where - B: backend::Backend, - E: CallExecutor + Clone, + B: backend::Backend, + E: CallExecutor + Clone, Block: BlockT, { type BlockNumber = ::Number; @@ -750,8 +750,8 @@ impl BlockNumberToHash for Client where impl bft::BlockImport for Client where - B: backend::Backend, - E: CallExecutor, + B: backend::Backend, + E: CallExecutor, Block: BlockT, { fn import_block( @@ -779,8 +779,8 @@ impl bft::BlockImport for Client impl bft::Authorities for Client where - B: backend::Backend, - E: CallExecutor, + B: backend::Backend, + E: CallExecutor, Block: BlockT, { fn authorities(&self, at: &BlockId) -> Result, bft::Error> { @@ -802,7 +802,7 @@ impl bft::Authorities for Client impl BlockchainEvents for Client where - E: CallExecutor, + E: CallExecutor, Block: BlockT, { /// Get block import event stream. @@ -826,8 +826,8 @@ where impl ChainHead for Client where - B: backend::Backend, - E: CallExecutor, + B: backend::Backend, + E: CallExecutor, Block: BlockT, { fn best_block_header(&self) -> error::Result<::Header> { @@ -837,8 +837,8 @@ where impl BlockBody for Client where - B: backend::Backend, - E: CallExecutor, + B: backend::Backend, + E: CallExecutor, Block: BlockT, { fn block_body(&self, id: &BlockId) -> error::Result::Extrinsic>>> { diff --git a/substrate/core/client/src/genesis.rs b/substrate/core/client/src/genesis.rs index 96d1e6bc9f..ab6912bbbc 100644 --- a/substrate/core/client/src/genesis.rs +++ b/substrate/core/client/src/genesis.rs @@ -50,7 +50,7 @@ mod tests { use test_client; use test_client::runtime::genesismap::{GenesisConfig, additional_storage_with_genesis}; use test_client::runtime::{Hash, Transfer, Block, BlockNumber, Header, Digest, Extrinsic}; - use primitives::{Blake2Hasher, RlpCodec, ed25519::{Public, Pair}}; + use primitives::{Blake2Hasher, ed25519::{Public, Pair}}; native_executor_instance!(Executor, test_client::runtime::api::dispatch, test_client::runtime::VERSION, include_bytes!("../../test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm")); @@ -59,13 +59,13 @@ mod tests { } fn construct_block( - backend: &InMemory, + backend: &InMemory, number: BlockNumber, parent_hash: Hash, state_root: Hash, txs: Vec ) -> (Vec, Hash) { - use triehash::ordered_trie_root; + use trie::ordered_trie_root; let transactions = txs.into_iter().map(|tx| { let signature = Pair::from(Keyring::from_public(Public::from_raw(tx.from.0)).unwrap()) @@ -124,7 +124,7 @@ mod tests { (vec![].and(&Block { header, extrinsics: transactions }), hash) } - fn block1(genesis_hash: Hash, backend: &InMemory) -> (Vec, Hash) { + fn block1(genesis_hash: Hash, backend: &InMemory) -> (Vec, Hash) { construct_block( backend, 1, diff --git a/substrate/core/client/src/in_mem.rs b/substrate/core/client/src/in_mem.rs index 4c321db09c..43957fe08c 100644 --- a/substrate/core/client/src/in_mem.rs +++ b/substrate/core/client/src/in_mem.rs @@ -30,10 +30,9 @@ use runtime_primitives::bft::Justification; use blockchain::{self, BlockStatus, HeaderBackend}; use state_machine::backend::{Backend as StateBackend, InMemory}; use state_machine::InMemoryChangesTrieStorage; -use patricia_trie::NodeCodec; -use hashdb::Hasher; +use hash_db::Hasher; use heapsize::HeapSizeOf; -use memorydb::MemoryDB; +use trie::MemoryDB; struct PendingBlock { block: StoredBlock, @@ -304,22 +303,22 @@ impl light::blockchain::Storage for Blockchain } /// In-memory operation. -pub struct BlockImportOperation> { +pub struct BlockImportOperation { pending_block: Option>, pending_authorities: Option>, - old_state: InMemory, - new_state: Option>, + old_state: InMemory, + new_state: Option>, changes_trie_update: Option>, } -impl backend::BlockImportOperation for BlockImportOperation +impl backend::BlockImportOperation for BlockImportOperation where Block: BlockT, H: Hasher, - C: NodeCodec, + H::Out: HeapSizeOf, { - type State = InMemory; + type State = InMemory; fn state(&self) -> error::Result> { Ok(Some(&self.old_state)) @@ -344,7 +343,7 @@ where self.pending_authorities = Some(authorities); } - fn update_storage(&mut self, update: as StateBackend>::Transaction) -> error::Result<()> { + fn update_storage(&mut self, update: as StateBackend>::Transaction) -> error::Result<()> { self.new_state = Some(self.old_state.update(update)); Ok(()) } @@ -361,27 +360,27 @@ where } /// In-memory backend. Keeps all states and blocks in memory. Useful for testing. -pub struct Backend +pub struct Backend where Block: BlockT, H: Hasher, - C: NodeCodec, + H::Out: HeapSizeOf + From, { - states: RwLock>>, + states: RwLock>>, changes_trie_storage: InMemoryChangesTrieStorage, blockchain: Blockchain, } -impl Backend +impl Backend where Block: BlockT, H: Hasher, - C: NodeCodec, + H::Out: HeapSizeOf + From, { /// Create a new instance of in-mem backend. - pub fn new() -> Backend { + pub fn new() -> Backend { Backend { states: RwLock::new(HashMap::new()), changes_trie_storage: InMemoryChangesTrieStorage::new(), @@ -390,16 +389,15 @@ where } } -impl backend::Backend for Backend +impl backend::Backend for Backend where Block: BlockT, H: Hasher, H::Out: HeapSizeOf + From, - C: NodeCodec + Send + Sync, { - type BlockImportOperation = BlockImportOperation; + type BlockImportOperation = BlockImportOperation; type Blockchain = Blockchain; - type State = InMemory; + type State = InMemory; type ChangesTrieStorage = InMemoryChangesTrieStorage; fn begin_operation(&self, block: BlockId) -> error::Result { @@ -471,12 +469,11 @@ where } } -impl backend::LocalBackend for Backend +impl backend::LocalBackend for Backend where Block: BlockT, H: Hasher, H::Out: HeapSizeOf + From, - C: NodeCodec + Send + Sync, {} impl Cache { diff --git a/substrate/core/client/src/lib.rs b/substrate/core/client/src/lib.rs index c2467bc492..c596169c8e 100644 --- a/substrate/core/client/src/lib.rs +++ b/substrate/core/client/src/lib.rs @@ -20,6 +20,7 @@ #![recursion_limit="128"] extern crate substrate_bft as bft; +extern crate substrate_trie as trie; extern crate parity_codec as codec; extern crate substrate_primitives as primitives; extern crate sr_io as runtime_io; @@ -33,12 +34,12 @@ extern crate substrate_state_machine as state_machine; extern crate fnv; extern crate futures; extern crate parking_lot; -extern crate triehash; -extern crate patricia_trie; -extern crate hashdb; +extern crate trie_root; +extern crate trie_db; +extern crate hash_db; extern crate rlp; extern crate heapsize; -extern crate memorydb; +extern crate memory_db; #[macro_use] extern crate error_chain; #[macro_use] extern crate log; @@ -62,8 +63,7 @@ pub use call_executor::{CallResult, CallExecutor, LocalCallExecutor}; pub use client::{ new_in_mem, BlockBody, BlockStatus, BlockOrigin, ImportNotifications, FinalityNotifications, BlockchainEvents, - Client, ClientInfo, ChainHead, - ImportResult, JustifiedHeader, + Client, ClientInfo, ChainHead, ImportResult, JustifiedHeader, }; pub use notifications::{StorageEventStream, StorageChangeSet}; pub use state_machine::ExecutionStrategy; diff --git a/substrate/core/client/src/light/backend.rs b/substrate/core/client/src/light/backend.rs index 132af861c2..099351c652 100644 --- a/substrate/core/client/src/light/backend.rs +++ b/substrate/core/client/src/light/backend.rs @@ -31,9 +31,8 @@ use blockchain::HeaderBackend as BlockchainHeaderBackend; use error::{Error as ClientError, ErrorKind as ClientErrorKind, Result as ClientResult}; use light::blockchain::{Blockchain, Storage as BlockchainStorage}; use light::fetcher::{Fetcher, RemoteReadRequest}; -use patricia_trie::NodeCodec; -use hashdb::Hasher; -use memorydb::MemoryDB; +use hash_db::Hasher; +use trie::MemoryDB; use heapsize::HeapSizeOf; /// Light client backend. @@ -69,12 +68,12 @@ impl Backend { } } -impl ClientBackend for Backend where +impl ClientBackend for Backend where Block: BlockT, S: BlockchainStorage, F: Fetcher, H: Hasher, - C: NodeCodec, + H::Out: HeapSizeOf, { type BlockImportOperation = ImportOperation; @@ -131,23 +130,23 @@ impl ClientBackend for Backend where } } -impl RemoteBackend for Backend +impl RemoteBackend for Backend where Block: BlockT, S: BlockchainStorage, F: Fetcher, H: Hasher, H::Out: HeapSizeOf, - C: NodeCodec, + {} -impl BlockImportOperation for ImportOperation +impl BlockImportOperation for ImportOperation where Block: BlockT, F: Fetcher, S: BlockchainStorage, H: Hasher, - C: NodeCodec, + { type State = OnDemandState; @@ -172,7 +171,7 @@ where self.authorities = Some(authorities); } - fn update_storage(&mut self, _update: >::Transaction) -> ClientResult<()> { + fn update_storage(&mut self, _update: >::Transaction) -> ClientResult<()> { // we're not storing anything locally => ignore changes Ok(()) } @@ -188,13 +187,13 @@ where } } -impl StateBackend for OnDemandState +impl StateBackend for OnDemandState where Block: BlockT, S: BlockchainStorage, F: Fetcher, H: Hasher, - C: NodeCodec, + { type Error = ClientError; type Transaction = (); @@ -234,7 +233,7 @@ impl StateBackend for OnDemandState Vec::new() } - fn try_into_trie_backend(self) -> Option> { + fn try_into_trie_backend(self) -> Option> { None } } diff --git a/substrate/core/client/src/light/call_executor.rs b/substrate/core/client/src/light/call_executor.rs index 0b0544adc8..11bd8faa0a 100644 --- a/substrate/core/client/src/light/call_executor.rs +++ b/substrate/core/client/src/light/call_executor.rs @@ -25,9 +25,7 @@ use runtime_primitives::generic::BlockId; use runtime_primitives::traits::{Block as BlockT, Header as HeaderT}; use state_machine::{Backend as StateBackend, CodeExecutor, OverlayedChanges, execution_proof_check, ExecutionManager}; -use patricia_trie::NodeCodec; -use hashdb::Hasher; -use rlp::Encodable; +use hash_db::Hasher; use blockchain::Backend as ChainBackend; use call_executor::{CallExecutor, CallResult}; @@ -36,43 +34,41 @@ use light::fetcher::{Fetcher, RemoteCallRequest}; use executor::RuntimeVersion; use codec::Decode; use heapsize::HeapSizeOf; -use memorydb::MemoryDB; +use trie::MemoryDB; /// Call executor that executes methods on remote node, querying execution proof /// and checking proof by re-executing locally. -pub struct RemoteCallExecutor { +pub struct RemoteCallExecutor { blockchain: Arc, fetcher: Arc, _hasher: PhantomData, - _codec: PhantomData, } -impl Clone for RemoteCallExecutor { +impl Clone for RemoteCallExecutor { fn clone(&self) -> Self { RemoteCallExecutor { blockchain: self.blockchain.clone(), fetcher: self.fetcher.clone(), _hasher: Default::default(), - _codec: Default::default(), } } } -impl RemoteCallExecutor { +impl RemoteCallExecutor { /// Creates new instance of remote call executor. pub fn new(blockchain: Arc, fetcher: Arc) -> Self { - RemoteCallExecutor { blockchain, fetcher, _hasher: PhantomData, _codec: PhantomData } + RemoteCallExecutor { blockchain, fetcher, _hasher: PhantomData } } } -impl CallExecutor for RemoteCallExecutor +impl CallExecutor for RemoteCallExecutor where Block: BlockT, B: ChainBackend, F: Fetcher, H: Hasher, - H::Out: Ord + Encodable, - C: NodeCodec + H::Out: Ord, + { type Error = ClientError; @@ -100,7 +96,7 @@ where } fn call_at_state< - S: StateBackend, + S: StateBackend, FF: FnOnce(Result, Self::Error>, Result, Self::Error>) -> Result, Self::Error> >(&self, _state: &S, @@ -112,7 +108,7 @@ where Err(ClientErrorKind::NotAvailableOnLightClient.into()) } - fn prove_at_state>( + fn prove_at_state>( &self, _state: S, _changes: &mut OverlayedChanges, @@ -128,7 +124,7 @@ where } /// Check remote execution proof using given backend. -pub fn check_execution_proof( +pub fn check_execution_proof( executor: &E, request: &RemoteCallRequest
, remote_proof: Vec> @@ -137,15 +133,15 @@ pub fn check_execution_proof( Header: HeaderT, E: CodeExecutor, H: Hasher, - H::Out: Ord + Encodable + HeapSizeOf, - C: NodeCodec, + H::Out: Ord + HeapSizeOf, + { let local_state_root = request.header.state_root(); let mut root: H::Out = Default::default(); root.as_mut().copy_from_slice(local_state_root.as_ref()); let mut changes = OverlayedChanges::default(); - let local_result = execution_proof_check::( + let local_result = execution_proof_check::( root, remote_proof, &mut changes, @@ -161,7 +157,6 @@ mod tests { use test_client; use executor::NativeExecutionDispatch; use super::*; - use primitives::RlpCodec; #[test] fn execution_proof_is_generated_and_checked() { @@ -176,7 +171,7 @@ mod tests { // check remote execution proof locally let local_executor = test_client::LocalExecutor::new(); - check_execution_proof::<_, _, _, RlpCodec>(&local_executor, &RemoteCallRequest { + check_execution_proof(&local_executor, &RemoteCallRequest { block: test_client::runtime::Hash::default(), header: test_client::runtime::Header { state_root: remote_block_storage_root.into(), diff --git a/substrate/core/client/src/light/fetcher.rs b/substrate/core/client/src/light/fetcher.rs index 1e837c0c8d..94a5220890 100644 --- a/substrate/core/client/src/light/fetcher.rs +++ b/substrate/core/client/src/light/fetcher.rs @@ -18,9 +18,7 @@ use futures::IntoFuture; -use hashdb::Hasher; -use patricia_trie::NodeCodec; -use rlp::Encodable; +use hash_db::Hasher; use heapsize::HeapSizeOf; use runtime_primitives::traits::{Block as BlockT, Header as HeaderT}; use state_machine::{CodeExecutor, read_proof_check}; @@ -115,28 +113,26 @@ pub trait FetchChecker: Send + Sync { } /// Remote data checker. -pub struct LightDataChecker { +pub struct LightDataChecker { executor: E, _hasher: PhantomData, - _codec: PhantomData, } -impl LightDataChecker { +impl LightDataChecker { /// Create new light data checker. pub fn new(executor: E) -> Self { Self { - executor, _hasher: PhantomData, _codec: PhantomData + executor, _hasher: PhantomData } } } -impl FetchChecker for LightDataChecker +impl FetchChecker for LightDataChecker where Block: BlockT, E: CodeExecutor, H: Hasher, - C: NodeCodec + Sync + Send, - H::Out: Ord + Encodable + HeapSizeOf, + H::Out: Ord + HeapSizeOf, { fn check_header_proof( &self, @@ -147,7 +143,7 @@ impl FetchChecker for LightDataChecker let remote_header = remote_header.ok_or_else(|| ClientError::from(ClientErrorKind::InvalidHeaderProof))?; let remote_header_hash = remote_header.hash(); - cht::check_proof::( + cht::check_proof::( request.cht_root, request.block, remote_header_hash, @@ -162,7 +158,7 @@ impl FetchChecker for LightDataChecker ) -> ClientResult>> { let mut root: H::Out = Default::default(); root.as_mut().copy_from_slice(request.header.state_root().as_ref()); - read_proof_check::(root, remote_proof, &request.key).map_err(Into::into) + read_proof_check::(root, remote_proof, &request.key).map_err(Into::into) } fn check_execution_proof( @@ -170,7 +166,7 @@ impl FetchChecker for LightDataChecker request: &RemoteCallRequest, remote_proof: Vec> ) -> ClientResult { - check_execution_proof::<_, _, H, C>(&self.executor, request, remote_proof) + check_execution_proof::<_, _, H>(&self.executor, request, remote_proof) } } @@ -186,7 +182,7 @@ pub mod tests { use in_mem::{Blockchain as InMemoryBlockchain}; use light::fetcher::{Fetcher, FetchChecker, LightDataChecker, RemoteCallRequest, RemoteHeaderRequest}; - use primitives::{Blake2Hasher, RlpCodec}; + use primitives::{Blake2Hasher}; use primitives::storage::well_known_keys; use runtime_primitives::generic::BlockId; use state_machine::Backend; @@ -213,7 +209,7 @@ pub mod tests { } fn prepare_for_read_proof_check() -> ( - LightDataChecker, Blake2Hasher, RlpCodec>, + LightDataChecker, Blake2Hasher>, Header, Vec>, usize) { // prepare remote client @@ -242,7 +238,7 @@ pub mod tests { } fn prepare_for_header_proof_check(insert_cht: bool) -> ( - LightDataChecker, Blake2Hasher, RlpCodec>, + LightDataChecker, Blake2Hasher>, Hash, Header, Vec>) { // prepare remote client diff --git a/substrate/core/client/src/light/mod.rs b/substrate/core/client/src/light/mod.rs index d16814ae2f..08d3ac4f3d 100644 --- a/substrate/core/client/src/light/mod.rs +++ b/substrate/core/client/src/light/mod.rs @@ -23,7 +23,7 @@ pub mod fetcher; use std::sync::Arc; -use primitives::{Blake2Hasher, RlpCodec}; +use primitives::{Blake2Hasher}; use runtime_primitives::BuildStorage; use runtime_primitives::traits::Block as BlockT; use state_machine::{CodeExecutor, ExecutionStrategy}; @@ -34,8 +34,7 @@ use light::backend::Backend; use light::blockchain::{Blockchain, Storage as BlockchainStorage}; use light::call_executor::RemoteCallExecutor; use light::fetcher::{Fetcher, LightDataChecker}; -use hashdb::Hasher; -use patricia_trie::NodeCodec; +use hash_db::Hasher; /// Create an instance of light client blockchain backend. pub fn new_light_blockchain, F>(storage: S) -> Arc> { @@ -53,7 +52,7 @@ pub fn new_light( backend: Arc>, fetcher: Arc, genesis_storage: GS, -) -> ClientResult, RemoteCallExecutor, F, Blake2Hasher, RlpCodec>, B>> +) -> ClientResult, RemoteCallExecutor, F, Blake2Hasher>, B>> where B: BlockT, S: BlockchainStorage, @@ -65,13 +64,13 @@ pub fn new_light( } /// Create an instance of fetch data checker. -pub fn new_fetch_checker( +pub fn new_fetch_checker( executor: E, -) -> LightDataChecker +) -> LightDataChecker where E: CodeExecutor, H: Hasher, - C: NodeCodec, + { LightDataChecker::new(executor) } diff --git a/substrate/core/executor/Cargo.toml b/substrate/core/executor/Cargo.toml index 2bde59f089..4ee1dab3a7 100644 --- a/substrate/core/executor/Cargo.toml +++ b/substrate/core/executor/Cargo.toml @@ -8,6 +8,7 @@ error-chain = "0.12" parity-codec = { version = "2.0" } sr-io = { path = "../sr-io" } substrate-primitives = { path = "../primitives" } +substrate-trie = { path = "../trie" } substrate-serializer = { path = "../serializer" } substrate-state-machine = { path = "../state-machine" } sr-version = { path = "../sr-version" } @@ -15,12 +16,12 @@ serde = "1.0" serde_derive = "1.0" wasmi = "0.4" byteorder = "1.1" -triehash = "0.2" +trie-root = { git = "https://github.com/paritytech/trie" } twox-hash = "1.1.0" lazy_static = "1.0" parking_lot = "*" log = "0.3" -hashdb = "0.2.1" +hash-db = { git = "https://github.com/paritytech/trie" } [dev-dependencies] assert_matches = "1.1" diff --git a/substrate/core/executor/src/lib.rs b/substrate/core/executor/src/lib.rs index 02cdf65c90..77c6818551 100644 --- a/substrate/core/executor/src/lib.rs +++ b/substrate/core/executor/src/lib.rs @@ -36,14 +36,15 @@ extern crate substrate_primitives as primitives; extern crate substrate_serializer as serializer; extern crate substrate_state_machine as state_machine; extern crate sr_version as runtime_version; +extern crate substrate_trie as trie; extern crate serde; extern crate wasmi; extern crate byteorder; -extern crate triehash; +extern crate trie_root; extern crate parking_lot; extern crate twox_hash; -extern crate hashdb; +extern crate hash_db; #[macro_use] extern crate log; diff --git a/substrate/core/executor/src/native_executor.rs b/substrate/core/executor/src/native_executor.rs index bc928364a6..48636a0a48 100644 --- a/substrate/core/executor/src/native_executor.rs +++ b/substrate/core/executor/src/native_executor.rs @@ -103,7 +103,7 @@ pub trait NativeExecutionDispatch: Send + Sync { /// Dispatch a method and input data to be executed natively. Returns `Some` result or `None` /// if the `method` is unknown. Panics if there's an unrecoverable error. - // fn dispatch(ext: &mut Externalities, method: &str, data: &[u8]) -> Result>; + // fn dispatch(ext: &mut Externalities, method: &str, data: &[u8]) -> Result>; fn dispatch(ext: &mut Externalities, method: &str, data: &[u8]) -> Result>; /// Get native runtime version. diff --git a/substrate/core/executor/src/sandbox.rs b/substrate/core/executor/src/sandbox.rs index b2dca7ee09..5af389e212 100644 --- a/substrate/core/executor/src/sandbox.rs +++ b/substrate/core/executor/src/sandbox.rs @@ -539,14 +539,14 @@ impl Store { #[cfg(test)] mod tests { - use primitives::{Blake2Hasher, RlpCodec}; + use primitives::{Blake2Hasher}; use wasm_executor::WasmExecutor; use state_machine::TestExternalities; use wabt; #[test] fn sandbox_should_work() { - let mut ext = TestExternalities::::default(); + let mut ext = TestExternalities::::default(); let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm"); let code = wabt::wat2wasm(r#" @@ -578,7 +578,7 @@ mod tests { #[test] fn sandbox_trap() { - let mut ext = TestExternalities::::default(); + let mut ext = TestExternalities::::default(); let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm"); let code = wabt::wat2wasm(r#" @@ -599,7 +599,7 @@ mod tests { #[test] fn start_called() { - let mut ext = TestExternalities::::default(); + let mut ext = TestExternalities::::default(); let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm"); let code = wabt::wat2wasm(r#" @@ -637,7 +637,7 @@ mod tests { #[test] fn invoke_args() { - let mut ext = TestExternalities::::default(); + let mut ext = TestExternalities::::default(); let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm"); let code = wabt::wat2wasm(r#" @@ -671,7 +671,7 @@ mod tests { #[test] fn return_val() { - let mut ext = TestExternalities::::default(); + let mut ext = TestExternalities::::default(); let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm"); let code = wabt::wat2wasm(r#" @@ -693,7 +693,7 @@ mod tests { #[test] fn unlinkable_module() { - let mut ext = TestExternalities::::default(); + let mut ext = TestExternalities::::default(); let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm"); let code = wabt::wat2wasm(r#" @@ -713,7 +713,7 @@ mod tests { #[test] fn corrupted_module() { - let mut ext = TestExternalities::::default(); + let mut ext = TestExternalities::::default(); let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm"); // Corrupted wasm file @@ -727,7 +727,7 @@ mod tests { #[test] fn start_fn_ok() { - let mut ext = TestExternalities::::default(); + let mut ext = TestExternalities::::default(); let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm"); let code = wabt::wat2wasm(r#" @@ -750,7 +750,7 @@ mod tests { #[test] fn start_fn_traps() { - let mut ext = TestExternalities::::default(); + let mut ext = TestExternalities::::default(); let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm"); let code = wabt::wat2wasm(r#" diff --git a/substrate/core/executor/src/wasm_executor.rs b/substrate/core/executor/src/wasm_executor.rs index e0d8da80d7..03dce4b5e1 100644 --- a/substrate/core/executor/src/wasm_executor.rs +++ b/substrate/core/executor/src/wasm_executor.rs @@ -30,7 +30,7 @@ use primitives::{blake2_256, twox_128, twox_256, ed25519}; use primitives::hexdisplay::HexDisplay; use primitives::sandbox as sandbox_primitives; use primitives::Blake2Hasher; -use triehash::ordered_trie_root; +use trie::ordered_trie_root; use sandbox; @@ -554,7 +554,6 @@ impl WasmExecutor { #[cfg(test)] mod tests { - use primitives::RlpCodec; use super::*; use codec::Encode; use state_machine::TestExternalities; @@ -568,7 +567,7 @@ mod tests { #[test] fn returning_should_work() { - let mut ext = TestExternalities::<_, RlpCodec>::default(); + let mut ext = TestExternalities::default(); let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm"); let output = WasmExecutor::new().call(&mut ext, 8, &test_code[..], "test_empty_return", &[]).unwrap(); @@ -577,7 +576,7 @@ mod tests { #[test] fn panicking_should_work() { - let mut ext = TestExternalities::<_, RlpCodec>::default(); + let mut ext = TestExternalities::default(); let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm"); let output = WasmExecutor::new().call(&mut ext, 8, &test_code[..], "test_panic", &[]); @@ -589,7 +588,7 @@ mod tests { #[test] fn storage_should_work() { - let mut ext = TestExternalities::<_, RlpCodec>::default(); + let mut ext = TestExternalities::default(); ext.set_storage(b"foo".to_vec(), b"bar".to_vec()); let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm"); @@ -597,7 +596,7 @@ mod tests { assert_eq!(output, b"all ok!".to_vec()); - let expected = TestExternalities::<_, _>::new(map![ + let expected = TestExternalities::new(map![ b"input".to_vec() => b"Hello world".to_vec(), b"foo".to_vec() => b"bar".to_vec(), b"baz".to_vec() => b"bar".to_vec() @@ -607,7 +606,7 @@ mod tests { #[test] fn clear_prefix_should_work() { - let mut ext = TestExternalities::<_, RlpCodec>::default(); + let mut ext = TestExternalities::default(); ext.set_storage(b"aaa".to_vec(), b"1".to_vec()); ext.set_storage(b"aab".to_vec(), b"2".to_vec()); ext.set_storage(b"aba".to_vec(), b"3".to_vec()); @@ -620,7 +619,7 @@ mod tests { assert_eq!(output, b"all ok!".to_vec()); - let expected: TestExternalities<_, RlpCodec> = map![ + let expected: TestExternalities<_> = map![ b"aaa".to_vec() => b"1".to_vec(), b"aab".to_vec() => b"2".to_vec(), b"bbb".to_vec() => b"5".to_vec() @@ -630,7 +629,7 @@ mod tests { #[test] fn blake2_256_should_work() { - let mut ext = TestExternalities::<_, RlpCodec>::default(); + let mut ext = TestExternalities::default(); let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm"); assert_eq!( WasmExecutor::new().call(&mut ext, 8, &test_code[..], "test_blake2_256", &[]).unwrap(), @@ -644,7 +643,7 @@ mod tests { #[test] fn twox_256_should_work() { - let mut ext = TestExternalities::<_, RlpCodec>::default(); + let mut ext = TestExternalities::default(); let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm"); assert_eq!( WasmExecutor::new().call(&mut ext, 8, &test_code[..], "test_twox_256", &[]).unwrap(), @@ -658,7 +657,7 @@ mod tests { #[test] fn twox_128_should_work() { - let mut ext = TestExternalities::<_, RlpCodec>::default(); + let mut ext = TestExternalities::default(); let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm"); assert_eq!( WasmExecutor::new().call(&mut ext, 8, &test_code[..], "test_twox_128", &[]).unwrap(), @@ -672,7 +671,7 @@ mod tests { #[test] fn ed25519_verify_should_work() { - let mut ext = TestExternalities::::default(); + let mut ext = TestExternalities::::default(); let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm"); let key = ed25519::Pair::from_seed(&blake2_256(b"test")); let sig = key.sign(b"all ok!"); @@ -698,11 +697,11 @@ mod tests { #[test] fn enumerated_trie_root_should_work() { - let mut ext = TestExternalities::::default(); + let mut ext = TestExternalities::::default(); let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm"); assert_eq!( WasmExecutor::new().call(&mut ext, 8, &test_code[..], "test_enumerated_trie_root", &[]).unwrap(), - ordered_trie_root::(vec![b"zero".to_vec(), b"one".to_vec(), b"two".to_vec()]).0.encode() + ordered_trie_root::(vec![b"zero".to_vec(), b"one".to_vec(), b"two".to_vec()].iter()).0.encode() ); } diff --git a/substrate/core/executor/wasm/Cargo.lock b/substrate/core/executor/wasm/Cargo.lock index fbe778600f..b4b33d6e03 100644 --- a/substrate/core/executor/wasm/Cargo.lock +++ b/substrate/core/executor/wasm/Cargo.lock @@ -22,9 +22,17 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "hashdb" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" +name = "hash-db" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#ac74a40f3a05cc047685b2ce439797172e5f29cf" + +[[package]] +name = "hash256-std-hasher" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#ac74a40f3a05cc047685b2ce439797172e5f29cf" +dependencies = [ + "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "nodrop" @@ -33,7 +41,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "parity-codec" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -49,14 +57,6 @@ dependencies = [ "syn 0.14.7 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "plain_hasher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "proc-macro2" version = "0.4.9" @@ -117,8 +117,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" name = "sr-io" version = "0.1.0" dependencies = [ - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "sr-std 0.1.0", "substrate-primitives 0.1.0", @@ -128,7 +128,7 @@ dependencies = [ name = "sr-sandbox" version = "0.1.0" dependencies = [ - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-std 0.1.0", @@ -149,10 +149,10 @@ dependencies = [ "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "hash256-std-hasher 0.9.0 (git+https://github.com/paritytech/trie)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "plain_hasher 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", "sr-std 0.1.0", @@ -189,11 +189,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "652805b7e73fada9d85e9a6682a4abd490cb52d96aeecc12e33a0de34dfd0d23" "checksum crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a2f4a431c5c9f662e1200b7c7f02c34e91361150e382089a8f2dec3ba680cbda" "checksum fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0d5ec8112f00ea8a483e04748a85522184418fd1cf02890b626d8fc28683f7de" -"checksum hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f1c71fc577cde89b3345d5f2880fecaf462a32e96c619f431279bdaf1ba5ddb1" +"checksum hash-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" +"checksum hash256-std-hasher 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2" -"checksum parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "48db1d9442469191a590498ab734a85d98848873267d3e93b37b03538399bd2c" +"checksum parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2b47e0394c3720edecb4815258c28e848012a833b649fbf7dce6174365203a2d" "checksum parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1eda64d782c342261aea4ca047a609f9bd92d5f9dafabe6b5a396caf5c7b8827" -"checksum plain_hasher 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "95fa6386b1d34aaf0adb9b7dd2885dbe7c34190e6263785e5a7ec2b19044a90f" "checksum proc-macro2 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)" = "cccdc7557a98fe98453030f077df7f3a042052fae465bb61d2c2c41435cfd9b6" "checksum quote 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3372dc35766b36a99ce2352bd1b6ea0137c38d215cc0c8780bf6de6df7842ba9" "checksum rustc-hex 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d2b03280c2813907a030785570c577fb27d3deec8da4c18566751ade94de0ace" diff --git a/substrate/core/network-libp2p/tests/tests.rs b/substrate/core/network-libp2p/tests/tests.rs index b388d0f4a1..480253c1ea 100644 --- a/substrate/core/network-libp2p/tests/tests.rs +++ b/substrate/core/network-libp2p/tests/tests.rs @@ -1,5 +1,5 @@ // Copyright 2018 Parity Technologies (UK) Ltd. -// This file is part of Parity. +// This file is part of Substrate. // Parity is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/substrate/core/network/src/chain.rs b/substrate/core/network/src/chain.rs index be8e4ba18d..b50207cd87 100644 --- a/substrate/core/network/src/chain.rs +++ b/substrate/core/network/src/chain.rs @@ -21,7 +21,7 @@ use client::error::Error; use runtime_primitives::traits::{Block as BlockT, Header as HeaderT}; use runtime_primitives::generic::BlockId; use runtime_primitives::bft::Justification; -use primitives::{Blake2Hasher, RlpCodec}; +use primitives::{Blake2Hasher}; /// Local client abstraction for the network. pub trait Client: Send + Sync { @@ -64,8 +64,8 @@ pub trait Client: Send + Sync { } impl Client for SubstrateClient where - B: client::backend::Backend + Send + Sync + 'static, - E: CallExecutor + Send + Sync + 'static, + B: client::backend::Backend + Send + Sync + 'static, + E: CallExecutor + Send + Sync + 'static, Block: BlockT, { fn import( diff --git a/substrate/core/network/src/test/mod.rs b/substrate/core/network/src/test/mod.rs index 0fa5196a03..eb2d873016 100644 --- a/substrate/core/network/src/test/mod.rs +++ b/substrate/core/network/src/test/mod.rs @@ -26,7 +26,7 @@ use runtime_primitives::traits::Block as BlockT; use runtime_primitives::generic::BlockId; use io::SyncIo; use protocol::{Context, Protocol}; -use primitives::{Blake2Hasher, RlpCodec}; +use primitives::{Blake2Hasher}; use config::ProtocolConfig; use service::TransactionPool; use network_libp2p::{NodeIndex, SessionInfo, Severity}; @@ -173,8 +173,8 @@ impl Peer { fn flush(&self) { } - fn generate_blocks(&self, count: usize, mut edit_block: F) - where F: FnMut(&mut BlockBuilder) + fn generate_blocks(&self, count: usize, mut edit_block: F) + where F: FnMut(&mut BlockBuilder) { for _ in 0 .. count { let mut builder = self.client.new_block().unwrap(); diff --git a/substrate/core/primitives/Cargo.toml b/substrate/core/primitives/Cargo.toml index d900d80de0..7b136a2dfd 100644 --- a/substrate/core/primitives/Cargo.toml +++ b/substrate/core/primitives/Cargo.toml @@ -18,9 +18,8 @@ rlp = { version = "0.2.4", optional = true } twox-hash = { version = "1.1.0", optional = true } byteorder = { version = "1.1", default_features = false } wasmi = { version = "0.4", optional = true } -hashdb = { version = "0.2.1", default_features = false } -patricia-trie = { version = "0.2.1", optional = true } -plain_hasher = { version = "0.2", default_features = false } +hash-db = { git = "https://github.com/paritytech/trie", default_features = false } +hash256-std-hasher = { git = "https://github.com/paritytech/trie", default_features = false } ring = { version = "0.12", optional = true } untrusted = { version = "0.5", optional = true } hex-literal = { version = "0.1", optional = true } @@ -41,6 +40,8 @@ std = [ "fixed-hash/heapsizeof", "fixed-hash/libc", "parity-codec/std", + "hash256-std-hasher/std", + "hash-db/std", "sr-std/std", "serde/std", "rustc-hex/std", @@ -52,7 +53,5 @@ std = [ "base58", "serde_derive", "byteorder/std", - "patricia-trie", - "rlp", "elastic-array", ] diff --git a/substrate/core/primitives/src/hash.rs b/substrate/core/primitives/src/hash.rs index c8883da42d..10e2aa60a1 100644 --- a/substrate/core/primitives/src/hash.rs +++ b/substrate/core/primitives/src/hash.rs @@ -21,10 +21,6 @@ use serde::{Serialize, Serializer, Deserialize, Deserializer}; #[cfg(feature = "std")] use bytes; -#[cfg(feature = "std")] -use core::cmp; -#[cfg(feature = "std")] -use rlp::{Rlp, RlpStream, DecoderError}; macro_rules! impl_rest { ($name: ident, $len: expr) => { @@ -53,29 +49,6 @@ macro_rules! impl_rest { <[u8; $len] as ::codec::Decode>::decode(input).map($name) } } - - #[cfg(feature = "std")] - impl ::rlp::Encodable for $name { - fn rlp_append(&self, s: &mut RlpStream) { - s.encoder().encode_value(self); - } - } - - #[cfg(feature = "std")] - impl ::rlp::Decodable for $name { - fn decode(rlp: &Rlp) -> Result { - rlp.decoder().decode_value(|bytes| match bytes.len().cmp(&$len) { - cmp::Ordering::Less => Err(DecoderError::RlpIsTooShort), - cmp::Ordering::Greater => Err(DecoderError::RlpIsTooBig), - cmp::Ordering::Equal => { - let mut t = [0u8; $len]; - t.copy_from_slice(bytes); - Ok($name(t)) - } - }) - } - } - } } @@ -90,26 +63,6 @@ impl_rest!(H512, 64); mod tests { use super::*; use substrate_serializer as ser; - use rlp::{Encodable, RlpStream}; - - #[test] - fn test_hash_is_encodable() { - let h = H160::from(21); - let mut s = RlpStream::new(); - h.rlp_append(&mut s); - assert_eq!(s.drain().into_vec(), &[148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21]); - } - - #[test] - fn test_hash_is_decodable() { - let data = vec![148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123]; - let res = ::rlp::decode::(&data); - assert!(res.is_ok()); - assert_eq!(res.unwrap(), H160::from(123)); - - let res = ::rlp::decode::(&data); - assert!(res.is_err()); - } #[test] fn test_h160() { diff --git a/substrate/core/primitives/src/hasher.rs b/substrate/core/primitives/src/hasher.rs index 7b5a725b77..f1f9b2e77a 100644 --- a/substrate/core/primitives/src/hasher.rs +++ b/substrate/core/primitives/src/hasher.rs @@ -16,12 +16,12 @@ //! Polkadot Blake2b Hasher implementation -use hashdb::Hasher; -use plain_hasher::PlainHasher; +use hash_db::Hasher; +use hash256_std_hasher::Hash256StdHasher; use hash::H256; pub mod blake2 { - use super::{Hasher, PlainHasher, H256}; + use super::{Hasher, Hash256StdHasher, H256}; #[cfg(feature = "std")] use hashing::blake2_256; @@ -44,7 +44,7 @@ pub mod blake2 { impl Hasher for Blake2Hasher { type Out = H256; - type StdHasher = PlainHasher; + type StdHasher = Hash256StdHasher; const LENGTH: usize = 32; fn hash(x: &[u8]) -> Self::Out { blake2_256(x).into() diff --git a/substrate/core/primitives/src/lib.rs b/substrate/core/primitives/src/lib.rs index 4b603cbbc3..802298a76b 100644 --- a/substrate/core/primitives/src/lib.rs +++ b/substrate/core/primitives/src/lib.rs @@ -35,8 +35,6 @@ extern crate parity_codec_derive; extern crate rustc_hex; extern crate byteorder; extern crate parity_codec as codec; -#[cfg(feature = "std")] -extern crate rlp; #[cfg(feature = "std")] extern crate serde; @@ -62,10 +60,8 @@ extern crate serde_derive; extern crate core; #[cfg(feature = "std")] extern crate wasmi; -extern crate hashdb; -extern crate plain_hasher; -#[cfg(feature = "std")] -extern crate patricia_trie; +extern crate hash_db; +extern crate hash256_std_hasher; #[cfg(feature = "std")] extern crate elastic_array; @@ -110,8 +106,6 @@ pub mod sandbox; pub mod storage; pub mod uint; mod authority_id; -#[cfg(feature = "std")] -mod rlp_codec; mod changes_trie; #[cfg(test)] @@ -126,9 +120,6 @@ pub use changes_trie::ChangesTrieConfiguration; // pub use self::hasher::blake::BlakeHasher; pub use self::hasher::blake2::Blake2Hasher; -#[cfg(feature = "std")] -pub use self::rlp_codec::RlpCodec; - /// A 512-bit value interpreted as a signature. pub type Signature = hash::H512; diff --git a/substrate/core/primitives/src/rlp_codec.rs b/substrate/core/primitives/src/rlp_codec.rs deleted file mode 100644 index bf1ae978b3..0000000000 --- a/substrate/core/primitives/src/rlp_codec.rs +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright 2018 Parity Technologies (UK) Ltd. -// This file is part of Substrate. - -// Substrate is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Substrate is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Substrate. If not, see . - -//! Polkadot Blake2b (trie) NodeCodec implementation - -use elastic_array::{ElasticArray1024, ElasticArray128}; -use hashdb::Hasher; -use rlp::{DecoderError, RlpStream, Rlp, Prototype}; -use core::marker::PhantomData; -use patricia_trie::{NibbleSlice, NodeCodec, node::Node, ChildReference}; - -use hash::H256; -use Blake2Hasher; - -/// Concrete implementation of a `NodeCodec` with Rlp encoding, generic over the `Hasher` -pub struct RlpNodeCodec {mark: PhantomData} - -/// Convenience type for a Blake2_256/Rlp flavoured NodeCodec -pub type RlpCodec = RlpNodeCodec; - -impl NodeCodec for RlpCodec { - type Error = DecoderError; - const HASHED_NULL_NODE : H256 = H256( [0x45, 0xb0, 0xcf, 0xc2, 0x20, 0xce, 0xec, 0x5b, 0x7c, 0x1c, 0x62, 0xc4, 0xd4, 0x19, 0x3d, 0x38, 0xe4, 0xeb, 0xa4, 0x8e, 0x88, 0x15, 0x72, 0x9c, 0xe7, 0x5f, 0x9c, 0xa, 0xb0, 0xe4, 0xc1, 0xc0] ); - fn decode(data: &[u8]) -> ::std::result::Result { - let r = Rlp::new(data); - match r.prototype()? { - // either leaf or extension - decode first item with NibbleSlice::??? - // and use is_leaf return to figure out which. - // if leaf, second item is a value (is_data()) - // if extension, second item is a node (either SHA3 to be looked up and - // fed back into this function or inline RLP which can be fed back into this function). - Prototype::List(2) => match NibbleSlice::from_encoded(r.at(0)?.data()?) { - (slice, true) => Ok(Node::Leaf(slice, r.at(1)?.data()?)), - (slice, false) => Ok(Node::Extension(slice, r.at(1)?.as_raw())), - }, - // branch - first 16 are nodes, 17th is a value (or empty). - Prototype::List(17) => { - let mut nodes = [&[] as &[u8]; 16]; - for i in 0..16 { - nodes[i] = r.at(i)?.as_raw(); - } - Ok(Node::Branch(nodes, if r.at(16)?.is_empty() { None } else { Some(r.at(16)?.data()?) })) - }, - // an empty branch index. - Prototype::Data(0) => Ok(Node::Empty), - // something went wrong. - _ => Err(DecoderError::Custom("Rlp is not valid.")) - } - } - fn try_decode_hash(data: &[u8]) -> Option<::Out> { - let r = Rlp::new(data); - if r.is_data() && r.size() == Blake2Hasher::LENGTH { - Some(r.as_val().expect("Hash is the correct size; qed")) - } else { - None - } - } - fn is_empty_node(data: &[u8]) -> bool { - Rlp::new(data).is_empty() - } - fn empty_node() -> ElasticArray1024 { - let mut stream = RlpStream::new(); - stream.append_empty_data(); - stream.drain() - } - - fn leaf_node(partial: &[u8], value: &[u8]) -> ElasticArray1024 { - let mut stream = RlpStream::new_list(2); - stream.append(&partial); - stream.append(&value); - stream.drain() - } - - fn ext_node(partial: &[u8], child_ref: ChildReference<::Out>) -> ElasticArray1024 { - let mut stream = RlpStream::new_list(2); - stream.append(&partial); - match child_ref { - ChildReference::Hash(h) => stream.append(&h), - ChildReference::Inline(inline_data, len) => { - let bytes = &AsRef::<[u8]>::as_ref(&inline_data)[..len]; - stream.append_raw(bytes, 1) - }, - }; - stream.drain() - } - - fn branch_node(children: I, value: Option>) -> ElasticArray1024 - where I: IntoIterator::Out>>> - { - let mut stream = RlpStream::new_list(17); - for child_ref in children { - match child_ref { - Some(c) => match c { - ChildReference::Hash(h) => stream.append(&h), - ChildReference::Inline(inline_data, len) => { - let bytes = &AsRef::<[u8]>::as_ref(&inline_data)[..len]; - stream.append_raw(bytes, 1) - }, - }, - None => stream.append_empty_data() - }; - } - if let Some(value) = value { - stream.append(&&*value); - } else { - stream.append_empty_data(); - } - stream.drain() - } -} diff --git a/substrate/core/rpc/src/author/mod.rs b/substrate/core/rpc/src/author/mod.rs index c54fe01d8b..6c9faf1493 100644 --- a/substrate/core/rpc/src/author/mod.rs +++ b/substrate/core/rpc/src/author/mod.rs @@ -32,7 +32,7 @@ use transaction_pool::{ }; use jsonrpc_macros::pubsub; use jsonrpc_pubsub::SubscriptionId; -use primitives::{Bytes, Blake2Hasher, RlpCodec}; +use primitives::{Bytes, Blake2Hasher}; use rpc::futures::{Sink, Stream, Future}; use runtime_primitives::{generic, traits}; use subscriptions::Subscriptions; @@ -100,8 +100,8 @@ impl Author where } impl AuthorApi, ExtrinsicFor

, AllExtrinsics

> for Author where - B: client::backend::Backend<

::Block, Blake2Hasher, RlpCodec> + Send + Sync + 'static, - E: client::CallExecutor<

::Block, Blake2Hasher, RlpCodec> + Send + Sync + 'static, + B: client::backend::Backend<

::Block, Blake2Hasher> + Send + Sync + 'static, + E: client::CallExecutor<

::Block, Blake2Hasher> + Send + Sync + 'static, P: PoolChainApi + Sync + Send + 'static, P::Error: 'static, { diff --git a/substrate/core/rpc/src/chain/mod.rs b/substrate/core/rpc/src/chain/mod.rs index 86551e0484..ff9faec81c 100644 --- a/substrate/core/rpc/src/chain/mod.rs +++ b/substrate/core/rpc/src/chain/mod.rs @@ -27,7 +27,7 @@ use runtime_primitives::generic::{BlockId, SignedBlock}; use runtime_primitives::traits::{Block as BlockT, Header, NumberFor}; use runtime_version::RuntimeVersion; use tokio::runtime::TaskExecutor; -use primitives::{Blake2Hasher, RlpCodec}; +use primitives::{Blake2Hasher}; use subscriptions::Subscriptions; @@ -92,8 +92,8 @@ impl Chain { impl Chain where Block: BlockT + 'static, - B: client::backend::Backend + Send + Sync + 'static, - E: client::CallExecutor + Send + Sync + 'static, + B: client::backend::Backend + Send + Sync + 'static, + E: client::CallExecutor + Send + Sync + 'static, { fn unwrap_or_best(&self, hash: Trailing) -> Result { Ok(match hash.into() { @@ -105,8 +105,8 @@ impl Chain where impl ChainApi, Block::Extrinsic> for Chain where Block: BlockT + 'static, - B: client::backend::Backend + Send + Sync + 'static, - E: client::CallExecutor + Send + Sync + 'static, + B: client::backend::Backend + Send + Sync + 'static, + E: client::CallExecutor + Send + Sync + 'static, { type Metadata = ::metadata::Metadata; diff --git a/substrate/core/rpc/src/chain/tests.rs b/substrate/core/rpc/src/chain/tests.rs index 6a08f4a09b..532d988d3b 100644 --- a/substrate/core/rpc/src/chain/tests.rs +++ b/substrate/core/rpc/src/chain/tests.rs @@ -36,7 +36,7 @@ fn should_return_header() { parent_hash: 0.into(), number: 0, state_root: x.state_root.clone(), - extrinsics_root: "45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0".into(), + extrinsics_root: "03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314".into(), digest: Default::default(), } ); @@ -47,7 +47,7 @@ fn should_return_header() { parent_hash: 0.into(), number: 0, state_root: x.state_root.clone(), - extrinsics_root: "45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0".into(), + extrinsics_root: "03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314".into(), digest: Default::default(), } ); @@ -86,7 +86,7 @@ fn should_return_a_block() { parent_hash: api.client.genesis_hash(), number: 1, state_root: x.block.header.state_root.clone(), - extrinsics_root: "45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0".into(), + extrinsics_root: "03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314".into(), digest: Default::default(), }, extrinsics: vec![], @@ -100,7 +100,7 @@ fn should_return_a_block() { parent_hash: api.client.genesis_hash(), number: 1, state_root: x.block.header.state_root.clone(), - extrinsics_root: "45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0".into(), + extrinsics_root: "03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314".into(), digest: Default::default(), }, extrinsics: vec![], diff --git a/substrate/core/rpc/src/state/mod.rs b/substrate/core/rpc/src/state/mod.rs index fee8b670f3..31e34be368 100644 --- a/substrate/core/rpc/src/state/mod.rs +++ b/substrate/core/rpc/src/state/mod.rs @@ -27,7 +27,7 @@ use jsonrpc_macros::pubsub; use jsonrpc_pubsub::SubscriptionId; use primitives::hexdisplay::HexDisplay; use primitives::storage::{StorageKey, StorageData, StorageChangeSet}; -use primitives::{Blake2Hasher, RlpCodec}; +use primitives::{Blake2Hasher}; use rpc::Result as RpcResult; use rpc::futures::{stream, Future, Sink, Stream}; use runtime_primitives::generic::BlockId; @@ -107,8 +107,8 @@ impl State { impl State where Block: BlockT, - B: client::backend::Backend, - E: CallExecutor, + B: client::backend::Backend, + E: CallExecutor, { fn unwrap_or_best(&self, hash: Trailing) -> Result { ::helpers::unwrap_or_else(|| Ok(self.client.info()?.chain.best_hash), hash) @@ -117,8 +117,8 @@ impl State where impl StateApi for State where Block: BlockT + 'static, - B: client::backend::Backend + Send + Sync + 'static, - E: CallExecutor + Send + Sync + 'static, + B: client::backend::Backend + Send + Sync + 'static, + E: CallExecutor + Send + Sync + 'static, { type Metadata = ::metadata::Metadata; diff --git a/substrate/core/service/src/components.rs b/substrate/core/service/src/components.rs index dd204fb735..eb1134074d 100644 --- a/substrate/core/service/src/components.rs +++ b/substrate/core/service/src/components.rs @@ -29,7 +29,7 @@ use substrate_executor::{NativeExecutor, NativeExecutionDispatch}; use transaction_pool::{self, Options as TransactionPoolOptions, Pool as TransactionPool}; use runtime_primitives::{traits::Block as BlockT, traits::Header as HeaderT, BuildStorage}; use config::Configuration; -use primitives::{Blake2Hasher, RlpCodec}; +use primitives::{Blake2Hasher}; // Type aliases. // These exist mainly to avoid typing `::Foo` all over the code. @@ -66,7 +66,6 @@ pub type LightExecutor = client::light::call_executor::RemoteCallExecutor< >, network::OnDemand<::Block, NetworkService>, Blake2Hasher, - RlpCodec, >; /// Full client type for a factory. @@ -153,9 +152,9 @@ pub trait Components: 'static { /// Associated service factory. type Factory: ServiceFactory; /// Client backend. - type Backend: 'static + client::backend::Backend, Blake2Hasher, RlpCodec>; + type Backend: 'static + client::backend::Backend, Blake2Hasher>; /// Client executor. - type Executor: 'static + client::CallExecutor, Blake2Hasher, RlpCodec> + Send + Sync; + type Executor: 'static + client::CallExecutor, Blake2Hasher> + Send + Sync; /// Extrinsic pool type. type TransactionPoolApi: 'static + transaction_pool::ChainApi::ExtrinsicHash, Block=FactoryBlock>; @@ -237,7 +236,7 @@ impl Components for LightComponents { }; let db_storage = client_db::light::LightStorage::new(db_settings)?; let light_blockchain = client::light::new_light_blockchain(db_storage); - let fetch_checker = Arc::new(client::light::new_fetch_checker::<_, Blake2Hasher, RlpCodec>(executor)); + let fetch_checker = Arc::new(client::light::new_fetch_checker::<_, Blake2Hasher>(executor)); let fetcher = Arc::new(network::OnDemand::new(fetch_checker)); let client_backend = client::light::new_light_backend(light_blockchain, fetcher.clone()); let client = client::light::new_light(client_backend, fetcher.clone(), &config.chain_spec)?; diff --git a/substrate/core/sr-io/Cargo.toml b/substrate/core/sr-io/Cargo.toml index 45e200a747..e91f903591 100644 --- a/substrate/core/sr-io/Cargo.toml +++ b/substrate/core/sr-io/Cargo.toml @@ -9,24 +9,25 @@ rustc_version = "0.2" [dependencies] sr-std = { path = "../sr-std", default_features = false } -environmental = { version = "~1.0", optional = true } -substrate-state-machine = { path = "../state-machine", optional = true } substrate-primitives = { path = "../primitives", default_features = false } parity-codec = { version = "2.0", default_features = false } -triehash = { version = "0.2", optional = true } -hashdb = { version = "0.2", default_features = false } -rlp = { version = "0.2", optional = true, default_features = false } +hash-db = { git = "https://github.com/paritytech/trie", default_features = false } + +environmental = { version = "~1.0", optional = true } +substrate-state-machine = { path = "../state-machine", optional = true } +substrate-trie = { path = "../trie", optional = true } [features] default = ["std"] std = [ - "environmental", - "substrate-state-machine", - "triehash", "substrate-primitives/std", "parity-codec/std", "sr-std/std", - "rlp" + + "hash-db/std", + "environmental", + "substrate-state-machine", + "substrate-trie" ] nightly = [] strict = [] diff --git a/substrate/core/sr-io/with_std.rs b/substrate/core/sr-io/with_std.rs index 0f203c15f3..5744010968 100644 --- a/substrate/core/sr-io/with_std.rs +++ b/substrate/core/sr-io/with_std.rs @@ -21,23 +21,21 @@ extern crate environmental; extern crate substrate_primitives as primitives; extern crate substrate_state_machine; -extern crate triehash; -extern crate hashdb; -extern crate rlp; +extern crate substrate_trie as trie; +extern crate hash_db; #[doc(hidden)] pub extern crate parity_codec as codec; // re-export hashing functions. pub use primitives::{blake2_256, twox_128, twox_256, ed25519}; -pub use primitives::{Blake2Hasher, RlpCodec}; +pub use primitives::{Blake2Hasher}; // Switch to this after PoC-3 // pub use primitives::BlakeHasher; pub use substrate_state_machine::{Externalities, TestExternalities}; use primitives::hexdisplay::HexDisplay; use primitives::H256; -use hashdb::Hasher; -use rlp::Encodable; +use hash_db::Hasher; // TODO: use the real error, not NoError. @@ -112,12 +110,12 @@ pub fn storage_changes_root(block: u64) -> Option { } /// A trie root formed from the enumerated items. -pub fn enumerated_trie_root(serialised_values: &[&[u8]]) -> H::Out +pub fn enumerated_trie_root(input: &[&[u8]]) -> H::Out where H: Hasher, - H::Out: Encodable + Ord, + H::Out: Ord, { - triehash::ordered_trie_root::(serialised_values.iter().map(|s| s.to_vec())) + trie::ordered_trie_root::(input.iter()) } /// A trie root formed from the iterated items. @@ -127,20 +125,20 @@ where A: AsRef<[u8]> + Ord, B: AsRef<[u8]>, H: Hasher, - ::Out: Encodable + Ord, + ::Out: Ord, { - triehash::trie_root::(input) + trie::trie_root::(input) } /// A trie root formed from the enumerated items. pub fn ordered_trie_root(input: I) -> H::Out where - I: IntoIterator, + I: IntoIterator + Iterator, A: AsRef<[u8]>, H: Hasher, - ::Out: Encodable + Ord, + ::Out: Ord, { - triehash::ordered_trie_root::(input) + trie::ordered_trie_root::(input) } /// Verify a ed25519 signature. @@ -217,7 +215,7 @@ mod std_tests { #[test] fn storage_works() { - let mut t = TestExternalities::::default(); + let mut t = TestExternalities::::default(); assert!(with_externalities(&mut t, || { assert_eq!(storage(b"hello"), None); set_storage(b"hello", b"world"); @@ -238,7 +236,7 @@ mod std_tests { #[test] fn read_storage_works() { - let mut t = TestExternalities::::new(map![ + let mut t = TestExternalities::::new(map![ b":test".to_vec() => b"\x0b\0\0\0Hello world".to_vec() ]); @@ -254,7 +252,7 @@ mod std_tests { #[test] fn clear_prefix_works() { - let mut t = TestExternalities::::new(map![ + let mut t = TestExternalities::::new(map![ b":a".to_vec() => b"\x0b\0\0\0Hello world".to_vec(), b":abcd".to_vec() => b"\x0b\0\0\0Hello world".to_vec(), b":abc".to_vec() => b"\x0b\0\0\0Hello world".to_vec(), diff --git a/substrate/core/sr-io/without_std.rs b/substrate/core/sr-io/without_std.rs index e358b8e79d..d7c5519973 100644 --- a/substrate/core/sr-io/without_std.rs +++ b/substrate/core/sr-io/without_std.rs @@ -16,7 +16,7 @@ extern crate substrate_primitives as primitives; -extern crate hashdb; +extern crate hash_db; #[doc(hidden)] pub extern crate sr_std as rstd; @@ -26,7 +26,7 @@ pub extern crate parity_codec as codec; use core::intrinsics; use rstd::vec::Vec; -use hashdb::Hasher; +use hash_db::Hasher; use primitives::Blake2Hasher; pub use rstd::{mem, slice}; diff --git a/substrate/core/sr-primitives/src/traits.rs b/substrate/core/sr-primitives/src/traits.rs index f32f2ecdb2..6691ba0b36 100644 --- a/substrate/core/sr-primitives/src/traits.rs +++ b/substrate/core/sr-primitives/src/traits.rs @@ -252,12 +252,12 @@ pub trait Hash: 'static + MaybeSerializeDebug + Clone + Eq + PartialEq { // Stup Encode::using_encoded(s, Self::hash) } - /// Produce the patricia-trie root of a mapping from indices to byte slices. + /// Produce the trie-db root of a mapping from indices to byte slices. fn enumerated_trie_root(items: &[&[u8]]) -> Self::Output; /// Iterator-based version of `enumerated_trie_root`. fn ordered_trie_root< - I: IntoIterator, + I: IntoIterator + Iterator, A: AsRef<[u8]> >(input: I) -> Self::Output; @@ -296,7 +296,7 @@ impl Hash for BlakeTwo256 { runtime_io::trie_root::(input).into() } fn ordered_trie_root< - I: IntoIterator, + I: IntoIterator + Iterator, A: AsRef<[u8]> >(input: I) -> Self::Output { runtime_io::ordered_trie_root::(input).into() diff --git a/substrate/core/sr-std/without_std.rs b/substrate/core/sr-std/without_std.rs index 981c02c025..b888d75119 100644 --- a/substrate/core/sr-std/without_std.rs +++ b/substrate/core/sr-std/without_std.rs @@ -51,7 +51,6 @@ pub use core::borrow; pub use core::cell; pub use core::clone; pub use core::cmp; -pub use core::fmt; pub use core::hash; pub use core::intrinsics; pub use core::iter; diff --git a/substrate/core/state-machine/Cargo.toml b/substrate/core/state-machine/Cargo.toml index 7653611fa7..be74e3ce8d 100644 --- a/substrate/core/state-machine/Cargo.toml +++ b/substrate/core/state-machine/Cargo.toml @@ -10,12 +10,11 @@ hex-literal = "0.1.0" log = "0.3" parking_lot = "0.4" heapsize = "0.4" -hashdb = "0.2.1" -memorydb = "0.2.1" -patricia-trie = "0.2.1" -triehash = "0.2" +hash-db = { git = "https://github.com/paritytech/trie" } +memory-db = { git = "https://github.com/paritytech/trie" } +trie-db = { git = "https://github.com/paritytech/trie" } +trie-root = { git = "https://github.com/paritytech/trie" } rlp = "0.2.4" - -substrate-primitives = { path = "../primitives", version = "0.1.0" } -parity-codec = { version = "2.0", default_features = false } - +substrate-trie = { path = "../trie" } +substrate-primitives = { path = "../primitives" } +parity-codec = { version = "2.0" } \ No newline at end of file diff --git a/substrate/core/state-machine/src/backend.rs b/substrate/core/state-machine/src/backend.rs index efccd8ebeb..3502d0ec8c 100644 --- a/substrate/core/state-machine/src/backend.rs +++ b/substrate/core/state-machine/src/backend.rs @@ -20,19 +20,17 @@ use std::{error, fmt}; use std::cmp::Ord; use std::collections::HashMap; use std::marker::PhantomData; -use hashdb::Hasher; -use memorydb::MemoryDB; -use rlp::Encodable; +use hash_db::Hasher; use trie_backend::TrieBackend; use trie_backend_essence::TrieBackendStorage; -use patricia_trie::{TrieDBMut, TrieMut, NodeCodec}; +use substrate_trie::{TrieDBMut, TrieMut, MemoryDB, trie_root}; use heapsize::HeapSizeOf; /// A state backend is used to read state data and can have changes committed /// to it. /// /// The clone operation (if implemented) should be cheap. -pub trait Backend> { +pub trait Backend { /// An error type when fetching data is not possible. type Error: super::Error; @@ -59,13 +57,13 @@ pub trait Backend> { fn storage_root(&self, delta: I) -> (H::Out, Self::Transaction) where I: IntoIterator, Option>)>, - H::Out: Ord + Encodable; + H::Out: Ord; /// Get all key/value pairs into a Vec. fn pairs(&self) -> Vec<(Vec, Vec)>; /// Try convert into trie backend. - fn try_into_trie_backend(self) -> Option>; + fn try_into_trie_backend(self) -> Option>; } /// Error impossible. @@ -86,39 +84,38 @@ impl error::Error for Void { /// In-memory backend. Fully recomputes tries on each commit but useful for /// tests. #[derive(Eq)] -pub struct InMemory { +pub struct InMemory { inner: HashMap, Vec>, _hasher: PhantomData, - _codec: PhantomData, } -impl Default for InMemory { +impl Default for InMemory { fn default() -> Self { InMemory { inner: Default::default(), _hasher: PhantomData, - _codec: PhantomData, } } } -impl Clone for InMemory { +impl Clone for InMemory { fn clone(&self) -> Self { InMemory { - inner: self.inner.clone(), _hasher: PhantomData, _codec: PhantomData, + inner: self.inner.clone(), + _hasher: PhantomData, } } } -impl PartialEq for InMemory { +impl PartialEq for InMemory { fn eq(&self, other: &Self) -> bool { self.inner.eq(&other.inner) } } -impl> InMemory where H::Out: HeapSizeOf { +impl InMemory where H::Out: HeapSizeOf { /// Copy the state, with applied updates - pub fn update(&self, changes: >::Transaction) -> Self { + pub fn update(&self, changes: >::Transaction) -> Self { let mut inner: HashMap<_, _> = self.inner.clone(); for (key, val) in changes { match val { @@ -131,17 +128,18 @@ impl> InMemory where H::Out: HeapSizeOf { } } -impl From, Vec>> for InMemory { +impl From, Vec>> for InMemory { fn from(inner: HashMap, Vec>) -> Self { InMemory { - inner: inner, _hasher: PhantomData, _codec: PhantomData + inner: inner, + _hasher: PhantomData, } } } impl super::Error for Void {} -impl> Backend for InMemory where H::Out: HeapSizeOf { +impl Backend for InMemory where H::Out: HeapSizeOf { type Error = Void; type Transaction = Vec<(Vec, Option>)>; type TrieBackendStorage = MemoryDB; @@ -161,12 +159,12 @@ impl> Backend for InMemory where H::Out: fn storage_root(&self, delta: I) -> (H::Out, Self::Transaction) where I: IntoIterator, Option>)>, - ::Out: Ord + Encodable, + ::Out: Ord, { let existing_pairs = self.inner.iter().map(|(k, v)| (k.clone(), Some(v.clone()))); let transaction: Vec<_> = delta.into_iter().collect(); - let root = ::triehash::trie_root::(existing_pairs.chain(transaction.iter().cloned()) + let root = trie_root::(existing_pairs.chain(transaction.iter().cloned()) .collect::>() .into_iter() .filter_map(|(k, maybe_val)| maybe_val.map(|val| (k, val))) @@ -179,24 +177,24 @@ impl> Backend for InMemory where H::Out: self.inner.iter().map(|(k, v)| (k.clone(), v.clone())).collect() } - fn try_into_trie_backend(self) -> Option> { - let mut mdb = MemoryDB::new(); - let root = insert_into_memory_db::(&mut mdb, self.inner.into_iter())?; + fn try_into_trie_backend(self) -> Option> { + let mut mdb = MemoryDB::default(); // TODO: should be more correct and use ::new() + let root = insert_into_memory_db::(&mut mdb, self.inner.into_iter())?; Some(TrieBackend::new(mdb, root)) } } /// Insert input pairs into memory db. -pub(crate) fn insert_into_memory_db(mdb: &mut MemoryDB, input: I) -> Option +pub(crate) fn insert_into_memory_db(mdb: &mut MemoryDB, input: I) -> Option where H: Hasher, H::Out: HeapSizeOf, - C: NodeCodec, + I: Iterator, Vec)>, { let mut root = ::Out::default(); { - let mut trie = TrieDBMut::::new(mdb, &mut root); + let mut trie = TrieDBMut::::new(mdb, &mut root); for (key, value) in input { if let Err(e) = trie.insert(&key, &value) { warn!(target: "trie", "Failed to write to trie: {}", e); diff --git a/substrate/core/state-machine/src/changes_trie/build.rs b/substrate/core/state-machine/src/changes_trie/build.rs index 8596b2e434..19a629fe8d 100644 --- a/substrate/core/state-machine/src/changes_trie/build.rs +++ b/substrate/core/state-machine/src/changes_trie/build.rs @@ -18,9 +18,8 @@ use std::collections::{BTreeMap, BTreeSet}; use codec::Decode; -use hashdb::Hasher; +use hash_db::Hasher; use heapsize::HeapSizeOf; -use patricia_trie::NodeCodec; use backend::Backend; use overlayed_changes::OverlayedChanges; use trie_backend_essence::{TrieBackendStorage, TrieBackendEssence}; @@ -34,19 +33,18 @@ use changes_trie::{Configuration, Storage}; /// required data. /// Returns Ok(None) data required to prepare input pairs is not collected /// or storage is not provided. -pub fn prepare_input<'a, B, S, H, C>( +pub fn prepare_input<'a, B, S, H>( backend: &B, storage: Option<&'a S>, changes: &OverlayedChanges, block: u64, ) -> Result>, String> where - B: Backend, + B: Backend, S: Storage, &'a S: TrieBackendStorage, H: Hasher, H::Out: HeapSizeOf, - C: NodeCodec, { let (storage, config) = match (storage, changes.changes_trie_config.as_ref()) { (Some(storage), Some(config)) => (storage, config), @@ -58,7 +56,7 @@ pub fn prepare_input<'a, B, S, H, C>( backend, block, changes)?); - input.extend(prepare_digest_input::<_, H, C>( + input.extend(prepare_digest_input::<_, H>( block, config, storage)?); @@ -67,15 +65,15 @@ pub fn prepare_input<'a, B, S, H, C>( } /// Prepare ExtrinsicIndex input pairs. -fn prepare_extrinsics_input( +fn prepare_extrinsics_input( backend: &B, block: u64, changes: &OverlayedChanges, ) -> Result, String> where - B: Backend, + B: Backend, H: Hasher, - C: NodeCodec, + { let mut extrinsic_map = BTreeMap::, BTreeSet>::new(); for (key, val) in changes.prospective.iter().chain(changes.committed.iter()) { @@ -104,7 +102,7 @@ fn prepare_extrinsics_input( } /// Prepare DigestIndex input pairs. -fn prepare_digest_input<'a, S, H, C>( +fn prepare_digest_input<'a, S, H>( block: u64, config: &Configuration, storage: &'a S @@ -114,13 +112,12 @@ fn prepare_digest_input<'a, S, H, C>( &'a S: TrieBackendStorage, H: Hasher, H::Out: HeapSizeOf, - C: NodeCodec, { let mut digest_map = BTreeMap::, BTreeSet>::new(); for digest_build_block in digest_build_iterator(config, block) { let trie_root = storage.root(digest_build_block)?; let trie_root = trie_root.ok_or_else(|| format!("No changes trie root for block {}", digest_build_block))?; - let trie_storage = TrieBackendEssence::<_, H, C>::new(storage, trie_root); + let trie_storage = TrieBackendEssence::<_, H>::new(storage, trie_root); let extrinsic_prefix = ExtrinsicIndex::key_neutral_prefix(digest_build_block); trie_storage.for_keys_with_prefix(&extrinsic_prefix, |key| @@ -147,15 +144,15 @@ fn prepare_digest_input<'a, S, H, C>( #[cfg(test)] mod test { use codec::Encode; - use primitives::{Blake2Hasher, RlpCodec}; + use primitives::Blake2Hasher; use primitives::storage::well_known_keys::EXTRINSIC_INDEX; use backend::InMemory; use changes_trie::storage::InMemoryStorage; use overlayed_changes::OverlayedValue; use super::*; - fn prepare_for_build() -> (InMemory, InMemoryStorage, OverlayedChanges) { - let backend: InMemory<_, _> = vec![ + fn prepare_for_build() -> (InMemory, InMemoryStorage, OverlayedChanges) { + let backend: InMemory<_> = vec![ (vec![100], vec![255]), (vec![101], vec![255]), (vec![102], vec![255]), @@ -163,7 +160,7 @@ mod test { (vec![104], vec![255]), (vec![105], vec![255]), ].into_iter().collect::<::std::collections::HashMap<_, _>>().into(); - let storage = InMemoryStorage::with_inputs::(vec![ + let storage = InMemoryStorage::with_inputs(vec![ (1, vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: 1, key: vec![100] }, vec![1, 3]), InputPair::ExtrinsicIndex(ExtrinsicIndex { block: 1, key: vec![101] }, vec![0, 2]), @@ -231,7 +228,7 @@ mod test { #[test] fn build_changes_trie_nodes_on_non_digest_block() { let (backend, storage, changes) = prepare_for_build(); - let changes_trie_nodes = prepare_input::<_, _, _, RlpCodec>(&backend, Some(&storage), &changes, 5).unwrap(); + let changes_trie_nodes = prepare_input(&backend, Some(&storage), &changes, 5).unwrap(); assert_eq!(changes_trie_nodes, Some(vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: 5, key: vec![100] }, vec![0, 2, 3]), InputPair::ExtrinsicIndex(ExtrinsicIndex { block: 5, key: vec![101] }, vec![1]), @@ -242,7 +239,7 @@ mod test { #[test] fn build_changes_trie_nodes_on_digest_block_l1() { let (backend, storage, changes) = prepare_for_build(); - let changes_trie_nodes = prepare_input::<_, _, _, RlpCodec>(&backend, Some(&storage), &changes, 4).unwrap(); + let changes_trie_nodes = prepare_input(&backend, Some(&storage), &changes, 4).unwrap(); assert_eq!(changes_trie_nodes, Some(vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: 4, key: vec![100] }, vec![0, 2, 3]), InputPair::ExtrinsicIndex(ExtrinsicIndex { block: 4, key: vec![101] }, vec![1]), @@ -258,7 +255,7 @@ mod test { #[test] fn build_changes_trie_nodes_on_digest_block_l2() { let (backend, storage, changes) = prepare_for_build(); - let changes_trie_nodes = prepare_input::<_, _, _, RlpCodec>(&backend, Some(&storage), &changes, 16).unwrap(); + let changes_trie_nodes = prepare_input(&backend, Some(&storage), &changes, 16).unwrap(); assert_eq!(changes_trie_nodes, Some(vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: 16, key: vec![100] }, vec![0, 2, 3]), InputPair::ExtrinsicIndex(ExtrinsicIndex { block: 16, key: vec![101] }, vec![1]), @@ -282,7 +279,7 @@ mod test { extrinsics: Some(vec![1].into_iter().collect()) }); - let changes_trie_nodes = prepare_input::<_, _, _, RlpCodec>(&backend, Some(&storage), &changes, 4).unwrap(); + let changes_trie_nodes = prepare_input(&backend, Some(&storage), &changes, 4).unwrap(); assert_eq!(changes_trie_nodes, Some(vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: 4, key: vec![100] }, vec![0, 2, 3]), InputPair::ExtrinsicIndex(ExtrinsicIndex { block: 4, key: vec![101] }, vec![1]), diff --git a/substrate/core/state-machine/src/changes_trie/changes_iterator.rs b/substrate/core/state-machine/src/changes_trie/changes_iterator.rs index e0e3cf5074..886cd6abb1 100644 --- a/substrate/core/state-machine/src/changes_trie/changes_iterator.rs +++ b/substrate/core/state-machine/src/changes_trie/changes_iterator.rs @@ -20,10 +20,9 @@ use std::cell::RefCell; use std::collections::VecDeque; use codec::{Decode, Encode}; -use hashdb::{HashDB, Hasher}; +use hash_db::{HashDB, Hasher}; use heapsize::HeapSizeOf; -use memorydb::MemoryDB; -use patricia_trie::{NodeCodec, Recorder}; +use substrate_trie::{Recorder, MemoryDB}; use changes_trie::{Configuration, Storage}; use changes_trie::input::{DigestIndex, ExtrinsicIndex, DigestIndexValue, ExtrinsicIndexValue}; use changes_trie::storage::{TrieBackendAdapter, InMemoryStorage}; @@ -32,7 +31,7 @@ use trie_backend_essence::{TrieBackendEssence}; /// Return changes of given key at given blocks range. /// `max` is the number of best known block. -pub fn key_changes, H: Hasher, C: NodeCodec>( +pub fn key_changes, H: Hasher>( config: &Configuration, storage: &S, begin: u64, @@ -52,13 +51,12 @@ pub fn key_changes, H: Hasher, C: NodeCodec>( _hasher: ::std::marker::PhantomData::::default(), }, - _codec: ::std::marker::PhantomData::::default(), }.collect() } /// Returns proof of changes of given key at given blocks range. /// `max` is the number of best known block. -pub fn key_changes_proof, H: Hasher, C: NodeCodec>( +pub fn key_changes_proof, H: Hasher>( config: &Configuration, storage: &S, begin: u64, @@ -79,7 +77,6 @@ pub fn key_changes_proof, H: Hasher, C: NodeCodec>( _hasher: ::std::marker::PhantomData::::default(), }, proof_recorder: Default::default(), - _codec: ::std::marker::PhantomData::::default(), }; // iterate to collect proof @@ -92,7 +89,7 @@ pub fn key_changes_proof, H: Hasher, C: NodeCodec>( /// Check key changes proog and return changes of the key at given blocks range. /// `max` is the number of best known block. -pub fn key_changes_proof_check, H: Hasher, C: NodeCodec>( +pub fn key_changes_proof_check, H: Hasher>( config: &Configuration, roots_storage: &S, // TODO: use RootsStorage is only used to gather root proof: Vec>, @@ -101,7 +98,7 @@ pub fn key_changes_proof_check, H: Hasher, C: NodeCodec>( max: u64, key: &[u8] ) -> Result, String> where H::Out: HeapSizeOf { - let mut proof_db = MemoryDB::::new(); + let mut proof_db = MemoryDB::::default(); // TODO: use new for correctness for item in proof { proof_db.insert(&item); } @@ -119,7 +116,6 @@ pub fn key_changes_proof_check, H: Hasher, C: NodeCodec>( _hasher: ::std::marker::PhantomData::::default(), }, - _codec: ::std::marker::PhantomData::::default(), }.collect() } @@ -239,28 +235,29 @@ impl<'a, RS: 'a + Storage, S: Storage, H: Hasher> DrilldownIteratorEssence } /// Exploring drilldown operator. -struct DrilldownIterator<'a, RS: 'a + Storage, S: 'a + Storage, H: Hasher, C: NodeCodec> { +struct DrilldownIterator<'a, RS: 'a + Storage, S: 'a + Storage, H: Hasher> { essence: DrilldownIteratorEssence<'a, RS, S, H>, - _codec: ::std::marker::PhantomData, } -impl<'a, RS: 'a + Storage, S: Storage, H: Hasher, C: NodeCodec> Iterator for DrilldownIterator<'a, RS, S, H, C> where H::Out: HeapSizeOf { +impl<'a, RS: 'a + Storage, S: Storage, H: Hasher> Iterator + for DrilldownIterator<'a, RS, S, H> + where H::Out: HeapSizeOf +{ type Item = Result<(u64, u32), String>; fn next(&mut self) -> Option { self.essence.next(|storage, root, key| - TrieBackendEssence::<_, H, C>::new(TrieBackendAdapter::new(storage), root).storage(key)) + TrieBackendEssence::<_, H>::new(TrieBackendAdapter::new(storage), root).storage(key)) } } /// Proving drilldown iterator. -struct ProvingDrilldownIterator<'a, RS: 'a + Storage, S: 'a + Storage, H: Hasher, C: NodeCodec> { +struct ProvingDrilldownIterator<'a, RS: 'a + Storage, S: 'a + Storage, H: Hasher> { essence: DrilldownIteratorEssence<'a, RS, S, H>, proof_recorder: RefCell>, - _codec: ::std::marker::PhantomData, } -impl<'a, RS: 'a + Storage, S: Storage, H: Hasher, C: NodeCodec> ProvingDrilldownIterator<'a, RS, S, H, C> { +impl<'a, RS: 'a + Storage, S: Storage, H: Hasher> ProvingDrilldownIterator<'a, RS, S, H> { /// Consume the iterator, extracting the gathered proof in lexicographical order /// by value. pub fn extract_proof(self) -> Vec> { @@ -271,14 +268,14 @@ impl<'a, RS: 'a + Storage, S: Storage, H: Hasher, C: NodeCodec> Proving } } -impl<'a, RS: 'a + Storage, S: Storage, H: Hasher, C: NodeCodec> Iterator for ProvingDrilldownIterator<'a, RS, S, H, C> where H::Out: HeapSizeOf { +impl<'a, RS: 'a + Storage, S: Storage, H: Hasher> Iterator for ProvingDrilldownIterator<'a, RS, S, H> where H::Out: HeapSizeOf { type Item = Result<(u64, u32), String>; fn next(&mut self) -> Option { let proof_recorder = &mut *self.proof_recorder.try_borrow_mut() .expect("only fails when already borrowed; storage() is non-reentrant; qed"); self.essence.next(|storage, root, key| - ProvingBackendEssence::<_, H, C> { + ProvingBackendEssence::<_, H> { backend: &TrieBackendEssence::new(TrieBackendAdapter::new(storage), root), proof_recorder, }.storage(key)) @@ -356,14 +353,14 @@ fn lower_bound_max_digest( #[cfg(test)] mod tests { - use primitives::{Blake2Hasher, RlpCodec}; + use primitives::Blake2Hasher; use changes_trie::input::InputPair; use changes_trie::storage::InMemoryStorage; use super::*; fn prepare_for_drilldown() -> (Configuration, InMemoryStorage) { let config = Configuration { digest_interval: 4, digest_levels: 2 }; - let backend = InMemoryStorage::with_inputs::(vec![ + let backend = InMemoryStorage::with_inputs(vec![ // digest: 1..4 => [(3, 0)] (1, vec![]), (2, vec![]), @@ -403,7 +400,7 @@ mod tests { #[test] fn drilldown_iterator_works() { let (config, storage) = prepare_for_drilldown(); - let drilldown_result = key_changes::, Blake2Hasher, RlpCodec>( + let drilldown_result = key_changes::, Blake2Hasher>( &config, &storage, 0, 100, 1000, &[42]); assert_eq!(drilldown_result, Ok(vec![(8, 2), (8, 1), (6, 3), (3, 0)])); @@ -414,16 +411,16 @@ mod tests { let (config, storage) = prepare_for_drilldown(); storage.clear_storage(); - assert!(key_changes::, Blake2Hasher, RlpCodec>( + assert!(key_changes::, Blake2Hasher>( &config, &storage, 0, 100, 1000, &[42]).is_err()); } #[test] fn drilldown_iterator_fails_when_range_is_invalid() { let (config, storage) = prepare_for_drilldown(); - assert!(key_changes::, Blake2Hasher, RlpCodec>( + assert!(key_changes::, Blake2Hasher>( &config, &storage, 0, 100, 50, &[42]).is_err()); - assert!(key_changes::, Blake2Hasher, RlpCodec>( + assert!(key_changes::, Blake2Hasher>( &config, &storage, 20, 10, 100, &[42]).is_err()); } @@ -434,7 +431,7 @@ mod tests { // create drilldown iterator that records all trie nodes during drilldown let (remote_config, remote_storage) = prepare_for_drilldown(); - let remote_proof = key_changes_proof::, Blake2Hasher, RlpCodec>( + let remote_proof = key_changes_proof::, Blake2Hasher>( &remote_config, &remote_storage, 0, 100, 1000, &[42]).unwrap(); @@ -443,7 +440,7 @@ mod tests { // create drilldown iterator that works the same, but only depends on trie let (local_config, local_storage) = prepare_for_drilldown(); local_storage.clear_storage(); - let local_result = key_changes_proof_check::, Blake2Hasher, RlpCodec>( + let local_result = key_changes_proof_check::, Blake2Hasher>( &local_config, &local_storage, remote_proof, 0, 100, 1000, &[42]); diff --git a/substrate/core/state-machine/src/changes_trie/mod.rs b/substrate/core/state-machine/src/changes_trie/mod.rs index 3b3ab9e53c..f7cfb506e0 100644 --- a/substrate/core/state-machine/src/changes_trie/mod.rs +++ b/substrate/core/state-machine/src/changes_trie/mod.rs @@ -41,15 +41,14 @@ mod storage; pub use self::storage::InMemoryStorage; pub use self::changes_iterator::{key_changes, key_changes_proof, key_changes_proof_check}; -use hashdb::{DBValue, Hasher}; +use hash_db::Hasher; use heapsize::HeapSizeOf; -use patricia_trie::NodeCodec; -use rlp::Encodable; use backend::Backend; use primitives; use changes_trie::build::prepare_input; use overlayed_changes::OverlayedChanges; use trie_backend_essence::TrieBackendStorage; +use trie::{DBValue, trie_root}; /// Changes that are made outside of extrinsics are marked with this index; pub const NO_EXTRINSIC_INDEX: u32 = 0xffffffff; @@ -68,7 +67,7 @@ pub type Configuration = primitives::ChangesTrieConfiguration; /// Compute the changes trie root and transaction for given block. /// Returns None if there's no data to perform computation. -pub fn compute_changes_trie_root<'a, B: Backend, S: Storage, H: Hasher, C: NodeCodec>( +pub fn compute_changes_trie_root<'a, B: Backend, S: Storage, H: Hasher>( backend: &B, storage: Option<&'a S>, changes: &OverlayedChanges, @@ -76,14 +75,14 @@ pub fn compute_changes_trie_root<'a, B: Backend, S: Storage, H: Hasher, ) -> Option<(H::Out, Vec<(Vec, Vec)>)> where &'a S: TrieBackendStorage, - H::Out: Ord + Encodable + HeapSizeOf, + H::Out: Ord + HeapSizeOf, { - let input_pairs = prepare_input::(backend, storage, changes, block) + let input_pairs = prepare_input::(backend, storage, changes, block) .expect("storage is not allowed to fail within runtime")?; let transaction = input_pairs.into_iter() .map(Into::into) .collect::>(); - let root = ::triehash::trie_root::(transaction.iter().map(|(k, v)| (&*k, &*v))); + let root = trie_root::(transaction.iter().map(|(k, v)| (&*k, &*v))); Some((root, transaction)) } diff --git a/substrate/core/state-machine/src/changes_trie/storage.rs b/substrate/core/state-machine/src/changes_trie/storage.rs index 0993347b98..38133a5287 100644 --- a/substrate/core/state-machine/src/changes_trie/storage.rs +++ b/substrate/core/state-machine/src/changes_trie/storage.rs @@ -17,9 +17,10 @@ //! Changes trie storage utilities. use std::collections::HashMap; -use hashdb::{Hasher, HashDB, DBValue}; +use hash_db::Hasher; +use trie::DBValue; use heapsize::HeapSizeOf; -use memorydb::MemoryDB; +use trie::MemoryDB; use parking_lot::RwLock; use changes_trie::Storage; use trie_backend_essence::TrieBackendStorage; @@ -27,8 +28,6 @@ use trie_backend_essence::TrieBackendStorage; #[cfg(test)] use backend::insert_into_memory_db; #[cfg(test)] -use patricia_trie::NodeCodec; -#[cfg(test)] use changes_trie::input::InputPair; /// In-memory implementation of changes trie storage. @@ -64,11 +63,11 @@ impl InMemoryStorage where H::Out: HeapSizeOf { } #[cfg(test)] - pub fn with_inputs>(inputs: Vec<(u64, Vec)>) -> Self { + pub fn with_inputs(inputs: Vec<(u64, Vec)>) -> Self { let mut mdb = MemoryDB::default(); let mut roots = HashMap::new(); for (block, pairs) in inputs { - let root = insert_into_memory_db::(&mut mdb, pairs.into_iter().map(Into::into)); + let root = insert_into_memory_db::(&mut mdb, pairs.into_iter().map(Into::into)); if let Some(root) = root { roots.insert(block, root); } @@ -84,7 +83,7 @@ impl InMemoryStorage where H::Out: HeapSizeOf { #[cfg(test)] pub fn clear_storage(&self) { - self.data.write().mdb = MemoryDB::new(); + self.data.write().mdb = MemoryDB::default(); // use new to be more correct } /// Insert changes trie for given block. @@ -101,7 +100,7 @@ impl Storage for InMemoryStorage where H::Out: HeapSizeOf { } fn get(&self, key: &H::Out) -> Result, String> { - Ok(HashDB::::get(&self.data.read().mdb, key)) + MemoryDB::::get(&self.data.read().mdb, key) } } diff --git a/substrate/core/state-machine/src/ext.rs b/substrate/core/state-machine/src/ext.rs index e99481ad07..5c992d9992 100644 --- a/substrate/core/state-machine/src/ext.rs +++ b/substrate/core/state-machine/src/ext.rs @@ -20,10 +20,8 @@ use std::{error, fmt, cmp::Ord}; use backend::Backend; use changes_trie::{Storage as ChangesTrieStorage, compute_changes_trie_root}; use {Externalities, OverlayedChanges}; -use hashdb::Hasher; -use memorydb::MemoryDB; -use rlp::Encodable; -use patricia_trie::{NodeCodec, TrieDBMut, TrieMut}; +use hash_db::Hasher; +use substrate_trie::{MemoryDB, TrieDBMut, TrieMut}; use heapsize::HeapSizeOf; const EXT_NOT_ALLOWED_TO_FAIL: &'static str = "Externalities not allowed to fail within runtime"; @@ -58,11 +56,11 @@ impl error::Error for Error { } /// Wraps a read-only backend, call executor, and current overlayed changes. -pub struct Ext<'a, H, C, B, T> +pub struct Ext<'a, H, B, T> where H: Hasher, - C: NodeCodec, - B: 'a + Backend, + + B: 'a + Backend, T: 'a + ChangesTrieStorage, { /// The overlayed changes to write to. @@ -83,13 +81,12 @@ where changes_trie_transaction: Option<(u64, MemoryDB, H::Out)>, } -impl<'a, H, C, B, T> Ext<'a, H, C, B, T> +impl<'a, H, B, T> Ext<'a, H, B, T> where H: Hasher, - C: NodeCodec, - B: 'a + Backend, + B: 'a + Backend, T: 'a + ChangesTrieStorage, - H::Out: Ord + Encodable + HeapSizeOf, + H::Out: Ord + HeapSizeOf, { /// Create a new `Ext` from overlayed changes and read-only backend pub fn new(overlay: &'a mut OverlayedChanges, backend: &'a B, changes_trie_storage: Option<&'a T>) -> Self { @@ -128,11 +125,11 @@ where } #[cfg(test)] -impl<'a, H, C, B, T> Ext<'a, H, C, B, T> +impl<'a, H, B, T> Ext<'a, H, B, T> where H: Hasher, - C: NodeCodec, - B: 'a + Backend, + + B: 'a + Backend, T: 'a + ChangesTrieStorage, { pub fn storage_pairs(&self) -> Vec<(Vec, Vec)> { @@ -149,13 +146,12 @@ where } } -impl<'a, B: 'a, T: 'a, H, C> Externalities for Ext<'a, H, C, B, T> +impl<'a, B: 'a, T: 'a, H> Externalities for Ext<'a, H, B, T> where H: Hasher, - C: NodeCodec, - B: 'a + Backend, + B: 'a + Backend, T: 'a + ChangesTrieStorage, - H::Out: Ord + Encodable + HeapSizeOf, + H::Out: Ord + HeapSizeOf, { fn storage(&self, key: &[u8]) -> Option> { self.overlay.storage(key).map(|x| x.map(|x| x.to_vec())).unwrap_or_else(|| @@ -201,7 +197,7 @@ where } fn storage_changes_root(&mut self, block: u64) -> Option { - let root_and_tx = compute_changes_trie_root::<_, T, H, C>( + let root_and_tx = compute_changes_trie_root::<_, T, H>( self.backend, self.changes_trie_storage.clone(), self.overlay, @@ -209,9 +205,9 @@ where ); let root_and_tx = root_and_tx.map(|(root, changes)| { let mut calculated_root = Default::default(); - let mut mdb = MemoryDB::new(); + let mut mdb = MemoryDB::default(); // TODO: use new for correctness { - let mut trie = TrieDBMut::::new(&mut mdb, &mut calculated_root); + let mut trie = TrieDBMut::::new(&mut mdb, &mut calculated_root); for (key, value) in changes { trie.insert(&key, &value).expect(EXT_NOT_ALLOWED_TO_FAIL); } @@ -228,7 +224,7 @@ where #[cfg(test)] mod tests { use codec::Encode; - use primitives::{Blake2Hasher, RlpCodec}; + use primitives::{Blake2Hasher}; use primitives::storage::well_known_keys::EXTRINSIC_INDEX; use backend::InMemory; use changes_trie::{Configuration as ChangesTrieConfiguration, @@ -236,9 +232,9 @@ mod tests { use overlayed_changes::OverlayedValue; use super::*; - type TestBackend = InMemory; + type TestBackend = InMemory; type TestChangesTrieStorage = InMemoryChangesTrieStorage; - type TestExt<'a> = Ext<'a, Blake2Hasher, RlpCodec, TestBackend, TestChangesTrieStorage>; + type TestExt<'a> = Ext<'a, Blake2Hasher, TestBackend, TestChangesTrieStorage>; fn prepare_overlay_with_changes() -> OverlayedChanges { OverlayedChanges { @@ -285,7 +281,7 @@ mod tests { let backend = TestBackend::default(); let mut ext = TestExt::new(&mut overlay, &backend, Some(&storage)); assert_eq!(ext.storage_changes_root(100), - Some(hex!("62d1aacd26ef215f0d846f96d468cfcf445a20ed792cb43b3ed2e285fac7aced").into())); + Some(hex!("5b829920b9c8d554a19ee2a1ba593c4f2ee6fc32822d083e04236d693e8358d5").into())); } #[test] @@ -296,6 +292,6 @@ mod tests { let backend = TestBackend::default(); let mut ext = TestExt::new(&mut overlay, &backend, Some(&storage)); assert_eq!(ext.storage_changes_root(100), - Some(hex!("16776812bae4843437f7ec9f054f78ea8305e966da41b718cd6b847e95480d5c").into())); + Some(hex!("bcf494e41e29a15c9ae5caa053fe3cb8b446ee3e02a254efbdec7a19235b76e4").into())); } } diff --git a/substrate/core/state-machine/src/lib.rs b/substrate/core/state-machine/src/lib.rs index d170f3c330..8badde005b 100644 --- a/substrate/core/state-machine/src/lib.rs +++ b/substrate/core/state-machine/src/lib.rs @@ -26,10 +26,9 @@ extern crate hex_literal; #[macro_use] extern crate log; -extern crate hashdb; -extern crate memorydb; -extern crate triehash; -extern crate patricia_trie; +extern crate hash_db; +extern crate memory_db; +extern crate substrate_trie; extern crate byteorder; extern crate parking_lot; @@ -37,11 +36,10 @@ extern crate rlp; extern crate heapsize; extern crate substrate_primitives as primitives; extern crate parity_codec as codec; +extern crate substrate_trie as trie; use std::fmt; -use hashdb::Hasher; -use patricia_trie::NodeCodec; -use rlp::Encodable; +use hash_db::Hasher; use heapsize::HeapSizeOf; use codec::Decode; use primitives::storage::well_known_keys; @@ -55,7 +53,7 @@ mod proving_backend; mod trie_backend; mod trie_backend_essence; -pub use patricia_trie::{TrieMut, TrieDBMut}; +pub use trie::{TrieMut, TrieDBMut, DBValue, MemoryDB}; pub use testing::TestExternalities; pub use ext::Ext; pub use backend::Backend; @@ -64,7 +62,7 @@ pub use changes_trie::{Storage as ChangesTrieStorage, key_changes, key_changes_proof, key_changes_proof_check}; pub use overlayed_changes::OverlayedChanges; pub use trie_backend_essence::Storage; -pub use trie_backend::{TrieBackend, DBValue}; +pub use trie_backend::TrieBackend; /// State Machine Error bound. /// @@ -124,10 +122,10 @@ pub trait Externalities { fn chain_id(&self) -> u64; /// Get the trie root of the current storage map. - fn storage_root(&mut self) -> H::Out where H::Out: Ord + Encodable; + fn storage_root(&mut self) -> H::Out where H::Out: Ord; /// Get the change trie root of the current storage overlay at given block. - fn storage_changes_root(&mut self, block: u64) -> Option where H::Out: Ord + Encodable; + fn storage_changes_root(&mut self, block: u64) -> Option where H::Out: Ord; } /// Code execution engine. @@ -197,7 +195,7 @@ pub fn always_wasm() -> ExecutionManager, E>, Result( +pub fn execute( backend: &B, changes_trie_storage: Option<&T>, overlay: &mut OverlayedChanges, @@ -205,14 +203,13 @@ pub fn execute( method: &str, call_data: &[u8], strategy: ExecutionStrategy, -) -> Result<(Vec, B::Transaction, Option>), Box> +) -> Result<(Vec, B::Transaction, Option>), Box> where H: Hasher, - C: NodeCodec, Exec: CodeExecutor, - B: Backend, + B: Backend, T: ChangesTrieStorage, - H::Out: Ord + Encodable + HeapSizeOf, + H::Out: Ord + HeapSizeOf, { execute_using_consensus_failure_handler( backend, @@ -240,7 +237,7 @@ where /// /// Note: changes to code will be in place if this call is made again. For running partial /// blocks (e.g. a transaction at a time), ensure a different method is used. -pub fn execute_using_consensus_failure_handler( +pub fn execute_using_consensus_failure_handler( backend: &B, changes_trie_storage: Option<&T>, overlay: &mut OverlayedChanges, @@ -248,14 +245,13 @@ pub fn execute_using_consensus_failure_handler( method: &str, call_data: &[u8], manager: ExecutionManager, -) -> Result<(Vec, B::Transaction, Option>), Box> +) -> Result<(Vec, B::Transaction, Option>), Box> where H: Hasher, - C: NodeCodec, Exec: CodeExecutor, - B: Backend, + B: Backend, T: ChangesTrieStorage, - H::Out: Ord + Encodable + HeapSizeOf, + H::Out: Ord + HeapSizeOf, Handler: FnOnce(Result, Exec::Error>, Result, Exec::Error>) -> Result, Exec::Error> { let strategy: ExecutionStrategy = (&manager).into(); @@ -352,7 +348,7 @@ where /// /// Note: changes to code will be in place if this call is made again. For running partial /// blocks (e.g. a transaction at a time), ensure a different method is used. -pub fn prove_execution( +pub fn prove_execution( backend: B, overlay: &mut OverlayedChanges, exec: &Exec, @@ -360,16 +356,15 @@ pub fn prove_execution( call_data: &[u8], ) -> Result<(Vec, Vec>), Box> where - B: Backend, + B: Backend, H: Hasher, Exec: CodeExecutor, - C: NodeCodec, - H::Out: Ord + Encodable + HeapSizeOf, + H::Out: Ord + HeapSizeOf, { let trie_backend = backend.try_into_trie_backend() .ok_or_else(|| Box::new(ExecutionError::UnableToGenerateProof) as Box)?; let proving_backend = proving_backend::ProvingBackend::new(trie_backend); - let (result, _, _) = execute::, _>( + let (result, _, _) = execute::, _>( &proving_backend, None, overlay, @@ -383,7 +378,7 @@ where } /// Check execution proof, generated by `prove_execution` call. -pub fn execution_proof_check( +pub fn execution_proof_check( root: H::Out, proof: Vec>, overlay: &mut OverlayedChanges, @@ -393,45 +388,44 @@ pub fn execution_proof_check( ) -> Result, Box> where H: Hasher, - C: NodeCodec, Exec: CodeExecutor, - H::Out: Ord + Encodable + HeapSizeOf, + H::Out: Ord + HeapSizeOf, { - let backend = proving_backend::create_proof_check_backend::(root.into(), proof)?; - execute::, _>(&backend, None, overlay, exec, method, call_data, ExecutionStrategy::NativeWhenPossible) + let backend = proving_backend::create_proof_check_backend::(root.into(), proof)?; + execute::, _>(&backend, None, overlay, exec, method, call_data, ExecutionStrategy::NativeWhenPossible) .map(|(result, _, _)| result) } /// Generate storage read proof. -pub fn prove_read( +pub fn prove_read( backend: B, key: &[u8] ) -> Result<(Option>, Vec>), Box> where - B: Backend, + B: Backend, H: Hasher, - C: NodeCodec, - H::Out: Ord + Encodable + HeapSizeOf + + H::Out: Ord + HeapSizeOf { let trie_backend = backend.try_into_trie_backend() .ok_or_else(|| Box::new(ExecutionError::UnableToGenerateProof) as Box)?; - let proving_backend = proving_backend::ProvingBackend::<_, H, C>::new(trie_backend); + let proving_backend = proving_backend::ProvingBackend::<_, H>::new(trie_backend); let result = proving_backend.storage(key).map_err(|e| Box::new(e) as Box)?; Ok((result, proving_backend.extract_proof())) } /// Check storage read proof, generated by `prove_read` call. -pub fn read_proof_check( +pub fn read_proof_check( root: H::Out, proof: Vec>, key: &[u8], ) -> Result>, Box> where H: Hasher, - C: NodeCodec, - H::Out: Ord + Encodable + HeapSizeOf + + H::Out: Ord + HeapSizeOf { - let backend = proving_backend::create_proof_check_backend::(root, proof)?; + let backend = proving_backend::create_proof_check_backend::(root, proof)?; backend.storage(key).map_err(|e| Box::new(e) as Box) } @@ -453,12 +447,12 @@ pub(crate) fn set_changes_trie_config(overlay: &mut OverlayedChanges, config: Op } /// Reads storage value from overlay or from the backend. -fn try_read_overlay_value(overlay: &OverlayedChanges, backend: &B, key: &[u8]) +fn try_read_overlay_value(overlay: &OverlayedChanges, backend: &B, key: &[u8]) -> Result>, Box> where H: Hasher, - C: NodeCodec, - B: Backend, + + B: Backend, { match overlay.storage(key).map(|x| x.map(|x| x.to_vec())) { Some(value) => Ok(value), @@ -474,7 +468,7 @@ mod tests { use super::backend::InMemory; use super::ext::Ext; use super::changes_trie::InMemoryStorage as InMemoryChangesTrieStorage; - use primitives::{Blake2Hasher, RlpCodec}; + use primitives::{Blake2Hasher}; struct DummyCodeExecutor { native_available: bool, @@ -566,7 +560,7 @@ mod tests { &mut Default::default(), &executor, "test", &[]).unwrap(); // check proof locally - let local_result = execution_proof_check::(remote_root, remote_proof, + let local_result = execution_proof_check::(remote_root, remote_proof, &mut Default::default(), &executor, "test", &[]).unwrap(); // check that both results are correct @@ -582,7 +576,7 @@ mod tests { b"abc".to_vec() => b"2".to_vec(), b"bbb".to_vec() => b"3".to_vec() ]; - let backend = InMemory::::from(initial).try_into_trie_backend().unwrap(); + let backend = InMemory::::from(initial).try_into_trie_backend().unwrap(); let mut overlay = OverlayedChanges { committed: map![ b"aba".to_vec() => Some(b"1312".to_vec()).into(), @@ -623,8 +617,8 @@ mod tests { let remote_root = remote_backend.storage_root(::std::iter::empty()).0; let remote_proof = prove_read(remote_backend, b"value2").unwrap().1; // check proof locally - let local_result1 = read_proof_check::(remote_root, remote_proof.clone(), b"value2").unwrap(); - let local_result2 = read_proof_check::(remote_root, remote_proof.clone(), &[0xff]).is_ok(); + let local_result1 = read_proof_check::(remote_root, remote_proof.clone(), b"value2").unwrap(); + let local_result2 = read_proof_check::(remote_root, remote_proof.clone(), &[0xff]).is_ok(); // check that results are correct assert_eq!(local_result1, Some(vec![24])); assert_eq!(local_result2, false); diff --git a/substrate/core/state-machine/src/overlayed_changes.rs b/substrate/core/state-machine/src/overlayed_changes.rs index b14acb89d0..7b12fba6eb 100644 --- a/substrate/core/state-machine/src/overlayed_changes.rs +++ b/substrate/core/state-machine/src/overlayed_changes.rs @@ -201,7 +201,7 @@ impl From>> for OverlayedValue { #[cfg(test)] mod tests { - use primitives::{Blake2Hasher, RlpCodec, H256}; + use primitives::{Blake2Hasher, H256}; use primitives::storage::well_known_keys::EXTRINSIC_INDEX; use backend::InMemory; use changes_trie::InMemoryStorage as InMemoryChangesTrieStorage; @@ -251,7 +251,7 @@ mod tests { (b"dogglesworth".to_vec(), b"catXXX".to_vec()), (b"doug".to_vec(), b"notadog".to_vec()), ].into_iter().collect(); - let backend = InMemory::::from(initial); + let backend = InMemory::::from(initial); let mut overlay = OverlayedChanges { committed: vec![ (b"dog".to_vec(), Some(b"puppy".to_vec()).into()), @@ -267,7 +267,7 @@ mod tests { let changes_trie_storage = InMemoryChangesTrieStorage::new(); let mut ext = Ext::new(&mut overlay, &backend, Some(&changes_trie_storage)); - const ROOT: [u8; 32] = hex!("6ca394ff9b13d6690a51dea30b1b5c43108e52944d30b9095227c49bae03ff8b"); + const ROOT: [u8; 32] = hex!("0b41e488cccbd67d1f1089592c2c235f5c5399b053f7fe9152dd4b5f279914cd"); assert_eq!(ext.storage_root(), H256(ROOT)); } diff --git a/substrate/core/state-machine/src/proving_backend.rs b/substrate/core/state-machine/src/proving_backend.rs index 20e9342644..ffa66446a0 100644 --- a/substrate/core/state-machine/src/proving_backend.rs +++ b/substrate/core/state-machine/src/proving_backend.rs @@ -17,28 +17,27 @@ //! Proving state machine backend. use std::cell::RefCell; -use hashdb::{Hasher, HashDB}; +use hash_db::Hasher; use heapsize::HeapSizeOf; -use memorydb::MemoryDB; -use patricia_trie::{TrieDB, Trie, Recorder, NodeCodec}; -use rlp::Encodable; +use hash_db::HashDB; +use trie::{TrieDB, Trie, Recorder, MemoryDB}; use trie_backend::TrieBackend; use trie_backend_essence::{Ephemeral, TrieBackendEssence, TrieBackendStorage}; use {Error, ExecutionError, Backend}; /// Patricia trie-based backend essence which also tracks all touched storage trie values. /// These can be sent to remote node and used as a proof of execution. -pub struct ProvingBackendEssence<'a, S: 'a + TrieBackendStorage, H: 'a + Hasher, C: 'a + NodeCodec> { - pub(crate) backend: &'a TrieBackendEssence, +pub struct ProvingBackendEssence<'a, S: 'a + TrieBackendStorage, H: 'a + Hasher> { + pub(crate) backend: &'a TrieBackendEssence, pub(crate) proof_recorder: &'a mut Recorder, } -impl<'a, S, H, C> ProvingBackendEssence<'a, S, H, C> +impl<'a, S, H> ProvingBackendEssence<'a, S, H> where S: TrieBackendStorage, H: Hasher, H::Out: HeapSizeOf, - C: NodeCodec, + { pub fn storage(&mut self, key: &[u8]) -> Result>, String> { let mut read_overlay = MemoryDB::default(); @@ -49,7 +48,7 @@ impl<'a, S, H, C> ProvingBackendEssence<'a, S, H, C> let map_e = |e| format!("Trie lookup error: {}", e); - TrieDB::::new(&eph, self.backend.root()).map_err(map_e)? + TrieDB::::new(&eph, self.backend.root()).map_err(map_e)? .get_with(key, &mut *self.proof_recorder) .map(|x| x.map(|val| val.to_vec())) .map_err(map_e) @@ -58,14 +57,14 @@ impl<'a, S, H, C> ProvingBackendEssence<'a, S, H, C> /// Patricia trie-based backend which also tracks all touched storage trie values. /// These can be sent to remote node and used as a proof of execution. -pub struct ProvingBackend, H: Hasher, C: NodeCodec> { - backend: TrieBackend, +pub struct ProvingBackend, H: Hasher> { + backend: TrieBackend, proof_recorder: RefCell>, } -impl, H: Hasher, C: NodeCodec> ProvingBackend { +impl, H: Hasher> ProvingBackend { /// Create new proving backend. - pub fn new(backend: TrieBackend) -> Self { + pub fn new(backend: TrieBackend) -> Self { ProvingBackend { backend, proof_recorder: RefCell::new(Recorder::new()), @@ -82,12 +81,11 @@ impl, H: Hasher, C: NodeCodec> ProvingBackend Backend for ProvingBackend +impl Backend for ProvingBackend where S: TrieBackendStorage, H: Hasher, - C: NodeCodec, - H::Out: Ord + Encodable + HeapSizeOf, + H::Out: Ord + HeapSizeOf, { type Error = String; type Transaction = MemoryDB; @@ -115,22 +113,21 @@ impl Backend for ProvingBackend self.backend.storage_root(delta) } - fn try_into_trie_backend(self) -> Option> { + fn try_into_trie_backend(self) -> Option> { None } } /// Create proof check backend. -pub fn create_proof_check_backend( +pub fn create_proof_check_backend( root: H::Out, proof: Vec> -) -> Result, H, C>, Box> +) -> Result, H>, Box> where H: Hasher, - C: NodeCodec, H::Out: HeapSizeOf, { - let mut db = MemoryDB::new(); + let mut db = MemoryDB::default(); // TODO: use new for correctness for item in proof { db.insert(&item); } @@ -147,9 +144,9 @@ mod tests { use backend::{InMemory}; use trie_backend::tests::test_trie; use super::*; - use primitives::{Blake2Hasher, RlpCodec}; + use primitives::{Blake2Hasher}; - fn test_proving() -> ProvingBackend, Blake2Hasher, RlpCodec> { + fn test_proving() -> ProvingBackend, Blake2Hasher> { ProvingBackend::new(test_trie()) } @@ -167,7 +164,7 @@ mod tests { #[test] fn proof_is_invalid_when_does_not_contains_root() { - assert!(create_proof_check_backend::(1.into(), vec![]).is_err()); + assert!(create_proof_check_backend::(1.into(), vec![]).is_err()); } #[test] @@ -186,7 +183,7 @@ mod tests { #[test] fn proof_recorded_and_checked() { let contents = (0..64).map(|i| (vec![i], Some(vec![i]))).collect::>(); - let in_memory = InMemory::::default(); + let in_memory = InMemory::::default(); let in_memory = in_memory.update(contents); let in_memory_root = in_memory.storage_root(::std::iter::empty()).0; (0..64).for_each(|i| assert_eq!(in_memory.storage(&[i]).unwrap().unwrap(), vec![i])); @@ -201,7 +198,7 @@ mod tests { let proof = proving.extract_proof(); - let proof_check = create_proof_check_backend::(in_memory_root.into(), proof).unwrap(); + let proof_check = create_proof_check_backend::(in_memory_root.into(), proof).unwrap(); assert_eq!(proof_check.storage(&[42]).unwrap().unwrap(), vec![42]); } } diff --git a/substrate/core/state-machine/src/testing.rs b/substrate/core/state-machine/src/testing.rs index 30d73f377f..082d68501c 100644 --- a/substrate/core/state-machine/src/testing.rs +++ b/substrate/core/state-machine/src/testing.rs @@ -18,25 +18,22 @@ use std::collections::HashMap; use std::iter::FromIterator; -use hashdb::Hasher; +use hash_db::Hasher; use heapsize::HeapSizeOf; -use patricia_trie::NodeCodec; -use rlp::Encodable; -use triehash::trie_root; +use trie::trie_root; use backend::InMemory; use changes_trie::{compute_changes_trie_root, InMemoryStorage as ChangesTrieInMemoryStorage}; use primitives::storage::well_known_keys::CHANGES_TRIE_CONFIG; use super::{Externalities, OverlayedChanges}; /// Simple HashMap-based Externalities impl. -pub struct TestExternalities> where H::Out: HeapSizeOf { +pub struct TestExternalities where H::Out: HeapSizeOf { inner: HashMap, Vec>, changes_trie_storage: ChangesTrieInMemoryStorage, changes: OverlayedChanges, - _codec: ::std::marker::PhantomData, } -impl> TestExternalities where H::Out: HeapSizeOf { +impl TestExternalities where H::Out: HeapSizeOf { /// Create a new instance of `TestExternalities` pub fn new(inner: HashMap, Vec>) -> Self { let mut overlay = OverlayedChanges::default(); @@ -49,7 +46,6 @@ impl> TestExternalities where H::Out: HeapSizeO inner, changes_trie_storage: ChangesTrieInMemoryStorage::new(), changes: overlay, - _codec: Default::default(), } } @@ -59,19 +55,19 @@ impl> TestExternalities where H::Out: HeapSizeO } } -impl> ::std::fmt::Debug for TestExternalities where H::Out: HeapSizeOf { +impl ::std::fmt::Debug for TestExternalities where H::Out: HeapSizeOf { fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { write!(f, "{:?}", self.inner) } } -impl> PartialEq for TestExternalities where H::Out: HeapSizeOf { - fn eq(&self, other: &TestExternalities) -> bool { +impl PartialEq for TestExternalities where H::Out: HeapSizeOf { + fn eq(&self, other: &TestExternalities) -> bool { self.inner.eq(&other.inner) } } -impl> FromIterator<(Vec, Vec)> for TestExternalities where H::Out: HeapSizeOf { +impl FromIterator<(Vec, Vec)> for TestExternalities where H::Out: HeapSizeOf { fn from_iter, Vec)>>(iter: I) -> Self { let mut t = Self::new(Default::default()); for i in iter { @@ -81,28 +77,27 @@ impl> FromIterator<(Vec, Vec)> for TestExtern } } -impl> Default for TestExternalities where H::Out: HeapSizeOf { +impl Default for TestExternalities where H::Out: HeapSizeOf { fn default() -> Self { Self::new(Default::default()) } } -impl> From> for HashMap, Vec> where H::Out: HeapSizeOf { - fn from(tex: TestExternalities) -> Self { +impl From> for HashMap, Vec> where H::Out: HeapSizeOf { + fn from(tex: TestExternalities) -> Self { tex.inner.into() } } -impl> From< HashMap, Vec> > for TestExternalities where H::Out: HeapSizeOf { +impl From< HashMap, Vec> > for TestExternalities where H::Out: HeapSizeOf { fn from(hashmap: HashMap, Vec>) -> Self { TestExternalities { inner: hashmap, changes_trie_storage: ChangesTrieInMemoryStorage::new(), changes: Default::default(), - _codec: ::std::marker::PhantomData::::default(), } } } -impl> Externalities for TestExternalities where H::Out: Ord + Encodable + HeapSizeOf { +impl Externalities for TestExternalities where H::Out: Ord + HeapSizeOf { fn storage(&self, key: &[u8]) -> Option> { self.inner.get(key).map(|x| x.to_vec()) } @@ -127,7 +122,7 @@ impl> Externalities for TestExternalities wh } fn storage_changes_root(&mut self, block: u64) -> Option { - compute_changes_trie_root::<_, _, H, C>( + compute_changes_trie_root::<_, _, H>( &InMemory::default(), Some(&self.changes_trie_storage), &self.changes, @@ -139,15 +134,15 @@ impl> Externalities for TestExternalities wh #[cfg(test)] mod tests { use super::*; - use primitives::{Blake2Hasher, RlpCodec, H256}; + use primitives::{Blake2Hasher, H256}; #[test] fn commit_should_work() { - let mut ext = TestExternalities::::default(); + let mut ext = TestExternalities::::default(); ext.set_storage(b"doe".to_vec(), b"reindeer".to_vec()); ext.set_storage(b"dog".to_vec(), b"puppy".to_vec()); ext.set_storage(b"dogglesworth".to_vec(), b"cat".to_vec()); - const ROOT: [u8; 32] = hex!("6ca394ff9b13d6690a51dea30b1b5c43108e52944d30b9095227c49bae03ff8b"); + const ROOT: [u8; 32] = hex!("0b41e488cccbd67d1f1089592c2c235f5c5399b053f7fe9152dd4b5f279914cd"); assert_eq!(ext.storage_root(), H256(ROOT)); } } diff --git a/substrate/core/state-machine/src/trie_backend.rs b/substrate/core/state-machine/src/trie_backend.rs index 7d5d543160..c814569b38 100644 --- a/substrate/core/state-machine/src/trie_backend.rs +++ b/substrate/core/state-machine/src/trie_backend.rs @@ -16,22 +16,18 @@ //! Trie-based state machine backend. -use hashdb::Hasher; +use hash_db::Hasher; use heapsize::HeapSizeOf; -use memorydb::MemoryDB; -use rlp::Encodable; -use patricia_trie::{TrieDB, TrieDBMut, TrieError, Trie, TrieMut, NodeCodec}; +use trie::{TrieDB, TrieDBMut, TrieError, Trie, TrieMut, MemoryDB}; use trie_backend_essence::{TrieBackendEssence, TrieBackendStorage, Ephemeral}; use {Backend}; -pub use hashdb::DBValue; - /// Patricia trie-based backend. Transaction type is an overlay of changes to commit. -pub struct TrieBackend, H: Hasher, C: NodeCodec> { - essence: TrieBackendEssence, +pub struct TrieBackend, H: Hasher> { + essence: TrieBackendEssence, } -impl, H: Hasher, C: NodeCodec> TrieBackend where H::Out: HeapSizeOf { +impl, H: Hasher> TrieBackend where H::Out: HeapSizeOf { /// Create new trie-based backend. pub fn new(storage: S, root: H::Out) -> Self { TrieBackend { @@ -40,7 +36,7 @@ impl, H: Hasher, C: NodeCodec> TrieBackend } /// Get backend essence reference. - pub fn essence(&self) -> &TrieBackendEssence { + pub fn essence(&self) -> &TrieBackendEssence { &self.essence } @@ -57,9 +53,8 @@ impl, H: Hasher, C: NodeCodec> TrieBackend impl super::Error for String {} -impl, H: Hasher, C: NodeCodec> Backend for TrieBackend - where - H::Out: Ord + Encodable + HeapSizeOf, +impl, H: Hasher> Backend for TrieBackend where + H::Out: Ord + HeapSizeOf, { type Error = String; type Transaction = MemoryDB; @@ -74,11 +69,11 @@ impl, H: Hasher, C: NodeCodec> Backend for Tri } fn pairs(&self) -> Vec<(Vec, Vec)> { - let mut read_overlay = MemoryDB::new(); + let mut read_overlay = MemoryDB::default(); // TODO: use new for correctness let eph = Ephemeral::new(self.essence.backend_storage(), &mut read_overlay); - let collect_all = || -> Result<_, Box>> { - let trie = TrieDB::::new(&eph, self.essence.root())?; + let collect_all = || -> Result<_, Box>> { + let trie = TrieDB::::new(&eph, self.essence.root())?; let mut v = Vec::new(); for x in trie.iter()? { let (key, value) = x?; @@ -108,7 +103,7 @@ impl, H: Hasher, C: NodeCodec> Backend for Tri &mut write_overlay, ); - let mut trie = TrieDBMut::::from_existing(&mut eph, &mut root).expect("prior state root to exist"); // TODO: handle gracefully + let mut trie = TrieDBMut::::from_existing(&mut eph, &mut root).expect("prior state root to exist"); // TODO: handle gracefully for (key, change) in delta { let result = match change { Some(val) => trie.insert(&key, &val), @@ -124,7 +119,7 @@ impl, H: Hasher, C: NodeCodec> Backend for Tri (root, write_overlay) } - fn try_into_trie_backend(self) -> Option> { + fn try_into_trie_backend(self) -> Option> { Some(self) } } @@ -132,14 +127,14 @@ impl, H: Hasher, C: NodeCodec> Backend for Tri #[cfg(test)] pub mod tests { use std::collections::HashSet; - use primitives::{Blake2Hasher, RlpCodec, H256}; + use primitives::{Blake2Hasher, H256}; use super::*; fn test_db() -> (MemoryDB, H256) { let mut root = H256::default(); - let mut mdb = MemoryDB::::new(); + let mut mdb = MemoryDB::::default(); // TODO: use new() to be more correct { - let mut trie = TrieDBMut::<_, RlpCodec>::new(&mut mdb, &mut root); + let mut trie = TrieDBMut::new(&mut mdb, &mut root); trie.insert(b"key", b"value").expect("insert failed"); trie.insert(b"value1", &[42]).expect("insert failed"); trie.insert(b"value2", &[24]).expect("insert failed"); @@ -151,7 +146,7 @@ pub mod tests { (mdb, root) } - pub(crate) fn test_trie() -> TrieBackend, Blake2Hasher, RlpCodec> { + pub(crate) fn test_trie() -> TrieBackend, Blake2Hasher> { let (mdb, root) = test_db(); TrieBackend::new(mdb, root) } @@ -173,8 +168,8 @@ pub mod tests { #[test] fn pairs_are_empty_on_empty_storage() { - assert!(TrieBackend::, Blake2Hasher, RlpCodec>::new( - MemoryDB::new(), + assert!(TrieBackend::, Blake2Hasher>::new( + MemoryDB::default(), // TODO: use new() to be more correct Default::default(), ).pairs().is_empty()); } diff --git a/substrate/core/state-machine/src/trie_backend_essence.rs b/substrate/core/state-machine/src/trie_backend_essence.rs index 2d63134c78..8abb34652c 100644 --- a/substrate/core/state-machine/src/trie_backend_essence.rs +++ b/substrate/core/state-machine/src/trie_backend_essence.rs @@ -18,13 +18,11 @@ //! from storage. use std::collections::HashMap; -use std::marker::PhantomData; use std::ops::Deref; use std::sync::Arc; -use hashdb::{Hasher, DBValue, AsHashDB, HashDB}; +use hash_db::{self, Hasher}; use heapsize::HeapSizeOf; -use memorydb::MemoryDB; -use patricia_trie::{TrieDB, TrieError, Trie, NodeCodec}; +use trie::{TrieDB, Trie, MemoryDB, DBValue, TrieError}; use changes_trie::Storage as ChangesTrieStorage; /// Patricia trie-based storage trait. @@ -34,19 +32,17 @@ pub trait Storage: Send + Sync { } /// Patricia trie-based pairs storage essence. -pub struct TrieBackendEssence, H: Hasher, C: NodeCodec> { +pub struct TrieBackendEssence, H: Hasher> { storage: S, root: H::Out, - _codec: PhantomData, } -impl, H: Hasher, C: NodeCodec> TrieBackendEssence where H::Out: HeapSizeOf { +impl, H: Hasher> TrieBackendEssence where H::Out: HeapSizeOf { /// Create new trie-based backend. pub fn new(storage: S, root: H::Out) -> Self { TrieBackendEssence { storage, root, - _codec: Default::default(), } } @@ -70,7 +66,7 @@ impl, H: Hasher, C: NodeCodec> TrieBackendEssence::new(&eph, &self.root).map_err(map_e)? + TrieDB::::new(&eph, &self.root).map_err(map_e)? .get(key).map(|x| x.map(|val| val.to_vec())).map_err(map_e) } @@ -82,8 +78,8 @@ impl, H: Hasher, C: NodeCodec> TrieBackendEssence Result<(), Box>> { - let trie = TrieDB::::new(&eph, &self.root)?; + let mut iter = move || -> Result<(), Box>> { + let trie = TrieDB::::new(&eph, &self.root)?; let mut iter = trie.iter()?; iter.seek(prefix)?; @@ -112,12 +108,18 @@ pub(crate) struct Ephemeral<'a, S: 'a + TrieBackendStorage, H: 'a + Hasher> { overlay: &'a mut MemoryDB, } -impl<'a, S: TrieBackendStorage, H: Hasher> AsHashDB for Ephemeral<'a, S, H> where H::Out: HeapSizeOf { - fn as_hashdb(&self) -> &HashDB { self } - fn as_hashdb_mut(&mut self) -> &mut HashDB { self } +impl<'a, + S: 'a + TrieBackendStorage, + H: 'a + Hasher +> hash_db::AsHashDB + for Ephemeral<'a, S, H> + where H::Out: HeapSizeOf +{ + fn as_hash_db<'b>(&'b self) -> &'b (hash_db::HashDB + 'b) { self } + fn as_hash_db_mut<'b>(&'b mut self) -> &'b mut (hash_db::HashDB + 'b) { self } } -impl<'a, S: 'a + TrieBackendStorage, H: Hasher> Ephemeral<'a, S, H> { +impl<'a, S: TrieBackendStorage, H: Hasher> Ephemeral<'a, S, H> { pub fn new(storage: &'a S, overlay: &'a mut MemoryDB) -> Self { Ephemeral { storage, @@ -126,7 +128,13 @@ impl<'a, S: 'a + TrieBackendStorage, H: Hasher> Ephemeral<'a, S, H> { } } -impl<'a, S: TrieBackendStorage, H: Hasher> HashDB for Ephemeral<'a, S, H> where H::Out: HeapSizeOf { +impl<'a, + S: 'a + TrieBackendStorage, + H: Hasher +> hash_db::HashDB + for Ephemeral<'a, S, H> + where H::Out: HeapSizeOf +{ fn keys(&self) -> HashMap { self.overlay.keys() // TODO: iterate backing } @@ -137,7 +145,7 @@ impl<'a, S: TrieBackendStorage, H: Hasher> HashDB for Ephemeral<'a, S, H> if i <= 0 { None } else { - Some(val) + Some(val.clone()) } } None => match self.storage.get(&key) { @@ -182,7 +190,7 @@ impl TrieBackendStorage for Arc> { // This implementation is used by test storage trie clients. impl TrieBackendStorage for MemoryDB { fn get(&self, key: &H::Out) -> Result, String> { - Ok(HashDB::::get(self, key)) + Ok(>::get(self, key)) } } diff --git a/substrate/core/test-client/Cargo.toml b/substrate/core/test-client/Cargo.toml index b38d433726..362a4813ea 100644 --- a/substrate/core/test-client/Cargo.toml +++ b/substrate/core/test-client/Cargo.toml @@ -14,5 +14,5 @@ substrate-primitives = { path = "../primitives" } srml-support = { path = "../../srml/support" } substrate-test-runtime = { path = "../test-runtime" } sr-primitives = { path = "../sr-primitives" } -hashdb = "0.2.1" +hash-db = { git = "https://github.com/paritytech/trie" } diff --git a/substrate/core/test-client/src/block_builder_ext.rs b/substrate/core/test-client/src/block_builder_ext.rs index 4cc0854771..6880ccfadb 100644 --- a/substrate/core/test-client/src/block_builder_ext.rs +++ b/substrate/core/test-client/src/block_builder_ext.rs @@ -22,7 +22,7 @@ use keyring; use runtime; use {Backend, Executor}; -use primitives::{Blake2Hasher, RlpCodec}; +use primitives::{Blake2Hasher}; /// Extension trait for test block builder. pub trait BlockBuilderExt { @@ -30,7 +30,7 @@ pub trait BlockBuilderExt { fn push_transfer(&mut self, transfer: runtime::Transfer) -> Result<(), client::error::Error>; } -impl BlockBuilderExt for client::block_builder::BlockBuilder { +impl BlockBuilderExt for client::block_builder::BlockBuilder { fn push_transfer(&mut self, transfer: runtime::Transfer) -> Result<(), client::error::Error> { self.push(sign_tx(transfer)) } diff --git a/substrate/core/test-client/src/lib.rs b/substrate/core/test-client/src/lib.rs index 808b151727..48809c68f7 100644 --- a/substrate/core/test-client/src/lib.rs +++ b/substrate/core/test-client/src/lib.rs @@ -27,7 +27,7 @@ extern crate substrate_primitives as primitives; extern crate srml_support as runtime_support; extern crate sr_primitives as runtime_primitives; #[macro_use] extern crate substrate_executor as executor; -extern crate hashdb; +extern crate hash_db; pub extern crate substrate_client as client; pub extern crate substrate_keyring as keyring; @@ -39,7 +39,7 @@ mod block_builder_ext; pub use client_ext::TestClient; pub use block_builder_ext::BlockBuilderExt; -use primitives::{Blake2Hasher, RlpCodec}; +use primitives::{Blake2Hasher}; mod local_executor { #![allow(missing_docs)] @@ -52,7 +52,7 @@ mod local_executor { pub use local_executor::LocalExecutor; /// Test client database backend. -pub type Backend = client::in_mem::Backend; +pub type Backend = client::in_mem::Backend; /// Test client executor. pub type Executor = client::LocalCallExecutor< diff --git a/substrate/core/test-runtime/src/system.rs b/substrate/core/test-runtime/src/system.rs index 30b32cb3af..652eb4786e 100644 --- a/substrate/core/test-runtime/src/system.rs +++ b/substrate/core/test-runtime/src/system.rs @@ -181,10 +181,10 @@ mod tests { use codec::{Joiner, KeyedVec}; use keyring::Keyring; use ::{Header, Digest, Extrinsic, Transfer}; - use primitives::{Blake2Hasher, RlpCodec}; + use primitives::{Blake2Hasher}; use primitives::storage::well_known_keys; - fn new_test_ext() -> TestExternalities { + fn new_test_ext() -> TestExternalities { TestExternalities::new(map![ twox_128(b"latest").to_vec() => vec![69u8; 32], twox_128(well_known_keys::AUTHORITY_COUNT).to_vec() => vec![].and(&3u32), @@ -207,8 +207,8 @@ mod tests { let h = Header { parent_hash: [69u8; 32].into(), number: 1, - state_root: hex!("0c22599e15fb5e052c84f79a2aab179ba6bb238218fd86bdd4a74ebcc87adfcd").into(), - extrinsics_root: hex!("45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0").into(), + state_root: hex!("3d6f3663e052a7d325d3ac6cdbd3cd4033132f5bfe5852d51d4e42e7021ee69b").into(), + extrinsics_root: hex!("03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314").into(), digest: Digest { logs: vec![], }, }; @@ -235,8 +235,8 @@ mod tests { header: Header { parent_hash: [69u8; 32].into(), number: 1, - state_root: hex!("0425393fd07e2a806cfd7e990ee91dc92fe6bba34eab2bf45d5be7d67e24d467").into(), - extrinsics_root: hex!("83fd59e8fe7cee53d7421713a09fe0abae1aec5f4db94fe5193737b12195f013").into(), + state_root: hex!("c3d2cc317b5897af4c7f65d76b028971ce9fad745678732ff6d42301b4245a9c").into(), + extrinsics_root: hex!("4e689a607609f69df099af82577ae6c5969c44f1afe33a43cd7af926eba42272").into(), digest: Digest { logs: vec![], }, }, extrinsics: vec![ @@ -260,8 +260,8 @@ mod tests { header: Header { parent_hash: b.header.hash(), number: 2, - state_root: hex!("e32dd1d84d9133ca48078d2d83f2b0db19f9d47229ba98bf5ced0e9f86fac2c7").into(), - extrinsics_root: hex!("5d2d0a93201744f0df878c33b07da40cd38e24ac2358cc2811ea640835c31b68").into(), + state_root: hex!("2c822d948bb68d7f7a1976d4f827a276a95a3ba1c4c15dbfab3bafbeb85f2b4d").into(), + extrinsics_root: hex!("009268a854b21f339c53d3c7a6619a27f564703311d91f11f61573a7fed5ca1c").into(), digest: Digest { logs: vec![], }, }, extrinsics: vec![ diff --git a/substrate/core/test-runtime/wasm/Cargo.lock b/substrate/core/test-runtime/wasm/Cargo.lock index 1a515806b8..e1d20220e7 100644 --- a/substrate/core/test-runtime/wasm/Cargo.lock +++ b/substrate/core/test-runtime/wasm/Cargo.lock @@ -153,11 +153,16 @@ version = "0.3.54" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "hashdb" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" +name = "hash-db" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#ac74a40f3a05cc047685b2ce439797172e5f29cf" + +[[package]] +name = "hash256-std-hasher" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#ac74a40f3a05cc047685b2ce439797172e5f29cf" dependencies = [ - "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -244,23 +249,20 @@ name = "memoffset" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "memory-db" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#ac74a40f3a05cc047685b2ce439797172e5f29cf" +dependencies = [ + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "memory_units" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "memorydb" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "plain_hasher 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "nan-preserving-float" version = "0.1.0" @@ -292,14 +294,9 @@ dependencies = [ "stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "parity-bytes" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "parity-codec" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -315,6 +312,16 @@ dependencies = [ "syn 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "parity-codec-derive" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "parity-wasm" version = "0.31.0" @@ -343,26 +350,6 @@ dependencies = [ "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "patricia-trie" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "plain_hasher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "proc-macro-hack" version = "0.4.1" @@ -519,14 +506,13 @@ name = "sr-io" version = "0.1.0" dependencies = [ "environmental 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "sr-std 0.1.0", "substrate-primitives 0.1.0", "substrate-state-machine 0.1.0", - "triehash 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-trie 0.4.0", ] [[package]] @@ -536,7 +522,7 @@ dependencies = [ "integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", @@ -556,7 +542,7 @@ dependencies = [ name = "sr-version" version = "0.1.0" dependencies = [ - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", @@ -569,7 +555,7 @@ version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "mashup 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", @@ -587,7 +573,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" name = "substrate-metadata" version = "0.1.0" dependencies = [ - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", @@ -603,14 +589,12 @@ dependencies = [ "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "hash256-std-hasher 0.9.0 (git+https://github.com/paritytech/trie)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "plain_hasher 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", @@ -626,17 +610,18 @@ name = "substrate-state-machine" version = "0.1.0" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "memorydb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "memory-db 0.9.0 (git+https://github.com/paritytech/trie)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-primitives 0.1.0", - "triehash 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-trie 0.4.0", + "trie-db 0.9.0 (git+https://github.com/paritytech/trie)", + "trie-root 0.9.0 (git+https://github.com/paritytech/trie)", ] [[package]] @@ -645,8 +630,8 @@ version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -655,6 +640,17 @@ dependencies = [ "substrate-primitives 0.1.0", ] +[[package]] +name = "substrate-trie" +version = "0.4.0" +dependencies = [ + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "memory-db 0.9.0 (git+https://github.com/paritytech/trie)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "trie-db 0.9.0 (git+https://github.com/paritytech/trie)", + "trie-root 0.9.0 (git+https://github.com/paritytech/trie)", +] + [[package]] name = "syn" version = "0.14.1" @@ -674,13 +670,22 @@ dependencies = [ ] [[package]] -name = "triehash" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" +name = "trie-db" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#ac74a40f3a05cc047685b2ce439797172e5f29cf" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "trie-root" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#ac74a40f3a05cc047685b2ce439797172e5f29cf" +dependencies = [ + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", ] [[package]] @@ -776,7 +781,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" "checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb" -"checksum hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f1c71fc577cde89b3345d5f2880fecaf462a32e96c619f431279bdaf1ba5ddb1" +"checksum hash-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" +"checksum hash256-std-hasher 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1679e6ea370dee694f91f1dc469bf94cf8f52051d147aec3e1f9497c6fc22461" "checksum hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4da5f0e01bd8a71a224a4eedecaacfcabda388dbb7a80faf04d3514287572d95" "checksum hex-literal-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1d340b6514f232f6db1bd16db65302a5278a04fef9ce867cb932e7e5fa21130a" @@ -789,21 +795,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum mashup 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "d886e371548f5c66258a99df9ec03366bff02cc96ea3d3f8f346b5d2d6836de7" "checksum mashup-impl 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8d426741e35fab52542d84dfee615f442c2b37247bee8b1ed5c25ca723487580" "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" +"checksum memory-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum memory_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" -"checksum memorydb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f72c93304ad51e21230ecbd0d2b58a3f94703bf9339d14aed88c3aaf5e8b7a56" "checksum nan-preserving-float 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34d4f00fcc2f4c9efa8cc971db0da9e28290e28e97af47585e48691ef10ff31f" "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2" "checksum num-traits 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "775393e285254d2f5004596d69bb8bc1149754570dcc08cf30cabeba67955e28" "checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30" "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" -"checksum parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fa5168b4cf41f3835e4bc6ffb32f51bc9365dc50cb351904595b3931d917fd0c" -"checksum parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "48db1d9442469191a590498ab734a85d98848873267d3e93b37b03538399bd2c" +"checksum parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2b47e0394c3720edecb4815258c28e848012a833b649fbf7dce6174365203a2d" "checksum parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1eda64d782c342261aea4ca047a609f9bd92d5f9dafabe6b5a396caf5c7b8827" +"checksum parity-codec-derive 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8ad82895f41c3880de6fcb532455ac89c8e499eaed918beb75070c6cde85bba0" "checksum parity-wasm 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e1c91199d14bd5b78ecade323d4a891d094799749c1b9e82d9c590c2e2849a40" "checksum parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e" "checksum parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "4db1a8ccf734a7bce794cc19b3df06ed87ab2f3907036b693c68f56b4d4537fa" -"checksum patricia-trie 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fa27fc4a972a03d64e5170d7facd2c84c6ed425b38ce62ad98dcfee2f7845b3b" -"checksum plain_hasher 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "95fa6386b1d34aaf0adb9b7dd2885dbe7c34190e6263785e5a7ec2b19044a90f" "checksum proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2c725b36c99df7af7bf9324e9c999b9e37d92c8f8caf106d82e1d7953218d2d8" "checksum proc-macro-hack-impl 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2b753ad9ed99dd8efeaa7d2fb8453c8f6bc3e54b97966d35f1bc77ca6865254a" "checksum proc-macro2 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1fa93823f53cfd0f5ac117b189aed6cfdfb2cfc0a9d82e956dd7927595ed7d46" @@ -826,7 +830,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "15132e0e364248108c5e2c02e3ab539be8d6f5d52a01ca9bbf27ed657316f02b" "checksum syn 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6dfd71b2be5a58ee30a6f8ea355ba8290d397131c00dfa55c3d34e6e13db5101" "checksum tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e9175261fbdb60781fcd388a4d6cc7e14764a2b629a7ad94abb439aed223a44f" -"checksum triehash 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3da77dc2c88bac48769c53f2c7675d99d522a7fc8130da3fadf29d7c6f94c9ac" +"checksum trie-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" +"checksum trie-root 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum twox-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "475352206e7a290c5fccc27624a163e8d0d115f7bb60ca18a64fc9ce056d7435" "checksum uint 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "754ba11732b9161b94c41798e5197e5e75388d012f760c42adb5000353e98646" "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" diff --git a/substrate/core/test-runtime/wasm/Cargo.toml b/substrate/core/test-runtime/wasm/Cargo.toml index abd17f7b5e..4c83c4e391 100644 --- a/substrate/core/test-runtime/wasm/Cargo.toml +++ b/substrate/core/test-runtime/wasm/Cargo.toml @@ -6,8 +6,8 @@ authors = ["Parity Technologies "] [dependencies] log = { version = "0.3", optional = true } hex-literal = { version = "0.1.0", optional = true } -parity-codec = { version = "2.0", default-features = false } -parity-codec-derive = { version = "~1.0", default-features = false } +parity-codec = { version = "~2.0.1", default-features = false } +parity-codec-derive = { version = "~2.0.1", default-features = false } substrate-primitives = { path = "../../primitives", default-features = false } sr-std = { path = "../../sr-std", default-features = false } sr-io = { path = "../../sr-io", default-features = false } diff --git a/substrate/core/trie/Cargo.toml b/substrate/core/trie/Cargo.toml new file mode 100644 index 0000000000..ef54836b37 --- /dev/null +++ b/substrate/core/trie/Cargo.toml @@ -0,0 +1,35 @@ +[package] +name = "substrate-trie" +version = "0.4.0" +authors = ["Parity Technologies "] +description = "Patricia trie stuff using a parity-codec node format" +repository = "https://github.com/paritytech/parity-common" +license = "GPL-3.0" + +[[bench]] +name = "bench" +harness = false + +[dependencies] +parity-codec = { version = "~2.0.1" } +hash-db = { git = "https://github.com/paritytech/trie", default_features = false } +trie-db = { git = "https://github.com/paritytech/trie", optional = true } +trie-root = { git = "https://github.com/paritytech/trie", default_features = false } +memory-db = { git = "https://github.com/paritytech/trie", optional = true } + +[dev-dependencies] +substrate-primitives = { path = "../primitives" } +trie-bench = { git = "https://github.com/paritytech/trie" } +trie-standardmap = { git = "https://github.com/paritytech/trie" } +keccak-hasher = { git = "https://github.com/paritytech/trie" } +criterion = "0.1.2" +hex-literal = "0.1.0" + +[features] +default = ["std"] +std = [ + "hash-db/std", + "memory-db", + "trie-db", + "trie-root/std" +] \ No newline at end of file diff --git a/substrate/core/trie/README.md b/substrate/core/trie/README.md new file mode 100644 index 0000000000..57d392057b --- /dev/null +++ b/substrate/core/trie/README.md @@ -0,0 +1 @@ +This crate provides utility functions to interact with Substrate's Modified Merkle Patricia tree ("trie"). \ No newline at end of file diff --git a/substrate/core/trie/benches/bench.rs b/substrate/core/trie/benches/bench.rs new file mode 100644 index 0000000000..75fe648b8f --- /dev/null +++ b/substrate/core/trie/benches/bench.rs @@ -0,0 +1,39 @@ +// Copyright 2015-2018 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +#[macro_use] +extern crate criterion; +use criterion::Criterion; +criterion_group!(benches, benchmark); +criterion_main!(benches); + +extern crate substrate_primitives; +extern crate keccak_hasher; +extern crate substrate_trie; +extern crate trie_bench; + +fn benchmark(c: &mut Criterion) { + trie_bench::standard_benchmark::< + substrate_primitives::Blake2Hasher, + substrate_trie::NodeCodec, + substrate_trie::TrieStream, + >(c, "substrate-blake2"); + trie_bench::standard_benchmark::< + keccak_hasher::KeccakHasher, + substrate_trie::NodeCodec, + substrate_trie::TrieStream, + >(c, "substrate-keccak"); +} diff --git a/substrate/core/trie/src/error.rs b/substrate/core/trie/src/error.rs new file mode 100644 index 0000000000..c717f45639 --- /dev/null +++ b/substrate/core/trie/src/error.rs @@ -0,0 +1,29 @@ +// Copyright 2015-2017 Parity Technologies +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use std::fmt; +use std::error::Error as StdError; + +#[derive(Debug, PartialEq, Eq, Clone)] +/// Error concerning the Parity-Codec based decoder. +pub enum Error { + /// Bad format. + BadFormat, +} + +impl StdError for Error { + fn description(&self) -> &str { + "codec error" + } +} + +impl fmt::Display for Error { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + fmt::Debug::fmt(&self, f) + } +} diff --git a/substrate/core/trie/src/lib.rs b/substrate/core/trie/src/lib.rs new file mode 100644 index 0000000000..754c6ae16c --- /dev/null +++ b/substrate/core/trie/src/lib.rs @@ -0,0 +1,421 @@ +// Copyright 2015-2018 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +//! Substrate-format Base-16 Modified Merkle Patricia Tree (Trie). + +// TODO: no_std + +extern crate trie_root; +extern crate parity_codec as codec; +extern crate trie_db; +extern crate hash_db; +extern crate memory_db; + +#[cfg(test)] +extern crate substrate_primitives; +#[cfg(test)] +extern crate trie_standardmap; +#[cfg(test)] +#[macro_use] +extern crate hex_literal; + +mod error; +mod node_header; +mod node_codec; +mod trie_stream; + +use hash_db::Hasher; +/// Our `NodeCodec`-specific error. +pub use error::Error; +/// The Substrate format implementation of `TrieStream`. +pub use trie_stream::TrieStream; +/// The Substrate format implementation of `NodeCodec`. +pub use node_codec::NodeCodec; +/// Various re-exports from the `trie-db` crate. +pub use trie_db::{Trie, TrieMut, DBValue, Recorder}; + +/// As in `trie_db`, but less generic, error type for the crate. +pub type TrieError = trie_db::TrieError; +/// As in `hash_db`, but less generic, trait exposed. +pub trait AsHashDB: hash_db::AsHashDB {} +impl> AsHashDB for T {} +/// As in `hash_db`, but less generic, trait exposed. +pub type HashDB = hash_db::HashDB; +/// As in `memory_db`, but less generic, trait exposed. +pub type MemoryDB = memory_db::MemoryDB; + +/// Persistent trie database read-access interface for the a given hasher. +pub type TrieDB<'a, H> = trie_db::TrieDB<'a, H, NodeCodec>; +/// Persistent trie database write-access interface for the a given hasher. +pub type TrieDBMut<'a, H> = trie_db::TrieDBMut<'a, H, NodeCodec>; +/// Querying interface, as in `trie_db` but less generic. +pub type Lookup<'a, H, Q> = trie_db::Lookup<'a, H, NodeCodec, Q>; + +/// Determine a trie root given its ordered contents, closed form. +pub fn trie_root(input: I) -> H::Out where + I: IntoIterator, + A: AsRef<[u8]> + Ord, + B: AsRef<[u8]>, +{ + trie_root::trie_root::(input) +} + +/// Determine a trie root node's data given its ordered contents, closed form. +pub fn unhashed_trie(input: I) -> Vec where + I: IntoIterator, + A: AsRef<[u8]> + Ord, + B: AsRef<[u8]>, +{ + trie_root::unhashed_trie::(input) +} + +/// A trie root formed from the items, with keys attached according to their +/// compact-encoded index (using `parity-codec` crate). +pub fn ordered_trie_root(input: I) -> H::Out +where + I: IntoIterator + Iterator, + A: AsRef<[u8]>, +{ + trie_root::(input + .enumerate() + .map(|(i, v)| (codec::Encode::encode(&codec::Compact(i as u32)), v)) + ) +} + +// Utilities (not exported): + +const EMPTY_TRIE: u8 = 0; +const LEAF_NODE_OFFSET: u8 = 1; +const LEAF_NODE_BIG: u8 = 127; +const EXTENSION_NODE_OFFSET: u8 = 128; +const EXTENSION_NODE_BIG: u8 = 253; +const BRANCH_NODE_NO_VALUE: u8 = 254; +const BRANCH_NODE_WITH_VALUE: u8 = 255; +const LEAF_NODE_THRESHOLD: u8 = LEAF_NODE_BIG - LEAF_NODE_OFFSET; +const EXTENSION_NODE_THRESHOLD: u8 = EXTENSION_NODE_BIG - EXTENSION_NODE_OFFSET; //125 +const LEAF_NODE_SMALL_MAX: u8 = LEAF_NODE_BIG - 1; +const EXTENSION_NODE_SMALL_MAX: u8 = EXTENSION_NODE_BIG - 1; + +fn take<'a>(input: &mut &'a[u8], count: usize) -> Option<&'a[u8]> { + if input.len() < count { + return None + } + let r = &(*input)[..count]; + *input = &(*input)[count..]; + Some(r) +} + +fn partial_to_key(partial: &[u8], offset: u8, big: u8) -> Vec { + let nibble_count = (partial.len() - 1) * 2 + if partial[0] & 16 == 16 { 1 } else { 0 }; + let (first_byte_small, big_threshold) = (offset, (big - offset) as usize); + let mut output = vec![first_byte_small + nibble_count.min(big_threshold) as u8]; + if nibble_count >= big_threshold { output.push((nibble_count - big_threshold) as u8) } + if nibble_count % 2 == 1 { + output.push(partial[0] & 0x0f); + } + output.extend_from_slice(&partial[1..]); + output +} + +fn branch_node(has_value: bool, has_children: impl Iterator) -> [u8; 3] { + let first = if has_value { + BRANCH_NODE_WITH_VALUE + } else { + BRANCH_NODE_NO_VALUE + }; + let mut bitmap: u16 = 0; + let mut cursor: u16 = 1; + for v in has_children { + if v { bitmap |= cursor } + cursor <<= 1; + } + [first, (bitmap % 256 ) as u8, (bitmap / 256 ) as u8] +} + +#[cfg(test)] +mod tests { + use super::*; + use codec::{Encode, Compact}; + use substrate_primitives::Blake2Hasher; + use memory_db::MemoryDB; + use hash_db::{HashDB, Hasher}; + use trie_db::{DBValue, TrieMut, Trie}; + use trie_standardmap::{Alphabet, ValueMode, StandardMap}; + + fn check_equivalent(input: &Vec<(&[u8], &[u8])>) { + { + let closed_form = trie_root::(input.clone()); + let d = unhashed_trie::(input.clone()); + println!("Data: {:#x?}, {:#x?}", d, Blake2Hasher::hash(&d[..])); + let persistent = { + let mut memdb = MemoryDB::default(); + let mut root = Default::default(); + let mut t = TrieDBMut::::new(&mut memdb, &mut root); + for (x, y) in input.iter().rev() { + t.insert(x, y).unwrap(); + } + t.root().clone() + }; + assert_eq!(closed_form, persistent); + } + } + + fn check_iteration(input: &Vec<(&[u8], &[u8])>) { + let mut memdb = MemoryDB::default(); + let mut root = Default::default(); + { + let mut t = TrieDBMut::::new(&mut memdb, &mut root); + for (x, y) in input.clone() { + t.insert(x, y).unwrap(); + } + } + { + let t = TrieDB::::new(&mut memdb, &root).unwrap(); + assert_eq!( + input.iter().map(|(i, j)| (i.to_vec(), j.to_vec())).collect::>(), + t.iter().unwrap().map(|x| x.map(|y| (y.0, y.1.to_vec())).unwrap()).collect::>() + ); + } + } + + #[test] + fn empty_is_equivalent() { + let input: Vec<(&[u8], &[u8])> = vec![]; + check_equivalent(&input); + check_iteration(&input); + } + + #[test] + fn leaf_is_equivalent() { + let input: Vec<(&[u8], &[u8])> = vec![(&[0xaa][..], &[0xbb][..])]; + check_equivalent(&input); + check_iteration(&input); + } + + #[test] + fn branch_is_equivalent() { + let input: Vec<(&[u8], &[u8])> = vec![(&[0xaa][..], &[0x10][..]), (&[0xba][..], &[0x11][..])]; + check_equivalent(&input); + check_iteration(&input); + } + + #[test] + fn extension_and_branch_is_equivalent() { + let input: Vec<(&[u8], &[u8])> = vec![(&[0xaa][..], &[0x10][..]), (&[0xab][..], &[0x11][..])]; + check_equivalent(&input); + check_iteration(&input); + } + + #[test] + fn standard_is_equivalent() { + let st = StandardMap { + alphabet: Alphabet::All, + min_key: 32, + journal_key: 0, + value_mode: ValueMode::Random, + count: 1000, + }; + let mut d = st.make(); + d.sort_unstable_by(|&(ref a, _), &(ref b, _)| a.cmp(b)); + let dr = d.iter().map(|v| (&v.0[..], &v.1[..])).collect(); + check_equivalent(&dr); + check_iteration(&dr); + } + + #[test] + fn extension_and_branch_with_value_is_equivalent() { + let input: Vec<(&[u8], &[u8])> = vec![ + (&[0xaa][..], &[0xa0][..]), + (&[0xaa, 0xaa][..], &[0xaa][..]), + (&[0xaa, 0xbb][..], &[0xab][..]) + ]; + check_equivalent(&input); + check_iteration(&input); + } + + #[test] + fn bigger_extension_and_branch_with_value_is_equivalent() { + let input: Vec<(&[u8], &[u8])> = vec![ + (&[0xaa][..], &[0xa0][..]), + (&[0xaa, 0xaa][..], &[0xaa][..]), + (&[0xaa, 0xbb][..], &[0xab][..]), + (&[0xbb][..], &[0xb0][..]), + (&[0xbb, 0xbb][..], &[0xbb][..]), + (&[0xbb, 0xcc][..], &[0xbc][..]), + ]; + check_equivalent(&input); + check_iteration(&input); + } + + #[test] + fn single_long_leaf_is_equivalent() { + let input: Vec<(&[u8], &[u8])> = vec![(&[0xaa][..], &b"ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC"[..]), (&[0xba][..], &[0x11][..])]; + check_equivalent(&input); + check_iteration(&input); + } + + #[test] + fn two_long_leaves_is_equivalent() { + let input: Vec<(&[u8], &[u8])> = vec![ + (&[0xaa][..], &b"ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC"[..]), + (&[0xba][..], &b"ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC"[..]) + ]; + check_equivalent(&input); + check_iteration(&input); + } + + fn populate_trie<'db>( + db: &'db mut HashDB, + root: &'db mut ::Out, + v: &[(Vec, Vec)] + ) -> TrieDBMut<'db, Blake2Hasher> { + let mut t = TrieDBMut::::new(db, root); + for i in 0..v.len() { + let key: &[u8]= &v[i].0; + let val: &[u8] = &v[i].1; + t.insert(key, val).unwrap(); + } + t + } + + fn unpopulate_trie<'db>(t: &mut TrieDBMut<'db, Blake2Hasher>, v: &[(Vec, Vec)]) { + for i in v { + let key: &[u8]= &i.0; + t.remove(key).unwrap(); + } + } + + #[test] + fn random_should_work() { + let mut seed = ::Out::new(); + for test_i in 0..10000 { + if test_i % 50 == 0 { + println!("{:?} of 10000 stress tests done", test_i); + } + let x = StandardMap { + alphabet: Alphabet::Custom(b"@QWERTYUIOPASDFGHJKLZXCVBNM[/]^_".to_vec()), + min_key: 5, + journal_key: 0, + value_mode: ValueMode::Index, + count: 100, + }.make_with(&mut seed.0); + + let real = trie_root::(x.clone()); + let mut memdb = MemoryDB::default(); + let mut root = Default::default(); + let mut memtrie = populate_trie(&mut memdb, &mut root, &x); + + memtrie.commit(); + if *memtrie.root() != real { + println!("TRIE MISMATCH"); + println!(""); + println!("{:?} vs {:?}", memtrie.root(), real); + for i in &x { + println!("{:#x?} -> {:#x?}", i.0, i.1); + } + } + assert_eq!(*memtrie.root(), real); + unpopulate_trie(&mut memtrie, &x); + memtrie.commit(); + if *memtrie.root() != as trie_db::NodeCodec>::hashed_null_node() { + println!("- TRIE MISMATCH"); + println!(""); + println!("{:?} vs {:?}", memtrie.root(), as trie_db::NodeCodec>::hashed_null_node()); + for i in &x { + println!("{:#x?} -> {:#x?}", i.0, i.1); + } + } + assert_eq!(*memtrie.root(), as trie_db::NodeCodec>::hashed_null_node()); + } + } + + fn to_compact(n: u8) -> u8 { + Compact(n).encode()[0] + } + + #[test] + fn codec_trie_empty() { + let input: Vec<(&[u8], &[u8])> = vec![]; + let trie = unhashed_trie::(input); + println!("trie: {:#x?}", trie); + assert_eq!(trie, vec![0x0]); + } + + #[test] + fn codec_trie_single_tuple() { + let input = vec![ + (vec![0xaa], vec![0xbb]) + ]; + let trie = unhashed_trie::(input); + println!("trie: {:#x?}", trie); + + assert_eq!(trie, vec![ + 0x03, // leaf (0x01) with (+) key of 2 nibbles (0x02) + 0xaa, // key data + to_compact(1), // length of value in bytes as Compact + 0xbb // value data + ]); + } + + #[test] + fn codec_trie_two_tuples_disjoint_keys() { + let input = vec![(&[0x48, 0x19], &[0xfe]), (&[0x13, 0x14], &[0xff])]; + let trie = unhashed_trie::(input); + println!("trie: {:#x?}", trie); + + let mut ex = Vec::::new(); + ex.push(0xfe); // branch, no value + ex.push(0x12); // slots 1 & 4 are taken from 0-7 + ex.push(0x00); // no slots from 8-15 + ex.push(to_compact(0x05)); // first slot: LEAF, 5 bytes long. + ex.push(0x04); // leaf with 3 nibbles + ex.push(0x03); // first nibble + ex.push(0x14); // second & third nibble + ex.push(to_compact(0x01)); // 1 byte data + ex.push(0xff); // value data + ex.push(to_compact(0x05)); // second slot: LEAF, 5 bytes long. + ex.push(0x04); // leaf with 3 nibbles + ex.push(0x08); // first nibble + ex.push(0x19); // second & third nibble + ex.push(to_compact(0x01)); // 1 byte data + ex.push(0xfe); // value data + + assert_eq!(trie, ex); + } + + #[test] + fn iterator_works() { + let pairs = vec![ + (hex!("0103000000000000000464").to_vec(), hex!("0400000000").to_vec()), + (hex!("0103000000000000000469").to_vec(), hex!("0401000000").to_vec()), + ]; + + let mut mdb = MemoryDB::default(); + let mut root = Default::default(); + let _ = populate_trie(&mut mdb, &mut root, &pairs); + + let trie = TrieDB::::new(&mdb, &root).unwrap(); + + let iter = trie.iter().unwrap(); + let mut iter_pairs = Vec::new(); + for pair in iter { + let (key, value) = pair.unwrap(); + iter_pairs.push((key, value.to_vec())); + } + + assert_eq!(pairs, iter_pairs); + } +} \ No newline at end of file diff --git a/substrate/core/trie/src/node_codec.rs b/substrate/core/trie/src/node_codec.rs new file mode 100644 index 0000000000..7cc888be7c --- /dev/null +++ b/substrate/core/trie/src/node_codec.rs @@ -0,0 +1,141 @@ +// Copyright 2015-2018 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +//! `NodeCodec` implementation for Substrate's trie format. + +use std::marker::PhantomData; +use codec::{Encode, Decode, Compact}; +use hash_db::Hasher; +use trie_db::{self, DBValue, NibbleSlice, node::Node, ChildReference}; +use error::Error; +use super::{EMPTY_TRIE, LEAF_NODE_OFFSET, LEAF_NODE_BIG, EXTENSION_NODE_OFFSET, + EXTENSION_NODE_BIG, take, partial_to_key, node_header::NodeHeader, branch_node}; + +/// Concrete implementation of a `NodeCodec` with Parity Codec encoding, generic over the `Hasher` +#[derive(Default, Clone)] +pub struct NodeCodec(PhantomData); + +// NOTE: what we'd really like here is: +// `impl NodeCodec for RlpNodeCodec where H::Out: Decodable` +// but due to the current limitations of Rust const evaluation we can't +// do `const HASHED_NULL_NODE: H::Out = H::Out( … … )`. Perhaps one day soon? +impl trie_db::NodeCodec for NodeCodec { + type Error = Error; + + fn hashed_null_node() -> H::Out { + H::hash(&[0u8][..]) + } + + fn decode(data: &[u8]) -> ::std::result::Result { + use Error::BadFormat; + let input = &mut &*data; + match NodeHeader::decode(input).ok_or(BadFormat)? { + NodeHeader::Null => Ok(Node::Empty), + NodeHeader::Branch(has_value) => { + let bitmap = u16::decode(input).ok_or(BadFormat)?; + let value = if has_value { + let count = >::decode(input).ok_or(BadFormat)?.0 as usize; + Some(take(input, count).ok_or(BadFormat)?) + } else { + None + }; + let mut children = [None; 16]; + let mut pot_cursor = 1; + for i in 0..16 { + if bitmap & pot_cursor != 0 { + let count = >::decode(input).ok_or(BadFormat)?.0 as usize; + children[i] = Some(take(input, count).ok_or(BadFormat)?); + } + pot_cursor <<= 1; + } + Ok(Node::Branch(children, value)) + } + NodeHeader::Extension(nibble_count) => { + let nibble_data = take(input, (nibble_count + 1) / 2).ok_or(BadFormat)?; + let nibble_slice = NibbleSlice::new_offset(nibble_data, nibble_count % 2); + let count = >::decode(input).ok_or(BadFormat)?.0 as usize; + Ok(Node::Extension(nibble_slice, take(input, count).ok_or(BadFormat)?)) + } + NodeHeader::Leaf(nibble_count) => { + let nibble_data = take(input, (nibble_count + 1) / 2).ok_or(BadFormat)?; + let nibble_slice = NibbleSlice::new_offset(nibble_data, nibble_count % 2); + let count = >::decode(input).ok_or(BadFormat)?.0 as usize; + Ok(Node::Leaf(nibble_slice, take(input, count).ok_or(BadFormat)?)) + } + } + } + + fn try_decode_hash(data: &[u8]) -> Option { + if data.len() == H::LENGTH { + let mut r = H::Out::default(); + r.as_mut().copy_from_slice(data); + Some(r) + } else { + None + } + } + + fn is_empty_node(data: &[u8]) -> bool { + data == &[EMPTY_TRIE][..] + } + fn empty_node() -> Vec { + vec![EMPTY_TRIE] + } + + // TODO: refactor this so that `partial` isn't already encoded with HPE. Should just be an `impl Iterator`. + fn leaf_node(partial: &[u8], value: &[u8]) -> Vec { + let mut output = partial_to_key(partial, LEAF_NODE_OFFSET, LEAF_NODE_BIG); + value.encode_to(&mut output); + output + } + + // TODO: refactor this so that `partial` isn't already encoded with HPE. Should just be an `impl Iterator`. + fn ext_node(partial: &[u8], child: ChildReference) -> Vec { + let mut output = partial_to_key(partial, EXTENSION_NODE_OFFSET, EXTENSION_NODE_BIG); + match child { + ChildReference::Hash(h) => + h.as_ref().encode_to(&mut output), + ChildReference::Inline(inline_data, len) => + (&AsRef::<[u8]>::as_ref(&inline_data)[..len]).encode_to(&mut output), + }; + output + } + + fn branch_node(children: I, maybe_value: Option) -> Vec + where I: IntoIterator>> + Iterator>> + { + let mut output = vec![0, 0, 0]; + let have_value = if let Some(value) = maybe_value { + (&*value).encode_to(&mut output); + true + } else { + false + }; + let prefix = branch_node(have_value, children.map(|maybe_child| match maybe_child { + Some(ChildReference::Hash(h)) => { + h.as_ref().encode_to(&mut output); + true + } + Some(ChildReference::Inline(inline_data, len)) => { + (&AsRef::<[u8]>::as_ref(&inline_data)[..len]).encode_to(&mut output); + true + } + None => false, + })); + output[0..3].copy_from_slice(&prefix[..]); + output + } +} diff --git a/substrate/core/trie/src/node_header.rs b/substrate/core/trie/src/node_header.rs new file mode 100644 index 0000000000..e337661bfd --- /dev/null +++ b/substrate/core/trie/src/node_header.rs @@ -0,0 +1,79 @@ +// Copyright 2015-2018 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +//! The node header. + +use codec::{Encode, Decode, Input, Output}; +use super::{EMPTY_TRIE, LEAF_NODE_OFFSET, LEAF_NODE_BIG, EXTENSION_NODE_OFFSET, + EXTENSION_NODE_BIG, BRANCH_NODE_NO_VALUE, BRANCH_NODE_WITH_VALUE, LEAF_NODE_THRESHOLD, + EXTENSION_NODE_THRESHOLD, LEAF_NODE_SMALL_MAX, EXTENSION_NODE_SMALL_MAX}; + +/// A node header. +#[derive(Copy, Clone, PartialEq, Eq, Debug)] +pub enum NodeHeader { + Null, + Branch(bool), + Extension(usize), + Leaf(usize), +} + +impl Encode for NodeHeader { + fn encode_to(&self, output: &mut T) { + match self { + NodeHeader::Null => output.push_byte(EMPTY_TRIE), + + NodeHeader::Branch(true) => output.push_byte(BRANCH_NODE_WITH_VALUE), + NodeHeader::Branch(false) => output.push_byte(BRANCH_NODE_NO_VALUE), + + NodeHeader::Leaf(nibble_count) if *nibble_count < LEAF_NODE_THRESHOLD as usize => + output.push_byte(LEAF_NODE_OFFSET + *nibble_count as u8), + NodeHeader::Leaf(nibble_count) => { + output.push_byte(LEAF_NODE_BIG); + output.push_byte((*nibble_count - LEAF_NODE_THRESHOLD as usize) as u8); + } + + NodeHeader::Extension(nibble_count) if *nibble_count < EXTENSION_NODE_THRESHOLD as usize => + output.push_byte(EXTENSION_NODE_OFFSET + *nibble_count as u8), + NodeHeader::Extension(nibble_count) => { + output.push_byte(EXTENSION_NODE_BIG); + output.push_byte((*nibble_count - EXTENSION_NODE_THRESHOLD as usize) as u8); + } + } + } +} + +impl Decode for NodeHeader { + fn decode(input: &mut I) -> Option { + Some(match input.read_byte()? { + EMPTY_TRIE => NodeHeader::Null, // 0 + + i @ LEAF_NODE_OFFSET ... LEAF_NODE_SMALL_MAX => // 1 ... (127 - 1) + NodeHeader::Leaf((i - LEAF_NODE_OFFSET) as usize), + LEAF_NODE_BIG => // 127 + NodeHeader::Leaf(input.read_byte()? as usize + LEAF_NODE_THRESHOLD as usize), + + i @ EXTENSION_NODE_OFFSET ... EXTENSION_NODE_SMALL_MAX =>// 128 ... (253 - 1) + NodeHeader::Extension((i - EXTENSION_NODE_OFFSET) as usize), + EXTENSION_NODE_BIG => // 253 + NodeHeader::Extension(input.read_byte()? as usize + EXTENSION_NODE_THRESHOLD as usize), + + BRANCH_NODE_NO_VALUE => NodeHeader::Branch(false), // 254 + BRANCH_NODE_WITH_VALUE => NodeHeader::Branch(true), // 255 + + _ => unreachable!(), + }) + } +} diff --git a/substrate/core/trie/src/trie_stream.rs b/substrate/core/trie/src/trie_stream.rs new file mode 100644 index 0000000000..3c8291389c --- /dev/null +++ b/substrate/core/trie/src/trie_stream.rs @@ -0,0 +1,104 @@ +// Copyright 2015-2018 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +//! `TrieStream` implementation for Substrate's trie format. + +use std::iter::once; +use hash_db::Hasher; +use trie_root; +use codec::Encode; + +use super::{EMPTY_TRIE, LEAF_NODE_OFFSET, LEAF_NODE_BIG, EXTENSION_NODE_OFFSET, + EXTENSION_NODE_BIG, branch_node}; + +/// Codec-flavoured TrieStream +pub struct TrieStream { + buffer: Vec, +} + +impl TrieStream { + // useful for debugging but not used otherwise + pub fn as_raw(&self) -> &[u8] { &self.buffer } +} + +/// Create a leaf/extension node, encoding a number of nibbles. Note that this +/// cannot handle a number of nibbles that is zero or greater than 127 and if +/// you attempt to do so *IT WILL PANIC*. +fn fuse_nibbles_node<'a>(nibbles: &'a [u8], leaf: bool) -> impl Iterator + 'a { + debug_assert!(nibbles.len() < 255 + 126, "nibbles length too long. what kind of size of key are you trying to include in the trie!?!"); + // We use two ranges of possible values; one for leafs and the other for extensions. + // Each range encodes zero following nibbles up to some maximum. If the maximum is + // reached, then it is considered "big" and a second byte follows it in order to + // encode a further offset to the number of nibbles of up to 255. Beyond that, we + // cannot encode. This shouldn't be a problem though since that allows for keys of + // up to 380 nibbles (190 bytes) and we expect key sizes to be generally 128-bit (16 + // bytes) or, at a push, 384-bit (48 bytes). + + let (first_byte_small, big_threshold) = if leaf { + (LEAF_NODE_OFFSET, (LEAF_NODE_BIG - LEAF_NODE_OFFSET) as usize) + } else { + (EXTENSION_NODE_OFFSET, (EXTENSION_NODE_BIG - EXTENSION_NODE_OFFSET) as usize) + }; + let first_byte = first_byte_small + nibbles.len().min(big_threshold) as u8; + once(first_byte) + .chain(if nibbles.len() >= big_threshold { Some((nibbles.len() - big_threshold) as u8) } else { None }) + .chain(if nibbles.len() % 2 == 1 { Some(nibbles[0]) } else { None }) + .chain(nibbles[nibbles.len() % 2..].chunks(2).map(|ch| ch[0] << 4 | ch[1])) +} + +impl trie_root::TrieStream for TrieStream { + fn new() -> Self { Self {buffer: Vec::new() } } + fn append_empty_data(&mut self) { + self.buffer.push(EMPTY_TRIE); + } + + fn append_leaf(&mut self, key: &[u8], value: &[u8]) { + self.buffer.extend(fuse_nibbles_node(key, true)); + // OPTIMISATION: I'd like to do `hpe.encode_to(&mut self.buffer);` here; need an `impl<'a> Encode for impl Iterator + 'a`? + value.encode_to(&mut self.buffer); + } + fn begin_branch(&mut self, maybe_value: Option<&[u8]>, has_children: impl Iterator) { +// println!("[begin_branch] pushing BRANCH_NODE"); + self.buffer.extend(&branch_node(maybe_value.is_some(), has_children)); + // Push the value if one exists. + if let Some(value) = maybe_value { + value.encode_to(&mut self.buffer); + } +// println!("[begin_branch] buffer so far: {:#x?}", self.buffer); + } + fn append_extension(&mut self, key: &[u8]) { + self.buffer.extend(fuse_nibbles_node(key, false)); + } + fn append_substream(&mut self, other: Self) { + let data = other.out(); +// println!("[append_substream] START own buffer: {:x?}", self.buffer); +// println!("[append_substream] START other buffer: {:x?}", data); + match data.len() { + 0...31 => { +// println!("[append_substream] appending data, because data.len() = {}", data.len()); + data.encode_to(&mut self.buffer) + }, + _ => { +// println!("[append_substream] would have hashed, because data.len() = {}", data.len()); +// data.encode_to(&mut self.buffer) + // TODO: re-enable hashing before merging + H::hash(&data).as_ref().encode_to(&mut self.buffer) + } + } + } + + fn out(self) -> Vec { self.buffer } +} diff --git a/substrate/node/api/src/lib.rs b/substrate/node/api/src/lib.rs index 822de492ef..7c5e539422 100644 --- a/substrate/node/api/src/lib.rs +++ b/substrate/node/api/src/lib.rs @@ -34,7 +34,7 @@ use primitives::{ AccountId, Block, BlockId, BlockNumber, Hash, Index, InherentData, SessionKey, Timestamp, UncheckedExtrinsic }; use sr_primitives::{transaction_validity::TransactionValidity, traits::{CurrentHeight, BlockNumberToHash}}; -use substrate_primitives::{Blake2Hasher, RlpCodec}; +use substrate_primitives::{Blake2Hasher}; /// Build new blocks. pub trait BlockBuilder { @@ -87,10 +87,10 @@ pub trait Api: CurrentHeight + BlockNumberToHash Result>; } -impl BlockBuilder for ClientBlockBuilder +impl BlockBuilder for ClientBlockBuilder where - B: Backend, - E: CallExecutor + Clone, + B: Backend, + E: CallExecutor + Clone, { fn push_extrinsic(&mut self, extrinsic: UncheckedExtrinsic) -> Result<()> { self.push(extrinsic).map_err(Into::into) @@ -104,10 +104,10 @@ where impl Api for Client where - B: Backend, - E: CallExecutor + Clone, + B: Backend, + E: CallExecutor + Clone, { - type BlockBuilder = ClientBlockBuilder; + type BlockBuilder = ClientBlockBuilder; fn session_keys(&self, at: &BlockId) -> Result> { Ok(self.authorities_at(at)?) diff --git a/substrate/node/executor/Cargo.toml b/substrate/node/executor/Cargo.toml index 6a08c198e9..43e7130b1a 100644 --- a/substrate/node/executor/Cargo.toml +++ b/substrate/node/executor/Cargo.toml @@ -6,12 +6,13 @@ description = "Substrate node implementation in Rust." [dependencies] hex-literal = "0.1" -triehash = "0.2" +trie-root = { git = "https://github.com/paritytech/trie" } parity-codec = { version = "2.0" } sr-io = { path = "../../core/sr-io" } substrate-state-machine = { path = "../../core/state-machine" } substrate-executor = { path = "../../core/executor" } substrate-primitives = { path = "../../core/primitives" } +substrate-trie = { path = "../../core/trie" } node-primitives = { path = "../primitives" } node-runtime = { path = "../runtime" } diff --git a/substrate/node/executor/src/lib.rs b/substrate/node/executor/src/lib.rs index 4282d0b7c4..7fc4f51d69 100644 --- a/substrate/node/executor/src/lib.rs +++ b/substrate/node/executor/src/lib.rs @@ -24,7 +24,7 @@ extern crate substrate_state_machine as state_machine; extern crate sr_io as runtime_io; extern crate substrate_primitives as primitives; extern crate node_primitives; -extern crate triehash; +extern crate substrate_trie as trie; #[cfg(test)] extern crate substrate_keyring as keyring; #[cfg(test)] extern crate sr_primitives as runtime_primitives; @@ -50,7 +50,7 @@ mod tests { use keyring::Keyring; use runtime_support::{Hashable, StorageValue, StorageMap}; use state_machine::{CodeExecutor, Externalities, TestExternalities}; - use primitives::{twox_128, Blake2Hasher, RlpCodec, ChangesTrieConfiguration, + use primitives::{twox_128, Blake2Hasher, ChangesTrieConfiguration, ed25519::{Public, Pair}}; use node_primitives::{Hash, BlockNumber, AccountId}; use runtime_primitives::traits::{Header as HeaderT, Digest as DigestT}; @@ -116,7 +116,7 @@ mod tests { #[test] fn panic_execution_with_foreign_code_gives_error() { - let mut t = TestExternalities::::new(map![ + let mut t = TestExternalities::::new(map![ twox_128(&>::key_for(alice())).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![70u8; 8], @@ -137,7 +137,7 @@ mod tests { #[test] fn bad_extrinsic_with_native_equivalent_code_gives_error() { - let mut t = TestExternalities::::new(map![ + let mut t = TestExternalities::::new(map![ twox_128(&>::key_for(alice())).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![70u8; 8], @@ -158,7 +158,7 @@ mod tests { #[test] fn successful_execution_with_native_equivalent_code_gives_ok() { - let mut t = TestExternalities::::new(map![ + let mut t = TestExternalities::::new(map![ twox_128(&>::key_for(alice())).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![0u8; 8], @@ -183,7 +183,7 @@ mod tests { #[test] fn successful_execution_with_foreign_code_gives_ok() { - let mut t = TestExternalities::::new(map![ + let mut t = TestExternalities::::new(map![ twox_128(&>::key_for(alice())).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![0u8; 8], @@ -206,7 +206,7 @@ mod tests { }); } - fn new_test_ext(support_changes_trie: bool) -> TestExternalities { + fn new_test_ext(support_changes_trie: bool) -> TestExternalities { use keyring::Keyring::*; let three = [3u8; 32].into(); TestExternalities::new(GenesisConfig { @@ -259,7 +259,7 @@ mod tests { changes_root: Option, extrinsics: Vec ) -> (Vec, Hash) { - use triehash::ordered_trie_root; + use trie::ordered_trie_root; let extrinsics = extrinsics.into_iter().map(sign).collect::>(); let extrinsics_root = ordered_trie_root::(extrinsics.iter().map(Encode::encode)).0.into(); @@ -286,12 +286,12 @@ mod tests { 1, GENESIS_HASH.into(), if support_changes_trie { - hex!("8c276aaee09396d7630285caccb6e90d5e910da6590794b88f2a4178dcb1bbd4").into() + hex!("bbfe47c5310929d10712e58dd74f99ed27d0e504b4c46b5430e81503a436beb8").into() } else { - hex!("dc725478bd4650be5ca4d096b77f5115301bdc889c7c341490ad0e06f17aa3f5").into() + hex!("f3309ec5639678337805d8f16fac2b37e3663d3bc21f6c21e375377eab3388a6").into() }, if support_changes_trie { - Some(hex!("8ddfae3e9a7c5a3443d10978d84fe13fc032f485f45db383b5f6c72942d08cd1").into()) + Some(hex!("1f8f44dcae8982350c14dee720d34b147e73279f5a2ce1f9781195a991970978").into()) } else { None }, @@ -312,7 +312,7 @@ mod tests { construct_block( 2, block1(false).1, - hex!("703efd5294ae5677c3c975593c64796cce27b471f27936c0cf31fda0a55ede19").into(), + hex!("e312f8e2111124c57448050aed74c625382ed222f48ab55ada41afacd0a65fa6").into(), None, vec![ CheckedExtrinsic { @@ -335,7 +335,7 @@ mod tests { construct_block( 1, GENESIS_HASH.into(), - hex!("ea9955f8c3d48761b6e712dc73bdf933e0884c88d06a5cb0fd70b28e91852948").into(), + hex!("c33272caf0136a427f59bfcdd60cb17e0cc632756b9017b4415bb2f4cb19dcc7").into(), None, vec![ CheckedExtrinsic { @@ -505,7 +505,7 @@ mod tests { #[test] fn panic_execution_gives_error() { - let mut t = TestExternalities::::new(map![ + let mut t = TestExternalities::::new(map![ twox_128(&>::key_for(alice())).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![70u8; 8], @@ -527,7 +527,7 @@ mod tests { #[test] fn successful_execution_gives_ok() { - let mut t = TestExternalities::::new(map![ + let mut t = TestExternalities::::new(map![ twox_128(&>::key_for(alice())).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![0u8; 8], diff --git a/substrate/node/primitives/Cargo.toml b/substrate/node/primitives/Cargo.toml index 932921f201..4a755717b2 100644 --- a/substrate/node/primitives/Cargo.toml +++ b/substrate/node/primitives/Cargo.toml @@ -6,8 +6,8 @@ authors = ["Parity Technologies "] [dependencies] serde = { version = "1.0", default_features = false } serde_derive = { version = "1.0", optional = true } -parity-codec = { version = "2.0", default_features = false } -parity-codec-derive = { version = "~1.0", default_features = false } +parity-codec = { version = "~2.0.1", default_features = false } +parity-codec-derive = { version = "~2.0.1", default_features = false } substrate-primitives = { path = "../../core/primitives", default_features = false } sr-std = { path = "../../core/sr-std", default_features = false } sr-primitives = { path = "../../core/sr-primitives", default_features = false } diff --git a/substrate/node/runtime/wasm/Cargo.lock b/substrate/node/runtime/wasm/Cargo.lock index b3478b334f..b8e41a4afe 100644 --- a/substrate/node/runtime/wasm/Cargo.lock +++ b/substrate/node/runtime/wasm/Cargo.lock @@ -153,11 +153,16 @@ version = "0.3.54" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "hashdb" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" +name = "hash-db" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#ac74a40f3a05cc047685b2ce439797172e5f29cf" + +[[package]] +name = "hash256-std-hasher" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#ac74a40f3a05cc047685b2ce439797172e5f29cf" dependencies = [ - "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -244,23 +249,20 @@ name = "memoffset" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "memory-db" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#ac74a40f3a05cc047685b2ce439797172e5f29cf" +dependencies = [ + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "memory_units" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "memorydb" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "plain_hasher 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "nan-preserving-float" version = "0.1.0" @@ -270,8 +272,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" name = "node-primitives" version = "0.1.0" dependencies = [ - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0", @@ -285,7 +287,7 @@ version = "0.1.0" dependencies = [ "integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)", "node-primitives 0.1.0", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", @@ -333,14 +335,9 @@ dependencies = [ "stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "parity-bytes" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "parity-codec" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -356,6 +353,16 @@ dependencies = [ "syn 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "parity-codec-derive" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "parity-wasm" version = "0.31.0" @@ -384,26 +391,6 @@ dependencies = [ "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "patricia-trie" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "plain_hasher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "proc-macro-hack" version = "0.4.1" @@ -578,14 +565,13 @@ name = "sr-io" version = "0.1.0" dependencies = [ "environmental 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "sr-std 0.1.0", "substrate-primitives 0.1.0", "substrate-state-machine 0.1.0", - "triehash 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-trie 0.4.0", ] [[package]] @@ -595,7 +581,7 @@ dependencies = [ "integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", @@ -608,7 +594,7 @@ dependencies = [ name = "sr-sandbox" version = "0.1.0" dependencies = [ - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-std 0.1.0", @@ -627,7 +613,7 @@ dependencies = [ name = "sr-version" version = "0.1.0" dependencies = [ - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", @@ -639,7 +625,7 @@ name = "srml-balances" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", @@ -658,7 +644,7 @@ name = "srml-consensus" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", @@ -674,7 +660,7 @@ dependencies = [ name = "srml-contract" version = "0.1.0" dependencies = [ - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-wasm 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)", "pwasm-utils 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", @@ -695,7 +681,7 @@ version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", @@ -717,7 +703,7 @@ name = "srml-democracy" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", @@ -737,7 +723,7 @@ name = "srml-executive" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", @@ -753,7 +739,7 @@ name = "srml-session" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", @@ -774,7 +760,7 @@ name = "srml-staking" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", @@ -799,7 +785,7 @@ version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "mashup 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", @@ -813,7 +799,7 @@ name = "srml-system" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", @@ -830,7 +816,7 @@ name = "srml-timestamp" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", @@ -847,7 +833,7 @@ name = "srml-treasury" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", @@ -878,7 +864,7 @@ dependencies = [ name = "substrate-metadata" version = "0.1.0" dependencies = [ - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", @@ -894,14 +880,12 @@ dependencies = [ "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "hash256-std-hasher 0.9.0 (git+https://github.com/paritytech/trie)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "plain_hasher 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", @@ -917,17 +901,29 @@ name = "substrate-state-machine" version = "0.1.0" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "memorydb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "memory-db 0.9.0 (git+https://github.com/paritytech/trie)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-primitives 0.1.0", - "triehash 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-trie 0.4.0", + "trie-db 0.9.0 (git+https://github.com/paritytech/trie)", + "trie-root 0.9.0 (git+https://github.com/paritytech/trie)", +] + +[[package]] +name = "substrate-trie" +version = "0.4.0" +dependencies = [ + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "memory-db 0.9.0 (git+https://github.com/paritytech/trie)", + "parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "trie-db 0.9.0 (git+https://github.com/paritytech/trie)", + "trie-root 0.9.0 (git+https://github.com/paritytech/trie)", ] [[package]] @@ -949,13 +945,22 @@ dependencies = [ ] [[package]] -name = "triehash" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" +name = "trie-db" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#ac74a40f3a05cc047685b2ce439797172e5f29cf" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "trie-root" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#ac74a40f3a05cc047685b2ce439797172e5f29cf" +dependencies = [ + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", ] [[package]] @@ -1051,7 +1056,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" "checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb" -"checksum hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f1c71fc577cde89b3345d5f2880fecaf462a32e96c619f431279bdaf1ba5ddb1" +"checksum hash-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" +"checksum hash256-std-hasher 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1679e6ea370dee694f91f1dc469bf94cf8f52051d147aec3e1f9497c6fc22461" "checksum hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4da5f0e01bd8a71a224a4eedecaacfcabda388dbb7a80faf04d3514287572d95" "checksum hex-literal-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1d340b6514f232f6db1bd16db65302a5278a04fef9ce867cb932e7e5fa21130a" @@ -1064,21 +1070,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum mashup 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "d886e371548f5c66258a99df9ec03366bff02cc96ea3d3f8f346b5d2d6836de7" "checksum mashup-impl 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8d426741e35fab52542d84dfee615f442c2b37247bee8b1ed5c25ca723487580" "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" +"checksum memory-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum memory_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" -"checksum memorydb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f72c93304ad51e21230ecbd0d2b58a3f94703bf9339d14aed88c3aaf5e8b7a56" "checksum nan-preserving-float 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34d4f00fcc2f4c9efa8cc971db0da9e28290e28e97af47585e48691ef10ff31f" "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2" "checksum num-traits 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "775393e285254d2f5004596d69bb8bc1149754570dcc08cf30cabeba67955e28" "checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30" "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" -"checksum parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fa5168b4cf41f3835e4bc6ffb32f51bc9365dc50cb351904595b3931d917fd0c" -"checksum parity-codec 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "48db1d9442469191a590498ab734a85d98848873267d3e93b37b03538399bd2c" +"checksum parity-codec 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2b47e0394c3720edecb4815258c28e848012a833b649fbf7dce6174365203a2d" "checksum parity-codec-derive 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1eda64d782c342261aea4ca047a609f9bd92d5f9dafabe6b5a396caf5c7b8827" +"checksum parity-codec-derive 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8ad82895f41c3880de6fcb532455ac89c8e499eaed918beb75070c6cde85bba0" "checksum parity-wasm 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e1c91199d14bd5b78ecade323d4a891d094799749c1b9e82d9c590c2e2849a40" "checksum parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e" "checksum parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "4db1a8ccf734a7bce794cc19b3df06ed87ab2f3907036b693c68f56b4d4537fa" -"checksum patricia-trie 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fa27fc4a972a03d64e5170d7facd2c84c6ed425b38ce62ad98dcfee2f7845b3b" -"checksum plain_hasher 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "95fa6386b1d34aaf0adb9b7dd2885dbe7c34190e6263785e5a7ec2b19044a90f" "checksum proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2c725b36c99df7af7bf9324e9c999b9e37d92c8f8caf106d82e1d7953218d2d8" "checksum proc-macro-hack-impl 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2b753ad9ed99dd8efeaa7d2fb8453c8f6bc3e54b97966d35f1bc77ca6865254a" "checksum proc-macro2 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1fa93823f53cfd0f5ac117b189aed6cfdfb2cfc0a9d82e956dd7927595ed7d46" @@ -1103,7 +1107,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "15132e0e364248108c5e2c02e3ab539be8d6f5d52a01ca9bbf27ed657316f02b" "checksum syn 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6dfd71b2be5a58ee30a6f8ea355ba8290d397131c00dfa55c3d34e6e13db5101" "checksum tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e9175261fbdb60781fcd388a4d6cc7e14764a2b629a7ad94abb439aed223a44f" -"checksum triehash 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3da77dc2c88bac48769c53f2c7675d99d522a7fc8130da3fadf29d7c6f94c9ac" +"checksum trie-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" +"checksum trie-root 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum twox-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "475352206e7a290c5fccc27624a163e8d0d115f7bb60ca18a64fc9ce056d7435" "checksum uint 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "754ba11732b9161b94c41798e5197e5e75388d012f760c42adb5000353e98646" "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" diff --git a/substrate/node/service/src/lib.rs b/substrate/node/service/src/lib.rs index 5852ac29f7..03aca2fc67 100644 --- a/substrate/node/service/src/lib.rs +++ b/substrate/node/service/src/lib.rs @@ -48,7 +48,7 @@ use client::Client; use node_network::{Protocol as DemoProtocol, consensus::ConsensusNetwork}; use tokio::runtime::TaskExecutor; use service::FactoryFullConfiguration; -use primitives::{Blake2Hasher, RlpCodec}; +use primitives::{Blake2Hasher}; pub use service::{Roles, PruningMode, TransactionPoolOptions, ErrorKind, Error, ComponentBlock, LightComponents, FullComponents}; @@ -65,9 +65,9 @@ pub trait Components: service::Components { /// Demo API. type Api: 'static + Api + Send + Sync; /// Client backend. - type Backend: 'static + client::backend::Backend; + type Backend: 'static + client::backend::Backend; /// Client executor. - type Executor: 'static + client::CallExecutor + Send + Sync; + type Executor: 'static + client::CallExecutor + Send + Sync; } impl Components for service::LightComponents { diff --git a/substrate/srml/balances/src/mock.rs b/substrate/srml/balances/src/mock.rs index 51b19af284..cf7b4e7efc 100644 --- a/substrate/srml/balances/src/mock.rs +++ b/substrate/srml/balances/src/mock.rs @@ -20,7 +20,7 @@ use primitives::BuildStorage; use primitives::testing::{Digest, DigestItem, Header}; -use substrate_primitives::{H256, Blake2Hasher, RlpCodec}; +use substrate_primitives::{H256, Blake2Hasher}; use runtime_io; use {GenesisConfig, Module, Trait, system}; @@ -51,7 +51,7 @@ impl Trait for Runtime { type Event = (); } -pub fn new_test_ext(ext_deposit: u64, monied: bool) -> runtime_io::TestExternalities { +pub fn new_test_ext(ext_deposit: u64, monied: bool) -> runtime_io::TestExternalities { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); let balance_factor = if ext_deposit > 0 { 256 @@ -74,7 +74,7 @@ pub fn new_test_ext(ext_deposit: u64, monied: bool) -> runtime_io::TestExternali t.into() } -pub fn new_test_ext2(ext_deposit: u64, monied: bool) -> runtime_io::TestExternalities { +pub fn new_test_ext2(ext_deposit: u64, monied: bool) -> runtime_io::TestExternalities { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); let balance_factor = if ext_deposit > 0 { 256 diff --git a/substrate/srml/consensus/src/mock.rs b/substrate/srml/consensus/src/mock.rs index e86731f52d..cae8539a01 100644 --- a/substrate/srml/consensus/src/mock.rs +++ b/substrate/srml/consensus/src/mock.rs @@ -20,7 +20,7 @@ use primitives::{BuildStorage, testing::{Digest, DigestItem, Header}}; use runtime_io; -use substrate_primitives::{H256, Blake2Hasher, RlpCodec}; +use substrate_primitives::{H256, Blake2Hasher}; use {GenesisConfig, Trait, Module, system}; impl_outer_origin!{ @@ -49,7 +49,7 @@ impl system::Trait for Test { type Log = DigestItem; } -pub fn new_test_ext(authorities: Vec) -> runtime_io::TestExternalities { +pub fn new_test_ext(authorities: Vec) -> runtime_io::TestExternalities { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); t.extend(GenesisConfig::{ code: vec![], diff --git a/substrate/srml/contract/src/tests.rs b/substrate/srml/contract/src/tests.rs index 3f744b1bb2..2a4b30116d 100644 --- a/substrate/srml/contract/src/tests.rs +++ b/substrate/srml/contract/src/tests.rs @@ -20,7 +20,7 @@ use runtime_primitives::testing::{Digest, DigestItem, H256, Header}; use runtime_primitives::traits::{BlakeTwo256}; use runtime_primitives::BuildStorage; use runtime_support::StorageMap; -use substrate_primitives::{Blake2Hasher, RlpCodec}; +use substrate_primitives::{Blake2Hasher}; use wabt; use { runtime_io, balances, system, CodeOf, ContractAddressFor, @@ -106,7 +106,7 @@ impl ExtBuilder { self.creation_fee = creation_fee; self } - fn build(self) -> runtime_io::TestExternalities { + fn build(self) -> runtime_io::TestExternalities { let mut t = system::GenesisConfig::::default() .build_storage() .unwrap(); diff --git a/substrate/srml/council/src/lib.rs b/substrate/srml/council/src/lib.rs index ac2c2a6013..1491b83d03 100644 --- a/substrate/srml/council/src/lib.rs +++ b/substrate/srml/council/src/lib.rs @@ -131,7 +131,7 @@ mod tests { pub use primitives::BuildStorage; pub use primitives::traits::{BlakeTwo256}; pub use primitives::testing::{Digest, DigestItem, Header}; - pub use substrate_primitives::{Blake2Hasher, RlpCodec}; + pub use substrate_primitives::{Blake2Hasher}; pub use {seats, motions, voting}; impl_outer_origin! { @@ -191,7 +191,7 @@ mod tests { type Event = Event; } - pub fn new_test_ext(with_council: bool) -> runtime_io::TestExternalities { + pub fn new_test_ext(with_council: bool) -> runtime_io::TestExternalities { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); t.extend(balances::GenesisConfig::{ balances: vec![(1, 10), (2, 20), (3, 30), (4, 40), (5, 50), (6, 60)], diff --git a/substrate/srml/council/src/seats.rs b/substrate/srml/council/src/seats.rs index a64dd4e0c7..fe40e33cae 100644 --- a/substrate/srml/council/src/seats.rs +++ b/substrate/srml/council/src/seats.rs @@ -622,7 +622,7 @@ mod tests { }); } - fn new_test_ext_with_candidate_holes() -> runtime_io::TestExternalities { + fn new_test_ext_with_candidate_holes() -> runtime_io::TestExternalities { let mut t = new_test_ext(false); with_externalities(&mut t, || { >::put(vec![0, 0, 1]); diff --git a/substrate/srml/democracy/src/lib.rs b/substrate/srml/democracy/src/lib.rs index c8e955f277..4d84df650e 100644 --- a/substrate/srml/democracy/src/lib.rs +++ b/substrate/srml/democracy/src/lib.rs @@ -367,7 +367,7 @@ impl primitives::BuildStorage for GenesisConfig mod tests { use super::*; use runtime_io::with_externalities; - use substrate_primitives::{H256, Blake2Hasher, RlpCodec}; + use substrate_primitives::{H256, Blake2Hasher}; use primitives::BuildStorage; use primitives::traits::{BlakeTwo256}; use primitives::testing::{Digest, DigestItem, Header}; @@ -410,7 +410,7 @@ mod tests { type Event = (); } - fn new_test_ext() -> runtime_io::TestExternalities { + fn new_test_ext() -> runtime_io::TestExternalities { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); t.extend(balances::GenesisConfig::{ balances: vec![(1, 10), (2, 20), (3, 30), (4, 40), (5, 50), (6, 60)], diff --git a/substrate/srml/example/src/lib.rs b/substrate/srml/example/src/lib.rs index 6171134e92..47c000c223 100644 --- a/substrate/srml/example/src/lib.rs +++ b/substrate/srml/example/src/lib.rs @@ -326,7 +326,7 @@ mod tests { use super::*; use runtime_io::with_externalities; - use substrate_primitives::{H256, Blake2Hasher, RlpCodec}; + use substrate_primitives::{H256, Blake2Hasher}; use runtime_primitives::BuildStorage; use runtime_primitives::traits::{BlakeTwo256}; use runtime_primitives::testing::DigestItem; @@ -370,7 +370,7 @@ mod tests { // This function basically just builds a genesis storage key/value store according to // our desired mockup. - fn new_test_ext() -> runtime_io::TestExternalities { + fn new_test_ext() -> runtime_io::TestExternalities { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); // We use default for brevity, but you can configure as desired if needed. t.extend(balances::GenesisConfig::::default().build_storage().unwrap()); diff --git a/substrate/srml/executive/src/lib.rs b/substrate/srml/executive/src/lib.rs index 6c128bc546..eb3886d8fd 100644 --- a/substrate/srml/executive/src/lib.rs +++ b/substrate/srml/executive/src/lib.rs @@ -207,8 +207,8 @@ impl< let new_header = >::finalise(); // check digest. uncomment next two lines to figure out next digest hash for tests. -// runtime_io::print(&header.digest().encode()[..]); -// runtime_io::print(&new_header.digest().encode()[..]); + runtime_io::print(&header.digest().encode()[..]); + runtime_io::print(&new_header.digest().encode()[..]); assert!(header.digest() == new_header.digest()); // check storage root. @@ -267,7 +267,7 @@ mod tests { use super::*; use balances::Call; use runtime_io::with_externalities; - use substrate_primitives::{H256, Blake2Hasher, RlpCodec}; + use substrate_primitives::{H256, Blake2Hasher}; use primitives::BuildStorage; use primitives::traits::{Header as HeaderT, BlakeTwo256}; use primitives::testing::{Digest, DigestItem, Header, Block}; @@ -323,7 +323,7 @@ mod tests { reclaim_rebate: 0, }.build_storage().unwrap()); let xt = primitives::testing::TestXt(Some(1), 0, Call::transfer(2.into(), 69)); - let mut t = runtime_io::TestExternalities::::new(t); + let mut t = runtime_io::TestExternalities::::new(t); with_externalities(&mut t, || { Executive::initialise_block(&Header::new(1, H256::default(), H256::default(), [69u8; 32].into(), Digest::default())); @@ -333,7 +333,7 @@ mod tests { }); } - fn new_test_ext() -> runtime_io::TestExternalities { + fn new_test_ext() -> runtime_io::TestExternalities { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); t.extend(balances::GenesisConfig::::default().build_storage().unwrap()); t.into() @@ -346,8 +346,8 @@ mod tests { header: Header { parent_hash: [69u8; 32].into(), number: 1, - state_root: hex!("d1d3da2b1efb1a6ef740b8cdef52e4cf3c6dade6f8a360969fd7ef0034c53b54").into(), - extrinsics_root: hex!("45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0").into(), + state_root: hex!("d9e26179ed13b3df01e71ad0bf622d56f2066a63e04762a83c0ae9deeb4da1d0").into(), + extrinsics_root: hex!("03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314").into(), digest: Digest { logs: vec![], }, }, extrinsics: vec![], @@ -364,7 +364,7 @@ mod tests { parent_hash: [69u8; 32].into(), number: 1, state_root: [0u8; 32].into(), - extrinsics_root: hex!("45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0").into(), + extrinsics_root: hex!("03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314").into(), digest: Digest { logs: vec![], }, }, extrinsics: vec![], @@ -380,7 +380,7 @@ mod tests { header: Header { parent_hash: [69u8; 32].into(), number: 1, - state_root: hex!("d1d3da2b1efb1a6ef740b8cdef52e4cf3c6dade6f8a360969fd7ef0034c53b54").into(), + state_root: hex!("d9e26179ed13b3df01e71ad0bf622d56f2066a63e04762a83c0ae9deeb4da1d0").into(), extrinsics_root: [0u8; 32].into(), digest: Digest { logs: vec![], }, }, diff --git a/substrate/srml/session/src/lib.rs b/substrate/srml/session/src/lib.rs index 24429c2f1f..d9679ada3c 100644 --- a/substrate/srml/session/src/lib.rs +++ b/substrate/srml/session/src/lib.rs @@ -278,7 +278,7 @@ impl primitives::BuildStorage for GenesisConfig mod tests { use super::*; use runtime_io::with_externalities; - use substrate_primitives::{H256, Blake2Hasher, RlpCodec}; + use substrate_primitives::{H256, Blake2Hasher}; use primitives::BuildStorage; use primitives::traits::{Identity, BlakeTwo256}; use primitives::testing::{Digest, DigestItem, Header}; @@ -321,7 +321,7 @@ mod tests { type Consensus = consensus::Module; type Session = Module; - fn new_test_ext() -> runtime_io::TestExternalities { + fn new_test_ext() -> runtime_io::TestExternalities { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); t.extend(consensus::GenesisConfig::{ code: vec![], diff --git a/substrate/srml/staking/src/mock.rs b/substrate/srml/staking/src/mock.rs index 92152ee518..2bfbb3e230 100644 --- a/substrate/srml/staking/src/mock.rs +++ b/substrate/srml/staking/src/mock.rs @@ -21,7 +21,7 @@ use primitives::BuildStorage; use primitives::{Perbill, traits::Identity}; use primitives::testing::{Digest, DigestItem, Header}; -use substrate_primitives::{H256, Blake2Hasher, RlpCodec}; +use substrate_primitives::{H256, Blake2Hasher}; use runtime_io; use {GenesisConfig, Module, Trait, consensus, session, system, timestamp, balances}; @@ -78,7 +78,7 @@ pub fn new_test_ext( current_era: u64, monied: bool, reward: u64 -) -> runtime_io::TestExternalities { +) -> runtime_io::TestExternalities { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); let balance_factor = if ext_deposit > 0 { 256 diff --git a/substrate/srml/support/src/storage/mod.rs b/substrate/srml/support/src/storage/mod.rs index df3a49f802..e97988a500 100644 --- a/substrate/srml/support/src/storage/mod.rs +++ b/substrate/srml/support/src/storage/mod.rs @@ -543,11 +543,11 @@ pub mod unhashed { #[cfg(test)] mod tests { use super::*; - use runtime_io::{twox_128, TestExternalities, RlpCodec, with_externalities}; + use runtime_io::{twox_128, TestExternalities, with_externalities}; #[test] fn integers_can_be_stored() { - let mut t = TestExternalities::<_, RlpCodec>::default(); + let mut t = TestExternalities::default(); with_externalities(&mut t, || { let x = 69u32; put(b":test", &x); @@ -564,7 +564,7 @@ mod tests { #[test] fn bools_can_be_stored() { - let mut t = TestExternalities::<_, RlpCodec>::default(); + let mut t = TestExternalities::default(); with_externalities(&mut t, || { let x = true; put(b":test", &x); @@ -582,7 +582,7 @@ mod tests { #[test] fn vecs_can_be_retrieved() { - let mut t = TestExternalities::<_, RlpCodec>::default(); + let mut t = TestExternalities::default(); with_externalities(&mut t, || { runtime_io::set_storage(&twox_128(b":test"), b"\x2cHello world"); let x = b"Hello world".to_vec(); @@ -594,7 +594,7 @@ mod tests { #[test] fn vecs_can_be_stored() { - let mut t = TestExternalities::<_, RlpCodec>::default(); + let mut t = TestExternalities::default(); let x = b"Hello world".to_vec(); with_externalities(&mut t, || { diff --git a/substrate/srml/system/src/lib.rs b/substrate/srml/system/src/lib.rs index 5628067244..1867e9eb71 100644 --- a/substrate/srml/system/src/lib.rs +++ b/substrate/srml/system/src/lib.rs @@ -53,7 +53,7 @@ use safe_mix::TripletMix; use codec::Encode; #[cfg(any(feature = "std", test))] -use runtime_io::{twox_128, TestExternalities, Blake2Hasher, RlpCodec}; +use runtime_io::{twox_128, TestExternalities, Blake2Hasher}; #[cfg(any(feature = "std", test))] use substrate_primitives::ChangesTrieConfiguration; @@ -311,7 +311,7 @@ impl Module { /// Get the basic externalities for this module, useful for tests. #[cfg(any(feature = "std", test))] - pub fn externalities() -> TestExternalities { + pub fn externalities() -> TestExternalities { TestExternalities::new(map![ twox_128(&>::key_for(T::BlockNumber::zero())).to_vec() => [69u8; 32].encode(), // TODO: replace with Hash::default().encode twox_128(>::key()).to_vec() => T::BlockNumber::one().encode(), @@ -484,7 +484,7 @@ mod tests { type System = Module; - fn new_test_ext() -> runtime_io::TestExternalities { + fn new_test_ext() -> runtime_io::TestExternalities { GenesisConfig::::default().build_storage().unwrap().into() } diff --git a/substrate/srml/timestamp/src/lib.rs b/substrate/srml/timestamp/src/lib.rs index 3a3989cb74..244a9b0fa3 100644 --- a/substrate/srml/timestamp/src/lib.rs +++ b/substrate/srml/timestamp/src/lib.rs @@ -167,10 +167,10 @@ impl runtime_primitives::BuildStorage for GenesisConfig mod tests { use super::*; - use runtime_io::{with_externalities, TestExternalities, RlpCodec}; + use runtime_io::{with_externalities, TestExternalities}; use substrate_primitives::H256; use runtime_primitives::BuildStorage; - use runtime_primitives::traits::{BlakeTwo256}; + use runtime_primitives::traits::BlakeTwo256; use runtime_primitives::testing::{Digest, DigestItem, Header}; impl_outer_origin! { @@ -208,7 +208,7 @@ mod tests { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); t.extend(GenesisConfig:: { period: 0 }.build_storage().unwrap()); - with_externalities(&mut TestExternalities::<_, RlpCodec>::new(t), || { + with_externalities(&mut TestExternalities::new(t), || { Timestamp::set_timestamp(42); assert_ok!(Timestamp::dispatch(Call::set(69), Origin::INHERENT)); assert_eq!(Timestamp::now(), 69); @@ -221,7 +221,7 @@ mod tests { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); t.extend(GenesisConfig:: { period: 5 }.build_storage().unwrap()); - with_externalities(&mut TestExternalities::<_, RlpCodec>::new(t), || { + with_externalities(&mut TestExternalities::new(t), || { Timestamp::set_timestamp(42); assert_ok!(Timestamp::dispatch(Call::set(69), Origin::INHERENT)); let _ = Timestamp::dispatch(Call::set(70), Origin::INHERENT); @@ -234,7 +234,7 @@ mod tests { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); t.extend(GenesisConfig:: { period: 5 }.build_storage().unwrap()); - with_externalities(&mut TestExternalities::<_, RlpCodec>::new(t), || { + with_externalities(&mut TestExternalities::new(t), || { Timestamp::set_timestamp(42); let _ = Timestamp::dispatch(Call::set(46), Origin::INHERENT); }); diff --git a/substrate/srml/treasury/src/lib.rs b/substrate/srml/treasury/src/lib.rs index a6cf8ffefa..4668099e16 100644 --- a/substrate/srml/treasury/src/lib.rs +++ b/substrate/srml/treasury/src/lib.rs @@ -331,7 +331,7 @@ mod tests { use super::*; use runtime_io::with_externalities; - use substrate_primitives::{H256, Blake2Hasher, RlpCodec}; + use substrate_primitives::{H256, Blake2Hasher}; use runtime_primitives::BuildStorage; use runtime_primitives::traits::{BlakeTwo256}; use runtime_primitives::testing::{Digest, DigestItem, Header}; @@ -369,7 +369,7 @@ mod tests { type Balances = balances::Module; type Treasury = Module; - fn new_test_ext() -> runtime_io::TestExternalities { + fn new_test_ext() -> runtime_io::TestExternalities { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); t.extend(balances::GenesisConfig::{ balances: vec![(0, 100), (1, 99), (2, 1)],