From 45e0ee8163e6acf30af6ec516bc315b853e643c4 Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 11 Jul 2018 11:53:26 +0200 Subject: [PATCH 01/97] Genric over hasher --- Cargo.lock | 158 +++++++++++------- substrate/client/db/Cargo.toml | 12 +- substrate/keystore/Cargo.toml | 2 +- substrate/state-machine/Cargo.toml | 10 +- substrate/state-machine/src/backend.rs | 48 +++--- substrate/state-machine/src/ext.rs | 24 ++- substrate/state-machine/src/lib.rs | 42 +++-- .../state-machine/src/proving_backend.rs | 35 ++-- substrate/state-machine/src/testing.rs | 9 +- substrate/state-machine/src/trie_backend.rs | 112 +++++++------ 10 files changed, 268 insertions(+), 184 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 859d0837151a4..a73898e5cda91 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -732,11 +732,11 @@ dependencies = [ [[package]] name = "hashdb" -version = "0.1.1" -source = "git+https://github.com/paritytech/parity.git#4145be863bec10038fc0ac5d36a41365b5087344" +version = "0.2.0" +source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -972,6 +972,17 @@ dependencies = [ "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "keccak-hasher" +version = "0.1.0" +source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" +dependencies = [ + "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", + "plain_hasher 0.1.0 (git+https://github.com/paritytech/parity-common)", + "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "kernel32-sys" version = "0.2.2" @@ -984,35 +995,34 @@ dependencies = [ [[package]] name = "kvdb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity.git#4145be863bec10038fc0ac5d36a41365b5087344" +source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethcore-bytes 0.1.0 (git+https://github.com/paritytech/parity.git)", + "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common)", ] [[package]] name = "kvdb-memorydb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity.git#4145be863bec10038fc0ac5d36a41365b5087344" +source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" dependencies = [ - "kvdb 0.1.0 (git+https://github.com/paritytech/parity.git)", - "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common)", + "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "kvdb-rocksdb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity.git#4145be863bec10038fc0ac5d36a41365b5087344" +source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "fs-swap 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "interleaved-ordered 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "kvdb 0.1.0 (git+https://github.com/paritytech/parity.git)", + "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "rocksdb 0.4.5 (git+https://github.com/paritytech/rust-rocksdb)", ] @@ -1112,16 +1122,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "memorydb" -version = "0.1.1" -source = "git+https://github.com/paritytech/parity.git#4145be863bec10038fc0ac5d36a41365b5087344" +version = "0.2.0" +source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.1.1 (git+https://github.com/paritytech/parity.git)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "keccak-hash 0.1.2 (git+https://github.com/paritytech/parity.git)", - "plain_hasher 0.1.0 (git+https://github.com/paritytech/parity.git)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity.git)", + "plain_hasher 0.1.0 (git+https://github.com/paritytech/parity-common)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", ] [[package]] @@ -1264,6 +1272,23 @@ 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 = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" + +[[package]] +name = "parity-crypto" +version = "0.1.0" +source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" +dependencies = [ + "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", + "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "parity-wasm" version = "0.31.0" @@ -1327,20 +1352,15 @@ source = "git+https://github.com/paritytech/parity.git#4145be863bec10038fc0ac5d3 [[package]] name = "patricia-trie" -version = "0.1.0" -source = "git+https://github.com/paritytech/parity.git#4145be863bec10038fc0ac5d36a41365b5087344" +version = "0.2.1" +source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethcore-bytes 0.1.0 (git+https://github.com/paritytech/parity.git)", - "ethcore-logger 1.12.0 (git+https://github.com/paritytech/parity.git)", - "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.1.1 (git+https://github.com/paritytech/parity.git)", - "keccak-hash 0.1.2 (git+https://github.com/paritytech/parity.git)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", + "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "memorydb 0.1.1 (git+https://github.com/paritytech/parity.git)", + "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity.git)", - "triehash 0.1.0 (git+https://github.com/paritytech/parity.git)", ] [[package]] @@ -1356,10 +1376,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "plain_hasher" version = "0.1.0" -source = "git+https://github.com/paritytech/parity.git#4145be863bec10038fc0ac5d36a41365b5087344" +source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" dependencies = [ "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", ] [[package]] @@ -1818,6 +1839,17 @@ dependencies = [ "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "rlp" +version = "0.2.1" +source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" +dependencies = [ + "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "rlp" version = "0.2.1" @@ -2091,9 +2123,9 @@ dependencies = [ [[package]] name = "snappy-sys" version = "0.1.0" -source = "git+https://github.com/paritytech/rust-snappy#40ac9a0d9fd613e7f38df800a11a589b7296da73" +source = "git+https://github.com/paritytech/rust-snappy#798408ffef8f86dd51481673aca10f5348d7491b" dependencies = [ - "cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "cmake 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2163,14 +2195,14 @@ name = "substrate-client-db" version = "0.1.0" dependencies = [ "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.1.1 (git+https://github.com/paritytech/parity.git)", - "kvdb 0.1.0 (git+https://github.com/paritytech/parity.git)", - "kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity.git)", - "kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity.git)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", + "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common)", + "kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common)", + "kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity-common)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "memorydb 0.1.1 (git+https://github.com/paritytech/parity.git)", + "memorydb 0.2.0 (git+https://github.com/paritytech/parity-common)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.1.0 (git+https://github.com/paritytech/parity.git)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", "substrate-client 0.1.0", "substrate-codec 0.1.0", "substrate-executor 0.1.0", @@ -2199,7 +2231,7 @@ dependencies = [ "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)", - "parking_lot 0.6.2 (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)", "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)", @@ -2241,8 +2273,8 @@ version = "0.1.0" dependencies = [ "ed25519 0.1.0", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethcore-crypto 0.1.0 (git+https://github.com/paritytech/parity.git)", "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common)", "rand 0.4.2 (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)", @@ -2623,14 +2655,16 @@ version = "0.1.0" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.1.1 (git+https://github.com/paritytech/parity.git)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "keccak-hasher 0.1.0 (git+https://github.com/paritytech/parity-common)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "memorydb 0.1.1 (git+https://github.com/paritytech/parity.git)", + "memorydb 0.2.0 (git+https://github.com/paritytech/parity-common)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.1.0 (git+https://github.com/paritytech/parity.git)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", "substrate-primitives 0.1.0", - "triehash 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "triehash 0.2.0 (git+https://github.com/paritytech/parity-common)", ] [[package]] @@ -2975,24 +3009,24 @@ dependencies = [ [[package]] name = "triehash" -version = "0.1.0" -source = "git+https://github.com/paritytech/parity.git#4145be863bec10038fc0ac5d36a41365b5087344" +version = "0.1.2" +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)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "keccak-hash 0.1.2 (git+https://github.com/paritytech/parity.git)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity.git)", + "keccak-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rlp 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "triehash" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" +version = "0.2.0" +source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "keccak-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", ] [[package]] @@ -3339,7 +3373,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb" "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.1.1 (git+https://github.com/paritytech/parity.git)" = "" +"checksum hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)" = "" "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" @@ -3363,10 +3397,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum jsonrpc-ws-server 8.0.0 (git+https://github.com/paritytech/jsonrpc.git)" = "" "checksum keccak-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b7f51f30d7986536accaec4a6a288008dfb3dbffe8a2863a65292bc395a3ae7" "checksum keccak-hash 0.1.2 (git+https://github.com/paritytech/parity.git)" = "" +"checksum keccak-hasher 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -"checksum kvdb 0.1.0 (git+https://github.com/paritytech/parity.git)" = "" -"checksum kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity.git)" = "" -"checksum kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity.git)" = "" +"checksum kvdb 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" +"checksum kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" +"checksum kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" "checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" "checksum lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e6412c5e2ad9584b0b8e979393122026cdd6d2a80b933f890dcd694ddbe73739" @@ -3382,7 +3417,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "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_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" -"checksum memorydb 0.1.1 (git+https://github.com/paritytech/parity.git)" = "" +"checksum memorydb 0.2.0 (git+https://github.com/paritytech/parity-common)" = "" "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" @@ -3398,6 +3433,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "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 (git+https://github.com/paritytech/parity-common)" = "" +"checksum parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum parity-wasm 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e1c91199d14bd5b78ecade323d4a891d094799749c1b9e82d9c590c2e2849a40" "checksum parity-wordlist 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d0dec124478845b142f68b446cbee953d14d4b41f1bc0425024417720dce693" "checksum parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e" @@ -3405,10 +3442,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "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 path 0.1.0 (git+https://github.com/paritytech/parity.git)" = "" -"checksum patricia-trie 0.1.0 (git+https://github.com/paritytech/parity.git)" = "" +"checksum patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" "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.1.0 (git+https://github.com/paritytech/parity.git)" = "" +"checksum plain_hasher 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "28ea5118e2f41bfbc974b28d88c07621befd1fa5d6ec23549be96302a1a59dd2" "checksum proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ba8d4f9257b85eb6cdf13f055cea3190520aab1409ca2ab43493ea4820c25f0" "checksum proc-macro-hack-impl 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d5cb6f960ad471404618e9817c0e5d10b1ae74cfdf01fab89ea0641fe7fb2892" @@ -3430,6 +3467,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5" "checksum rhododendron 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9e38401cc1b63e71ec9119115c7e1354fcf54c8006ad59a22409dd8bd93737b2" "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" +"checksum rlp 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" "checksum rlp 0.2.1 (git+https://github.com/paritytech/parity.git)" = "" "checksum rlp 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "89db7f8dfdd5eb7ab3ac3ece7a07fd273a680b4b224cb231181280e8996f9f0b" "checksum rocksdb 0.4.5 (git+https://github.com/paritytech/rust-rocksdb)" = "" @@ -3497,8 +3535,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "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.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "be1efb673ddf49ab4a99893eb3af02f6563636033fb832c2b7f937641ad62b17" -"checksum triehash 0.1.0 (git+https://github.com/paritytech/parity.git)" = "" "checksum triehash 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2033893a813c70e7d8a739ca6c36dc0a7a2c913ec718d7cbf84a3837bbe3c7ce" +"checksum triehash 0.2.0 (git+https://github.com/paritytech/parity-common)" = "" "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/client/db/Cargo.toml b/substrate/client/db/Cargo.toml index 5a26a7cdb8537..9f139e3720d5c 100644 --- a/substrate/client/db/Cargo.toml +++ b/substrate/client/db/Cargo.toml @@ -6,12 +6,12 @@ authors = ["Parity Technologies "] [dependencies] parking_lot = "0.4" log = "0.3" -kvdb = { git = "https://github.com/paritytech/parity.git" } -kvdb-rocksdb = { git = "https://github.com/paritytech/parity.git" } +kvdb = { git = "https://github.com/paritytech/parity-common" } +kvdb-rocksdb = { git = "https://github.com/paritytech/parity-common" } ethereum-types = "0.3" -hashdb = { git = "https://github.com/paritytech/parity.git" } -patricia-trie = { git = "https://github.com/paritytech/parity.git" } -memorydb = { git = "https://github.com/paritytech/parity.git" } +hashdb = { git = "https://github.com/paritytech/parity-common" } +patricia-trie = { git = "https://github.com/paritytech/parity-common" } +memorydb = { git = "https://github.com/paritytech/parity-common" } substrate-primitives = { path = "../../../substrate/primitives" } substrate-runtime-primitives = { path = "../../../substrate/runtime/primitives" } substrate-client = { path = "../../../substrate/client" } @@ -22,4 +22,4 @@ substrate-executor = { path = "../../../substrate/executor" } substrate-state-db = { path = "../../../substrate/state-db" } [dev-dependencies] -kvdb-memorydb = { git = "https://github.com/paritytech/parity.git" } +kvdb-memorydb = { git = "https://github.com/paritytech/parity-common" } diff --git a/substrate/keystore/Cargo.toml b/substrate/keystore/Cargo.toml index 88ec623f34d4d..5aa791ca4d99c 100644 --- a/substrate/keystore/Cargo.toml +++ b/substrate/keystore/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" authors = ["Parity Technologies "] [dependencies] -ethcore-crypto = { git = "https://github.com/paritytech/parity.git", default_features = false } +parity-crypto = { git = "https://github.com/paritytech/parity-common.git", default_features = false } ed25519 = { path = "../ed25519" } error-chain = "0.12" hex = "0.3" diff --git a/substrate/state-machine/Cargo.toml b/substrate/state-machine/Cargo.toml index 17b072c4c6687..206b6972ae178 100644 --- a/substrate/state-machine/Cargo.toml +++ b/substrate/state-machine/Cargo.toml @@ -10,10 +10,12 @@ ethereum-types = "0.3" hex-literal = "0.1.0" log = "0.3" parking_lot = "0.4" -triehash = "0.1" substrate-primitives = { path = "../primitives", version = "0.1.0" } -hashdb = { git = "https://github.com/paritytech/parity.git" } -memorydb = { git = "https://github.com/paritytech/parity.git" } -patricia-trie = { git = "https://github.com/paritytech/parity.git" } +hashdb = { git = "https://github.com/paritytech/parity-common" } +keccak-hasher = { git = "https://github.com/paritytech/parity-common" } +memorydb = { git = "https://github.com/paritytech/parity-common" } +patricia-trie = { git = "https://github.com/paritytech/parity-common" } +triehash = { git = "https://github.com/paritytech/parity-common" } +rlp = { git = "https://github.com/paritytech/parity-common" } diff --git a/substrate/state-machine/src/backend.rs b/substrate/state-machine/src/backend.rs index 457a40dcc5382..f05754523b951 100644 --- a/substrate/state-machine/src/backend.rs +++ b/substrate/state-machine/src/backend.rs @@ -17,15 +17,20 @@ //! State machine backends. These manage the code and storage of contracts. use std::{error, fmt}; +use std::cmp::Ord; use std::collections::HashMap; +use std::marker::PhantomData; use std::sync::Arc; + +use hashdb::Hasher; +use rlp::Encodable; use trie_backend::{TryIntoTrieBackend, TrieBackend}; /// 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: TryIntoTrieBackend { +pub trait Backend: TryIntoTrieBackend { /// An error type when fetching data is not possible. type Error: super::Error; @@ -41,8 +46,10 @@ pub trait Backend: TryIntoTrieBackend { /// Calculate the storage root, with given delta over what is already stored in /// the backend, and produce a "transaction" that can be used to commit. - fn storage_root(&self, delta: I) -> ([u8; 32], Self::Transaction) - where I: IntoIterator, Option>)>; + fn storage_root(&self, delta: I) -> (H::Out, Self::Transaction) + where + I: IntoIterator, Option>)>, + H::Out: Ord + Encodable; /// Get all key/value pairs into a Vec. fn pairs(&self) -> Vec<(Vec, Vec)>; @@ -66,21 +73,23 @@ impl error::Error for Void { /// In-memory backend. Fully recomputes tries on each commit but useful for /// tests. #[derive(Clone, PartialEq, Eq)] -pub struct InMemory { +pub struct InMemory { inner: Arc, Vec>>, + _marker: PhantomData, } -impl Default for InMemory { +impl Default for InMemory { fn default() -> Self { InMemory { inner: Arc::new(Default::default()), + _marker: PhantomData, } } } -impl InMemory { +impl InMemory { /// 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 { @@ -93,15 +102,15 @@ impl InMemory { } } -impl From, Vec>> for InMemory { +impl From, Vec>> for InMemory { fn from(inner: HashMap, Vec>) -> Self { InMemory { - inner: Arc::new(inner), + inner: Arc::new(inner), _marker: PhantomData } } } -impl Backend for InMemory { +impl Backend for InMemory { type Error = Void; type Transaction = Vec<(Vec, Option>)>; @@ -113,17 +122,19 @@ impl Backend for InMemory { self.inner.keys().filter(|key| key.starts_with(prefix)).map(|k| &**k).for_each(f); } - fn storage_root(&self, delta: I) -> ([u8; 32], Self::Transaction) - where I: IntoIterator, Option>)> + fn storage_root(&self, delta: I) -> (H::Out, Self::Transaction) + where + I: IntoIterator, Option>)>, + ::Out: Ord + Encodable, { 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 = ::triehash::trie_root::(existing_pairs.chain(transaction.iter().cloned()) .collect::>() .into_iter() .filter_map(|(k, maybe_val)| maybe_val.map(|val| (k, val))) - ).0; + ); (root, transaction) } @@ -133,14 +144,13 @@ impl Backend for InMemory { } } -impl TryIntoTrieBackend for InMemory { - fn try_into_trie_backend(self) -> Option { - use ethereum_types::H256 as TrieH256; +impl TryIntoTrieBackend for InMemory { + fn try_into_trie_backend(self) -> Option> { use memorydb::MemoryDB; use patricia_trie::{TrieDBMut, TrieMut}; - let mut root = TrieH256::default(); - let mut mdb = MemoryDB::default(); + let mut root = ::Out::default(); + let mut mdb = MemoryDB::new(); { let mut trie = TrieDBMut::new(&mut mdb, &mut root); for (key, value) in self.inner.iter() { diff --git a/substrate/state-machine/src/ext.rs b/substrate/state-machine/src/ext.rs index 5c5b9b573627d..7c2ce83468573 100644 --- a/substrate/state-machine/src/ext.rs +++ b/substrate/state-machine/src/ext.rs @@ -16,9 +16,11 @@ //! Conrete externalities implementation. -use std::{error, fmt}; +use std::{error, fmt, cmp::Ord}; use backend::Backend; use {Externalities, OverlayedChanges}; +use hashdb::Hasher; +use rlp::Encodable; /// Errors that can occur when interacting with the externalities. #[derive(Debug, Copy, Clone)] @@ -50,16 +52,21 @@ impl error::Error for Error { } /// Wraps a read-only backend, call executor, and current overlayed changes. -pub struct Ext<'a, B: 'a + Backend> { +pub struct Ext<'a, H: Hasher, B: 'a + Backend> { // The overlayed changes to write to. overlay: &'a mut OverlayedChanges, // The storage backend to read from. backend: &'a B, // The transaction necessary to commit to the backend. - transaction: Option<(B::Transaction, [u8; 32])>, + transaction: Option<(B::Transaction, H::Out)>, } -impl<'a, B: 'a + Backend> Ext<'a, B> { +impl<'a, H, B> Ext<'a, H, B> +where + H: Hasher, + B: 'a + Backend, + H::Out: Ord + Encodable +{ /// Create a new `Ext` from overlayed changes and read-only backend pub fn new(overlay: &'a mut OverlayedChanges, backend: &'a B) -> Self { Ext { @@ -99,8 +106,11 @@ impl<'a, B: 'a + Backend> Ext<'a, B> { } } -impl<'a, B: 'a> Externalities for Ext<'a, B> - where B: Backend +impl<'a, B: 'a, H> Externalities for Ext<'a, H, B> +where + H: Hasher, + B: 'a + Backend, + H::Out: Ord + Encodable { fn storage(&self, key: &[u8]) -> Option> { self.overlay.storage(key).map(|x| x.map(|x| x.to_vec())).unwrap_or_else(|| @@ -123,7 +133,7 @@ impl<'a, B: 'a> Externalities for Ext<'a, B> 42 } - fn storage_root(&mut self) -> [u8; 32] { + fn storage_root(&mut self) -> H::Out where H::Out: Ord + Encodable { if let Some((_, ref root)) = self.transaction { return root.clone(); } diff --git a/substrate/state-machine/src/lib.rs b/substrate/state-machine/src/lib.rs index e0119edeaaa40..c775d3a7d1dfa 100644 --- a/substrate/state-machine/src/lib.rs +++ b/substrate/state-machine/src/lib.rs @@ -29,13 +29,15 @@ extern crate hashdb; extern crate memorydb; extern crate triehash; extern crate patricia_trie; - extern crate byteorder; extern crate parking_lot; +extern crate rlp; use std::collections::HashMap; use std::collections::hash_map::Drain; use std::fmt; +use rlp::Encodable; +use hashdb::Hasher; pub mod backend; mod ext; @@ -46,7 +48,7 @@ mod trie_backend; pub use testing::TestExternalities; pub use ext::Ext; pub use backend::Backend; -pub use trie_backend::{TryIntoTrieBackend, TrieBackend, TrieH256, Storage, DBValue}; +pub use trie_backend::{TryIntoTrieBackend, TrieBackend, Storage, DBValue}; /// The overlayed changes to state to be queried on top of the backend. /// @@ -118,7 +120,7 @@ impl fmt::Display for ExecutionError { } /// Externalities: pinned to specific active address. -pub trait Externalities { +pub trait Externalities { /// Read storage of current contract being called. fn storage(&self, key: &[u8]) -> Option>; @@ -142,16 +144,16 @@ pub trait Externalities { fn chain_id(&self) -> u64; /// Get the trie root of the current storage map. - fn storage_root(&mut self) -> [u8; 32]; + fn storage_root(&mut self) -> H::Out where H::Out: Ord + Encodable; } /// Code execution engine. -pub trait CodeExecutor: Sized + Send + Sync { +pub trait CodeExecutor: Sized + Send + Sync { /// Externalities error type. type Error: Error; /// Call a given method in the runtime. - fn call( + fn call>( &self, ext: &mut E, code: &[u8], @@ -168,13 +170,18 @@ pub trait CodeExecutor: Sized + Send + Sync { /// /// 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( +pub fn execute( backend: &B, overlay: &mut OverlayedChanges, exec: &Exec, method: &str, call_data: &[u8], ) -> Result<(Vec, B::Transaction), Box> +where + H: Hasher, + Exec: CodeExecutor, + B: Backend, + H::Out: Ord + Encodable { let result = { let mut externalities = ext::Ext::new(overlay, backend); @@ -212,13 +219,18 @@ pub fn execute( /// /// 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, method: &str, call_data: &[u8], -) -> Result<(Vec, Vec>, ::Transaction), Box> +) -> Result<(Vec, Vec>, as Backend>::Transaction), Box> +where + H: Hasher, + Exec: CodeExecutor, + B: TryIntoTrieBackend, + H::Out: Ord + Encodable { let trie_backend = backend.try_into_trie_backend() .ok_or_else(|| Box::new(ExecutionError::UnableToGenerateProof) as Box)?; @@ -229,16 +241,20 @@ pub fn prove_execution( } /// Check execution proof, generated by `prove_execution` call. -pub fn execution_proof_check( - root: [u8; 32], +pub fn execution_proof_check( + root: H::Out, proof: Vec>, overlay: &mut OverlayedChanges, exec: &Exec, method: &str, call_data: &[u8], -) -> Result<(Vec, memorydb::MemoryDB), Box> +) -> Result<(Vec, memorydb::MemoryDB), Box> +where + H: Hasher, + Exec: CodeExecutor, + H::Out: Ord + Encodable { - let backend = proving_backend::create_proof_check_backend(root.into(), proof)?; + let backend = proving_backend::create_proof_check_backend(root, proof)?; execute(&backend, overlay, exec, method, call_data) } diff --git a/substrate/state-machine/src/proving_backend.rs b/substrate/state-machine/src/proving_backend.rs index 70961adc96902..138e0502db963 100644 --- a/substrate/state-machine/src/proving_backend.rs +++ b/substrate/state-machine/src/proving_backend.rs @@ -17,23 +17,23 @@ //! Proving state machine backend. use std::cell::RefCell; -use ethereum_types::H256 as TrieH256; -use hashdb::HashDB; +use hashdb::{Hasher, HashDB}; use memorydb::MemoryDB; use patricia_trie::{TrieDB, TrieError, Trie, Recorder}; use trie_backend::{TrieBackend, Ephemeral}; use {Error, ExecutionError, Backend, TryIntoTrieBackend}; +use rlp::Encodable; /// 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 { - backend: TrieBackend, - proof_recorder: RefCell, +pub struct ProvingBackend { + backend: TrieBackend, + proof_recorder: RefCell>, } -impl ProvingBackend { +impl 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()), @@ -50,18 +50,21 @@ impl ProvingBackend { } } -impl Backend for ProvingBackend { +impl Backend for ProvingBackend +where + H: Hasher, + H::Out: Ord + Encodable +{ type Error = String; - type Transaction = MemoryDB; + type Transaction = MemoryDB; fn storage(&self, key: &[u8]) -> Result>, Self::Error> { - let mut read_overlay = MemoryDB::default(); + let mut read_overlay = MemoryDB::new(); let eph = Ephemeral::new( self.backend.backend_storage(), &mut read_overlay, ); - - let map_e = |e: Box| format!("Trie lookup error: {}", e); + let map_e = |e: Box>| format!("Trie lookup error: {}", e); let mut proof_recorder = self.proof_recorder.try_borrow_mut() .expect("only fails when already borrowed; storage() is non-reentrant; qed"); @@ -77,21 +80,21 @@ impl Backend for ProvingBackend { self.backend.pairs() } - fn storage_root(&self, delta: I) -> ([u8; 32], MemoryDB) + fn storage_root(&self, delta: I) -> (H::Out, MemoryDB) where I: IntoIterator, Option>)> { self.backend.storage_root(delta) } } -impl TryIntoTrieBackend for ProvingBackend { - fn try_into_trie_backend(self) -> Option { +impl TryIntoTrieBackend for ProvingBackend { + fn try_into_trie_backend(self) -> Option> { None } } /// Create proof check backend. -pub fn create_proof_check_backend(root: TrieH256, proof: Vec>) -> Result> { +pub fn create_proof_check_backend(root: H::Out, proof: Vec>) -> Result, Box> { let mut db = MemoryDB::new(); for item in proof { db.insert(&item); diff --git a/substrate/state-machine/src/testing.rs b/substrate/state-machine/src/testing.rs index 7b85b523cd47a..61463339ea1d7 100644 --- a/substrate/state-machine/src/testing.rs +++ b/substrate/state-machine/src/testing.rs @@ -17,13 +17,16 @@ //! Test implementation for Externalities. use std::collections::HashMap; +use std::cmp::Ord; use super::Externalities; use triehash::trie_root; +use hashdb::Hasher; +use rlp::Encodable; /// Simple HashMap based Externalities impl. pub type TestExternalities = HashMap, Vec>; -impl Externalities for TestExternalities { +impl Externalities for TestExternalities where H::Out: Ord + Encodable { fn storage(&self, key: &[u8]) -> Option> { self.get(key).map(|x| x.to_vec()) } @@ -43,8 +46,8 @@ impl Externalities for TestExternalities { fn chain_id(&self) -> u64 { 42 } - fn storage_root(&mut self) -> [u8; 32] { - trie_root(self.clone()).0 + fn storage_root(&mut self) -> H::Out { + trie_root::(self.clone()) } } diff --git a/substrate/state-machine/src/trie_backend.rs b/substrate/state-machine/src/trie_backend.rs index 628bb04fbf941..4e45cdfc95c94 100644 --- a/substrate/state-machine/src/trie_backend.rs +++ b/substrate/state-machine/src/trie_backend.rs @@ -16,37 +16,37 @@ //! Trie-based state machine backend. -use std::collections::HashMap; -use std::sync::Arc; -use hashdb::HashDB; +use Backend; +use hashdb::{Hasher, HashDB, AsHashDB}; use memorydb::MemoryDB; use patricia_trie::{TrieDB, TrieDBMut, TrieError, Trie, TrieMut}; -use {Backend}; -pub use ethereum_types::H256 as TrieH256; +use std::collections::HashMap; +use std::sync::Arc; + pub use hashdb::DBValue; /// Backend trie storage trait. -pub trait Storage: Send + Sync { +pub trait Storage: Send + Sync { /// Get a trie node. - fn get(&self, key: &TrieH256) -> Result, String>; + fn get(&self, key: &H::Out) -> Result, String>; } /// Try convert into trie-based backend. -pub trait TryIntoTrieBackend { +pub trait TryIntoTrieBackend { /// Try to convert self into trie backend. - fn try_into_trie_backend(self) -> Option; + fn try_into_trie_backend(self) -> Option>; } /// Patricia trie-based backend. Transaction type is an overlay of changes to commit. #[derive(Clone)] -pub struct TrieBackend { - storage: TrieBackendStorage, - root: TrieH256, +pub struct TrieBackend { + storage: TrieBackendStorage, + root: H::Out, } -impl TrieBackend { +impl TrieBackend { /// Create new trie-based backend. - pub fn with_storage(db: Arc, root: TrieH256) -> Self { + pub fn with_storage(db: Arc>, root: H::Out) -> Self { TrieBackend { storage: TrieBackendStorage::Storage(db), root, @@ -54,16 +54,16 @@ impl TrieBackend { } /// Create new trie-based backend for genesis block. - pub fn with_storage_for_genesis(db: Arc) -> Self { - let mut root = TrieH256::default(); - let mut mdb = MemoryDB::default(); + pub fn with_storage_for_genesis(db: Arc>) -> Self { + let mut root = ::Out::default(); + let mut mdb = MemoryDB::::new(); TrieDBMut::new(&mut mdb, &mut root); Self::with_storage(db, root) } /// Create new trie-based backend backed by MemoryDb storage. - pub fn with_memorydb(db: MemoryDB, root: TrieH256) -> Self { + pub fn with_memorydb(db: MemoryDB, root: H::Out) -> Self { // TODO: check that root is a part of db??? TrieBackend { storage: TrieBackendStorage::MemoryDb(db), @@ -72,53 +72,49 @@ impl TrieBackend { } /// Get backend storage reference. - pub fn backend_storage(&self) -> &TrieBackendStorage { + pub fn backend_storage(&self) -> &TrieBackendStorage { &self.storage } /// Get trie root. - pub fn root(&self) -> &TrieH256 { + pub fn root(&self) -> &H::Out { &self.root } } -impl Backend for TrieBackend { +impl Backend for TrieBackend { type Error = String; - type Transaction = MemoryDB; + type Transaction = MemoryDB; fn storage(&self, key: &[u8]) -> Result>, Self::Error> { - let mut read_overlay = MemoryDB::default(); + let mut read_overlay = MemoryDB::new(); let eph = Ephemeral { storage: &self.storage, overlay: &mut read_overlay, }; - let map_e = |e: Box| format!("Trie lookup error: {}", e); + let map_e = |e: Box>| format!("Trie lookup error: {}", e); TrieDB::new(&eph, &self.root).map_err(map_e)? .get(key).map(|x| x.map(|val| val.to_vec())).map_err(map_e) } fn for_keys_with_prefix(&self, prefix: &[u8], mut f: F) { - let mut read_overlay = MemoryDB::default(); + let mut read_overlay = MemoryDB::new(); let eph = Ephemeral { storage: &self.storage, overlay: &mut read_overlay, }; - let mut iter = move || -> Result<(), Box> { + let mut iter = move || -> Result<(), Box>> { let trie = TrieDB::new(&eph, &self.root)?; let mut iter = trie.iter()?; - iter.seek(prefix)?; - for x in iter { let (key, _) = x?; - if !key.starts_with(prefix) { break; } - f(&key); } @@ -131,13 +127,13 @@ impl Backend for TrieBackend { } fn pairs(&self) -> Vec<(Vec, Vec)> { - let mut read_overlay = MemoryDB::default(); + let mut read_overlay = MemoryDB::new(); let eph = Ephemeral { storage: &self.storage, overlay: &mut read_overlay, }; - let collect_all = || -> Result<_, Box> { + let collect_all = || -> Result<_, Box>> { let trie = TrieDB::new(&eph, &self.root)?; let mut v = Vec::new(); for x in trie.iter()? { @@ -157,10 +153,10 @@ impl Backend for TrieBackend { } } - fn storage_root(&self, delta: I) -> ([u8; 32], MemoryDB) + fn storage_root(&self, delta: I) -> (H::Out, MemoryDB) where I: IntoIterator, Option>)> { - let mut write_overlay = MemoryDB::default(); + let mut write_overlay = MemoryDB::new(); let mut root = self.root; { let mut eph = Ephemeral { @@ -181,23 +177,29 @@ impl Backend for TrieBackend { } } - (root.0.into(), write_overlay) + (root, write_overlay) } } -impl TryIntoTrieBackend for TrieBackend { - fn try_into_trie_backend(self) -> Option { +impl TryIntoTrieBackend for TrieBackend { + fn try_into_trie_backend(self) -> Option> { Some(self) } } -pub struct Ephemeral<'a> { - storage: &'a TrieBackendStorage, - overlay: &'a mut MemoryDB, +pub struct Ephemeral<'a, H: 'a + Hasher> { + storage: &'a TrieBackendStorage, + overlay: &'a mut MemoryDB, +} + +// REVIEW: this is boiler plate, need macro? +impl<'a, H: Hasher> AsHashDB for Ephemeral<'a, H> { + fn as_hashdb(&self) -> &HashDB { self } + fn as_hashdb_mut(&mut self) -> &mut HashDB { self } } -impl<'a> Ephemeral<'a> { - pub fn new(storage: &'a TrieBackendStorage, overlay: &'a mut MemoryDB) -> Self { +impl<'a, H: Hasher> Ephemeral<'a, H> { + pub fn new(storage: &'a TrieBackendStorage, overlay: &'a mut MemoryDB) -> Self { Ephemeral { storage, overlay, @@ -205,12 +207,12 @@ impl<'a> Ephemeral<'a> { } } -impl<'a> HashDB for Ephemeral<'a> { - fn keys(&self) -> HashMap { +impl<'a, H: Hasher> HashDB for Ephemeral<'a, H> { + fn keys(&self) -> HashMap { self.overlay.keys() // TODO: iterate backing } - fn get(&self, key: &TrieH256) -> Option { + fn get(&self, key: &H::Out) -> Option { match self.overlay.raw(key) { Some((val, i)) => { if i <= 0 { @@ -219,7 +221,7 @@ impl<'a> HashDB for Ephemeral<'a> { Some(val) } } - None => match self.storage.get(&key) { + None => match self.storage.get(key) { Ok(x) => x, Err(e) => { warn!(target: "trie", "Failed to read from DB: {}", e); @@ -229,33 +231,33 @@ impl<'a> HashDB for Ephemeral<'a> { } } - fn contains(&self, key: &TrieH256) -> bool { + fn contains(&self, key: &H::Out) -> bool { self.get(key).is_some() } - fn insert(&mut self, value: &[u8]) -> TrieH256 { + fn insert(&mut self, value: &[u8]) -> H::Out { self.overlay.insert(value) } - fn emplace(&mut self, key: TrieH256, value: DBValue) { + fn emplace(&mut self, key: H::Out, value: DBValue) { self.overlay.emplace(key, value) } - fn remove(&mut self, key: &TrieH256) { + fn remove(&mut self, key: &H::Out) { self.overlay.remove(key) } } #[derive(Clone)] -pub enum TrieBackendStorage { +pub enum TrieBackendStorage { /// Key value db + storage column. - Storage(Arc), + Storage(Arc>), /// Hash db. - MemoryDb(MemoryDB), + MemoryDb(MemoryDB), } -impl TrieBackendStorage { - pub fn get(&self, key: &TrieH256) -> Result, String> { +impl TrieBackendStorage { + pub fn get(&self, key: &H::Out) -> Result, String> { match *self { TrieBackendStorage::Storage(ref db) => db.get(key) From eb26a6939825f7579ee5516d13c85af85ccb2a01 Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 11 Jul 2018 13:31:07 +0200 Subject: [PATCH 02/97] WIP start adding NodeCodec --- substrate/state-machine/src/backend.rs | 29 +++++++++--------- substrate/state-machine/src/ext.rs | 13 ++++---- substrate/state-machine/src/lib.rs | 24 ++++++++------- .../state-machine/src/proving_backend.rs | 30 +++++++++++++------ substrate/state-machine/src/trie_backend.rs | 9 +++--- 5 files changed, 63 insertions(+), 42 deletions(-) diff --git a/substrate/state-machine/src/backend.rs b/substrate/state-machine/src/backend.rs index f05754523b951..7b5ce60c28696 100644 --- a/substrate/state-machine/src/backend.rs +++ b/substrate/state-machine/src/backend.rs @@ -25,12 +25,13 @@ use std::sync::Arc; use hashdb::Hasher; use rlp::Encodable; use trie_backend::{TryIntoTrieBackend, TrieBackend}; +use patricia_trie::{TrieDBMut, TrieMut, NodeCodec}; /// 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: TryIntoTrieBackend { +pub trait Backend>: TryIntoTrieBackend { /// An error type when fetching data is not possible. type Error: super::Error; @@ -73,23 +74,25 @@ impl error::Error for Void { /// In-memory backend. Fully recomputes tries on each commit but useful for /// tests. #[derive(Clone, PartialEq, Eq)] -pub struct InMemory { +pub struct InMemory { inner: Arc, Vec>>, - _marker: PhantomData, + _hasher: PhantomData, + _codec: PhantomData, } -impl Default for InMemory { +impl Default for InMemory { fn default() -> Self { InMemory { inner: Arc::new(Default::default()), - _marker: PhantomData, + _hasher: PhantomData, + _codec: PhantomData, } } } -impl InMemory { +impl> InMemory { /// 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 { @@ -102,15 +105,15 @@ impl InMemory { } } -impl From, Vec>> for InMemory { +impl From, Vec>> for InMemory { fn from(inner: HashMap, Vec>) -> Self { InMemory { - inner: Arc::new(inner), _marker: PhantomData + inner: Arc::new(inner), _hasher: PhantomData, _codec: PhantomData } } } -impl Backend for InMemory { +impl> Backend for InMemory { type Error = Void; type Transaction = Vec<(Vec, Option>)>; @@ -144,15 +147,13 @@ impl Backend for InMemory { } } -impl TryIntoTrieBackend for InMemory { +impl> TryIntoTrieBackend for InMemory { fn try_into_trie_backend(self) -> Option> { use memorydb::MemoryDB; - use patricia_trie::{TrieDBMut, TrieMut}; - let mut root = ::Out::default(); let mut mdb = MemoryDB::new(); { - let mut trie = TrieDBMut::new(&mut mdb, &mut root); + let mut trie = TrieDBMut::::new(&mut mdb, &mut root); for (key, value) in self.inner.iter() { if let Err(e) = trie.insert(&key, &value) { warn!(target: "trie", "Failed to write to trie: {}", e); diff --git a/substrate/state-machine/src/ext.rs b/substrate/state-machine/src/ext.rs index 7c2ce83468573..a07f3b17136fd 100644 --- a/substrate/state-machine/src/ext.rs +++ b/substrate/state-machine/src/ext.rs @@ -21,6 +21,7 @@ use backend::Backend; use {Externalities, OverlayedChanges}; use hashdb::Hasher; use rlp::Encodable; +use patricia_trie::NodeCodec; /// Errors that can occur when interacting with the externalities. #[derive(Debug, Copy, Clone)] @@ -52,7 +53,7 @@ impl error::Error for Error { } /// Wraps a read-only backend, call executor, and current overlayed changes. -pub struct Ext<'a, H: Hasher, B: 'a + Backend> { +pub struct Ext<'a, H: Hasher, C: NodeCodec, B: 'a + Backend> { //TODO: can I get rid of the trait bounds here? // The overlayed changes to write to. overlay: &'a mut OverlayedChanges, // The storage backend to read from. @@ -61,10 +62,11 @@ pub struct Ext<'a, H: Hasher, B: 'a + Backend> { transaction: Option<(B::Transaction, H::Out)>, } -impl<'a, H, B> Ext<'a, H, B> +impl<'a, H, C, B> Ext<'a, H, C, B> where H: Hasher, - B: 'a + Backend, + C: NodeCodec, + B: 'a + Backend, H::Out: Ord + Encodable { /// Create a new `Ext` from overlayed changes and read-only backend @@ -106,10 +108,11 @@ impl<'a, B: 'a + Backend> Ext<'a, B> { } } -impl<'a, B: 'a, H> Externalities for Ext<'a, H, B> +impl<'a, B: 'a, H, C> Externalities for Ext<'a, H, C, B> where H: Hasher, - B: 'a + Backend, + C: NodeCodec, + B: 'a + Backend, H::Out: Ord + Encodable { fn storage(&self, key: &[u8]) -> Option> { diff --git a/substrate/state-machine/src/lib.rs b/substrate/state-machine/src/lib.rs index c775d3a7d1dfa..cab8cd261329b 100644 --- a/substrate/state-machine/src/lib.rs +++ b/substrate/state-machine/src/lib.rs @@ -36,8 +36,9 @@ extern crate rlp; use std::collections::HashMap; use std::collections::hash_map::Drain; use std::fmt; -use rlp::Encodable; use hashdb::Hasher; +use patricia_trie::NodeCodec; +use rlp::Encodable; pub mod backend; mod ext; @@ -170,7 +171,7 @@ pub trait CodeExecutor: Sized + Send + Sync { /// /// 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( +pub fn execute( backend: &B, overlay: &mut OverlayedChanges, exec: &Exec, @@ -179,8 +180,9 @@ pub fn execute( ) -> Result<(Vec, B::Transaction), Box> where H: Hasher, + C: NodeCodec, Exec: CodeExecutor, - B: Backend, + B: Backend, H::Out: Ord + Encodable { let result = { @@ -219,29 +221,30 @@ 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, method: &str, call_data: &[u8], -) -> Result<(Vec, Vec>, as Backend>::Transaction), Box> +) -> Result<(Vec, Vec>, as Backend>::Transaction), Box> where H: Hasher, Exec: CodeExecutor, - B: TryIntoTrieBackend, + C: NodeCodec, + B: TryIntoTrieBackend, H::Out: Ord + Encodable { 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, transaction) = execute(&proving_backend, overlay, exec, method, call_data)?; + let (result, transaction) = execute::(&proving_backend, overlay, exec, method, call_data)?; let proof = proving_backend.extract_proof(); Ok((result, proof, transaction)) } /// 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, @@ -251,11 +254,12 @@ pub fn execution_proof_check( ) -> Result<(Vec, memorydb::MemoryDB), Box> where H: Hasher, + C: NodeCodec, Exec: CodeExecutor, H::Out: Ord + Encodable { - let backend = proving_backend::create_proof_check_backend(root, proof)?; - execute(&backend, overlay, exec, method, call_data) + let backend = proving_backend::create_proof_check_backend::(root, proof)?; + execute::(&backend, overlay, exec, method, call_data) } #[cfg(test)] diff --git a/substrate/state-machine/src/proving_backend.rs b/substrate/state-machine/src/proving_backend.rs index 138e0502db963..637b0945aee92 100644 --- a/substrate/state-machine/src/proving_backend.rs +++ b/substrate/state-machine/src/proving_backend.rs @@ -17,26 +17,28 @@ //! Proving state machine backend. use std::cell::RefCell; +use std::marker::PhantomData; use hashdb::{Hasher, HashDB}; use memorydb::MemoryDB; -use patricia_trie::{TrieDB, TrieError, Trie, Recorder}; +use patricia_trie::{TrieDB, Trie, Recorder, NodeCodec}; use trie_backend::{TrieBackend, Ephemeral}; use {Error, ExecutionError, Backend, TryIntoTrieBackend}; use rlp::Encodable; /// 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 { +pub struct ProvingBackend> { backend: TrieBackend, proof_recorder: RefCell>, + marker: PhantomData // TODO: try to remove this if possible } -impl ProvingBackend { +impl> ProvingBackend { /// Create new proving backend. pub fn new(backend: TrieBackend) -> Self { ProvingBackend { backend, - proof_recorder: RefCell::new(Recorder::new()), + proof_recorder: RefCell::new(Recorder::new()), marker: PhantomData } } @@ -50,9 +52,10 @@ impl ProvingBackend { } } -impl Backend for ProvingBackend +impl Backend for ProvingBackend where H: Hasher, + C: NodeCodec, H::Out: Ord + Encodable { type Error = String; @@ -64,14 +67,16 @@ where self.backend.backend_storage(), &mut read_overlay, ); - let map_e = |e: Box>| format!("Trie lookup error: {}", e); + // let map_e = |e: Box>| format!("Trie lookup error: {}", e); + let map_e = |e| format!("Trie lookup error: {}", e); let mut proof_recorder = self.proof_recorder.try_borrow_mut() .expect("only fails when already borrowed; storage() is non-reentrant; qed"); - TrieDB::new(&eph, &self.backend.root()).map_err(map_e)? + TrieDB::::new(&eph, &self.backend.root()).map_err(map_e)? .get_with(key, &mut *proof_recorder).map(|x| x.map(|val| val.to_vec())).map_err(map_e) } + // TODO: "error[E0283]: type annotations required: cannot resolve `_: patricia_trie::NodeCodec`"/"note: required because of the requirements on the impl of `backend::Backend` for `trie_backend::TrieBackend`") fn for_keys_with_prefix(&self, prefix: &[u8], f: F) { self.backend.for_keys_with_prefix(prefix, f) } @@ -87,14 +92,21 @@ where } } -impl TryIntoTrieBackend for ProvingBackend { +impl> TryIntoTrieBackend for ProvingBackend { fn try_into_trie_backend(self) -> Option> { None } } /// Create proof check backend. -pub fn create_proof_check_backend(root: H::Out, proof: Vec>) -> Result, Box> { +pub fn create_proof_check_backend( + root: H::Out, + proof: Vec> +) -> Result, Box> +where + H: Hasher, + C: NodeCodec, +{ let mut db = MemoryDB::new(); for item in proof { db.insert(&item); diff --git a/substrate/state-machine/src/trie_backend.rs b/substrate/state-machine/src/trie_backend.rs index 4e45cdfc95c94..913fd02a83a6e 100644 --- a/substrate/state-machine/src/trie_backend.rs +++ b/substrate/state-machine/src/trie_backend.rs @@ -19,7 +19,7 @@ use Backend; use hashdb::{Hasher, HashDB, AsHashDB}; use memorydb::MemoryDB; -use patricia_trie::{TrieDB, TrieDBMut, TrieError, Trie, TrieMut}; +use patricia_trie::{TrieDB, TrieDBMut, TrieError, Trie, TrieMut, NodeCodec}; use std::collections::HashMap; use std::sync::Arc; @@ -32,7 +32,7 @@ pub trait Storage: Send + Sync { } /// Try convert into trie-based backend. -pub trait TryIntoTrieBackend { +pub trait TryIntoTrieBackend> { /// Try to convert self into trie backend. fn try_into_trie_backend(self) -> Option>; } @@ -82,7 +82,7 @@ impl TrieBackend { } } -impl Backend for TrieBackend { +impl> Backend for TrieBackend { type Error = String; type Transaction = MemoryDB; @@ -93,6 +93,7 @@ impl Backend for TrieBackend { overlay: &mut read_overlay, }; + // TODO: this is probably wrong too let map_e = |e: Box>| format!("Trie lookup error: {}", e); TrieDB::new(&eph, &self.root).map_err(map_e)? @@ -181,7 +182,7 @@ impl Backend for TrieBackend { } } -impl TryIntoTrieBackend for TrieBackend { +impl> TryIntoTrieBackend for TrieBackend { fn try_into_trie_backend(self) -> Option> { Some(self) } From acf828451de3b3c6a12fc2d2f54316b6498e3357 Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 11 Jul 2018 13:42:16 +0200 Subject: [PATCH 03/97] Add codec to TrieBackend --- substrate/state-machine/src/backend.rs | 2 +- substrate/state-machine/src/lib.rs | 2 +- substrate/state-machine/src/proving_backend.rs | 13 ++++++------- substrate/state-machine/src/trie_backend.rs | 16 ++++++++++------ 4 files changed, 18 insertions(+), 15 deletions(-) diff --git a/substrate/state-machine/src/backend.rs b/substrate/state-machine/src/backend.rs index 7b5ce60c28696..ed4b626312592 100644 --- a/substrate/state-machine/src/backend.rs +++ b/substrate/state-machine/src/backend.rs @@ -148,7 +148,7 @@ impl> Backend for InMemory { } impl> TryIntoTrieBackend for InMemory { - fn try_into_trie_backend(self) -> Option> { + fn try_into_trie_backend(self) -> Option> { use memorydb::MemoryDB; let mut root = ::Out::default(); let mut mdb = MemoryDB::new(); diff --git a/substrate/state-machine/src/lib.rs b/substrate/state-machine/src/lib.rs index cab8cd261329b..63fa25c7e9471 100644 --- a/substrate/state-machine/src/lib.rs +++ b/substrate/state-machine/src/lib.rs @@ -227,7 +227,7 @@ pub fn prove_execution( exec: &Exec, method: &str, call_data: &[u8], -) -> Result<(Vec, Vec>, as Backend>::Transaction), Box> +) -> Result<(Vec, Vec>, as Backend>::Transaction), Box> where H: Hasher, Exec: CodeExecutor, diff --git a/substrate/state-machine/src/proving_backend.rs b/substrate/state-machine/src/proving_backend.rs index 637b0945aee92..d822309af6dfb 100644 --- a/substrate/state-machine/src/proving_backend.rs +++ b/substrate/state-machine/src/proving_backend.rs @@ -28,17 +28,17 @@ use rlp::Encodable; /// 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> { - backend: TrieBackend, + backend: TrieBackend, proof_recorder: RefCell>, - marker: PhantomData // TODO: try to remove this if possible + // marker: PhantomData // TODO: try to remove this if possible } impl> 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()), marker: PhantomData + proof_recorder: RefCell::new(Recorder::new()) //, marker: PhantomData } } @@ -67,7 +67,6 @@ where self.backend.backend_storage(), &mut read_overlay, ); - // let map_e = |e: Box>| format!("Trie lookup error: {}", e); let map_e = |e| format!("Trie lookup error: {}", e); let mut proof_recorder = self.proof_recorder.try_borrow_mut() @@ -93,7 +92,7 @@ where } impl> TryIntoTrieBackend for ProvingBackend { - fn try_into_trie_backend(self) -> Option> { + fn try_into_trie_backend(self) -> Option> { None } } @@ -102,7 +101,7 @@ impl> TryIntoTrieBackend for ProvingBackend( root: H::Out, proof: Vec> -) -> Result, Box> +) -> Result, Box> where H: Hasher, C: NodeCodec, diff --git a/substrate/state-machine/src/trie_backend.rs b/substrate/state-machine/src/trie_backend.rs index 913fd02a83a6e..1aa861d3d624a 100644 --- a/substrate/state-machine/src/trie_backend.rs +++ b/substrate/state-machine/src/trie_backend.rs @@ -22,6 +22,7 @@ use memorydb::MemoryDB; use patricia_trie::{TrieDB, TrieDBMut, TrieError, Trie, TrieMut, NodeCodec}; use std::collections::HashMap; use std::sync::Arc; +use std::marker::PhantomData; pub use hashdb::DBValue; @@ -34,22 +35,24 @@ pub trait Storage: Send + Sync { /// Try convert into trie-based backend. pub trait TryIntoTrieBackend> { /// Try to convert self into trie backend. - fn try_into_trie_backend(self) -> Option>; + fn try_into_trie_backend(self) -> Option>; } /// Patricia trie-based backend. Transaction type is an overlay of changes to commit. #[derive(Clone)] -pub struct TrieBackend { +pub struct TrieBackend> { storage: TrieBackendStorage, root: H::Out, + _codec: PhantomData } -impl TrieBackend { +impl> TrieBackend { /// Create new trie-based backend. pub fn with_storage(db: Arc>, root: H::Out) -> Self { TrieBackend { storage: TrieBackendStorage::Storage(db), root, + _codec: PhantomData, } } @@ -68,6 +71,7 @@ impl TrieBackend { TrieBackend { storage: TrieBackendStorage::MemoryDb(db), root, + _codec: PhantomData, } } @@ -82,7 +86,7 @@ impl TrieBackend { } } -impl> Backend for TrieBackend { +impl> Backend for TrieBackend { type Error = String; type Transaction = MemoryDB; @@ -182,8 +186,8 @@ impl> Backend for TrieBackend { } } -impl> TryIntoTrieBackend for TrieBackend { - fn try_into_trie_backend(self) -> Option> { +impl> TryIntoTrieBackend for TrieBackend { + fn try_into_trie_backend(self) -> Option> { Some(self) } } From 90707dc1ed2485e5d22f6ab484fbbd4ed0de5863 Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 11 Jul 2018 13:47:22 +0200 Subject: [PATCH 04/97] Typechecks --- substrate/state-machine/src/trie_backend.rs | 32 ++++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/substrate/state-machine/src/trie_backend.rs b/substrate/state-machine/src/trie_backend.rs index 1aa861d3d624a..1001e76a4b528 100644 --- a/substrate/state-machine/src/trie_backend.rs +++ b/substrate/state-machine/src/trie_backend.rs @@ -60,7 +60,7 @@ impl> TrieBackend { pub fn with_storage_for_genesis(db: Arc>) -> Self { let mut root = ::Out::default(); let mut mdb = MemoryDB::::new(); - TrieDBMut::new(&mut mdb, &mut root); + TrieDBMut::::new(&mut mdb, &mut root); Self::with_storage(db, root) } @@ -98,9 +98,10 @@ impl> Backend for TrieBackend { }; // TODO: this is probably wrong too - let map_e = |e: Box>| format!("Trie lookup error: {}", e); + // let map_e = |e: Box>| format!("Trie lookup error: {}", e); + let map_e = |e| format!("Trie lookup error: {}", e); - TrieDB::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) } @@ -112,11 +113,16 @@ impl> Backend for TrieBackend { }; let mut iter = move || -> Result<(), Box>> { - let trie = TrieDB::new(&eph, &self.root)?; - let mut iter = trie.iter()?; - iter.seek(prefix)?; + // TODO: zomg errors + // let trie = TrieDB::::new(&eph, &self.root)?; + let trie = TrieDB::::new(&eph, &self.root).unwrap(); + // let mut iter = trie.iter()?; + let mut iter = trie.iter().unwrap(); + // iter.seek(prefix)?; + iter.seek(prefix).unwrap(); for x in iter { - let (key, _) = x?; + // let (key, _) = x?; + let (key, _) = x.unwrap(); if !key.starts_with(prefix) { break; } @@ -139,10 +145,14 @@ impl> Backend for TrieBackend { }; let collect_all = || -> Result<_, Box>> { - let trie = TrieDB::new(&eph, &self.root)?; + // TODO: zomg errors + // let trie = TrieDB::::new(&eph, &self.root)?; + let trie = TrieDB::::new(&eph, &self.root).unwrap(); let mut v = Vec::new(); - for x in trie.iter()? { - let (key, value) = x?; + // for x in trie.iter()? { + for x in trie.iter().unwrap() { + // let (key, value) = x?; + let (key, value) = x.unwrap(); v.push((key.to_vec(), value.to_vec())); } @@ -169,7 +179,7 @@ impl> Backend for TrieBackend { overlay: &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), From 4ccc8517dc45a6c0bb6803b68d48a612471fb6eb Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 11 Jul 2018 13:51:02 +0200 Subject: [PATCH 05/97] Fix error type --- substrate/state-machine/src/trie_backend.rs | 30 +++++++-------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/substrate/state-machine/src/trie_backend.rs b/substrate/state-machine/src/trie_backend.rs index 1001e76a4b528..e43f57cf2105a 100644 --- a/substrate/state-machine/src/trie_backend.rs +++ b/substrate/state-machine/src/trie_backend.rs @@ -97,10 +97,7 @@ impl> Backend for TrieBackend { overlay: &mut read_overlay, }; - // TODO: this is probably wrong too - // let map_e = |e: Box>| format!("Trie lookup error: {}", e); let map_e = |e| format!("Trie lookup error: {}", e); - TrieDB::::new(&eph, &self.root).map_err(map_e)? .get(key).map(|x| x.map(|val| val.to_vec())).map_err(map_e) } @@ -112,17 +109,12 @@ impl> Backend for TrieBackend { overlay: &mut read_overlay, }; - let mut iter = move || -> Result<(), Box>> { - // TODO: zomg errors - // let trie = TrieDB::::new(&eph, &self.root)?; - let trie = TrieDB::::new(&eph, &self.root).unwrap(); - // let mut iter = trie.iter()?; - let mut iter = trie.iter().unwrap(); - // iter.seek(prefix)?; - iter.seek(prefix).unwrap(); + let mut iter = move || -> Result<(), Box>> { + let trie = TrieDB::::new(&eph, &self.root)?; + let mut iter = trie.iter()?; + iter.seek(prefix)?; for x in iter { - // let (key, _) = x?; - let (key, _) = x.unwrap(); + let (key, _) = x?; if !key.starts_with(prefix) { break; } @@ -144,15 +136,11 @@ impl> Backend for TrieBackend { overlay: &mut read_overlay, }; - let collect_all = || -> Result<_, Box>> { - // TODO: zomg errors - // let trie = TrieDB::::new(&eph, &self.root)?; - let trie = TrieDB::::new(&eph, &self.root).unwrap(); + let collect_all = || -> Result<_, Box>> { + let trie = TrieDB::::new(&eph, &self.root)?; let mut v = Vec::new(); - // for x in trie.iter()? { - for x in trie.iter().unwrap() { - // let (key, value) = x?; - let (key, value) = x.unwrap(); + for x in trie.iter()? { + let (key, value) = x?; v.push((key.to_vec(), value.to_vec())); } From 21b789248f91a59f643d17e3e9852937a5ad8bcb Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 11 Jul 2018 13:56:48 +0200 Subject: [PATCH 06/97] Cleanup --- .gitignore | 2 +- substrate/state-machine/src/proving_backend.rs | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 4231fae3fd225..61014b0a28c48 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -/target/ +**/target/ **/*.rs.bk *.swp .wasm-binaries diff --git a/substrate/state-machine/src/proving_backend.rs b/substrate/state-machine/src/proving_backend.rs index d822309af6dfb..4ebba424f05c9 100644 --- a/substrate/state-machine/src/proving_backend.rs +++ b/substrate/state-machine/src/proving_backend.rs @@ -17,7 +17,6 @@ //! Proving state machine backend. use std::cell::RefCell; -use std::marker::PhantomData; use hashdb::{Hasher, HashDB}; use memorydb::MemoryDB; use patricia_trie::{TrieDB, Trie, Recorder, NodeCodec}; @@ -30,7 +29,6 @@ use rlp::Encodable; pub struct ProvingBackend> { backend: TrieBackend, proof_recorder: RefCell>, - // marker: PhantomData // TODO: try to remove this if possible } impl> ProvingBackend { @@ -38,7 +36,7 @@ impl> ProvingBackend { pub fn new(backend: TrieBackend) -> Self { ProvingBackend { backend, - proof_recorder: RefCell::new(Recorder::new()) //, marker: PhantomData + proof_recorder: RefCell::new(Recorder::new()), } } From 6b2fa02be682fa3059b64835224ac4b1c19d1286 Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 11 Jul 2018 15:00:45 +0200 Subject: [PATCH 07/97] Tests build (and fail) --- substrate/state-machine/Cargo.toml | 7 +++- substrate/state-machine/src/ext.rs | 2 +- substrate/state-machine/src/lib.rs | 15 ++++++--- .../state-machine/src/proving_backend.rs | 10 +++--- substrate/state-machine/src/testing.rs | 33 +++++++++++++------ substrate/state-machine/src/trie_backend.rs | 19 +++++++---- 6 files changed, 59 insertions(+), 27 deletions(-) diff --git a/substrate/state-machine/Cargo.toml b/substrate/state-machine/Cargo.toml index 206b6972ae178..3141bb4fbc309 100644 --- a/substrate/state-machine/Cargo.toml +++ b/substrate/state-machine/Cargo.toml @@ -14,8 +14,13 @@ parking_lot = "0.4" substrate-primitives = { path = "../primitives", version = "0.1.0" } hashdb = { git = "https://github.com/paritytech/parity-common" } -keccak-hasher = { git = "https://github.com/paritytech/parity-common" } memorydb = { git = "https://github.com/paritytech/parity-common" } patricia-trie = { git = "https://github.com/paritytech/parity-common" } triehash = { git = "https://github.com/paritytech/parity-common" } rlp = { git = "https://github.com/paritytech/parity-common" } + +[dev-dependencies] +# We need `KeccakHasher` from here +keccak-hasher = { git = "https://github.com/paritytech/parity" } +# We need `RlpCodec` from here +patricia-trie-ethereum = { git = "https://github.com/paritytech/parity" } \ No newline at end of file diff --git a/substrate/state-machine/src/ext.rs b/substrate/state-machine/src/ext.rs index a07f3b17136fd..07532a909f083 100644 --- a/substrate/state-machine/src/ext.rs +++ b/substrate/state-machine/src/ext.rs @@ -93,7 +93,7 @@ where } #[cfg(test)] -impl<'a, B: 'a + Backend> Ext<'a, B> { +impl<'a, H: Hasher, C: NodeCodec, B: 'a + Backend> Ext<'a, H, C, B> { pub fn storage_pairs(&self) -> Vec<(Vec, Vec)> { use std::collections::HashMap; diff --git a/substrate/state-machine/src/lib.rs b/substrate/state-machine/src/lib.rs index 63fa25c7e9471..289322b327475 100644 --- a/substrate/state-machine/src/lib.rs +++ b/substrate/state-machine/src/lib.rs @@ -32,6 +32,8 @@ extern crate patricia_trie; extern crate byteorder; extern crate parking_lot; extern crate rlp; +#[cfg(test)] extern crate keccak_hasher; +#[cfg(test)] extern crate patricia_trie_ethereum as ethtrie; use std::collections::HashMap; use std::collections::hash_map::Drain; @@ -267,13 +269,16 @@ mod tests { use super::*; use super::backend::InMemory; use super::ext::Ext; + use keccak_hasher::KeccakHasher; + use ethtrie::RlpCodec; + use ethereum_types::H256; struct DummyCodeExecutor; - impl CodeExecutor for DummyCodeExecutor { + impl CodeExecutor for DummyCodeExecutor { type Error = u8; - fn call( + fn call>( &self, ext: &mut E, _code: &[u8], @@ -326,7 +331,7 @@ mod tests { b"dogglesworth".to_vec() => b"catXXX".to_vec(), b"doug".to_vec() => b"notadog".to_vec() ]; - let backend = InMemory::from(initial); + let backend = InMemory::::from(initial); let mut overlay = OverlayedChanges { committed: map![ b"dog".to_vec() => Some(b"puppy".to_vec()), @@ -340,7 +345,7 @@ mod tests { }; let mut ext = Ext::new(&mut overlay, &backend); const ROOT: [u8; 32] = hex!("8aad789dff2f538bca5d8ea56e8abe10f4c7ba3a5dea95fea4cd6e7c3a1168d3"); - assert_eq!(ext.storage_root(), ROOT); + assert_eq!(ext.storage_root(), H256(ROOT)); } #[test] @@ -358,7 +363,7 @@ mod tests { &mut Default::default(), &DummyCodeExecutor, "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(), &DummyCodeExecutor, "test", &[]).unwrap(); // check that both results are correct diff --git a/substrate/state-machine/src/proving_backend.rs b/substrate/state-machine/src/proving_backend.rs index 4ebba424f05c9..f56ff4d5e12f7 100644 --- a/substrate/state-machine/src/proving_backend.rs +++ b/substrate/state-machine/src/proving_backend.rs @@ -122,8 +122,10 @@ mod tests { use backend::{InMemory}; use trie_backend::tests::test_trie; use super::*; + use keccak_hasher::KeccakHasher; + use ethtrie::RlpCodec; - fn test_proving() -> ProvingBackend { + fn test_proving() -> ProvingBackend { ProvingBackend::new(test_trie()) } @@ -141,7 +143,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] @@ -160,7 +162,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])); @@ -175,7 +177,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/state-machine/src/testing.rs b/substrate/state-machine/src/testing.rs index 61463339ea1d7..b4f50e9314579 100644 --- a/substrate/state-machine/src/testing.rs +++ b/substrate/state-machine/src/testing.rs @@ -22,24 +22,35 @@ use super::Externalities; use triehash::trie_root; use hashdb::Hasher; use rlp::Encodable; +use std::marker::PhantomData; -/// Simple HashMap based Externalities impl. -pub type TestExternalities = HashMap, Vec>; +/// Simple HashMap-based Externalities impl. +pub struct TestExternalities { + inner: HashMap, Vec>, + hasher: PhantomData, +} + +impl TestExternalities { + #[cfg(test)] + fn new() -> Self { + TestExternalities {inner: HashMap::new(), hasher: PhantomData} + } +} -impl Externalities for TestExternalities where H::Out: Ord + Encodable { +impl Externalities for TestExternalities where H::Out: Ord + Encodable { fn storage(&self, key: &[u8]) -> Option> { - self.get(key).map(|x| x.to_vec()) + self.inner.get(key).map(|x| x.to_vec()) } fn place_storage(&mut self, key: Vec, maybe_value: Option>) { match maybe_value { - Some(value) => { self.insert(key, value); } - None => { self.remove(&key); } + Some(value) => { self.inner.insert(key, value); } + None => { self.inner.remove(&key); } } } fn clear_prefix(&mut self, prefix: &[u8]) { - self.retain(|key, _| + self.inner.retain(|key, _| !key.starts_with(prefix) ) } @@ -47,21 +58,23 @@ impl Externalities for TestExternalities where H::Out: Ord + Encod fn chain_id(&self) -> u64 { 42 } fn storage_root(&mut self) -> H::Out { - trie_root::(self.clone()) + trie_root::(self.inner.clone()) } } #[cfg(test)] mod tests { use super::*; + use keccak_hasher::KeccakHasher; + use ethereum_types::H256; #[test] fn commit_should_work() { - let mut ext = TestExternalities::new(); + let mut ext = TestExternalities::::new(); 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!("8aad789dff2f538bca5d8ea56e8abe10f4c7ba3a5dea95fea4cd6e7c3a1168d3"); - assert_eq!(ext.storage_root(), ROOT); + assert_eq!(ext.storage_root(), H256(ROOT)); } } diff --git a/substrate/state-machine/src/trie_backend.rs b/substrate/state-machine/src/trie_backend.rs index e43f57cf2105a..dd1c555355098 100644 --- a/substrate/state-machine/src/trie_backend.rs +++ b/substrate/state-machine/src/trie_backend.rs @@ -275,12 +275,15 @@ impl TrieBackendStorage { pub mod tests { use super::*; use std::collections::HashSet; + use ethereum_types::H256 as TrieH256; + use keccak_hasher::KeccakHasher; + use ethtrie::RlpCodec; - fn test_db() -> (MemoryDB, TrieH256) { + fn test_db() -> (MemoryDB, TrieH256) { let mut root = TrieH256::default(); - let mut mdb = MemoryDB::default(); + let mut mdb = MemoryDB::::default(); { - let mut trie = TrieDBMut::new(&mut mdb, &mut root); + let mut trie = TrieDBMut::::new(&mut mdb, &mut root); trie.insert(b"key", b"value").unwrap(); trie.insert(b"value1", &[42]).unwrap(); trie.insert(b"value2", &[24]).unwrap(); @@ -289,7 +292,7 @@ pub mod tests { (mdb, root) } - pub fn test_trie() -> TrieBackend { + pub(crate) fn test_trie() -> TrieBackend { let (mdb, root) = test_db(); TrieBackend::with_memorydb(mdb, root) } @@ -311,12 +314,16 @@ pub mod tests { #[test] fn pairs_are_empty_on_empty_storage() { - assert!(TrieBackend::with_memorydb(MemoryDB::new(), Default::default()).pairs().is_empty()); + let db = TrieBackend::::with_memorydb( + MemoryDB::new(), + Default::default() + ); + assert!(db.pairs().is_empty()); } #[test] fn storage_root_is_non_default() { - assert!(test_trie().storage_root(::std::iter::empty()).0 != [0; 32]); + assert!(test_trie().storage_root(::std::iter::empty()).0 != TrieH256([0; 32])); } #[test] From f331b0c1724002e771c1076e5c480e74fae69514 Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 11 Jul 2018 15:22:42 +0200 Subject: [PATCH 08/97] Fix tests: don't use MemoryDB::default() --- substrate/state-machine/src/trie_backend.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/substrate/state-machine/src/trie_backend.rs b/substrate/state-machine/src/trie_backend.rs index dd1c555355098..865996cf0ac64 100644 --- a/substrate/state-machine/src/trie_backend.rs +++ b/substrate/state-machine/src/trie_backend.rs @@ -281,13 +281,13 @@ pub mod tests { fn test_db() -> (MemoryDB, TrieH256) { let mut root = TrieH256::default(); - let mut mdb = MemoryDB::::default(); + let mut mdb = MemoryDB::::new(); { - let mut trie = TrieDBMut::::new(&mut mdb, &mut root); - trie.insert(b"key", b"value").unwrap(); - trie.insert(b"value1", &[42]).unwrap(); - trie.insert(b"value2", &[24]).unwrap(); - trie.insert(b":code", b"return 42").unwrap(); + let mut trie = TrieDBMut::<_, RlpCodec>::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"); + trie.insert(b":code", b"return 42").expect("insert failed"); } (mdb, root) } From f0f24132b6f1517f3f236a5c89bbe1c2c88e7e1e Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 11 Jul 2018 16:04:21 +0200 Subject: [PATCH 09/97] Lockfile --- Cargo.lock | 144 ++++++++++++++++++++++++++--------------------------- 1 file changed, 71 insertions(+), 73 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a73898e5cda91..e9cb33b941660 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -394,6 +394,15 @@ name = "difference" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "dirs" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "dtoa" version = "0.4.2" @@ -472,34 +481,17 @@ dependencies = [ "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "ethcore-bytes" -version = "0.1.0" -source = "git+https://github.com/paritytech/parity.git#4145be863bec10038fc0ac5d36a41365b5087344" - -[[package]] -name = "ethcore-crypto" -version = "0.1.0" -source = "git+https://github.com/paritytech/parity.git#4145be863bec10038fc0ac5d36a41365b5087344" -dependencies = [ - "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", - "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "ethcore-io" version = "1.12.0" -source = "git+https://github.com/paritytech/parity.git#4145be863bec10038fc0ac5d36a41365b5087344" +source = "git+https://github.com/paritytech/parity#484ecfaf4786e28c5abc0ba9685a32b5e180cb1d" dependencies = [ "crossbeam 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", "timer 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -508,7 +500,7 @@ dependencies = [ [[package]] name = "ethcore-logger" version = "1.12.0" -source = "git+https://github.com/paritytech/parity.git#4145be863bec10038fc0ac5d36a41365b5087344" +source = "git+https://github.com/paritytech/parity#484ecfaf4786e28c5abc0ba9685a32b5e180cb1d" dependencies = [ "ansi_term 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -516,7 +508,7 @@ dependencies = [ "env_logger 0.4.3 (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)", - "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -524,44 +516,44 @@ dependencies = [ [[package]] name = "ethcore-network" version = "1.12.0" -source = "git+https://github.com/paritytech/parity.git#4145be863bec10038fc0ac5d36a41365b5087344" +source = "git+https://github.com/paritytech/parity#484ecfaf4786e28c5abc0ba9685a32b5e180cb1d" dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethcore-crypto 0.1.0 (git+https://github.com/paritytech/parity.git)", - "ethcore-io 1.12.0 (git+https://github.com/paritytech/parity.git)", + "ethcore-io 1.12.0 (git+https://github.com/paritytech/parity)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "ethkey 0.3.0 (git+https://github.com/paritytech/parity.git)", + "ethkey 0.3.0 (git+https://github.com/paritytech/parity)", "ipnetwork 0.12.8 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity.git)", + "parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", "snappy 0.1.0 (git+https://github.com/paritytech/rust-snappy)", ] [[package]] name = "ethcore-network-devp2p" version = "1.12.0" -source = "git+https://github.com/paritytech/parity.git#4145be863bec10038fc0ac5d36a41365b5087344" +source = "git+https://github.com/paritytech/parity#484ecfaf4786e28c5abc0ba9685a32b5e180cb1d" dependencies = [ "ansi_term 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethcore-bytes 0.1.0 (git+https://github.com/paritytech/parity.git)", - "ethcore-crypto 0.1.0 (git+https://github.com/paritytech/parity.git)", - "ethcore-io 1.12.0 (git+https://github.com/paritytech/parity.git)", - "ethcore-logger 1.12.0 (git+https://github.com/paritytech/parity.git)", - "ethcore-network 1.12.0 (git+https://github.com/paritytech/parity.git)", + "ethcore-io 1.12.0 (git+https://github.com/paritytech/parity)", + "ethcore-logger 1.12.0 (git+https://github.com/paritytech/parity)", + "ethcore-network 1.12.0 (git+https://github.com/paritytech/parity)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "ethkey 0.3.0 (git+https://github.com/paritytech/parity.git)", + "ethkey 0.3.0 (git+https://github.com/paritytech/parity)", "igd 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "ipnetwork 0.12.8 (registry+https://github.com/rust-lang/crates.io-index)", - "keccak-hash 0.1.2 (git+https://github.com/paritytech/parity.git)", + "keccak-hash 0.1.2 (git+https://github.com/paritytech/parity-common)", "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "path 0.1.0 (git+https://github.com/paritytech/parity.git)", + "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common)", + "parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common)", + "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "path 0.1.1 (git+https://github.com/paritytech/parity-common)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity.git)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", "rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 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)", @@ -597,16 +589,16 @@ dependencies = [ [[package]] name = "ethkey" version = "0.3.0" -source = "git+https://github.com/paritytech/parity.git#4145be863bec10038fc0ac5d36a41365b5087344" +source = "git+https://github.com/paritytech/parity#484ecfaf4786e28c5abc0ba9685a32b5e180cb1d" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "edit-distance 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "eth-secp256k1 0.5.7 (git+https://github.com/paritytech/rust-secp256k1)", - "ethcore-crypto 0.1.0 (git+https://github.com/paritytech/parity.git)", "ethereum-types 0.3.2 (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)", - "mem 0.1.0 (git+https://github.com/paritytech/parity.git)", + "mem 0.1.0 (git+https://github.com/paritytech/parity)", + "parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common)", "parity-wordlist 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -966,7 +958,7 @@ dependencies = [ [[package]] name = "keccak-hash" version = "0.1.2" -source = "git+https://github.com/paritytech/parity.git#4145be863bec10038fc0ac5d36a41365b5087344" +source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" dependencies = [ "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -975,7 +967,7 @@ dependencies = [ [[package]] name = "keccak-hasher" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" +source = "git+https://github.com/paritytech/parity#484ecfaf4786e28c5abc0ba9685a32b5e180cb1d" dependencies = [ "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", @@ -1100,7 +1092,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "mem" version = "0.1.0" -source = "git+https://github.com/paritytech/parity.git#4145be863bec10038fc0ac5d36a41365b5087344" +source = "git+https://github.com/paritytech/parity#484ecfaf4786e28c5abc0ba9685a32b5e180cb1d" [[package]] name = "memchr" @@ -1347,8 +1339,11 @@ dependencies = [ [[package]] name = "path" -version = "0.1.0" -source = "git+https://github.com/paritytech/parity.git#4145be863bec10038fc0ac5d36a41365b5087344" +version = "0.1.1" +source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" +dependencies = [ + "dirs 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "patricia-trie" @@ -1363,6 +1358,20 @@ dependencies = [ "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "patricia-trie-ethereum" +version = "0.1.0" +source = "git+https://github.com/paritytech/parity#484ecfaf4786e28c5abc0ba9685a32b5e180cb1d" +dependencies = [ + "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", + "keccak-hasher 0.1.0 (git+https://github.com/paritytech/parity)", + "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", +] + [[package]] name = "percent-encoding" version = "1.0.1" @@ -1850,17 +1859,6 @@ dependencies = [ "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "rlp" -version = "0.2.1" -source = "git+https://github.com/paritytech/parity.git#4145be863bec10038fc0ac5d36a41365b5087344" -dependencies = [ - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "rlp" version = "0.2.2" @@ -2114,7 +2112,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "snappy" version = "0.1.0" -source = "git+https://github.com/paritytech/rust-snappy#40ac9a0d9fd613e7f38df800a11a589b7296da73" +source = "git+https://github.com/paritytech/rust-snappy#798408ffef8f86dd51481673aca10f5348d7491b" dependencies = [ "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "snappy-sys 0.1.0 (git+https://github.com/paritytech/rust-snappy)", @@ -2304,9 +2302,9 @@ dependencies = [ "ed25519 0.1.0", "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethcore-io 1.12.0 (git+https://github.com/paritytech/parity.git)", - "ethcore-network 1.12.0 (git+https://github.com/paritytech/parity.git)", - "ethcore-network-devp2p 1.12.0 (git+https://github.com/paritytech/parity.git)", + "ethcore-io 1.12.0 (git+https://github.com/paritytech/parity)", + "ethcore-network 1.12.0 (git+https://github.com/paritytech/parity)", + "ethcore-network-devp2p 1.12.0 (git+https://github.com/paritytech/parity)", "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)", @@ -2657,11 +2655,12 @@ dependencies = [ "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "keccak-hasher 0.1.0 (git+https://github.com/paritytech/parity-common)", + "keccak-hasher 0.1.0 (git+https://github.com/paritytech/parity)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "memorydb 0.2.0 (git+https://github.com/paritytech/parity-common)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", + "patricia-trie-ethereum 0.1.0 (git+https://github.com/paritytech/parity)", "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", "substrate-primitives 0.1.0", "triehash 0.2.0 (git+https://github.com/paritytech/parity-common)", @@ -3341,6 +3340,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a2f4a431c5c9f662e1200b7c7f02c34e91361150e382089a8f2dec3ba680cbda" "checksum ctrlc 1.1.1 (git+https://github.com/paritytech/rust-ctrlc.git)" = "" "checksum difference 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3304d19798a8e067e48d8e69b2c37f0b5e9b4e462504ad9e27e9f3fce02bba8" +"checksum dirs 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "37a76dd8b997af7107d0bb69d43903cf37153a18266f8b3fdb9911f28efb5444" "checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab" "checksum edit-distance 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3bd26878c3d921f89797a4e1a1711919f999a9f6946bb6f5a4ffda126d297b7e" "checksum either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3be565ca5c557d7f59e7cfcf1844f9e3033650c929c6566f511e8005f205c1d0" @@ -3349,15 +3349,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "07e791d3be96241c77c43846b665ef1384606da2cd2a48730abe606a12906e02" "checksum eth-secp256k1 0.5.7 (git+https://github.com/paritytech/rust-secp256k1)" = "" "checksum ethbloom 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a93a43ce2e9f09071449da36bfa7a1b20b950ee344b6904ff23de493b03b386" -"checksum ethcore-bytes 0.1.0 (git+https://github.com/paritytech/parity.git)" = "" -"checksum ethcore-crypto 0.1.0 (git+https://github.com/paritytech/parity.git)" = "" -"checksum ethcore-io 1.12.0 (git+https://github.com/paritytech/parity.git)" = "" -"checksum ethcore-logger 1.12.0 (git+https://github.com/paritytech/parity.git)" = "" -"checksum ethcore-network 1.12.0 (git+https://github.com/paritytech/parity.git)" = "" -"checksum ethcore-network-devp2p 1.12.0 (git+https://github.com/paritytech/parity.git)" = "" +"checksum ethcore-io 1.12.0 (git+https://github.com/paritytech/parity)" = "" +"checksum ethcore-logger 1.12.0 (git+https://github.com/paritytech/parity)" = "" +"checksum ethcore-network 1.12.0 (git+https://github.com/paritytech/parity)" = "" +"checksum ethcore-network-devp2p 1.12.0 (git+https://github.com/paritytech/parity)" = "" "checksum ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c48729b8aea8aedb12cf4cb2e5cef439fdfe2dda4a89e47eeebd15778ef53b6" "checksum ethereum-types-serialize 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ac59a21a9ce98e188f3dace9eb67a6c4a3c67ec7fbc7218cb827852679dc002" -"checksum ethkey 0.3.0 (git+https://github.com/paritytech/parity.git)" = "" +"checksum ethkey 0.3.0 (git+https://github.com/paritytech/parity)" = "" "checksum exit-future 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9aa7b56cef68c4182db7212dece19cc9f6e2916cf9412e57e6cea53ec02f316d" "checksum fdlimit 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b1ee15a7050e5580b3712877157068ea713b245b080ff302ae2ca973cfcd9baa" "checksum fixed-hash 0.1.3 (git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm)" = "" @@ -3396,8 +3394,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "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-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b7f51f30d7986536accaec4a6a288008dfb3dbffe8a2863a65292bc395a3ae7" -"checksum keccak-hash 0.1.2 (git+https://github.com/paritytech/parity.git)" = "" -"checksum keccak-hasher 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" +"checksum keccak-hash 0.1.2 (git+https://github.com/paritytech/parity-common)" = "" +"checksum keccak-hasher 0.1.0 (git+https://github.com/paritytech/parity)" = "" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" "checksum kvdb 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" @@ -3413,7 +3411,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" "checksum log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "89f010e843f2b1a31dbd316b3b8d443758bc634bed37aabade59c686d644e0a2" "checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376" -"checksum mem 0.1.0 (git+https://github.com/paritytech/parity.git)" = "" +"checksum mem 0.1.0 (git+https://github.com/paritytech/parity)" = "" "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_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" @@ -3441,8 +3439,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "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 path 0.1.0 (git+https://github.com/paritytech/parity.git)" = "" +"checksum path 0.1.1 (git+https://github.com/paritytech/parity-common)" = "" "checksum patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" +"checksum patricia-trie-ethereum 0.1.0 (git+https://github.com/paritytech/parity)" = "" "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.1.0 (git+https://github.com/paritytech/parity-common)" = "" @@ -3468,7 +3467,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum rhododendron 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9e38401cc1b63e71ec9119115c7e1354fcf54c8006ad59a22409dd8bd93737b2" "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" "checksum rlp 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" -"checksum rlp 0.2.1 (git+https://github.com/paritytech/parity.git)" = "" "checksum rlp 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "89db7f8dfdd5eb7ab3ac3ece7a07fd273a680b4b224cb231181280e8996f9f0b" "checksum rocksdb 0.4.5 (git+https://github.com/paritytech/rust-rocksdb)" = "" "checksum rocksdb-sys 0.3.0 (git+https://github.com/paritytech/rust-rocksdb)" = "" From 87740d71f3c7d18f499b4c073b94160b6eb262ce Mon Sep 17 00:00:00 2001 From: David Palm Date: Thu, 12 Jul 2018 13:57:29 +0200 Subject: [PATCH 10/97] Address grumbles --- substrate/keystore/src/lib.rs | 2 +- substrate/state-machine/Cargo.toml | 6 ++---- substrate/state-machine/src/ext.rs | 19 ++++++++++++++++--- .../state-machine/src/proving_backend.rs | 1 - substrate/state-machine/src/testing.rs | 4 ++-- 5 files changed, 21 insertions(+), 11 deletions(-) diff --git a/substrate/keystore/src/lib.rs b/substrate/keystore/src/lib.rs index 97210b29ef015..a424b2df7204f 100644 --- a/substrate/keystore/src/lib.rs +++ b/substrate/keystore/src/lib.rs @@ -16,7 +16,7 @@ //! Keystore (and session key management) for ed25519 based chains like Polkadot. -extern crate ethcore_crypto as crypto; +extern crate parity_crypto as crypto; extern crate subtle; extern crate ed25519; extern crate rand; diff --git a/substrate/state-machine/Cargo.toml b/substrate/state-machine/Cargo.toml index 3141bb4fbc309..9305bcdad779b 100644 --- a/substrate/state-machine/Cargo.toml +++ b/substrate/state-machine/Cargo.toml @@ -20,7 +20,5 @@ triehash = { git = "https://github.com/paritytech/parity-common" } rlp = { git = "https://github.com/paritytech/parity-common" } [dev-dependencies] -# We need `KeccakHasher` from here -keccak-hasher = { git = "https://github.com/paritytech/parity" } -# We need `RlpCodec` from here -patricia-trie-ethereum = { git = "https://github.com/paritytech/parity" } \ No newline at end of file +keccak-hasher = { git = "https://github.com/paritytech/parity" } # REVIEW: We need `KeccakHasher` from here – better way? +patricia-trie-ethereum = { git = "https://github.com/paritytech/parity" } # REVIEW: We need `RlpCodec` from here – better way? \ No newline at end of file diff --git a/substrate/state-machine/src/ext.rs b/substrate/state-machine/src/ext.rs index 07532a909f083..00f6934ee1d7f 100644 --- a/substrate/state-machine/src/ext.rs +++ b/substrate/state-machine/src/ext.rs @@ -53,7 +53,12 @@ impl error::Error for Error { } /// Wraps a read-only backend, call executor, and current overlayed changes. -pub struct Ext<'a, H: Hasher, C: NodeCodec, B: 'a + Backend> { //TODO: can I get rid of the trait bounds here? +pub struct Ext<'a, H, C, B> +where + H: Hasher, + C: NodeCodec, + B: 'a + Backend, +{ // The overlayed changes to write to. overlay: &'a mut OverlayedChanges, // The storage backend to read from. @@ -93,7 +98,12 @@ where } #[cfg(test)] -impl<'a, H: Hasher, C: NodeCodec, B: 'a + Backend> Ext<'a, H, C, B> { +impl<'a, H, C, B> Ext<'a, H, C, B> +where + H: Hasher, + C: NodeCodec, + B: 'a + Backend, +{ pub fn storage_pairs(&self) -> Vec<(Vec, Vec)> { use std::collections::HashMap; @@ -136,7 +146,10 @@ where 42 } - fn storage_root(&mut self) -> H::Out where H::Out: Ord + Encodable { + fn storage_root(&mut self) -> H::Out + where + H::Out: Ord + Encodable + { if let Some((_, ref root)) = self.transaction { return root.clone(); } diff --git a/substrate/state-machine/src/proving_backend.rs b/substrate/state-machine/src/proving_backend.rs index f56ff4d5e12f7..1cac890e98d7b 100644 --- a/substrate/state-machine/src/proving_backend.rs +++ b/substrate/state-machine/src/proving_backend.rs @@ -73,7 +73,6 @@ where .get_with(key, &mut *proof_recorder).map(|x| x.map(|val| val.to_vec())).map_err(map_e) } - // TODO: "error[E0283]: type annotations required: cannot resolve `_: patricia_trie::NodeCodec`"/"note: required because of the requirements on the impl of `backend::Backend` for `trie_backend::TrieBackend`") fn for_keys_with_prefix(&self, prefix: &[u8], f: F) { self.backend.for_keys_with_prefix(prefix, f) } diff --git a/substrate/state-machine/src/testing.rs b/substrate/state-machine/src/testing.rs index b4f50e9314579..2d1147dd0187a 100644 --- a/substrate/state-machine/src/testing.rs +++ b/substrate/state-machine/src/testing.rs @@ -31,8 +31,8 @@ pub struct TestExternalities { } impl TestExternalities { - #[cfg(test)] - fn new() -> Self { + /// Create a new instance of `TestExternalities` + pub fn new() -> Self { TestExternalities {inner: HashMap::new(), hasher: PhantomData} } } From a34f6144dcef175116f2b5c049140d7b396b38a7 Mon Sep 17 00:00:00 2001 From: David Palm Date: Thu, 12 Jul 2018 16:28:11 +0200 Subject: [PATCH 11/97] Teach environmental! about generics --- substrate/environmental/src/lib.rs | 51 +++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/substrate/environmental/src/lib.rs b/substrate/environmental/src/lib.rs index 86e1100ecccad..83be99f278f41 100644 --- a/substrate/environmental/src/lib.rs +++ b/substrate/environmental/src/lib.rs @@ -190,33 +190,36 @@ macro_rules! environmental { } } }; - ($name:ident : trait $t:ident) => { - #[allow(non_camel_case_types)] - struct $name { __private_field: () } + ($name:ident : trait @$t:ident [$($args:ty,)*]) => { + #[allow(non_camel_case_types, dead_code)] + struct $name { __private_field: () } - thread_local_impl!(static GLOBAL: $crate::imp::RefCell> + thread_local_impl!(static GLOBAL: $crate::imp::RefCell + 'static)>> = $crate::imp::RefCell::new(None)); - impl $name { - #[allow(unused_imports)] + impl $name { + #[allow(unused_imports)] pub fn using R>( - protected: &mut $t, + protected: &mut $t<$($args),*>, f: F ) -> R { let lifetime_extended = unsafe { - $crate::imp::transmute::<&mut $t, &mut ($t + 'static)>(protected) + $crate::imp::transmute::<&mut $t<$($args),*>, &mut ($t<$($args),*> + 'static)>(protected) }; $crate::using(&GLOBAL, lifetime_extended, f) - } + } - pub fn with FnOnce(&'a mut ($t + 'a)) -> R>( + pub fn with FnOnce(&'a mut ($t<$($args),*> + 'a)) -> R>( f: F ) -> Option { $crate::with(&GLOBAL, |x| f(x)) } - } - } + } + }; + ($name:ident : trait $t:ident <>) => { environmental! { $name : trait @$t [] } }; + ($name:ident : trait $t:ident < $($args:ty),* $(,)* >) => { environmental! { $name : trait @$t [$($args,)*] } }; + ($name:ident : trait $t:ident) => { environmental! { $name : trait @$t [] } }; } #[cfg(test)] @@ -322,4 +325,28 @@ mod tests { assert_eq!(got_sum, 15); } + + #[test] + fn use_generic_trait() { + trait Plus { fn plus42() -> usize; } + struct ConcretePlus; + impl Plus for ConcretePlus { + fn plus42() -> usize { 42 } + } + trait Multiplier { fn mul_and_add(&self) -> usize; } + impl<'a, P: Plus> Multiplier

for &'a [usize] { + fn mul_and_add(&self) -> usize { + self.iter().fold(1, |a, c| a * c) + P::plus42() + } + } + + let numbers = vec![1, 2, 3]; + let mut numbers = &numbers[..]; + let out = foo::using(&mut numbers, || { + foo::with(|x| x.mul_and_add() ) + }).unwrap(); + + assert_eq!(out, 6 + 42); + environmental!(foo: trait Multiplier); + } } From c7503adf67ba6ce0e7ad794ea04f42c7d4b07afe Mon Sep 17 00:00:00 2001 From: David Palm Date: Thu, 12 Jul 2018 17:07:15 +0200 Subject: [PATCH 12/97] Add Finder artifacts --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 61014b0a28c48..9480cc644bcc5 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,5 @@ substrate/pwasm-alloc/Cargo.lock substrate/pwasm-libc/Cargo.lock demo/runtime/wasm/target/ **/._* -.vscode \ No newline at end of file +.vscode +.DS_Store \ No newline at end of file From 711da4f1dd255c5d07ed4864a31004a4aefdea76 Mon Sep 17 00:00:00 2001 From: David Palm Date: Thu, 12 Jul 2018 17:15:07 +0200 Subject: [PATCH 13/97] whitespace --- substrate/environmental/src/lib.rs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/substrate/environmental/src/lib.rs b/substrate/environmental/src/lib.rs index 83be99f278f41..ff94c0c1ebbb0 100644 --- a/substrate/environmental/src/lib.rs +++ b/substrate/environmental/src/lib.rs @@ -190,15 +190,15 @@ macro_rules! environmental { } } }; - ($name:ident : trait @$t:ident [$($args:ty,)*]) => { - #[allow(non_camel_case_types, dead_code)] - struct $name { __private_field: () } + ($name:ident : trait @$t:ident [$($args:ty,)*]) => { + #[allow(non_camel_case_types, dead_code)] + struct $name { __private_field: () } thread_local_impl!(static GLOBAL: $crate::imp::RefCell + 'static)>> = $crate::imp::RefCell::new(None)); - impl $name { - #[allow(unused_imports)] + impl $name { + #[allow(unused_imports)] pub fn using R>( protected: &mut $t<$($args),*>, @@ -208,18 +208,18 @@ macro_rules! environmental { $crate::imp::transmute::<&mut $t<$($args),*>, &mut ($t<$($args),*> + 'static)>(protected) }; $crate::using(&GLOBAL, lifetime_extended, f) - } + } pub fn with FnOnce(&'a mut ($t<$($args),*> + 'a)) -> R>( f: F ) -> Option { $crate::with(&GLOBAL, |x| f(x)) } - } - }; - ($name:ident : trait $t:ident <>) => { environmental! { $name : trait @$t [] } }; - ($name:ident : trait $t:ident < $($args:ty),* $(,)* >) => { environmental! { $name : trait @$t [$($args,)*] } }; - ($name:ident : trait $t:ident) => { environmental! { $name : trait @$t [] } }; + } + }; + ($name:ident : trait $t:ident <>) => { environmental! { $name : trait @$t [] } }; + ($name:ident : trait $t:ident < $($args:ty),* $(,)* >) => { environmental! { $name : trait @$t [$($args,)*] } }; + ($name:ident : trait $t:ident) => { environmental! { $name : trait @$t [] } }; } #[cfg(test)] From b4f210a2b2253b7675ef95b91bade6944239c8d4 Mon Sep 17 00:00:00 2001 From: David Palm Date: Mon, 30 Jul 2018 17:29:05 +0200 Subject: [PATCH 14/97] Add a toy impl of Hasher and plug it in to Externalities --- substrate/runtime-io/Cargo.toml | 5 ++++- substrate/runtime-io/with_std.rs | 33 ++++++++++++++++++++++++++++---- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/substrate/runtime-io/Cargo.toml b/substrate/runtime-io/Cargo.toml index b46f9909c2018..2ecbdcd8e6752 100644 --- a/substrate/runtime-io/Cargo.toml +++ b/substrate/runtime-io/Cargo.toml @@ -11,10 +11,13 @@ rustc_version = "0.2" substrate-runtime-std = { path = "../runtime-std", default_features = false } environmental = { path = "../environmental", optional = true } substrate-state-machine = { path = "../state-machine", optional = true } -substrate-primitives = { path = "../primitives", default_features = false } +# TODO: when we remove the toy impl of `Hasher` from `with_std.rs` I think this can go back to use `default_features = false` +substrate-primitives = { path = "../primitives", features=["std"] } substrate-codec = { path = "../codec", default_features = false } triehash = { version = "0.1.2", optional = true } ed25519 = { path = "../ed25519", optional = true } +hashdb = { git = "https://github.com/paritytech/parity-common" } +plain_hasher = { git = "https://github.com/paritytech/parity-common" } [features] default = ["std"] diff --git a/substrate/runtime-io/with_std.rs b/substrate/runtime-io/with_std.rs index 93ac7cffa45ab..ada8b514f425a 100644 --- a/substrate/runtime-io/with_std.rs +++ b/substrate/runtime-io/with_std.rs @@ -23,6 +23,8 @@ extern crate substrate_primitives as primitives; extern crate substrate_state_machine; extern crate triehash; extern crate ed25519; +extern crate hashdb; +extern crate plain_hasher; #[doc(hidden)] pub extern crate substrate_codec as codec; @@ -31,10 +33,24 @@ pub use primitives::{blake2_256, twox_128, twox_256}; pub use substrate_state_machine::{Externalities, TestExternalities}; use primitives::hexdisplay::HexDisplay; +use primitives::hash::H256; +use hashdb::Hasher; +use plain_hasher::PlainHasher; // TODO: use the real error, not NoError. -environmental!(ext: trait Externalities); +// TODO: This is just a sanity check toy impl of `Hasher` – this needs to go somewhere else and possibly be renamed to `Hash`? +struct MyHasher; +impl Hasher for MyHasher { + type Out = H256; + type StdHasher = PlainHasher; + const LENGTH:usize = 32; + fn hash(x: &[u8]) -> Self::Out { + blake2_256(x).into() + } +} + +environmental!(ext: trait Externalities); /// Get `key` from storage and return a `Vec`, empty if there's a problem. pub fn storage(key: &[u8]) -> Option> { @@ -83,10 +99,11 @@ pub fn chain_id() -> u64 { } /// "Commit" all existing operations and get the resultant storage root. -pub fn storage_root() -> [u8; 32] { +// TODO: this used to be: `pub fn storage_root() -> [u8; 32]` – does it really need to use H256? +pub fn storage_root() -> H256 { ext::with(|ext| ext.storage_root() - ).unwrap_or([0u8; 32]) + ).unwrap_or(H256::new()) } /// A trie root formed from the enumerated items. @@ -118,7 +135,8 @@ pub fn ed25519_verify>(sig: &[u8; 64], msg: &[u8], pubkey: P) -> /// Execute the given closure with global function available whose functionality routes into the /// externalities `ext`. Forwards the value that the closure returns. -pub fn with_externalities R>(ext: &mut Externalities, f: F) -> R { +// TODO: need a concrete hasher here due to limitations of the `environmental!` macro, otherwise a type param would have been fine I think. +pub fn with_externalities R>(ext: &mut Externalities, f: F) -> R { ext::using(ext, f) } @@ -182,6 +200,13 @@ macro_rules! impl_stubs { mod std_tests { use super::*; + #[test] + fn test_heapsizeof() { + use heapsize::HeapSizeOf; + let h = H256::new(); + assert_eq!(h.heap_size_of_children(), 0); + } + #[test] fn storage_works() { let mut t = TestExternalities::new(); From 3b5f60b4fdb0d5765f7717d0c4e71d3b55864231 Mon Sep 17 00:00:00 2001 From: David Palm Date: Mon, 30 Jul 2018 17:47:46 +0200 Subject: [PATCH 15/97] Use `uint` and `fixed-hash` from `parity-common` Remove unused U512 Add test to ensure H256 impls heapsizeof --- substrate/primitives/Cargo.toml | 9 +++++++-- substrate/primitives/src/hash.rs | 7 +++++++ substrate/primitives/src/lib.rs | 4 +++- substrate/primitives/src/uint.rs | 6 ++---- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/substrate/primitives/Cargo.toml b/substrate/primitives/Cargo.toml index 9d844a938b554..a2ebdd67fca9f 100644 --- a/substrate/primitives/Cargo.toml +++ b/substrate/primitives/Cargo.toml @@ -7,11 +7,14 @@ authors = ["Parity Technologies "] crunchy = "0.1" substrate-runtime-std = { path = "../runtime-std", default_features = false } substrate-codec = { path = "../codec", default_features = false } -fixed-hash = { git = "https://github.com/rphmeier/primitives.git", branch = "compile-for-wasm", default_features = false } +# TODO: I think we can go back to `default_features = false` when we have a proper impl of `Hasher` to use +fixed-hash = { git = "https://github.com/paritytech/parity-common", branch = "add-fixed-hash", features = ["heapsizeof"] } +# TODO: this one will conflict with the one fetched from fixed-hash? See https://github.com/debris/rustc-hex/pull/1 rustc-hex = { git = "https://github.com/rphmeier/rustc-hex.git", version = "2.0", default_features = false } serde = { version = "1.0", default_features = false } serde_derive = { version = "1.0", optional = true } -uint = { git = "https://github.com/rphmeier/primitives.git", branch = "compile-for-wasm", default_features = false } +# TODO: Used to fetch `uint` from "https://github.com/rphmeier/primitives.git" – what was `compile-for-wasm` adding? +uint = { git = "https://github.com/paritytech/parity-common", branch = "add-fixed-hash", default_features = false } twox-hash = { version = "1.1.0", optional = true } byteorder = { version = "1.1", default_features = false } blake2-rfc = { version = "0.2.18", optional = true } @@ -20,6 +23,7 @@ wasmi = { version = "0.3", optional = true } [dev-dependencies] substrate-serializer = { path = "../serializer" } pretty_assertions = "0.4" +heapsize = { version = "0.4"} [features] default = ["std"] @@ -27,6 +31,7 @@ std = [ "wasmi", "uint/std", "fixed-hash/std", + "fixed-hash/heapsizeof", "substrate-codec/std", "substrate-runtime-std/std", "serde/std", diff --git a/substrate/primitives/src/hash.rs b/substrate/primitives/src/hash.rs index 8556f649bba67..b0a9bbb1190b7 100644 --- a/substrate/primitives/src/hash.rs +++ b/substrate/primitives/src/hash.rs @@ -108,4 +108,11 @@ mod tests { assert!(ser::from_str::("\"0\"").unwrap_err().is_data()); assert!(ser::from_str::("\"10\"").unwrap_err().is_data()); } + + #[test] + fn test_heapsizeof() { + use heapsize::HeapSizeOf; + let h = H256::new(); + assert_eq!(h.heap_size_of_children(), 0); + } } diff --git a/substrate/primitives/src/lib.rs b/substrate/primitives/src/lib.rs index 9650cb7e7c65e..e913c1af3a729 100644 --- a/substrate/primitives/src/lib.rs +++ b/substrate/primitives/src/lib.rs @@ -49,6 +49,8 @@ extern crate substrate_runtime_std as rstd; #[cfg(test)] extern crate substrate_serializer; +#[cfg(test)] +extern crate heapsize; #[cfg(test)] #[macro_use] @@ -83,7 +85,7 @@ mod authority_id; mod tests; pub use self::hash::{H160, H256, H512}; -pub use self::uint::{U256, U512}; +pub use self::uint::U256; pub use authority_id::AuthorityId; /// A 512-bit value interpreted as a signature. diff --git a/substrate/primitives/src/uint.rs b/substrate/primitives/src/uint.rs index b14a8aa4fd6ba..c6c94c120ec94 100644 --- a/substrate/primitives/src/uint.rs +++ b/substrate/primitives/src/uint.rs @@ -44,9 +44,7 @@ macro_rules! impl_serde { } construct_uint!(U256, 4); -construct_uint!(U512, 8); impl_serde!(U256, 4); -impl_serde!(U512, 8); #[cfg(test)] mod tests { @@ -68,7 +66,8 @@ mod tests { ($name::from(1_000), "0x3e8"), ($name::from(100_000), "0x186a0"), ($name::from(u64::max_value()), "0xffffffffffffffff"), - ($name::from(u64::max_value()) + 1.into(), "0x10000000000000000"), + // TODO: `uint` doesn't have the same conversion facilities as `ethereum_types::H256` – need to port over the manual impls from `ethereum-types` to the macro so we can to `1.into()` + ($name::from(u64::max_value()) + $name::from(1), "0x10000000000000000"), ]; for (number, expected) in tests { @@ -87,7 +86,6 @@ mod tests { } test!(U256, test_u256); - test!(U512, test_u512); #[test] fn test_large_values() { From 1aeb49534a4649727e584632024f8a349c3b3412 Mon Sep 17 00:00:00 2001 From: David Palm Date: Mon, 30 Jul 2018 17:49:26 +0200 Subject: [PATCH 16/97] lock file updates --- Cargo.lock | 78 ++++++++++++++++++++++++------------------------------ 1 file changed, 35 insertions(+), 43 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 18eb8ea53c369..5290c2bbf622e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -394,15 +394,6 @@ name = "difference" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "dirs" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "dtoa" version = "0.4.2" @@ -627,17 +618,19 @@ dependencies = [ [[package]] name = "fixed-hash" -version = "0.1.3" -source = "git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm#8dc457899afdaf968ff7f16140b03d1e37b01d71" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ + "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "fixed-hash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" +version = "0.2.2" +source = "git+https://github.com/paritytech/parity-common?branch=add-fixed-hash#d2e4ec5b31000366c7db4f890a0836eaab757bb4" dependencies = [ "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", @@ -725,7 +718,7 @@ dependencies = [ [[package]] name = "hashdb" version = "0.2.0" -source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" +source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -958,7 +951,7 @@ dependencies = [ [[package]] name = "keccak-hash" version = "0.1.2" -source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" +source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" dependencies = [ "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -987,7 +980,7 @@ dependencies = [ [[package]] name = "kvdb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" +source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common)", @@ -996,7 +989,7 @@ dependencies = [ [[package]] name = "kvdb-memorydb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" +source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" dependencies = [ "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common)", "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1005,7 +998,7 @@ dependencies = [ [[package]] name = "kvdb-rocksdb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" +source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1114,8 +1107,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "memorydb" -version = "0.2.0" -source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" +version = "0.2.1" +source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", @@ -1267,12 +1260,12 @@ dependencies = [ [[package]] name = "parity-bytes" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" +source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" [[package]] name = "parity-crypto" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" +source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" dependencies = [ "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1340,15 +1333,12 @@ dependencies = [ [[package]] name = "path" version = "0.1.1" -source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" -dependencies = [ - "dirs 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", -] +source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" [[package]] name = "patricia-trie" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" +source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", @@ -1385,7 +1375,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "plain_hasher" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" +source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" dependencies = [ "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1851,7 +1841,7 @@ dependencies = [ [[package]] name = "rlp" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" +source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2198,7 +2188,7 @@ dependencies = [ "kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common)", "kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity-common)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "memorydb 0.2.0 (git+https://github.com/paritytech/parity-common)", + "memorydb 0.2.1 (git+https://github.com/paritytech/parity-common)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", "substrate-client 0.1.0", @@ -2332,7 +2322,8 @@ dependencies = [ "blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.2.3 (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.1.3 (git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm)", + "fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common?branch=add-fixed-hash)", + "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 2.0.0 (git+https://github.com/rphmeier/rustc-hex.git)", "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2341,7 +2332,7 @@ dependencies = [ "substrate-runtime-std 0.1.0", "substrate-serializer 0.1.0", "twox-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "uint 0.1.2 (git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm)", + "uint 0.2.2 (git+https://github.com/paritytech/parity-common?branch=add-fixed-hash)", "wasmi 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2480,6 +2471,8 @@ version = "0.1.0" dependencies = [ "ed25519 0.1.0", "environmental 0.1.0", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", + "plain_hasher 0.1.0 (git+https://github.com/paritytech/parity-common)", "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", @@ -2657,7 +2650,7 @@ dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "keccak-hasher 0.1.0 (git+https://github.com/paritytech/parity)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "memorydb 0.2.0 (git+https://github.com/paritytech/parity-common)", + "memorydb 0.2.1 (git+https://github.com/paritytech/parity-common)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", "patricia-trie-ethereum 0.1.0 (git+https://github.com/paritytech/parity)", @@ -3020,7 +3013,7 @@ dependencies = [ [[package]] name = "triehash" version = "0.2.0" -source = "git+https://github.com/paritytech/parity-common#a72c34f82ff7ccc0f49827bb7f8c5d1fbff794bb" +source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3053,21 +3046,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "uint" -version = "0.1.2" -source = "git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm#8dc457899afdaf968ff7f16140b03d1e37b01d71" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "uint" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" +version = "0.2.2" +source = "git+https://github.com/paritytech/parity-common?branch=add-fixed-hash#4e4347fc9aaf5d100975ca4d165f1d122a2d18ed" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3340,7 +3333,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a2f4a431c5c9f662e1200b7c7f02c34e91361150e382089a8f2dec3ba680cbda" "checksum ctrlc 1.1.1 (git+https://github.com/paritytech/rust-ctrlc.git)" = "" "checksum difference 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3304d19798a8e067e48d8e69b2c37f0b5e9b4e462504ad9e27e9f3fce02bba8" -"checksum dirs 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "37a76dd8b997af7107d0bb69d43903cf37153a18266f8b3fdb9911f28efb5444" "checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab" "checksum edit-distance 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3bd26878c3d921f89797a4e1a1711919f999a9f6946bb6f5a4ffda126d297b7e" "checksum either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3be565ca5c557d7f59e7cfcf1844f9e3033650c929c6566f511e8005f205c1d0" @@ -3358,8 +3350,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum ethkey 0.3.0 (git+https://github.com/paritytech/parity)" = "" "checksum exit-future 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9aa7b56cef68c4182db7212dece19cc9f6e2916cf9412e57e6cea53ec02f316d" "checksum fdlimit 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b1ee15a7050e5580b3712877157068ea713b245b080ff302ae2ca973cfcd9baa" -"checksum fixed-hash 0.1.3 (git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm)" = "" "checksum fixed-hash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18d6fd718fb4396e7a9c93ac59ba7143501467ca7a143c145b5555a571d5576" +"checksum fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common?branch=add-fixed-hash)" = "" "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" @@ -3415,7 +3407,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "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_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" -"checksum memorydb 0.2.0 (git+https://github.com/paritytech/parity-common)" = "" +"checksum memorydb 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" "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" @@ -3539,8 +3531,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "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" "checksum ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd2be2d6639d0f8fe6cdda291ad456e23629558d466e2789d2c3e9892bda285d" -"checksum uint 0.1.2 (git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm)" = "" "checksum uint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "38051a96565903d81c9a9210ce11076b2218f3b352926baa1f5f6abbdfce8273" +"checksum uint 0.2.2 (git+https://github.com/paritytech/parity-common?branch=add-fixed-hash)" = "" "checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" "checksum unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "284b6d3db520d67fbe88fd778c21510d1b0ba4a551e5d0fbb023d33405f6de8a" "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" From 80c96a1b98187aa931b346550092b5d431d5d2f0 Mon Sep 17 00:00:00 2001 From: David Palm Date: Tue, 31 Jul 2018 09:03:35 +0200 Subject: [PATCH 17/97] Make hashes Encodable/Decodable --- substrate/primitives/Cargo.toml | 1 + substrate/primitives/src/hash.rs | 47 ++++++++++++++++++++++++++++++++ substrate/primitives/src/lib.rs | 1 + 3 files changed, 49 insertions(+) diff --git a/substrate/primitives/Cargo.toml b/substrate/primitives/Cargo.toml index a2ebdd67fca9f..3a20e975da497 100644 --- a/substrate/primitives/Cargo.toml +++ b/substrate/primitives/Cargo.toml @@ -15,6 +15,7 @@ serde = { version = "1.0", default_features = false } serde_derive = { version = "1.0", optional = true } # TODO: Used to fetch `uint` from "https://github.com/rphmeier/primitives.git" – what was `compile-for-wasm` adding? uint = { git = "https://github.com/paritytech/parity-common", branch = "add-fixed-hash", default_features = false } +rlp = { git = "https://github.com/paritytech/parity-common", branch = "add-fixed-hash" } twox-hash = { version = "1.1.0", optional = true } byteorder = { version = "1.1", default_features = false } blake2-rfc = { version = "0.2.18", optional = true } diff --git a/substrate/primitives/src/hash.rs b/substrate/primitives/src/hash.rs index eaf9951ad803c..539a610a29317 100644 --- a/substrate/primitives/src/hash.rs +++ b/substrate/primitives/src/hash.rs @@ -22,6 +22,12 @@ use serde::{Serialize, Serializer, Deserialize, Deserializer}; #[cfg(feature = "std")] use bytes; +#[cfg(feature = "std")] +use std::cmp; + +#[cfg(feature = "std")] +use rlp::{self, Rlp, RlpStream, DecoderError}; + macro_rules! impl_rest { ($name: ident, $len: expr) => { #[cfg(feature = "std")] @@ -49,6 +55,27 @@ macro_rules! impl_rest { <[u8; $len] as ::codec::Decode>::decode(input).map($name) } } + + impl rlp::Encodable for $name { + fn rlp_append(&self, s: &mut RlpStream) { + s.encoder().encode_value(self); + } + } + + 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)) + } + }) + } + } + } } @@ -63,6 +90,26 @@ 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/primitives/src/lib.rs b/substrate/primitives/src/lib.rs index 39a5552767de5..974997e6506ef 100644 --- a/substrate/primitives/src/lib.rs +++ b/substrate/primitives/src/lib.rs @@ -30,6 +30,7 @@ extern crate fixed_hash; #[macro_use] extern crate uint as uint_crate; extern crate substrate_codec as codec; +extern crate rlp; #[cfg(feature = "std")] extern crate serde; From e3277acc462c7adbfa4707eaebe26f4e82f4a8cf Mon Sep 17 00:00:00 2001 From: David Palm Date: Tue, 31 Jul 2018 14:49:43 +0200 Subject: [PATCH 18/97] lock file updates --- Cargo.lock | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index e6015055918f4..158f13a5c2ff3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2294,6 +2294,17 @@ dependencies = [ "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "rlp" +version = "0.2.1" +source = "git+https://github.com/paritytech/parity-common?branch=add-fixed-hash#b0cf5d1cf5bf0d284fae8e724df00fcb52673542" +dependencies = [ + "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "rlp" version = "0.2.1" @@ -2857,6 +2868,7 @@ dependencies = [ "fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common?branch=add-fixed-hash)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=add-fixed-hash)", "rustc-hex 2.0.0 (git+https://github.com/rphmeier/rustc-hex.git)", "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)", @@ -4130,6 +4142,7 @@ dependencies = [ "checksum rhododendron 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9e38401cc1b63e71ec9119115c7e1354fcf54c8006ad59a22409dd8bd93737b2" "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" "checksum rlp 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" +"checksum rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=add-fixed-hash)" = "" "checksum rlp 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "89db7f8dfdd5eb7ab3ac3ece7a07fd273a680b4b224cb231181280e8996f9f0b" "checksum rocksdb 0.4.5 (git+https://github.com/paritytech/rust-rocksdb)" = "" "checksum rocksdb-sys 0.3.0 (git+https://github.com/paritytech/rust-rocksdb)" = "" From d38216bc7c001638f523b958091e978cb7078b52 Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 1 Aug 2018 17:36:31 +0200 Subject: [PATCH 19/97] Impl FromIterator for TestExternalities so we can collect() and use map! --- substrate/state-machine/src/ext.rs | 2 -- substrate/state-machine/src/testing.rs | 11 +++++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/substrate/state-machine/src/ext.rs b/substrate/state-machine/src/ext.rs index c02fa574ba6e9..111a9be763a1e 100644 --- a/substrate/state-machine/src/ext.rs +++ b/substrate/state-machine/src/ext.rs @@ -155,8 +155,6 @@ where } fn storage_root(&mut self) -> H::Out - where - H::Out: Ord + Encodable { if let Some((_, ref root)) = self.transaction { return root.clone(); diff --git a/substrate/state-machine/src/testing.rs b/substrate/state-machine/src/testing.rs index 2d1147dd0187a..86dfe296c9b65 100644 --- a/substrate/state-machine/src/testing.rs +++ b/substrate/state-machine/src/testing.rs @@ -23,6 +23,7 @@ use triehash::trie_root; use hashdb::Hasher; use rlp::Encodable; use std::marker::PhantomData; +use std::iter::FromIterator; /// Simple HashMap-based Externalities impl. pub struct TestExternalities { @@ -37,6 +38,16 @@ impl TestExternalities { } } +impl FromIterator<(Vec, Vec)> for TestExternalities { + fn from_iter, Vec)>>(iter: I) -> Self { + let mut t = Self::new(); + for i in iter { + t.inner.insert(i.0, i.1); + } + t + } +} + impl Externalities for TestExternalities where H::Out: Ord + Encodable { fn storage(&self, key: &[u8]) -> Option> { self.inner.get(key).map(|x| x.to_vec()) From 5f19c7ba63f22e80cfefa3d743d595159bf6c862 Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 1 Aug 2018 17:49:49 +0200 Subject: [PATCH 20/97] Use rustc-hex from crates Use rlp from master so dependencies do not mess up the scope --- substrate/primitives/Cargo.toml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/substrate/primitives/Cargo.toml b/substrate/primitives/Cargo.toml index 3a20e975da497..eea16632d9ce1 100644 --- a/substrate/primitives/Cargo.toml +++ b/substrate/primitives/Cargo.toml @@ -9,13 +9,12 @@ substrate-runtime-std = { path = "../runtime-std", default_features = false } substrate-codec = { path = "../codec", default_features = false } # TODO: I think we can go back to `default_features = false` when we have a proper impl of `Hasher` to use fixed-hash = { git = "https://github.com/paritytech/parity-common", branch = "add-fixed-hash", features = ["heapsizeof"] } -# TODO: this one will conflict with the one fetched from fixed-hash? See https://github.com/debris/rustc-hex/pull/1 -rustc-hex = { git = "https://github.com/rphmeier/rustc-hex.git", version = "2.0", default_features = false } +rustc-hex = { version = "2.0", default_features = false } serde = { version = "1.0", default_features = false } serde_derive = { version = "1.0", optional = true } # TODO: Used to fetch `uint` from "https://github.com/rphmeier/primitives.git" – what was `compile-for-wasm` adding? uint = { git = "https://github.com/paritytech/parity-common", branch = "add-fixed-hash", default_features = false } -rlp = { git = "https://github.com/paritytech/parity-common", branch = "add-fixed-hash" } +rlp = { git = "https://github.com/paritytech/parity-common" } twox-hash = { version = "1.1.0", optional = true } byteorder = { version = "1.1", default_features = false } blake2-rfc = { version = "0.2.18", optional = true } From 848ce8f6003dbabe329bd78996cb52d128631fab Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 1 Aug 2018 17:53:26 +0200 Subject: [PATCH 21/97] Fix tests in runtime-io --- Cargo.lock | 24 +++++++--------------- substrate/runtime-io/Cargo.toml | 4 ++++ substrate/runtime-io/with_std.rs | 34 +++++++++++++++++++++++++++----- 3 files changed, 40 insertions(+), 22 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 158f13a5c2ff3..144cdb50d0d6c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2294,17 +2294,6 @@ dependencies = [ "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "rlp" -version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common?branch=add-fixed-hash#b0cf5d1cf5bf0d284fae8e724df00fcb52673542" -dependencies = [ - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "rlp" version = "0.2.1" @@ -2373,7 +2362,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "rustc-hex" version = "2.0.0" -source = "git+https://github.com/rphmeier/rustc-hex.git#ee2ec40b9062ac7769ccb9dc891d6dc2cc9009d7" +source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "rustc-serialize" @@ -2868,8 +2857,8 @@ dependencies = [ "fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common?branch=add-fixed-hash)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=add-fixed-hash)", - "rustc-hex 2.0.0 (git+https://github.com/rphmeier/rustc-hex.git)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", + "rustc-hex 2.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)", "substrate-codec 0.1.0", @@ -3026,7 +3015,9 @@ dependencies = [ "ed25519 0.1.0", "environmental 0.1.0", "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", + "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "plain_hasher 0.1.0 (git+https://github.com/paritytech/parity-common)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", @@ -3626,7 +3617,7 @@ dependencies = [ [[package]] name = "triehash" version = "0.2.0" -source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" +source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -4142,14 +4133,13 @@ dependencies = [ "checksum rhododendron 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9e38401cc1b63e71ec9119115c7e1354fcf54c8006ad59a22409dd8bd93737b2" "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" "checksum rlp 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" -"checksum rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=add-fixed-hash)" = "" "checksum rlp 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "89db7f8dfdd5eb7ab3ac3ece7a07fd273a680b4b224cb231181280e8996f9f0b" "checksum rocksdb 0.4.5 (git+https://github.com/paritytech/rust-rocksdb)" = "" "checksum rocksdb-sys 0.3.0 (git+https://github.com/paritytech/rust-rocksdb)" = "" "checksum rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)" = "f76d05d3993fd5f4af9434e8e436db163a12a9d40e1a58a726f27a01dfd12a2a" "checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395" "checksum rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0ceb8ce7a5e520de349e1fa172baeba4a9e8d5ef06c47471863530bc4972ee1e" -"checksum rustc-hex 2.0.0 (git+https://github.com/rphmeier/rustc-hex.git)" = "" +"checksum rustc-hex 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d2b03280c2813907a030785570c577fb27d3deec8da4c18566751ade94de0ace" "checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" "checksum rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a54aa04a10c68c1c4eacb4337fd883b435997ede17a9385784b990777686b09a" "checksum rw-stream-sink 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)" = "" diff --git a/substrate/runtime-io/Cargo.toml b/substrate/runtime-io/Cargo.toml index 2ecbdcd8e6752..fc080a3cc4eb0 100644 --- a/substrate/runtime-io/Cargo.toml +++ b/substrate/runtime-io/Cargo.toml @@ -18,6 +18,10 @@ triehash = { version = "0.1.2", optional = true } ed25519 = { path = "../ed25519", optional = true } hashdb = { git = "https://github.com/paritytech/parity-common" } plain_hasher = { git = "https://github.com/paritytech/parity-common" } +rlp = { git = "https://github.com/paritytech/parity-common" } + +[dev-dependencies] +heapsize = "0.4" [features] default = ["std"] diff --git a/substrate/runtime-io/with_std.rs b/substrate/runtime-io/with_std.rs index ed2f24639435d..af9587816ce17 100644 --- a/substrate/runtime-io/with_std.rs +++ b/substrate/runtime-io/with_std.rs @@ -25,6 +25,10 @@ extern crate triehash; extern crate ed25519; extern crate hashdb; extern crate plain_hasher; +extern crate rlp; + +#[cfg(test)] +extern crate heapsize; #[doc(hidden)] pub extern crate substrate_codec as codec; @@ -33,14 +37,14 @@ pub use primitives::{blake2_256, twox_128, twox_256}; pub use substrate_state_machine::{Externalities, TestExternalities}; use primitives::hexdisplay::HexDisplay; -use primitives::hash::H256; +use primitives::H256; use hashdb::Hasher; use plain_hasher::PlainHasher; // TODO: use the real error, not NoError. // TODO: This is just a sanity check toy impl of `Hasher` – this needs to go somewhere else and possibly be renamed to `Hash`? -struct MyHasher; +pub struct MyHasher; impl Hasher for MyHasher { type Out = H256; type StdHasher = PlainHasher; @@ -206,7 +210,9 @@ macro_rules! impl_stubs { #[cfg(test)] mod std_tests { use super::*; + use rlp::{Encodable, Decodable, RlpStream, Rlp}; + // TODO: remove these tests (heapsizeof, encodable, decodable) #[test] fn test_heapsizeof() { use heapsize::HeapSizeOf; @@ -214,9 +220,27 @@ mod std_tests { assert_eq!(h.heap_size_of_children(), 0); } + // TODO: remove these tests (heapsizeof, encodable, decodable) + #[test] + fn test_hash_is_encodable() { + let h = H256::from(32); + let mut s = RlpStream::new(); + h.rlp_append(&mut s); + let rlp_bytes = s.drain(); + assert_eq!(rlp_bytes.into_vec(), vec![160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32] ); + } + + // TODO: remove these tests (heapsizeof, encodable, decodable) + #[test] + fn test_hash_is_decodable() { + let data = Rlp::new(&[160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32]); + let h = H256::decode(&data).unwrap(); + assert_eq!(h, H256::from(32)); + } + #[test] fn storage_works() { - let mut t = TestExternalities::new(); + let mut t = TestExternalities::::new(); assert!(with_externalities(&mut t, || { assert_eq!(storage(b"hello"), None); set_storage(b"hello", b"world"); @@ -237,7 +261,7 @@ mod std_tests { #[test] fn read_storage_works() { - let mut t: TestExternalities = map![ + let mut t: TestExternalities = map![ b":test".to_vec() => b"\x0b\0\0\0Hello world".to_vec() ]; @@ -253,7 +277,7 @@ mod std_tests { #[test] fn clear_prefix_works() { - let mut t: TestExternalities = map![ + let mut t: TestExternalities = 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(), From 9b8f4174a89140adc72f50113a1d1d9bd6ac8e5c Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 1 Aug 2018 18:17:30 +0200 Subject: [PATCH 22/97] lockfile shenanigans --- Cargo.lock | 910 ++++++++++++++++++++++++++--------------------------- 1 file changed, 447 insertions(+), 463 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2dd2a8ecd4ef5..a8d62ddd16ea5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,7 +23,7 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "0.6.6" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -34,8 +34,8 @@ name = "aio-limited" version = "0.1.0" source = "git+https://github.com/paritytech/aio-limited.git#1f42497dcd2a6f85b83af97cd80314b26a1e4a9e" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -58,7 +58,7 @@ name = "ansi_term" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -95,29 +95,29 @@ dependencies = [ [[package]] name = "assert_matches" -version = "1.3.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "atty" -version = "0.2.11" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "backtrace" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "backtrace-sys 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-demangle 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -125,8 +125,8 @@ name = "backtrace-sys" version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -167,7 +167,7 @@ dependencies = [ [[package]] name = "base64" -version = "0.9.2" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -218,7 +218,7 @@ dependencies = [ [[package]] name = "bs58" -version = "0.2.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -238,7 +238,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "bytes" -version = "0.4.9" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -247,15 +247,15 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.18" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rayon 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "cfg-if" -version = "0.1.4" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -269,11 +269,11 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.5" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -293,7 +293,7 @@ version = "2.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "atty 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -315,7 +315,7 @@ name = "cmake" version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -329,7 +329,7 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -337,7 +337,7 @@ name = "core-foundation-sys" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -364,7 +364,7 @@ name = "crossbeam-deque" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-epoch 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-epoch 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -374,9 +374,9 @@ version = "0.3.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)", - "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -384,13 +384,13 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.4.3" +version = "0.4.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)", - "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -400,7 +400,7 @@ name = "crossbeam-utils" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -408,7 +408,7 @@ name = "crossbeam-utils" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -422,7 +422,7 @@ version = "1.1.1" source = "git+https://github.com/paritytech/rust-ctrlc.git#b523017108bb2d571a7a69bd97bc406e63bc7a9d" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -433,9 +433,9 @@ source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c2 dependencies = [ "base64 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "chashmap 2.2.1 (git+https://github.com/redox-os/tfs)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "serde 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)", + "serde_json 1.0.22 (registry+https://github.com/rust-lang/crates.io-index)", "tempfile 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -451,7 +451,7 @@ dependencies = [ "ed25519 0.1.0", "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (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)", "substrate-client 0.1.0", @@ -539,7 +539,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "digest" -version = "0.7.5" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -547,7 +547,7 @@ dependencies = [ [[package]] name = "dtoa" -version = "0.4.3" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -598,7 +598,7 @@ name = "error-chain" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -606,7 +606,7 @@ name = "error-chain" version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -615,7 +615,7 @@ version = "0.5.7" source = "git+https://github.com/paritytech/rust-secp256k1#db81cfea59014b4d176f10f86ed52e1a130b6822" dependencies = [ "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -634,13 +634,13 @@ dependencies = [ [[package]] name = "ethcore-io" version = "1.12.0" -source = "git+https://github.com/paritytech/parity#f9814381a7c36d9b14f326f64c7b476e9549d846" +source = "git+https://github.com/paritytech/parity#c22498066b6546c4a2bd58f1ff4a664d00142f43" dependencies = [ "crossbeam 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", "timer 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -649,15 +649,15 @@ dependencies = [ [[package]] name = "ethcore-logger" version = "1.12.0" -source = "git+https://github.com/paritytech/parity#f9814381a7c36d9b14f326f64c7b476e9549d846" +source = "git+https://github.com/paritytech/parity#c22498066b6546c4a2bd58f1ff4a664d00142f43" dependencies = [ "ansi_term 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "atty 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.2 (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)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -687,13 +687,13 @@ dependencies = [ [[package]] name = "ethkey" version = "0.3.0" -source = "git+https://github.com/paritytech/parity#f9814381a7c36d9b14f326f64c7b476e9549d846" +source = "git+https://github.com/paritytech/parity#c22498066b6546c4a2bd58f1ff4a664d00142f43" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "edit-distance 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "eth-secp256k1 0.5.7 (git+https://github.com/paritytech/rust-secp256k1)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.2 (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)", "mem 0.1.0 (git+https://github.com/paritytech/parity)", "parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common)", @@ -716,7 +716,7 @@ name = "exit-future" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -730,7 +730,7 @@ name = "fdlimit" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -739,7 +739,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -750,7 +750,7 @@ version = "0.2.2" source = "git+https://github.com/paritytech/parity-common?branch=add-fixed-hash#b0cf5d1cf5bf0d284fae8e724df00fcb52673542" dependencies = [ "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -775,13 +775,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "fs-swap" -version = "0.2.3" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", - "libloading 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -800,7 +798,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "futures" -version = "0.1.23" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -808,7 +806,7 @@ name = "futures-cpupool" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -827,28 +825,25 @@ dependencies = [ [[package]] name = "getopts" -version = "0.2.18" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] name = "globset" -version = "0.4.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "aho-corasick 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "hashdb" version = "0.2.0" -source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" +source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -859,7 +854,7 @@ name = "heapsize" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -886,7 +881,7 @@ dependencies = [ [[package]] name = "httparse" -version = "1.3.2" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -895,7 +890,7 @@ version = "0.10.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "httparse 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -904,7 +899,7 @@ dependencies = [ "traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -912,16 +907,16 @@ name = "hyper" version = "0.11.27" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "base64 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "httparse 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "mime 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "mime 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "relay 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", @@ -935,10 +930,10 @@ dependencies = [ [[package]] name = "idna" -version = "0.1.5" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "matches 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-normalization 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -963,7 +958,7 @@ name = "iovec" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -982,7 +977,7 @@ dependencies = [ [[package]] name = "itoa" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -990,11 +985,11 @@ name = "jsonrpc-core" version = "8.0.2" source = "git+https://github.com/paritytech/jsonrpc.git#7e5df8ca2acc01c608b2d2bd8cdcdb19d8cbaa90" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "log 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)", - "serde_json 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.22 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1005,8 +1000,8 @@ dependencies = [ "hyper 0.11.27 (registry+https://github.com/rust-lang/crates.io-index)", "jsonrpc-core 8.0.2 (git+https://github.com/paritytech/jsonrpc.git)", "jsonrpc-server-utils 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1026,8 +1021,8 @@ version = "8.0.1" source = "git+https://github.com/paritytech/jsonrpc.git#7e5df8ca2acc01c608b2d2bd8cdcdb19d8cbaa90" dependencies = [ "jsonrpc-core 8.0.2 (git+https://github.com/paritytech/jsonrpc.git)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1035,10 +1030,10 @@ name = "jsonrpc-server-utils" version = "8.0.1" source = "git+https://github.com/paritytech/jsonrpc.git#7e5df8ca2acc01c608b2d2bd8cdcdb19d8cbaa90" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "globset 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "globset 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "jsonrpc-core 8.0.2 (git+https://github.com/paritytech/jsonrpc.git)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1051,8 +1046,8 @@ dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "jsonrpc-core 8.0.2 (git+https://github.com/paritytech/jsonrpc.git)", "jsonrpc-server-utils 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "ws 0.7.5 (git+https://github.com/tomusdrw/ws-rs)", ] @@ -1062,7 +1057,7 @@ name = "keccak-hash" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1070,7 +1065,7 @@ dependencies = [ [[package]] name = "keccak-hasher" version = "0.1.0" -source = "git+https://github.com/paritytech/parity#f9814381a7c36d9b14f326f64c7b476e9549d846" +source = "git+https://github.com/paritytech/parity#c22498066b6546c4a2bd58f1ff4a664d00142f43" dependencies = [ "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", @@ -1090,7 +1085,7 @@ dependencies = [ [[package]] name = "kvdb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" +source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common)", @@ -1099,25 +1094,25 @@ dependencies = [ [[package]] name = "kvdb-memorydb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" +source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" dependencies = [ "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "kvdb-rocksdb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" +source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "fs-swap 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "fs-swap 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "interleaved-ordered 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "rocksdb 0.4.5 (git+https://github.com/paritytech/rust-rocksdb)", ] @@ -1134,7 +1129,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "lazy_static" -version = "1.0.2" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1144,25 +1139,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "libc" -version = "0.2.42" +version = "0.2.41" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "libloading" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "libp2p" version = "0.1.0" source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "libp2p-dns 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "libp2p-floodsub 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", @@ -1190,16 +1176,16 @@ name = "libp2p-core" version = "0.1.0" source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ - "bs58 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "bs58 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (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.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "multihash 0.8.1-pre (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "multistream-select 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "rw-stream-sink 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "smallvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1211,9 +1197,9 @@ name = "libp2p-dns" version = "0.1.0" source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "tokio-dns-unofficial 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1224,16 +1210,16 @@ name = "libp2p-floodsub" version = "0.1.0" source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ - "bs58 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bs58 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (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.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1245,15 +1231,15 @@ name = "libp2p-identify" version = "0.1.0" source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (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.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "libp2p-peerstore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "varint 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", @@ -1266,18 +1252,18 @@ source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c2 dependencies = [ "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", "bigint 4.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bs58 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "bs58 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "datastore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "libp2p-identify 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "libp2p-ping 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1291,11 +1277,11 @@ name = "libp2p-mplex" version = "0.1.0" source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (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.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1307,9 +1293,9 @@ name = "libp2p-peerstore" version = "0.1.0" source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ - "bs58 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bs58 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "datastore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1322,14 +1308,14 @@ name = "libp2p-ping" version = "0.1.0" source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "multistream-select 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1340,9 +1326,9 @@ version = "0.1.1" source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "aio-limited 0.1.0 (git+https://github.com/paritytech/aio-limited.git)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1352,13 +1338,13 @@ name = "libp2p-relay" version = "0.1.0" source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "libp2p-peerstore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1371,12 +1357,12 @@ version = "0.1.0" source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "asn1_der 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "eth-secp256k1 0.5.7 (git+https://github.com/paritytech/rust-secp256k1)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", "ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", "rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1390,9 +1376,9 @@ name = "libp2p-tcp-transport" version = "0.1.0" source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-tcp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1403,9 +1389,9 @@ name = "libp2p-transport-timeout" version = "0.1.0" source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-timer 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1414,14 +1400,14 @@ name = "libp2p-websocket" version = "0.1.0" source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "rw-stream-sink 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "stdweb 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "websocket 0.20.3 (registry+https://github.com/rust-lang/crates.io-index)", + "websocket 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1429,10 +1415,10 @@ name = "libp2p-yamux" version = "0.1.0" source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "yamux 0.1.0 (git+https://github.com/paritytech/yamux)", ] @@ -1466,33 +1452,33 @@ name = "log" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "log" -version = "0.4.3" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "matches" -version = "0.1.7" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "mem" version = "0.1.0" -source = "git+https://github.com/paritytech/parity#f9814381a7c36d9b14f326f64c7b476e9549d846" +source = "git+https://github.com/paritytech/parity#c22498066b6546c4a2bd58f1ff4a664d00142f43" [[package]] name = "memchr" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1508,7 +1494,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "memorydb" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" +source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", @@ -1527,7 +1513,7 @@ dependencies = [ [[package]] name = "mime" -version = "0.3.8" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1535,7 +1521,7 @@ dependencies = [ [[package]] name = "mio" -version = "0.6.15" +version = "0.6.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1543,10 +1529,10 @@ dependencies = [ "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazycell 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1557,7 +1543,7 @@ version = "0.2.1" 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)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1595,9 +1581,9 @@ name = "multistream-select" version = "0.1.0" source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "varint 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", @@ -1622,9 +1608,9 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "openssl 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)", - "schannel 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", + "schannel 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", "security-framework 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", "security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1632,12 +1618,12 @@ dependencies = [ [[package]] name = "net2" -version = "0.2.33" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1650,21 +1636,21 @@ name = "num-bigint" version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-integer" -version = "0.1.39" +version = "0.1.38" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-traits" -version = "0.2.5" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1672,7 +1658,7 @@ name = "num_cpus" version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1691,8 +1677,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-sys 0.9.33 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1701,10 +1687,10 @@ name = "openssl-sys" version = "0.9.33" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)", - "vcpkg 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "pkg-config 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", + "vcpkg 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1712,18 +1698,18 @@ name = "owning_ref" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "stable_deref_trait 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "parity-bytes" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" +source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" [[package]] name = "parity-crypto" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" +source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" dependencies = [ "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1734,7 +1720,7 @@ dependencies = [ [[package]] name = "parity-wasm" -version = "0.31.1" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1770,7 +1756,7 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.6.3" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lock_api 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1782,16 +1768,16 @@ name = "parking_lot_core" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "patricia-trie" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" +source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", @@ -1804,7 +1790,7 @@ dependencies = [ [[package]] name = "patricia-trie-ethereum" version = "0.1.0" -source = "git+https://github.com/paritytech/parity#f9814381a7c36d9b14f326f64c7b476e9549d846" +source = "git+https://github.com/paritytech/parity#c22498066b6546c4a2bd58f1ff4a664d00142f43" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1822,13 +1808,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "pkg-config" -version = "0.3.12" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "plain_hasher" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" +source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" dependencies = [ "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1841,7 +1827,7 @@ version = "0.3.0" dependencies = [ "ctrlc 1.1.1 (git+https://github.com/paritytech/rust-ctrlc.git)", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-cli 0.3.0", "vergen 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1872,15 +1858,15 @@ dependencies = [ "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "exit-future 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "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)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-primitives 0.1.0", "polkadot-runtime 0.1.0", "polkadot-service 0.3.0", "polkadot-transaction-pool 0.1.0", - "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-cli 0.3.0", "substrate-client 0.1.0", "substrate-codec 0.1.0", @@ -1901,8 +1887,8 @@ name = "polkadot-collator" version = "0.1.0" dependencies = [ "ed25519 0.1.0", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-api 0.1.0", "polkadot-cli 0.3.0", "polkadot-primitives 0.1.0", @@ -1920,7 +1906,7 @@ dependencies = [ "ed25519 0.1.0", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "exit-future 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (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)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-api 0.1.0", @@ -1953,8 +1939,8 @@ name = "polkadot-network" version = "0.1.0" dependencies = [ "ed25519 0.1.0", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-api 0.1.0", "polkadot-consensus 0.1.0", @@ -2028,7 +2014,7 @@ dependencies = [ "ed25519 0.1.0", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.2 (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)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-api 0.1.0", @@ -2038,7 +2024,7 @@ dependencies = [ "polkadot-primitives 0.1.0", "polkadot-runtime 0.1.0", "polkadot-transaction-pool 0.1.0", - "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-client 0.1.0", "substrate-codec 0.1.0", "substrate-network 0.1.0", @@ -2101,7 +2087,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "proc-macro2" -version = "0.4.9" +version = "0.4.4" 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)", @@ -2109,7 +2095,7 @@ dependencies = [ [[package]] name = "protobuf" -version = "2.0.4" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2117,7 +2103,7 @@ name = "pulldown-cmark" version = "0.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "getopts 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", + "getopts 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2138,8 +2124,8 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-wasm 0.31.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-wasm 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2154,10 +2140,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "quote" -version = "0.6.4" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2166,7 +2152,7 @@ version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2176,20 +2162,20 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rand" -version = "0.5.4" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2202,33 +2188,33 @@ name = "rayon" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon-core 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rayon" -version = "1.0.2" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon-core 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rayon-core" -version = "1.4.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.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 = "redox_syscall" -version = "0.1.40" +version = "0.1.39" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2236,7 +2222,7 @@ name = "redox_termios" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2244,7 +2230,7 @@ name = "regex" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "aho-corasick 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "regex-syntax 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2256,7 +2242,7 @@ name = "regex" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "aho-corasick 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "regex-syntax 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2284,7 +2270,7 @@ name = "relay" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2292,7 +2278,7 @@ name = "remove_dir_all" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2301,7 +2287,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (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)", ] @@ -2312,7 +2298,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2320,7 +2306,7 @@ dependencies = [ [[package]] name = "rlp" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common#4481687a81f04993e5f54adef27852167d7114f7" +source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2344,7 +2330,7 @@ name = "rocksdb" version = "0.4.5" source = "git+https://github.com/paritytech/rust-rocksdb#ecf06adf3148ab10f6f7686b724498382ff4f36e" dependencies = [ - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "local-encoding 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "rocksdb-sys 0.3.0 (git+https://github.com/paritytech/rust-rocksdb)", ] @@ -2354,8 +2340,8 @@ name = "rocksdb-sys" version = "0.3.0" source = "git+https://github.com/paritytech/rust-rocksdb#ecf06adf3148ab10f6f7686b724498382ff4f36e" dependencies = [ - "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "local-encoding 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "snappy-sys 0.1.0 (git+https://github.com/paritytech/rust-snappy)", ] @@ -2366,7 +2352,7 @@ version = "0.2.36" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2374,7 +2360,7 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.9" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2405,8 +2391,8 @@ name = "rw-stream-sink" version = "0.1.0" source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2424,11 +2410,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "schannel" -version = "0.1.13" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2448,7 +2434,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2458,7 +2444,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2484,18 +2470,18 @@ name = "serde_derive" version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.14.5 (registry+https://github.com/rust-lang/crates.io-index)", + "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 = "serde_json" -version = "1.0.24" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "dtoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa 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)", ] @@ -2516,7 +2502,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "block-buffer 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "digest 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)", + "digest 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2550,7 +2536,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "slog" -version = "2.3.2" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2558,7 +2544,7 @@ name = "slog-async" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "take_mut 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2568,10 +2554,10 @@ name = "slog-json" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "chrono 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "serde 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)", - "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.22 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2581,7 +2567,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crossbeam 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2613,12 +2599,12 @@ version = "0.1.0" source = "git+https://github.com/paritytech/rust-snappy#798408ffef8f86dd51481673aca10f5348d7491b" dependencies = [ "cmake 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "stable_deref_trait" -version = "1.1.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2646,7 +2632,7 @@ version = "0.1.0" dependencies = [ "ed25519 0.1.0", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (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)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "rhododendron 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2666,19 +2652,19 @@ version = "0.3.0" dependencies = [ "ansi_term 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", "app_dirs 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "atty 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "exit-future 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "fdlimit 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "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)", "names 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "regex 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-client 0.1.0", "substrate-extrinsic-pool 0.1.0", "substrate-network 0.1.0", @@ -2700,7 +2686,7 @@ 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)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-bft 0.1.0", "substrate-codec 0.1.0", "substrate-executor 0.1.0", @@ -2749,14 +2735,14 @@ dependencies = [ name = "substrate-executor" version = "0.1.0" dependencies = [ - "assert_matches 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "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)", "ed25519 0.1.0", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.2 (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)", - "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 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)", @@ -2767,7 +2753,7 @@ dependencies = [ "substrate-serializer 0.1.0", "substrate-state-machine 0.1.0", "triehash 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "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)", ] @@ -2777,7 +2763,7 @@ name = "substrate-extrinsic-pool" version = "0.1.0" dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (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)", "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)", @@ -2791,7 +2777,7 @@ version = "0.1.0" dependencies = [ "ed25519 0.1.0", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2805,7 +2791,7 @@ dependencies = [ "rand 0.4.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)", - "serde_json 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.22 (registry+https://github.com/rust-lang/crates.io-index)", "subtle 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2832,7 +2818,7 @@ dependencies = [ "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "ethcore-io 1.12.0 (git+https://github.com/paritytech/parity)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "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)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2849,22 +2835,22 @@ dependencies = [ name = "substrate-network-libp2p" version = "0.1.0" dependencies = [ - "assert_matches 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "assert_matches 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "ethcore-io 1.12.0 (git+https://github.com/paritytech/parity)", "ethcore-logger 1.12.0 (git+https://github.com/paritytech/parity)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "ethkey 0.3.0 (git+https://github.com/paritytech/parity)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "ipnetwork 0.12.8 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common)", "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-timer 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2889,7 +2875,7 @@ dependencies = [ "substrate-runtime-std 0.1.0", "substrate-serializer 0.1.0", "twox-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "uint 0.1.2 (git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm)", + "uint 0.2.2 (git+https://github.com/paritytech/parity-common?branch=add-fixed-hash)", "wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2897,7 +2883,7 @@ dependencies = [ name = "substrate-rpc" version = "0.1.0" dependencies = [ - "assert_matches 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "assert_matches 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "jsonrpc-core 8.0.2 (git+https://github.com/paritytech/jsonrpc.git)", "jsonrpc-macros 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)", @@ -2948,8 +2934,8 @@ dependencies = [ name = "substrate-runtime-contract" version = "0.1.0" dependencies = [ - "assert_matches 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-wasm 0.31.1 (registry+https://github.com/rust-lang/crates.io-index)", + "assert_matches 1.2.0 (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)", "serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3056,10 +3042,10 @@ version = "0.1.0" 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.5 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.4 (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)", + "serde_json 1.0.22 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-io 0.1.0", @@ -3195,7 +3181,7 @@ name = "substrate-serializer" version = "0.1.0" dependencies = [ "serde 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)", + "serde_json 1.0.22 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3204,14 +3190,14 @@ version = "0.3.0" dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "exit-future 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "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)", "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)", - "serde_json 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)", - "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.22 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-client 0.1.0", "substrate-client-db 0.1.0", "substrate-codec 0.1.0", @@ -3234,7 +3220,7 @@ name = "substrate-state-db" version = "0.1.0" dependencies = [ "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", @@ -3263,14 +3249,14 @@ dependencies = [ name = "substrate-telemetry" version = "0.3.0" dependencies = [ - "lazy_static 1.0.2 (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)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "slog-async 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "slog-json 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "slog-scope 4.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "websocket 0.20.3 (registry+https://github.com/rust-lang/crates.io-index)", + "websocket 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3315,11 +3301,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "syn" -version = "0.14.5" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "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)", "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3353,9 +3339,9 @@ version = "2.2.0" 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)", - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.40 (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.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3364,8 +3350,8 @@ name = "termion" version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3382,7 +3368,7 @@ name = "thread_local" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3391,9 +3377,9 @@ name = "time" version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (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]] @@ -3401,7 +3387,7 @@ name = "timer" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "chrono 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3417,16 +3403,16 @@ name = "tokio" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-fs 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-fs 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-tcp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-timer 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-udp 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-udp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3434,8 +3420,8 @@ name = "tokio-codec" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3444,16 +3430,16 @@ name = "tokio-core" version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", "scoped-tls 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-timer 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3462,7 +3448,7 @@ name = "tokio-current-thread" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3471,9 +3457,9 @@ name = "tokio-dns-unofficial" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3482,17 +3468,17 @@ name = "tokio-executor" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-fs" -version = "0.1.2" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3500,9 +3486,9 @@ name = "tokio-io" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3510,9 +3496,9 @@ name = "tokio-proto" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (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)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3524,12 +3510,12 @@ dependencies = [ [[package]] name = "tokio-reactor" -version = "0.1.2" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3540,7 +3526,7 @@ name = "tokio-service" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3548,22 +3534,22 @@ name = "tokio-tcp" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-threadpool" -version = "0.1.5" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crossbeam-deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3574,7 +3560,7 @@ name = "tokio-timer" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3583,7 +3569,7 @@ name = "tokio-tls" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "native-tls 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3591,16 +3577,15 @@ dependencies = [ [[package]] name = "tokio-udp" -version = "0.1.1" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3656,10 +3641,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "twox-hash" -version = "1.1.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rand 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3703,7 +3688,7 @@ name = "unicase" version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "version_check 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3711,7 +3696,7 @@ name = "unicase" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "version_check 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3719,7 +3704,7 @@ name = "unicode-bidi" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "matches 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3752,11 +3737,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "url" -version = "1.7.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3770,17 +3755,17 @@ name = "varint" version = "0.1.0" source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "num-bigint 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "vcpkg" -version = "0.2.4" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -3799,7 +3784,7 @@ dependencies = [ [[package]] name = "version_check" -version = "0.1.4" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -3814,7 +3799,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "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)", + "serde_json 1.0.22 (registry+https://github.com/rust-lang/crates.io-index)", "wabt-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3823,7 +3808,7 @@ name = "wabt-sys" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", "cmake 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3832,8 +3817,8 @@ name = "want" version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "try-lock 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3845,19 +3830,19 @@ dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "memory_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "nan-preserving-float 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-wasm 0.31.1 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-wasm 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "websocket" -version = "0.20.3" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "base64 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)", "native-tls 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3866,7 +3851,7 @@ dependencies = [ "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3876,7 +3861,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "winapi" -version = "0.3.5" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3904,14 +3889,14 @@ version = "0.7.5" source = "git+https://github.com/tomusdrw/ws-rs#f12d19c4c19422fc79af28a3181f598bc07ecd1e" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "httparse 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", "sha1 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3938,17 +3923,17 @@ name = "yamux" version = "0.1.0" source = "git+https://github.com/paritytech/yamux#4e3ae609ad29cae56c249353be37a473413a84da" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [metadata] -"checksum aho-corasick 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c1c6d463cbe7ed28720b5b489e7c083eeb8f90d08be2a0d6bb9e1ffea9ce1afa" +"checksum aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d6531d44de723825aa81398a6415283229725a00fa30713812ab9323faa82fc4" "checksum aio-limited 0.1.0 (git+https://github.com/paritytech/aio-limited.git)" = "" "checksum ansi_term 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6b3568b48b7cefa6b8ce125f9bb4989e52fbcc29ebea88df04cc7c5f12f70455" "checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" @@ -3957,31 +3942,31 @@ dependencies = [ "checksum arrayref 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0fd1479b7c29641adbd35ff3b5c293922d696a92f25c8c975da3e0acbc87258f" "checksum arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a1e964f9e24d588183fcb43503abda40d288c8657dfc27311516ce2f05675aef" "checksum asn1_der 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f9dec199e4d3e3263a71ec23fd7f0259b3c6963ff83e6bb4871d9d91343d4c81" -"checksum assert_matches 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7deb0a829ca7bcfaf5da70b073a8d128619259a7be8216a355e23f00763059e5" -"checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652" -"checksum backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "89a47830402e9981c5c41223151efcced65a0510c13097c769cede7efb34782a" +"checksum assert_matches 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "664470abf00fae0f31c0eb6e1ca12d82961b2a2541ef898bc9dd51a9254d218b" +"checksum atty 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "2fc4a1aa4c24c0718a250f0681885c1af91419d242f29eb8f2ab28502d80dbd1" +"checksum backtrace 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "dbdd17cd962b570302f5297aea8648d5923e22e555c2ed2d8b2e34eca646bf6d" "checksum backtrace-sys 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)" = "bff67d0c06556c0b8e6b5f090f0eac52d950d9dfd1d35ba04e4ca3543eaf6a7e" "checksum base-x 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2f59103b47307f76e03bef1633aec7fa9e29bfb5aa6daf5a334f94233c71f6c1" "checksum base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" "checksum base64 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "30e93c03064e7590d0466209155251b90c22e37fab1daf2771582598b5827557" "checksum base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "96434f987501f0ed4eb336a411e0631ecd1afa11574fe148587adc4ff96143c9" "checksum base64 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5032d51da2741729bfdaeb2664d9b8c6d9fd1e2b90715c660b6def36628499c2" -"checksum base64 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "85415d2594767338a74a30c1d370b2f3262ec1b4ed2d7bba5b3faf4de40467d9" +"checksum base64 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9263aa6a38da271eec5c91a83ce1e800f093c8535788d403d626d8d5c3f8f007" "checksum bigint 4.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "da1dde4308822ffaa13665757273a1b787481212f3f9b1c470a864b179a01f1b" "checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d" "checksum bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5" "checksum bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d0c54bb8f454c567f21197eefcdbf5679d0bd99f2ddbe52e84c77061952e6789" "checksum blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" "checksum block-buffer 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a076c298b9ecdb530ed9d967e74a6027d6a7478924520acddcddc24c1c8ab3ab" -"checksum bs58 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ddb9ab176abd79659b93be4396f59156c3ee80f8cc83d1cb588335052c428047" +"checksum bs58 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2e6ea4851598d7433fbdba71fa2509d9b0df68124b9c0effe7588f5149692d9f" "checksum byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40" "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.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e178b8e0e239e844b083d5a0d4a156b2654e67f9f80144d48398fcd736a24fb8" -"checksum cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)" = "2119ea4867bd2b8ed3aecab467709720b2d55b1bcfe09f772fd68066eaf15275" -"checksum cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "efe5c877e17a9c717a0bf3613b2709f723202c4e4675cc8f12926ded29bcb17e" +"checksum bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7dd32989a66957d3f0cba6588f15d4281a733f4e9ffc43fcd2385f57d3bf99ff" +"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)" = "" -"checksum chrono 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e48d85528df61dc964aa43c5f6ca681a19cfa74939b2348d204bd08a981f2fb0" +"checksum chrono 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1cce36c92cb605414e9b824f866f5babe0a0368e39ea07393b9b63cf3844c0e6" "checksum cid 0.2.3 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)" = "" "checksum clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b957d88f4b6a63b9d70d5f454ac8011819c6efa7727858f458ab71c756ce2d3e" "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" @@ -3994,15 +3979,15 @@ dependencies = [ "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" "checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150" -"checksum crossbeam-epoch 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2af0e75710d6181e234c8ecc79f14a97907850a541b13b0be1dd10992f2e4620" +"checksum crossbeam-epoch 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9b4e2817eb773f770dcb294127c011e22771899c21d18fce7dd739c0b9832e81" "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" "checksum crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d636a8b3bcc1b409d7ffd3facef8f21dcb4009626adbd0c5e6c4305c07253c7b" "checksum crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a2f4a431c5c9f662e1200b7c7f02c34e91361150e382089a8f2dec3ba680cbda" "checksum ctrlc 1.1.1 (git+https://github.com/paritytech/rust-ctrlc.git)" = "" "checksum datastore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)" = "" "checksum difference 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3304d19798a8e067e48d8e69b2c37f0b5e9b4e462504ad9e27e9f3fce02bba8" -"checksum digest 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "5b29c278aa8fd30796bd977169e8004b4aa88cdcd2f32a6eb22bc2d5d38df94a" -"checksum dtoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6d301140eb411af13d3115f9a562c85cc6b541ade9dfa314132244aaee7489dd" +"checksum digest 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3cae2388d706b52f2f2f9afe280f9d768be36544bd71d1b8120cb34ea6450b55" +"checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab" "checksum edit-distance 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3bd26878c3d921f89797a4e1a1711919f999a9f6946bb6f5a4ffda126d297b7e" "checksum either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3be565ca5c557d7f59e7cfcf1844f9e3033650c929c6566f511e8005f205c1d0" "checksum elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "88d4851b005ef16de812ea9acdb7bece2f0a40dd86c07b85631d7dafa54537bb" @@ -4025,31 +4010,31 @@ dependencies = [ "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" -"checksum fs-swap 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67f816b2a5f8a6628764a4323d1a8d9ad5303266c4e4e4486ba680f477ba7e62" +"checksum fs-swap 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "31a94e9407e53addc49de767234a0b000978523c59117e5badb575ccbb8370f6" "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 futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)" = "884dbe32a6ae4cd7da5c6db9b78114449df9953b8d490c9d7e1b51720b922c62" +"checksum futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "1a70b146671de62ec8c8ed572219ca5d594d9b06c0b364d5e67b722fc559b48c" "checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" "checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb" "checksum generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d" -"checksum getopts 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "0a7292d30132fb5424b354f5dc02512a86e4c516fe544bb7a25e7f266951b797" -"checksum globset 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8e49edbcc9c7fc5beb8c0a54e7319ff8bed353a2b55e85811c6281188c2a6c84" +"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.0 (git+https://github.com/paritytech/parity-common)" = "" "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" "checksum hex-literal-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1d340b6514f232f6db1bd16db65302a5278a04fef9ce867cb932e7e5fa21130a" -"checksum httparse 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7b6288d7db100340ca12873fd4d08ad1b8f206a9457798dfb17c018a33fee540" +"checksum httparse 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "c2f407128745b78abc95c0ffbe4e5d37427fdc0d45470710cfef8c44522a2e37" "checksum hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)" = "368cb56b2740ebf4230520e2b90ebb0461e69034d85d1945febd9b3971426db2" "checksum hyper 0.11.27 (registry+https://github.com/rust-lang/crates.io-index)" = "34a590ca09d341e94cddf8e5af0bbccde205d5fbc2fa3c09dd67c7f85cea59d7" -"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" +"checksum idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "014b298351066f1512874135335d62a789ffe78a9974f94b43ed5621951eaf7d" "checksum integer-encoding 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "26746cbc2e680af687e88d717f20ff90079bd10fc984ad57d277cd0e37309fa5" "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 ipnetwork 0.12.8 (registry+https://github.com/rust-lang/crates.io-index)" = "70783119ac90828aaba91eae39db32c6c1b8838deea3637e5238efa0130801ab" "checksum itertools 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4833d6978da405305126af4ac88569b5d71ff758581ce5a987dbfa3755f694fc" -"checksum itoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5adb58558dcd1d786b5f0bd15f3226ee23486e24b7b58304b60f64dc68e62606" +"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)" = "" "checksum jsonrpc-macros 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)" = "" @@ -4064,10 +4049,9 @@ dependencies = [ "checksum kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" "checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" -"checksum lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fb497c35d362b6a331cfd94956a07fc2c78a4604cdbee844a81170386b996dd3" +"checksum lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e6412c5e2ad9584b0b8e979393122026cdd6d2a80b933f890dcd694ddbe73739" "checksum lazycell 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a6f08839bc70ef4a3fe1d566d5350f519c5912ea86be0df1740a7d247c7fc0ef" -"checksum libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)" = "b685088df2b950fccadf07a7187c8ef846a959c142338a48f9dc0b94517eb5f1" -"checksum libloading 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9c3ad660d7cb8c5822cd83d10897b0f1f1526792737a179e73896152f85b88c2" +"checksum libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)" = "ac8ebf8343a981e2fa97042b14768f02ed3e1d602eac06cae6166df3c8ced206" "checksum libp2p 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)" = "" "checksum libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)" = "" "checksum libp2p-dns 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)" = "" @@ -4088,16 +4072,16 @@ dependencies = [ "checksum local-encoding 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e1ceb20f39ff7ae42f3ff9795f3986b1daad821caaa1e1732a0944103a5a1a66" "checksum lock_api 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "949826a5ccf18c1b3a7c3d57692778d21768b79e46eb9dd07bfc4c2160036c54" "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" -"checksum log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "61bd98ae7f7b754bc53dca7d44b604f733c6bba044ea6f41bc8d89272d8161d2" -"checksum matches 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "835511bab37c34c47da5cb44844bea2cfde0236db0b506f90ea4224482c9774a" +"checksum log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "89f010e843f2b1a31dbd316b3b8d443758bc634bed37aabade59c686d644e0a2" +"checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376" "checksum mem 0.1.0 (git+https://github.com/paritytech/parity)" = "" "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_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" "checksum memorydb 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" "checksum mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" -"checksum mime 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "fe51c8699d2dc522bf8c1ebe26ea2193d151fb54bcdfd7d0318750c189994cd9" -"checksum mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)" = "4fcfcb32d63961fb6f367bfd5d21e4600b92cd310f71f9dca25acae196eb1560" +"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" "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" "checksum multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)" = "" "checksum multibase 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b9c35dac080fd6e16a99924c8dfdef0af89d797dd851adab25feaffacf7850d6" @@ -4106,11 +4090,11 @@ dependencies = [ "checksum names 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef320dab323286b50fb5cdda23f61c796a72a89998ab565ca32525c5c556f2da" "checksum nan-preserving-float 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34d4f00fcc2f4c9efa8cc971db0da9e28290e28e97af47585e48691ef10ff31f" "checksum native-tls 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f74dbadc8b43df7864539cedb7bc91345e532fdd913cfdc23ad94f4d2d40fbc0" -"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" +"checksum net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)" = "9044faf1413a1057267be51b5afba8eb1090bd2231c693664aa1db716fe1eae0" "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2" "checksum num-bigint 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)" = "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1" -"checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea" -"checksum num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "630de1ef5cc79d0cdd78b7e33b81f083cbfe90de0f4b2b2f07f905867c70e9fe" +"checksum num-integer 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)" = "6ac0ea58d64a89d9d6b7688031b3be9358d6c919badcf7fbb0527ccfd891ee45" +"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 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" @@ -4118,35 +4102,35 @@ dependencies = [ "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" "checksum parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" -"checksum parity-wasm 0.31.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8f026fa6e6245c1aa477873f7f8c805502b86b6e12e3762c9ad13a4f350550ea" +"checksum parity-wasm 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e1c91199d14bd5b78ecade323d4a891d094799749c1b9e82d9c590c2e2849a40" "checksum parity-wordlist 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d0dec124478845b142f68b446cbee953d14d4b41f1bc0425024417720dce693" "checksum parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e" "checksum parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d4d05f1349491390b1730afba60bb20d55761bef489a954546b58b4b34e1e2ac" -"checksum parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "69376b761943787ebd5cc85a5bc95958651a22609c5c1c2b65de21786baec72b" +"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 (git+https://github.com/paritytech/parity-common)" = "" "checksum patricia-trie-ethereum 0.1.0 (git+https://github.com/paritytech/parity)" = "" "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" -"checksum pkg-config 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)" = "6a52e4dbc8354505ee07e484ab07127e06d87ca6fa7f0a516a2b294e5ad5ad16" +"checksum pkg-config 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = "110d5ee3593dbb73f56294327fe5668bcc997897097cbc76b51e7aed3f52452f" "checksum plain_hasher 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "28ea5118e2f41bfbc974b28d88c07621befd1fa5d6ec23549be96302a1a59dd2" "checksum proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ba8d4f9257b85eb6cdf13f055cea3190520aab1409ca2ab43493ea4820c25f0" "checksum proc-macro-hack-impl 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d5cb6f960ad471404618e9817c0e5d10b1ae74cfdf01fab89ea0641fe7fb2892" -"checksum proc-macro2 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)" = "cccdc7557a98fe98453030f077df7f3a042052fae465bb61d2c2c41435cfd9b6" -"checksum protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "128a4f37a2df739a567a8685b17f54aa19b9c3c4a6a5b8731e97a419b3db451c" +"checksum proc-macro2 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1fa93823f53cfd0f5ac117b189aed6cfdfb2cfc0a9d82e956dd7927595ed7d46" +"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" "checksum quick-error 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5fb6ccf8db7bbcb9c2eae558db5ab4f3da1c2a87e4e597ed394726bc8ea6ca1d" "checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" -"checksum quote 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b71f9f575d55555aa9c06188be9d4e2bfc83ed02537948ac0d520c24d0419f1a" +"checksum quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e44651a0dc4cdd99f71c83b561e221f714912d11af1a4dff0631f923d53af035" "checksum rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "15a732abf9d20f0ad8eeb6f909bf6868722d9a06e1e50802b6a70351f40b4eb1" "checksum rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "eba5f8cb59cc50ed56be8880a5c7b496bfd9bd26394e176bc67884094145c2c5" -"checksum rand 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "12397506224b2f93e6664ffc4f664b29be8208e5157d3d90b44f09b5fae470ea" +"checksum rand 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6802c0e883716383777e147b7c21323d5de7527257c8b6dc1365a7f2983e90f6" "checksum rand_core 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "edecf0f94da5551fc9b492093e30b041a891657db7940ee221f9d2f66e82eef2" "checksum rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b614fe08b6665cb9a231d07ac1364b0ef3cb3698f1239ee0c4c3a88a524f54c8" -"checksum rayon 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "df7a791f788cb4c516f0e091301a29c2b71ef680db5e644a7d68835c8ae6dbfa" -"checksum rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b055d1e92aba6877574d8fe604a63c8b5df60f60e5982bf7ccbb1338ea527356" -"checksum redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "c214e91d3ecf43e9a4e41e578973adeb14b474f2bee858742d127af75a0112b1" +"checksum rayon 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "80e811e76f1dbf68abf87a759083d34600017fc4e10b6bd5ad84a700f9dba4b1" +"checksum rayon-core 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9d24ad214285a7729b174ed6d3bcfcb80177807f959d95fafd5bfc5c4f201ac8" +"checksum redox_syscall 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "6b8493950b18ff11387fef7fd9a9979f4dd77a36e182f754385838c70404b73e" "checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" "checksum regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9329abc99e39129fcceabd24cf5d85b4671ef7c29c50e972bc5afe32438ec384" "checksum regex 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5bbbea44c5490a1e84357ff28b7d518b4619a159fed5d25f6c1de2d19cc42814" @@ -4161,14 +4145,14 @@ dependencies = [ "checksum rocksdb 0.4.5 (git+https://github.com/paritytech/rust-rocksdb)" = "" "checksum rocksdb-sys 0.3.0 (git+https://github.com/paritytech/rust-rocksdb)" = "" "checksum rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)" = "f76d05d3993fd5f4af9434e8e436db163a12a9d40e1a58a726f27a01dfd12a2a" -"checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395" +"checksum rustc-demangle 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "76d7ba1feafada44f2d38eed812bd2489a03c0f5abb975799251518b68848649" "checksum rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0ceb8ce7a5e520de349e1fa172baeba4a9e8d5ef06c47471863530bc4972ee1e" "checksum rustc-hex 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d2b03280c2813907a030785570c577fb27d3deec8da4c18566751ade94de0ace" "checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" "checksum rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a54aa04a10c68c1c4eacb4337fd883b435997ede17a9385784b990777686b09a" "checksum rw-stream-sink 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)" = "" "checksum safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e27a8b19b835f7aea908818e871f5cc3a5a186550c30773be987e155e8163d8f" -"checksum schannel 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "dc1fabf2a7b6483a141426e1afd09ad543520a77ac49bd03c286e7696ccfd77f" +"checksum schannel 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "85fd9df495640643ad2d00443b3d78aae69802ad488debab4f1dd52fc1806ade" "checksum scoped-tls 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "332ffa32bf586782a3efaeb58f127980944bbc8c4d6913a86107ac2a5ab24b28" "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" "checksum security-framework 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "dfa44ee9c54ce5eecc9de7d5acbad112ee58755239381f687e564004ba4a2332" @@ -4177,7 +4161,7 @@ dependencies = [ "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" "checksum serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)" = "0c3adf19c07af6d186d91dae8927b83b0553d07ca56cbf7f2f32560455c91920" "checksum serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)" = "3525a779832b08693031b8ecfb0de81cd71cfd3812088fafe9a7496789572124" -"checksum serde_json 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)" = "c3c6908c7b925cd6c590358a4034de93dbddb20c45e1d021931459fd419bf0e2" +"checksum serde_json 1.0.22 (registry+https://github.com/rust-lang/crates.io-index)" = "84b8035cabe9b35878adec8ac5fe03d5f6bc97ff6edd7ccb96b44c1276ba390e" "checksum sha1 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cc30b1e1e8c40c121ca33b86c23308a090d19974ef001b4bf6e61fd1a0fb095c" "checksum sha1 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "171698ce4ec7cbb93babeb3190021b4d72e96ccb98e33d277ae4ea959d6f2d9e" "checksum sha2 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9eb6be24e4c23a84d7184280d2722f7f2731fcdd4a9d886efbfe4413e4847ea0" @@ -4185,7 +4169,7 @@ dependencies = [ "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.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fdeff4cd9ecff59ec7e3744cbca73dfe5ac35c2aedb2cfba8a1c715a18912e9d" -"checksum slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b3253057a9e9e291d19fa9c7645290ab61aff1d009b77b0065fff8accd833c04" +"checksum slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2f7bfce6405155042d42ec0e645efe43eddedd7be280063ce0623b120014e7f9" "checksum slog-async 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e544d16c6b230d84c866662fe55e31aacfca6ae71e6fc49ae9a311cb379bfc2f" "checksum slog-json 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ddd14b8df2df39378b3e933c79784350bf715b11444d99f903df0253bbe524e5" "checksum slog-scope 4.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "053344c94c0e2b22da6305efddb698d7c485809427cf40555dc936085f67a9df" @@ -4194,11 +4178,11 @@ dependencies = [ "checksum smallvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1347484b6f8bc4b32a9323d9800b6d934376391002ad9c528cc659fe8afc08ee" "checksum smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "26df3bb03ca5eac2e64192b723d51f56c1b1e0860e7c766281f4598f181acdc8" "checksum snappy-sys 0.1.0 (git+https://github.com/paritytech/rust-snappy)" = "" -"checksum stable_deref_trait 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ffbc596e092fe5f598b12ef46cc03754085ac2f4d8c739ad61c4ae266cc3b3fa" +"checksum stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "15132e0e364248108c5e2c02e3ab539be8d6f5d52a01ca9bbf27ed657316f02b" "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.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4bad7abdf6633f07c7046b90484f1d9dc055eca39f8c991177b1046ce61dba9a" +"checksum syn 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6dfd71b2be5a58ee30a6f8ea355ba8290d397131c00dfa55c3d34e6e13db5101" "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" @@ -4216,23 +4200,23 @@ dependencies = [ "checksum tokio-current-thread 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9f785265962bde425bf3b77dd6abac6674b8c6d5e8831427383aa9c56c5210e1" "checksum tokio-dns-unofficial 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bb9bf62ca2c53bf2f2faec3e48a98b6d8c9577c27011cb0203a4beacdc8ab328" "checksum tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8cac2a7883ff3567e9d66bb09100d09b33d90311feca0206c7ca034bc0c55113" -"checksum tokio-fs 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "40697ecbea5660df15b15d50a077386477d2f6a35002adf01ce76ff9dd9dce48" +"checksum tokio-fs 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "76766830bbf9a2d5bfb50c95350d56a2e79e2c80f675967fff448bc615899708" "checksum tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a5c9635ee806f26d302b8baa1e145689a280d8f5aa8d0552e7344808da54cc21" "checksum tokio-proto 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8fbb47ae81353c63c487030659494b295f6cb6576242f907f203473b191b0389" -"checksum tokio-reactor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e00ec63bbec2c97ce1178cb0587b2c438b2f6b09d3ee54a33c45a9cf0d530810" +"checksum tokio-reactor 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b3cedc8e5af5131dc3423ffa4f877cce78ad25259a9a62de0613735a13ebc64b" "checksum tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "24da22d077e0f15f55162bdbdc661228c1581892f52074fb242678d015b45162" "checksum tokio-tcp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ec9b094851aadd2caf83ba3ad8e8c4ce65a42104f7b94d9e6550023f0407853f" -"checksum tokio-threadpool 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "24ab84f574027b0e875378f31575cf175360891919e93a3490f07e76e00e4efb" +"checksum tokio-threadpool 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b3c3873a6d8d0b636e024e77b9a82eaab6739578a06189ecd0e731c7308fbc5d" "checksum tokio-timer 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "028b94314065b90f026a21826cffd62a4e40a92cda3e5c069cc7b02e5945f5e9" "checksum tokio-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "772f4b04e560117fe3b0a53e490c16ddc8ba6ec437015d91fa385564996ed913" -"checksum tokio-udp 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "43eb534af6e8f37d43ab1b612660df14755c42bd003c5f8d2475ee78cc4600c0" +"checksum tokio-udp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "137bda266504893ac4774e0ec4c2108f7ccdbcb7ac8dced6305fe9e4e0b5041a" "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.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "be1efb673ddf49ab4a99893eb3af02f6563636033fb832c2b7f937641ad62b17" "checksum triehash 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2033893a813c70e7d8a739ca6c36dc0a7a2c913ec718d7cbf84a3837bbe3c7ce" "checksum triehash 0.2.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum try-lock 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee2aa4715743892880f70885373966c83d73ef1b0838a664ef0c76fffd35e7c2" -"checksum twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4f85be565a110ed72ed7048cf56570db04ce0a592c98aa59b7dacde3e5718750" +"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" "checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" "checksum ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd2be2d6639d0f8fe6cdda291ad456e23629558d466e2789d2c3e9892bda285d" @@ -4246,13 +4230,13 @@ dependencies = [ "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" "checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" "checksum untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f392d7819dbe58833e26872f5f6f0d68b7bbbe90fc3667e98731c4a15ad9a7ae" -"checksum url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2a321979c09843d272956e73700d12c4e7d3d92b2ee112b31548aef0d4efc5a6" +"checksum url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f808aadd8cfec6ef90e4a14eb46f24511824d1ac596b9682703c87056c8678b7" "checksum utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "662fab6525a98beff2921d7f61a39e7d59e0b425ebc7d0d9e66d316e55124122" "checksum varint 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)" = "" -"checksum vcpkg 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cbe533e138811704c0e3cbde65a818b35d3240409b4346256c5ede403e082474" +"checksum vcpkg 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7ed0f6789c8a85ca41bbc1c9d175422116a9869bd1cf31bb08e1493ecce60380" "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" "checksum vergen 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c3365f36c57e5df714a34be40902b27a992eeddb9996eca52d0584611cf885d" -"checksum version_check 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7716c242968ee87e5542f8021178248f267f295a5c4803beae8b8b7fd9bc6051" +"checksum version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6b772017e347561807c1aa192438c5fd74242a670a6cffacc40f2defd1dc069d" "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" "checksum wabt 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "182ae543249ccf2705f324d233891c1176fca142e137b55ba43d9dbfe93f18a2" "checksum wabt-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ca77c6b934a2b32618941b2f565aac43b8cb7141378c3b4fba4d8fcdcd57da3" @@ -4260,7 +4244,7 @@ dependencies = [ "checksum wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "522fe3fdd44a56f25cd5ddcd8ccdb1cf2e982ceb28fcb00f41d8a018ae5245a8" "checksum websocket 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)" = "eb277e7f4c23dc49176f74ae200e77651764efb2c25f56ad2d22623b63826369" "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" -"checksum winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "773ef9dcc5f24b7d850d0ff101e542ff24c3b090a9768e03ff889fdef41f00fd" +"checksum winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "04e3bd221fcbe8a271359c04f21a76db7d0c6028862d1bb5512d85e1e2eb5bb3" "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" From ca01909d63255c23179b4b6d73200936c4558556 Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 1 Aug 2018 19:52:45 +0200 Subject: [PATCH 23/97] Add a BlakeHasher impl --- substrate/primitives/Cargo.toml | 2 ++ substrate/primitives/src/hasher.rs | 33 ++++++++++++++++++++++++++++++ substrate/primitives/src/lib.rs | 4 ++++ 3 files changed, 39 insertions(+) create mode 100644 substrate/primitives/src/hasher.rs diff --git a/substrate/primitives/Cargo.toml b/substrate/primitives/Cargo.toml index 17006b5476987..215220f2bf27c 100644 --- a/substrate/primitives/Cargo.toml +++ b/substrate/primitives/Cargo.toml @@ -19,6 +19,8 @@ twox-hash = { version = "1.1.0", optional = true } byteorder = { version = "1.1", default_features = false } blake2-rfc = { version = "0.2.18", optional = true } wasmi = { version = "0.4", optional = true } +hashdb = { git = "https://github.com/paritytech/parity-common" } +plain_hasher = { git = "https://github.com/paritytech/parity-common" } [dev-dependencies] substrate-serializer = { path = "../serializer" } diff --git a/substrate/primitives/src/hasher.rs b/substrate/primitives/src/hasher.rs new file mode 100644 index 0000000000000..421ecba6ace56 --- /dev/null +++ b/substrate/primitives/src/hasher.rs @@ -0,0 +1,33 @@ +// Copyright 2018 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot 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. + +// Polkadot 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 Polkadot. If not, see . + +//! Polkadot Blake2b Hasher implementation + +use hashdb::Hasher; +use plain_hasher::PlainHasher; +use hash::H256; +use hashing::blake2_256; + +/// Concrete implementation of Hasher using Blake2b 256-bit hashes +pub struct BlakeHasher; +impl Hasher for BlakeHasher { + type Out = H256; + type StdHasher = PlainHasher; + const LENGTH:usize = 32; + fn hash(x: &[u8]) -> Self::Out { + blake2_256(x).into() + } +} diff --git a/substrate/primitives/src/lib.rs b/substrate/primitives/src/lib.rs index 974997e6506ef..689e8d32e1a5c 100644 --- a/substrate/primitives/src/lib.rs +++ b/substrate/primitives/src/lib.rs @@ -45,6 +45,8 @@ extern crate serde_derive; extern crate core; #[cfg(feature = "std")] extern crate wasmi; +extern crate hashdb; +extern crate plain_hasher; extern crate substrate_runtime_std as rstd; @@ -77,6 +79,7 @@ pub use hashing::{blake2_256, twox_128, twox_256}; pub mod hexdisplay; pub mod hash; +pub mod hasher; pub mod sandbox; pub mod storage; pub mod uint; @@ -88,6 +91,7 @@ mod tests; pub use self::hash::{H160, H256, H512}; pub use self::uint::U256; pub use authority_id::AuthorityId; +pub use self::hasher::BlakeHasher; /// A 512-bit value interpreted as a signature. pub type Signature = hash::H512; From 9e4266897687b67c2978f1a2be3e6bc27d0b0c90 Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 1 Aug 2018 19:53:20 +0200 Subject: [PATCH 24/97] Use BlakeHasher in runtime-io --- substrate/runtime-io/Cargo.toml | 7 ++----- substrate/runtime-io/with_std.rs | 29 ++++++++--------------------- 2 files changed, 10 insertions(+), 26 deletions(-) diff --git a/substrate/runtime-io/Cargo.toml b/substrate/runtime-io/Cargo.toml index fc080a3cc4eb0..7cec69b24857a 100644 --- a/substrate/runtime-io/Cargo.toml +++ b/substrate/runtime-io/Cargo.toml @@ -11,17 +11,14 @@ rustc_version = "0.2" substrate-runtime-std = { path = "../runtime-std", default_features = false } environmental = { path = "../environmental", optional = true } substrate-state-machine = { path = "../state-machine", optional = true } -# TODO: when we remove the toy impl of `Hasher` from `with_std.rs` I think this can go back to use `default_features = false` -substrate-primitives = { path = "../primitives", features=["std"] } +substrate-primitives = { path = "../primitives", default_features = false } substrate-codec = { path = "../codec", default_features = false } triehash = { version = "0.1.2", optional = true } ed25519 = { path = "../ed25519", optional = true } -hashdb = { git = "https://github.com/paritytech/parity-common" } -plain_hasher = { git = "https://github.com/paritytech/parity-common" } -rlp = { git = "https://github.com/paritytech/parity-common" } [dev-dependencies] heapsize = "0.4" +rlp = { git = "https://github.com/paritytech/parity-common" } [features] default = ["std"] diff --git a/substrate/runtime-io/with_std.rs b/substrate/runtime-io/with_std.rs index af9587816ce17..9fa0679cd7f9c 100644 --- a/substrate/runtime-io/with_std.rs +++ b/substrate/runtime-io/with_std.rs @@ -23,10 +23,9 @@ extern crate substrate_primitives as primitives; extern crate substrate_state_machine; extern crate triehash; extern crate ed25519; -extern crate hashdb; -extern crate plain_hasher; -extern crate rlp; +#[cfg(test)] +extern crate rlp; #[cfg(test)] extern crate heapsize; @@ -35,26 +34,14 @@ pub extern crate substrate_codec as codec; // re-export hashing functions. pub use primitives::{blake2_256, twox_128, twox_256}; +pub use primitives::BlakeHasher; pub use substrate_state_machine::{Externalities, TestExternalities}; use primitives::hexdisplay::HexDisplay; use primitives::H256; -use hashdb::Hasher; -use plain_hasher::PlainHasher; // TODO: use the real error, not NoError. -// TODO: This is just a sanity check toy impl of `Hasher` – this needs to go somewhere else and possibly be renamed to `Hash`? -pub struct MyHasher; -impl Hasher for MyHasher { - type Out = H256; - type StdHasher = PlainHasher; - const LENGTH:usize = 32; - fn hash(x: &[u8]) -> Self::Out { - blake2_256(x).into() - } -} - -environmental!(ext: trait Externalities); +environmental!(ext: trait Externalities); /// Get `key` from storage and return a `Vec`, empty if there's a problem. pub fn storage(key: &[u8]) -> Option> { @@ -147,7 +134,7 @@ pub fn ed25519_verify>(sig: &[u8; 64], msg: &[u8], pubkey: P) -> /// Execute the given closure with global function available whose functionality routes into the /// externalities `ext`. Forwards the value that the closure returns. // TODO: need a concrete hasher here due to limitations of the `environmental!` macro, otherwise a type param would have been fine I think. -pub fn with_externalities R>(ext: &mut Externalities, f: F) -> R { +pub fn with_externalities R>(ext: &mut Externalities, f: F) -> R { ext::using(ext, f) } @@ -240,7 +227,7 @@ mod std_tests { #[test] fn storage_works() { - let mut t = TestExternalities::::new(); + let mut t = TestExternalities::::new(); assert!(with_externalities(&mut t, || { assert_eq!(storage(b"hello"), None); set_storage(b"hello", b"world"); @@ -261,7 +248,7 @@ mod std_tests { #[test] fn read_storage_works() { - let mut t: TestExternalities = map![ + let mut t: TestExternalities = map![ b":test".to_vec() => b"\x0b\0\0\0Hello world".to_vec() ]; @@ -277,7 +264,7 @@ mod std_tests { #[test] fn clear_prefix_works() { - let mut t: TestExternalities = map![ + let mut t: TestExternalities = 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(), From 0f77d2b8ee514321ebbf30472cec3ea8e23724cf Mon Sep 17 00:00:00 2001 From: David Palm Date: Thu, 2 Aug 2018 07:01:05 +0200 Subject: [PATCH 25/97] lockfile updates --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a8d62ddd16ea5..012651608cf7c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2865,7 +2865,9 @@ dependencies = [ "byteorder 1.2.3 (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 (git+https://github.com/paritytech/parity-common?branch=add-fixed-hash)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "plain_hasher 0.1.0 (git+https://github.com/paritytech/parity-common)", "pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", "rustc-hex 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3024,9 +3026,7 @@ version = "0.1.0" dependencies = [ "ed25519 0.1.0", "environmental 0.1.0", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "plain_hasher 0.1.0 (git+https://github.com/paritytech/parity-common)", "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", From 402c35cb6948844f8c7390f744e7eba531ee0534 Mon Sep 17 00:00:00 2001 From: David Palm Date: Thu, 2 Aug 2018 08:03:10 +0200 Subject: [PATCH 26/97] ws --- substrate/state-machine/src/ext.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/substrate/state-machine/src/ext.rs b/substrate/state-machine/src/ext.rs index 111a9be763a1e..0584bc41e6139 100644 --- a/substrate/state-machine/src/ext.rs +++ b/substrate/state-machine/src/ext.rs @@ -154,8 +154,7 @@ where 42 } - fn storage_root(&mut self) -> H::Out - { + fn storage_root(&mut self) -> H::Out { if let Some((_, ref root)) = self.transaction { return root.clone(); } From 85b5fe14c9bcf2c3ba71f2b39e4e5719237e4f46 Mon Sep 17 00:00:00 2001 From: David Palm Date: Thu, 2 Aug 2018 09:53:32 +0200 Subject: [PATCH 27/97] Add a Blake2/RLP-flavoured NodeCodec --- substrate/primitives/Cargo.toml | 2 + substrate/primitives/src/lib.rs | 4 + substrate/primitives/src/rlp_codec.rs | 123 ++++++++++++++++++++++++++ 3 files changed, 129 insertions(+) create mode 100644 substrate/primitives/src/rlp_codec.rs diff --git a/substrate/primitives/Cargo.toml b/substrate/primitives/Cargo.toml index 215220f2bf27c..93b2f30b87a66 100644 --- a/substrate/primitives/Cargo.toml +++ b/substrate/primitives/Cargo.toml @@ -7,6 +7,7 @@ authors = ["Parity Technologies "] crunchy = "0.1" substrate-runtime-std = { path = "../runtime-std", default_features = false } substrate-codec = { path = "../codec", default_features = false } +elastic-array = "0.10" # TODO: I think we can go back to `default_features = false` when we have a proper impl of `Hasher` to use fixed-hash = { git = "https://github.com/paritytech/parity-common", branch = "add-fixed-hash", features = ["heapsizeof"] } rustc-hex = { version = "2.0", default_features = false } @@ -20,6 +21,7 @@ byteorder = { version = "1.1", default_features = false } blake2-rfc = { version = "0.2.18", optional = true } wasmi = { version = "0.4", optional = true } hashdb = { git = "https://github.com/paritytech/parity-common" } +patricia-trie = { git = "https://github.com/paritytech/parity-common" } plain_hasher = { git = "https://github.com/paritytech/parity-common" } [dev-dependencies] diff --git a/substrate/primitives/src/lib.rs b/substrate/primitives/src/lib.rs index 689e8d32e1a5c..d45579a9f152e 100644 --- a/substrate/primitives/src/lib.rs +++ b/substrate/primitives/src/lib.rs @@ -47,6 +47,8 @@ extern crate core; extern crate wasmi; extern crate hashdb; extern crate plain_hasher; +extern crate patricia_trie; +extern crate elastic_array; extern crate substrate_runtime_std as rstd; @@ -84,6 +86,7 @@ pub mod sandbox; pub mod storage; pub mod uint; mod authority_id; +mod rlp_codec; #[cfg(test)] mod tests; @@ -92,6 +95,7 @@ pub use self::hash::{H160, H256, H512}; pub use self::uint::U256; pub use authority_id::AuthorityId; pub use self::hasher::BlakeHasher; +pub use self::rlp_codec::BlakeRlpCodec; /// A 512-bit value interpreted as a signature. pub type Signature = hash::H512; diff --git a/substrate/primitives/src/rlp_codec.rs b/substrate/primitives/src/rlp_codec.rs new file mode 100644 index 0000000000000..1be69460a1aa9 --- /dev/null +++ b/substrate/primitives/src/rlp_codec.rs @@ -0,0 +1,123 @@ +// Copyright 2018 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot 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. + +// Polkadot 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 Polkadot. If not, see . + +//! Polkadot Blake2b (trie) NodeCodec implementation + +use elastic_array::{ElasticArray1024, ElasticArray128}; +use hashdb::Hasher; +use rlp::{DecoderError, RlpStream, Rlp, Prototype}; +use std::marker::PhantomData; // TODO: should `use` from core instead? +use patricia_trie::{NibbleSlice, NodeCodec, node::Node, ChildReference}; + +use hash::H256; +use hasher::BlakeHasher; + +/// Concrete implementation of a `NodeCodec` with Rlp encoding, generic over the `Hasher` +pub struct RlpCodec {mark: PhantomData} + +/// Convenience type for a Blake2b/Rlp flavoured NodeCodec +pub type BlakeRlpCodec = RlpCodec; + +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() == BlakeHasher::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() + } +} From 56649b6fe3a3a158542933ea7c712b40f7d38f50 Mon Sep 17 00:00:00 2001 From: David Palm Date: Thu, 2 Aug 2018 09:54:52 +0200 Subject: [PATCH 28/97] Use Blake-flavoured Hasher and NodeCodec --- substrate/state-machine/Cargo.toml | 5 ----- substrate/state-machine/src/lib.rs | 17 +++++++---------- substrate/state-machine/src/proving_backend.rs | 11 +++++------ substrate/state-machine/src/testing.rs | 7 +++---- substrate/state-machine/src/trie_backend.rs | 18 ++++++++---------- 5 files changed, 23 insertions(+), 35 deletions(-) diff --git a/substrate/state-machine/Cargo.toml b/substrate/state-machine/Cargo.toml index 9305bcdad779b..b8f65e1de8a98 100644 --- a/substrate/state-machine/Cargo.toml +++ b/substrate/state-machine/Cargo.toml @@ -6,7 +6,6 @@ description = "Substrate State Machine" [dependencies] byteorder = "1.1" -ethereum-types = "0.3" hex-literal = "0.1.0" log = "0.3" parking_lot = "0.4" @@ -18,7 +17,3 @@ memorydb = { git = "https://github.com/paritytech/parity-common" } patricia-trie = { git = "https://github.com/paritytech/parity-common" } triehash = { git = "https://github.com/paritytech/parity-common" } rlp = { git = "https://github.com/paritytech/parity-common" } - -[dev-dependencies] -keccak-hasher = { git = "https://github.com/paritytech/parity" } # REVIEW: We need `KeccakHasher` from here – better way? -patricia-trie-ethereum = { git = "https://github.com/paritytech/parity" } # REVIEW: We need `RlpCodec` from here – better way? \ No newline at end of file diff --git a/substrate/state-machine/src/lib.rs b/substrate/state-machine/src/lib.rs index 8517f87b6ebb8..8e27476b0e997 100644 --- a/substrate/state-machine/src/lib.rs +++ b/substrate/state-machine/src/lib.rs @@ -24,7 +24,6 @@ extern crate hex_literal; #[macro_use] extern crate log; -extern crate ethereum_types; extern crate hashdb; extern crate memorydb; extern crate triehash; @@ -32,8 +31,8 @@ extern crate patricia_trie; extern crate byteorder; extern crate parking_lot; extern crate rlp; -#[cfg(test)] extern crate keccak_hasher; -#[cfg(test)] extern crate patricia_trie_ethereum as ethtrie; +#[cfg(test)] +extern crate substrate_primitives as primitives; use std::collections::HashMap; use std::fmt; @@ -440,9 +439,7 @@ mod tests { use super::*; use super::backend::InMemory; use super::ext::Ext; - use keccak_hasher::KeccakHasher; - use ethtrie::RlpCodec; - use ethereum_types::H256; + use primitives::{BlakeHasher, BlakeRlpCodec, H256}; struct DummyCodeExecutor { native_available: bool, @@ -514,7 +511,7 @@ mod tests { b"dogglesworth".to_vec() => b"catXXX".to_vec(), b"doug".to_vec() => b"notadog".to_vec() ]; - let backend = InMemory::::from(initial); + let backend = InMemory::::from(initial); let mut overlay = OverlayedChanges { committed: map![ b"dog".to_vec() => Some(b"puppy".to_vec()), @@ -527,7 +524,7 @@ mod tests { ], }; let mut ext = Ext::new(&mut overlay, &backend); - const ROOT: [u8; 32] = hex!("8aad789dff2f538bca5d8ea56e8abe10f4c7ba3a5dea95fea4cd6e7c3a1168d3"); + const ROOT: [u8; 32] = hex!("6ca394ff9b13d6690a51dea30b1b5c43108e52944d30b9095227c49bae03ff8b"); assert_eq!(ext.storage_root(), H256(ROOT)); } @@ -584,7 +581,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 @@ -600,7 +597,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()), diff --git a/substrate/state-machine/src/proving_backend.rs b/substrate/state-machine/src/proving_backend.rs index 1cac890e98d7b..67265eb81934e 100644 --- a/substrate/state-machine/src/proving_backend.rs +++ b/substrate/state-machine/src/proving_backend.rs @@ -121,10 +121,9 @@ mod tests { use backend::{InMemory}; use trie_backend::tests::test_trie; use super::*; - use keccak_hasher::KeccakHasher; - use ethtrie::RlpCodec; + use primitives::{BlakeHasher, BlakeRlpCodec}; - fn test_proving() -> ProvingBackend { + fn test_proving() -> ProvingBackend { ProvingBackend::new(test_trie()) } @@ -142,7 +141,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] @@ -161,7 +160,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])); @@ -176,7 +175,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/state-machine/src/testing.rs b/substrate/state-machine/src/testing.rs index 86dfe296c9b65..03f8113b2a394 100644 --- a/substrate/state-machine/src/testing.rs +++ b/substrate/state-machine/src/testing.rs @@ -76,16 +76,15 @@ impl Externalities for TestExternalities where H::Out: Ord + En #[cfg(test)] mod tests { use super::*; - use keccak_hasher::KeccakHasher; - use ethereum_types::H256; + use primitives::{BlakeHasher, H256}; #[test] fn commit_should_work() { - let mut ext = TestExternalities::::new(); + let mut ext = TestExternalities::::new(); 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!("8aad789dff2f538bca5d8ea56e8abe10f4c7ba3a5dea95fea4cd6e7c3a1168d3"); + const ROOT: [u8; 32] = hex!("6ca394ff9b13d6690a51dea30b1b5c43108e52944d30b9095227c49bae03ff8b"); assert_eq!(ext.storage_root(), H256(ROOT)); } } diff --git a/substrate/state-machine/src/trie_backend.rs b/substrate/state-machine/src/trie_backend.rs index c87e70ef1d667..bfe1926ea60c7 100644 --- a/substrate/state-machine/src/trie_backend.rs +++ b/substrate/state-machine/src/trie_backend.rs @@ -277,15 +277,13 @@ impl TrieBackendStorage { pub mod tests { use super::*; use std::collections::HashSet; - use ethereum_types::H256 as TrieH256; - use keccak_hasher::KeccakHasher; - use ethtrie::RlpCodec; + use primitives::{BlakeHasher, BlakeRlpCodec, H256}; - fn test_db() -> (MemoryDB, TrieH256) { - let mut root = TrieH256::default(); - let mut mdb = MemoryDB::::new(); + fn test_db() -> (MemoryDB, H256) { + let mut root = H256::default(); + let mut mdb = MemoryDB::::new(); { - let mut trie = TrieDBMut::<_, RlpCodec>::new(&mut mdb, &mut root); + let mut trie = TrieDBMut::<_, BlakeRlpCodec>::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"); @@ -294,7 +292,7 @@ pub mod tests { (mdb, root) } - pub(crate) fn test_trie() -> TrieBackend { + pub(crate) fn test_trie() -> TrieBackend { let (mdb, root) = test_db(); TrieBackend::with_memorydb(mdb, root) } @@ -316,7 +314,7 @@ pub mod tests { #[test] fn pairs_are_empty_on_empty_storage() { - let db = TrieBackend::::with_memorydb( + let db = TrieBackend::::with_memorydb( MemoryDB::new(), Default::default() ); @@ -325,7 +323,7 @@ pub mod tests { #[test] fn storage_root_is_non_default() { - assert!(test_trie().storage_root(::std::iter::empty()).0 != TrieH256([0; 32])); + assert!(test_trie().storage_root(::std::iter::empty()).0 != H256([0; 32])); } #[test] From 5e5e61e40c9aef76ccaf3aaabfef4dbc0bc9b1fa Mon Sep 17 00:00:00 2001 From: David Palm Date: Thu, 2 Aug 2018 09:57:42 +0200 Subject: [PATCH 29/97] lockfile --- Cargo.lock | 43 ++++++++----------------------------------- 1 file changed, 8 insertions(+), 35 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 012651608cf7c..0be3bc4921f7e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -696,7 +696,7 @@ dependencies = [ "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)", "mem 0.1.0 (git+https://github.com/paritytech/parity)", - "parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common)", + "parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common.git)", "parity-wordlist 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1062,17 +1062,6 @@ dependencies = [ "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "keccak-hasher" -version = "0.1.0" -source = "git+https://github.com/paritytech/parity#c22498066b6546c4a2bd58f1ff4a664d00142f43" -dependencies = [ - "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", - "plain_hasher 0.1.0 (git+https://github.com/paritytech/parity-common)", - "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "kernel32-sys" version = "0.2.2" @@ -1709,7 +1698,7 @@ source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c9 [[package]] name = "parity-crypto" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" +source = "git+https://github.com/paritytech/parity-common.git#0045887fecd2fec39e56c962a0b27e2caf3b9474" dependencies = [ "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1787,20 +1776,6 @@ dependencies = [ "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "patricia-trie-ethereum" -version = "0.1.0" -source = "git+https://github.com/paritytech/parity#c22498066b6546c4a2bd58f1ff4a664d00142f43" -dependencies = [ - "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", - "keccak-hasher 0.1.0 (git+https://github.com/paritytech/parity)", - "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common)", - "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", -] - [[package]] name = "percent-encoding" version = "1.0.1" @@ -2739,10 +2714,11 @@ dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "ed25519 0.1.0", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", "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)", - "parking_lot 0.6.2 (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)", "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)", @@ -2787,7 +2763,7 @@ dependencies = [ "ed25519 0.1.0", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common)", + "parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common.git)", "rand 0.4.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)", @@ -2864,9 +2840,11 @@ dependencies = [ "blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "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 (git+https://github.com/paritytech/parity-common?branch=add-fixed-hash)", "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", "plain_hasher 0.1.0 (git+https://github.com/paritytech/parity-common)", "pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", @@ -3231,15 +3209,12 @@ name = "substrate-state-machine" version = "0.1.0" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "keccak-hasher 0.1.0 (git+https://github.com/paritytech/parity)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "memorydb 0.2.1 (git+https://github.com/paritytech/parity-common)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", - "patricia-trie-ethereum 0.1.0 (git+https://github.com/paritytech/parity)", "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", "substrate-primitives 0.1.0", "triehash 0.2.0 (git+https://github.com/paritytech/parity-common)", @@ -4042,7 +4017,6 @@ dependencies = [ "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-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b7f51f30d7986536accaec4a6a288008dfb3dbffe8a2863a65292bc395a3ae7" -"checksum keccak-hasher 0.1.0 (git+https://github.com/paritytech/parity)" = "" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" "checksum kvdb 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" @@ -4101,7 +4075,7 @@ dependencies = [ "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 (git+https://github.com/paritytech/parity-common)" = "" -"checksum parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" +"checksum parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common.git)" = "" "checksum parity-wasm 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e1c91199d14bd5b78ecade323d4a891d094799749c1b9e82d9c590c2e2849a40" "checksum parity-wordlist 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d0dec124478845b142f68b446cbee953d14d4b41f1bc0425024417720dce693" "checksum parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e" @@ -4109,7 +4083,6 @@ dependencies = [ "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 (git+https://github.com/paritytech/parity-common)" = "" -"checksum patricia-trie-ethereum 0.1.0 (git+https://github.com/paritytech/parity)" = "" "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.1.0 (git+https://github.com/paritytech/parity-common)" = "" From fc147112d49cf7b3c50ec056e012388a0c424155 Mon Sep 17 00:00:00 2001 From: David Palm Date: Thu, 2 Aug 2018 14:46:53 +0200 Subject: [PATCH 30/97] Implement PartialEq and Default for TestExternalities --- substrate/state-machine/src/testing.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/substrate/state-machine/src/testing.rs b/substrate/state-machine/src/testing.rs index 03f8113b2a394..07a9950e6b7cb 100644 --- a/substrate/state-machine/src/testing.rs +++ b/substrate/state-machine/src/testing.rs @@ -26,15 +26,22 @@ use std::marker::PhantomData; use std::iter::FromIterator; /// Simple HashMap-based Externalities impl. +#[derive(Debug)] pub struct TestExternalities { inner: HashMap, Vec>, - hasher: PhantomData, + _hasher: PhantomData, } impl TestExternalities { /// Create a new instance of `TestExternalities` pub fn new() -> Self { - TestExternalities {inner: HashMap::new(), hasher: PhantomData} + TestExternalities {inner: HashMap::new(), _hasher: PhantomData} + } +} + +impl PartialEq for TestExternalities { + fn eq(&self, other: &TestExternalities) -> bool { + self.inner.eq(&other.inner) } } @@ -48,6 +55,10 @@ impl FromIterator<(Vec, Vec)> for TestExternalities { } } +impl Default for TestExternalities { + fn default() -> Self { Self::new() } +} + impl Externalities for TestExternalities where H::Out: Ord + Encodable { fn storage(&self, key: &[u8]) -> Option> { self.inner.get(key).map(|x| x.to_vec()) From 05d820030c5d23578e66188fac08b8517e69c30a Mon Sep 17 00:00:00 2001 From: David Palm Date: Thu, 2 Aug 2018 14:47:28 +0200 Subject: [PATCH 31/97] Add note about limitations of environmental! --- substrate/runtime-io/with_std.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/substrate/runtime-io/with_std.rs b/substrate/runtime-io/with_std.rs index 9fa0679cd7f9c..4445ed30a7283 100644 --- a/substrate/runtime-io/with_std.rs +++ b/substrate/runtime-io/with_std.rs @@ -41,6 +41,8 @@ use primitives::H256; // TODO: use the real error, not NoError. +// REVIEW: The `environmental!` machinery can't really work with generics so need a concrete impl here. +// This means that consumers of the generated code can't use generics either? environmental!(ext: trait Externalities); /// Get `key` from storage and return a `Vec`, empty if there's a problem. From 65c4f64512d787cb721b64f804ae4bb3f7cdce84 Mon Sep 17 00:00:00 2001 From: David Palm Date: Thu, 2 Aug 2018 14:53:04 +0200 Subject: [PATCH 32/97] Make it compile, but this is probably broken --- substrate/runtime/system/src/lib.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/substrate/runtime/system/src/lib.rs b/substrate/runtime/system/src/lib.rs index 002c540590557..24133436baf50 100644 --- a/substrate/runtime/system/src/lib.rs +++ b/substrate/runtime/system/src/lib.rs @@ -49,7 +49,7 @@ use rstd::marker::PhantomData; use codec::Encode; #[cfg(any(feature = "std", test))] -use runtime_io::{twox_128, TestExternalities}; +use runtime_io::{twox_128, TestExternalities, BlakeHasher}; /// Compute the extrinsics root of a list of extrinsics. pub fn extrinsics_root(extrinsics: &[E]) -> H::Output { @@ -142,7 +142,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 { 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(), @@ -207,7 +207,11 @@ impl Default for GenesisConfig { #[cfg(any(feature = "std", test))] impl primitives::BuildStorage for GenesisConfig { - fn build_storage(self) -> Result { + // TODO: I don't think passing a StorageMap instead of a TextExternalities can work here, as + // StorageMap does not implement the Externalities trait, but it compiles and there are no tests + // so… + // fn build_storage(self) -> Result, String> { + fn build_storage(self) -> Result { use codec::Encode; Ok(map![ From 56f9ef6e3532313e00d53fb079b1592f495d807d Mon Sep 17 00:00:00 2001 From: David Palm Date: Thu, 2 Aug 2018 14:54:35 +0200 Subject: [PATCH 33/97] Derive Debug so tests in executor can work --- substrate/primitives/src/hasher.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/substrate/primitives/src/hasher.rs b/substrate/primitives/src/hasher.rs index 421ecba6ace56..a140315edbd7f 100644 --- a/substrate/primitives/src/hasher.rs +++ b/substrate/primitives/src/hasher.rs @@ -22,6 +22,7 @@ use hash::H256; use hashing::blake2_256; /// Concrete implementation of Hasher using Blake2b 256-bit hashes +#[derive(Debug)] pub struct BlakeHasher; impl Hasher for BlakeHasher { type Out = H256; From eac3f253c4eb37d76c049e7385bafcab4f30b2b2 Mon Sep 17 00:00:00 2001 From: David Palm Date: Thu, 2 Aug 2018 15:00:04 +0200 Subject: [PATCH 34/97] Make executor use BlakeHasher --- substrate/executor/Cargo.toml | 1 + substrate/executor/src/lib.rs | 5 +++- substrate/executor/src/native_executor.rs | 16 +++++++------ substrate/executor/src/wasm_executor.rs | 28 +++++++++++++---------- 4 files changed, 30 insertions(+), 20 deletions(-) diff --git a/substrate/executor/Cargo.toml b/substrate/executor/Cargo.toml index f60c686b0ef24..a392234c47d34 100644 --- a/substrate/executor/Cargo.toml +++ b/substrate/executor/Cargo.toml @@ -23,6 +23,7 @@ twox-hash = "1.1.0" lazy_static = "1.0" parking_lot = "*" log = "0.3" +hashdb = { git = "https://github.com/paritytech/parity-common" } [dev-dependencies] assert_matches = "1.1" diff --git a/substrate/executor/src/lib.rs b/substrate/executor/src/lib.rs index f474946919f6c..e63da5c491ef1 100644 --- a/substrate/executor/src/lib.rs +++ b/substrate/executor/src/lib.rs @@ -43,6 +43,8 @@ extern crate rustc_hex; extern crate triehash; extern crate parking_lot; extern crate twox_hash; +extern crate hashdb; + #[macro_use] extern crate log; #[macro_use] @@ -70,6 +72,7 @@ pub use native_executor::{with_native_environment, NativeExecutor, NativeExecuti pub use state_machine::Externalities; pub use runtime_version::RuntimeVersion; pub use codec::Codec; +use primitives::BlakeHasher; /// Provides runtime information. pub trait RuntimeInfo { @@ -77,7 +80,7 @@ pub trait RuntimeInfo { const NATIVE_VERSION: Option; /// Extract RuntimeVersion of given :code block - fn runtime_version ( + fn runtime_version> ( &self, ext: &mut E, code: &[u8] diff --git a/substrate/executor/src/native_executor.rs b/substrate/executor/src/native_executor.rs index 0b132ae9ab1fa..320fdb05c2f9c 100644 --- a/substrate/executor/src/native_executor.rs +++ b/substrate/executor/src/native_executor.rs @@ -25,6 +25,8 @@ use twox_hash::XxHash; use std::hash::Hasher; use parking_lot::{Mutex, MutexGuard}; use RuntimeInfo; +use hashdb; +use primitives::BlakeHasher; // For the internal Runtime Cache: // Is it compatible enough to run this natively or do we need to fall back on the WasmModule @@ -56,7 +58,7 @@ fn gen_cache_key(code: &[u8]) -> u64 { /// fetch a runtime version from the cache or if there is no cached version yet, create /// the runtime version entry for `code`, determines whether `Compatibility::IsCompatible` /// can be used by by comparing returned RuntimeVersion to `ref_version` -fn fetch_cached_runtime_version<'a, E: Externalities>( +fn fetch_cached_runtime_version<'a, E: Externalities>( wasm_executor: &WasmExecutor, cache: &'a mut MutexGuard, ext: &mut E, @@ -94,8 +96,8 @@ fn safe_call(f: F) -> Result /// Set up the externalities and safe calling environment to execute calls to a native runtime. /// /// If the inner closure panics, it will be caught and return an error. -pub fn with_native_environment(ext: &mut Externalities, f: F) -> Result - where F: ::std::panic::UnwindSafe + FnOnce() -> U +pub fn with_native_environment(ext: &mut Externalities, f: F) -> Result +where F: ::std::panic::UnwindSafe + FnOnce() -> U { ::runtime_io::with_externalities(ext, move || safe_call(f)) } @@ -107,7 +109,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>; /// Get native runtime version. const VERSION: RuntimeVersion; @@ -150,7 +152,7 @@ impl Clone for NativeExecutor { impl RuntimeInfo for NativeExecutor { const NATIVE_VERSION: Option = Some(D::VERSION); - fn runtime_version( + fn runtime_version>( &self, ext: &mut E, code: &[u8], @@ -163,10 +165,10 @@ impl RuntimeInfo for NativeExecutor { } } -impl CodeExecutor for NativeExecutor { +impl CodeExecutor for NativeExecutor { type Error = Error; - fn call( + fn call>( &self, ext: &mut E, code: &[u8], diff --git a/substrate/executor/src/wasm_executor.rs b/substrate/executor/src/wasm_executor.rs index 70571f480096c..a67dc4c0981bd 100644 --- a/substrate/executor/src/wasm_executor.rs +++ b/substrate/executor/src/wasm_executor.rs @@ -18,6 +18,7 @@ use std::cmp::Ordering; use std::collections::HashMap; + use wasmi::{ Module, ModuleInstance, MemoryInstance, MemoryRef, TableRef, ImportsBuilder }; @@ -29,9 +30,11 @@ use wasm_utils::UserError; use primitives::{blake2_256, twox_128, twox_256}; use primitives::hexdisplay::HexDisplay; use primitives::sandbox as sandbox_primitives; +use primitives::BlakeHasher; use triehash::ordered_trie_root; use sandbox; + struct Heap { end: u32, } @@ -71,7 +74,7 @@ macro_rules! debug_trace { ( $( $x:tt )* ) => () } -struct FunctionExecutor<'e, E: Externalities + 'e> { +struct FunctionExecutor<'e, E: Externalities + 'e> { sandbox_store: sandbox::Store, heap: Heap, memory: MemoryRef, @@ -80,7 +83,7 @@ struct FunctionExecutor<'e, E: Externalities + 'e> { hash_lookup: HashMap, Vec>, } -impl<'e, E: Externalities> FunctionExecutor<'e, E> { +impl<'e, E: Externalities> FunctionExecutor<'e, E> { fn new(m: MemoryRef, heap_pages: usize, t: Option, e: &'e mut E) -> Result { Ok(FunctionExecutor { sandbox_store: sandbox::Store::new(), @@ -93,7 +96,7 @@ impl<'e, E: Externalities> FunctionExecutor<'e, E> { } } -impl<'e, E: Externalities> sandbox::SandboxCapabilities for FunctionExecutor<'e, E> { +impl<'e, E: Externalities> sandbox::SandboxCapabilities for FunctionExecutor<'e, E> { fn store(&self) -> &sandbox::Store { &self.sandbox_store } @@ -138,6 +141,7 @@ impl ReadPrimitive for MemoryInstance { } } +// REVIEW: this macro does not support `where` clauses and that seems somewhat tricky to add impl_function_executor!(this: FunctionExecutor<'e, E>, ext_print_utf8(utf8_data: *const u8, utf8_len: u32) => { if let Ok(utf8) = this.memory.get(utf8_data, utf8_len as usize) { @@ -207,7 +211,7 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, }, ext_clear_storage(key_data: *const u8, key_len: u32) => { let key = this.memory.get(key_data, key_len as usize).map_err(|_| UserError("Invalid attempt to determine key in ext_clear_storage"))?; - debug_trace!(target: "wasm-trace", "*** Clearing storage: {} [k={}]", + debug_trace!(target: "wasm-trace", "*** Clearing storage: {} [k={}]", if let Some(_preimage) = this.hash_lookup.get(&key) { format!("%{}", ::primitives::hexdisplay::ascii_format(&_preimage)) } else { @@ -230,7 +234,7 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, let key = this.memory.get(key_data, key_len as usize).map_err(|_| UserError("Invalid attempt to determine key in ext_get_allocated_storage"))?; let maybe_value = this.ext.storage(&key); - debug_trace!(target: "wasm-trace", "*** Getting storage: {} == {} [k={}]", + debug_trace!(target: "wasm-trace", "*** Getting storage: {} == {} [k={}]", if let Some(_preimage) = this.hash_lookup.get(&key) { format!("%{}", ::primitives::hexdisplay::ascii_format(&_preimage)) } else { @@ -260,7 +264,7 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, ext_get_storage_into(key_data: *const u8, key_len: u32, value_data: *mut u8, value_len: u32, value_offset: u32) -> u32 => { let key = this.memory.get(key_data, key_len as usize).map_err(|_| UserError("Invalid attempt to get key in ext_get_storage_into"))?; let maybe_value = this.ext.storage(&key); - debug_trace!(target: "wasm-trace", "*** Getting storage: {} == {} [k={}]", + debug_trace!(target: "wasm-trace", "*** Getting storage: {} == {} [k={}]", if let Some(_preimage) = this.hash_lookup.get(&key) { format!("%{}", ::primitives::hexdisplay::ascii_format(&_preimage)) } else { @@ -285,7 +289,7 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, }, ext_storage_root(result: *mut u8) => { let r = this.ext.storage_root(); - this.memory.set(result, &r[..]).map_err(|_| UserError("Invalid attempt to set memory in ext_storage_root"))?; + this.memory.set(result, r.as_ref()).map_err(|_| UserError("Invalid attempt to set memory in ext_storage_root"))?; Ok(()) }, ext_enumerated_trie_root(values_data: *const u8, lens_data: *const u32, lens_len: u32, result: *mut u8) => { @@ -476,7 +480,7 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, this.sandbox_store.memory_teardown(memory_idx)?; Ok(()) }, - => <'e, E: Externalities + 'e> + => <'e, E: Externalities + 'e> ); /// Wasm rust executor for contracts. @@ -508,7 +512,7 @@ impl WasmExecutor { /// Call a given method in the given code. /// This should be used for tests only. - pub fn call( + pub fn call>( &self, ext: &mut E, code: &[u8], @@ -520,7 +524,7 @@ impl WasmExecutor { } /// Call a given method in the given wasm-module runtime. - pub fn call_in_wasm_module( + pub fn call_in_wasm_module>( &self, ext: &mut E, module: &Module, @@ -633,7 +637,7 @@ mod tests { assert_eq!(output, b"all ok!".to_vec()); - let expected: HashMap<_, _> = map![ + let expected : TestExternalities<_> = 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() @@ -656,7 +660,7 @@ mod tests { assert_eq!(output, b"all ok!".to_vec()); - let expected: HashMap<_, _> = 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() From f3422c5c5088d9b25bce861c898e045d8a97cf0d Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 08:41:53 +0200 Subject: [PATCH 35/97] ws --- substrate/state-machine/src/ext.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/substrate/state-machine/src/ext.rs b/substrate/state-machine/src/ext.rs index 0584bc41e6139..43129e989474f 100644 --- a/substrate/state-machine/src/ext.rs +++ b/substrate/state-machine/src/ext.rs @@ -57,7 +57,7 @@ pub struct Ext<'a, H, C, B> where H: Hasher, C: NodeCodec, - B: 'a + Backend, + B: 'a + Backend, { // The overlayed changes to write to. overlay: &'a mut OverlayedChanges, From aa40b7832ecbd9b241c0243d578bae9e90e1d7cb Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 08:42:06 +0200 Subject: [PATCH 36/97] WIP make client generic --- Cargo.lock | 4 +- substrate/client/Cargo.toml | 3 ++ substrate/client/db/Cargo.toml | 2 +- substrate/client/src/backend.rs | 38 ++++++++++--- substrate/client/src/block_builder.rs | 22 +++++--- substrate/client/src/call_executor.rs | 35 ++++++++---- substrate/client/src/client.rs | 59 ++++++++++++++------- substrate/client/src/in_mem.rs | 51 ++++++++++++------ substrate/client/src/lib.rs | 3 ++ substrate/client/src/light/backend.rs | 44 ++++++++++++--- substrate/client/src/light/call_executor.rs | 45 ++++++++++------ substrate/client/src/light/fetcher.rs | 8 ++- substrate/client/src/light/mod.rs | 6 ++- 13 files changed, 232 insertions(+), 88 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0be3bc4921f7e..56da12da92605 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2658,9 +2658,12 @@ 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.0 (git+https://github.com/paritytech/parity-common)", "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)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", "slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-bft 0.1.0", "substrate-codec 0.1.0", @@ -2680,7 +2683,6 @@ dependencies = [ name = "substrate-client-db" version = "0.1.0" dependencies = [ - "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common)", "kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common)", diff --git a/substrate/client/Cargo.toml b/substrate/client/Cargo.toml index 5b347395763b7..4a770be49240b 100644 --- a/substrate/client/Cargo.toml +++ b/substrate/client/Cargo.toml @@ -23,6 +23,9 @@ substrate-runtime-primitives = { path = "../runtime/primitives" } substrate-state-machine = { path = "../state-machine" } substrate-keyring = { path = "../../substrate/keyring" } substrate-telemetry = { path = "../telemetry" } +hashdb = { git = "https://github.com/paritytech/parity-common" } +patricia-trie = { git = "https://github.com/paritytech/parity-common" } +rlp = { git = "https://github.com/paritytech/parity-common" } [dev-dependencies] substrate-test-client = { path = "../test-client" } diff --git a/substrate/client/db/Cargo.toml b/substrate/client/db/Cargo.toml index 9f139e3720d5c..385b007ec7afc 100644 --- a/substrate/client/db/Cargo.toml +++ b/substrate/client/db/Cargo.toml @@ -8,7 +8,7 @@ parking_lot = "0.4" log = "0.3" kvdb = { git = "https://github.com/paritytech/parity-common" } kvdb-rocksdb = { git = "https://github.com/paritytech/parity-common" } -ethereum-types = "0.3" +# ethereum-types = "0.3" hashdb = { git = "https://github.com/paritytech/parity-common" } patricia-trie = { git = "https://github.com/paritytech/parity-common" } memorydb = { git = "https://github.com/paritytech/parity-common" } diff --git a/substrate/client/src/backend.rs b/substrate/client/src/backend.rs index 8de27a39b4645..4509f3d19019a 100644 --- a/substrate/client/src/backend.rs +++ b/substrate/client/src/backend.rs @@ -22,11 +22,18 @@ use runtime_primitives::bft::Justification; use runtime_primitives::generic::BlockId; use runtime_primitives::traits::{Block as BlockT, NumberFor}; use state_machine::backend::Backend as StateBackend; +use patricia_trie::NodeCodec; +use hashdb::Hasher; /// 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>; @@ -43,7 +50,7 @@ pub trait BlockImportOperation { /// 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<()>; } @@ -56,13 +63,18 @@ pub trait BlockImportOperation { /// /// 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; /// Begin a new block insertion transaction with given parent block id. /// When constructing the genesis, this is called with all-zero hash. @@ -79,7 +91,17 @@ pub trait Backend: Send + Sync { } /// 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/client/src/block_builder.rs b/substrate/client/src/block_builder.rs index bc5c29a37f86d..ce7a6e3898b60 100644 --- a/substrate/client/src/block_builder.rs +++ b/substrate/client/src/block_builder.rs @@ -23,12 +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 hashdb::Hasher; +use rlp::Encodable; /// Utility for building new (valid) blocks from a stream of extrinsics. -pub struct BlockBuilder where - B: backend::Backend, - E: CallExecutor + Clone, +pub struct BlockBuilder +where + B: backend::Backend, + E: CallExecutor + Clone, Block: BlockT, + H: Hasher, + C: NodeCodec, { header: ::Header, extrinsics: Vec<::Extrinsic>, @@ -37,10 +43,14 @@ pub struct BlockBuilder where changes: state_machine::OverlayedChanges, } -impl BlockBuilder where - B: backend::Backend, - E: CallExecutor + Clone, +impl BlockBuilder +where + B: backend::Backend, + E: CallExecutor + Clone, Block: BlockT, + H: Hasher, + H::Out: Encodable + Ord, + C: NodeCodec, { /// Create a new instance of builder from the given client, building on the latest block. pub fn new(client: &Client) -> error::Result { diff --git a/substrate/client/src/call_executor.rs b/substrate/client/src/call_executor.rs index ac561b5a549a3..97f92c3a05270 100644 --- a/substrate/client/src/call_executor.rs +++ b/substrate/client/src/call_executor.rs @@ -15,12 +15,16 @@ // along with Polkadot. If not, see . use std::sync::Arc; +use std::cmp::Ord; use runtime_primitives::generic::BlockId; use runtime_primitives::traits::Block as BlockT; -use state_machine::{self, OverlayedChanges, Ext, +use state_machine::{self, OverlayedChanges, Ext, CodeExecutor, ExecutionManager, native_when_possible}; use runtime_io::Externalities; use executor::{RuntimeVersion, RuntimeInfo}; +use patricia_trie::NodeCodec; +use hashdb::Hasher; +use rlp::Encodable; use backend; use error; @@ -35,7 +39,13 @@ pub struct CallResult { } /// Method call executor. -pub trait CallExecutor { +pub trait CallExecutor +where + B: BlockT, + H: Hasher, + H::Out: Ord + Encodable, + C: NodeCodec, +{ /// Externalities error type. type Error: state_machine::Error; @@ -57,7 +67,7 @@ pub trait CallExecutor { /// /// 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, @@ -70,7 +80,7 @@ pub trait CallExecutor { /// 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, @@ -104,11 +114,14 @@ impl Clone for LocalCallExecutor where E: Clone { } } -impl CallExecutor for LocalCallExecutor - where - B: backend::LocalBackend, - E: CodeExecutor + RuntimeInfo, - Block: BlockT, +impl CallExecutor for LocalCallExecutor +where + B: backend::LocalBackend, + E: CodeExecutor + RuntimeInfo, + Block: BlockT, + H: Hasher, + H::Out: Encodable + Ord, + C: NodeCodec, { type Error = E::Error; @@ -140,7 +153,7 @@ impl CallExecutor for LocalCallExecutor } 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, @@ -159,7 +172,7 @@ impl CallExecutor for LocalCallExecutor ).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/client/src/client.rs b/substrate/client/src/client.rs index bd7f3c5581a2e..8a82f1edacce8 100644 --- a/substrate/client/src/client.rs +++ b/substrate/client/src/client.rs @@ -17,6 +17,7 @@ //! Substrate Client use std::sync::Arc; +use std::cmp::Ord; use futures::sync::mpsc; use parking_lot::{Mutex, RwLock}; use primitives::AuthorityId; @@ -33,6 +34,9 @@ use call_executor::{CallExecutor, LocalCallExecutor}; use executor::{RuntimeVersion, RuntimeInfo}; use notifications::{StorageNotifications, StorageEventStream}; use {error, in_mem, block_builder, runtime_io, bft, genesis}; +use patricia_trie::NodeCodec; +use hashdb::Hasher; +use rlp::Encodable; /// Type that implements `futures::Stream` of block import events. pub type BlockchainEventStream = mpsc::UnboundedReceiver>; @@ -151,24 +155,30 @@ impl JustifiedHeader { } /// Create an instance of in-memory client. -pub fn new_in_mem( +pub fn new_in_mem( executor: E, genesis_storage: S, -) -> error::Result, LocalCallExecutor, E>, Block>> +) -> error::Result, LocalCallExecutor, E>, Block>> where - E: CodeExecutor + RuntimeInfo, + E: CodeExecutor + RuntimeInfo, S: BuildStorage, Block: BlockT, + H: Hasher, + H::Out: Encodable + Ord, + C: NodeCodec + Send + Sync, { let backend = Arc::new(in_mem::Backend::new()); let executor = LocalCallExecutor::new(backend.clone(), executor); Client::new(backend, executor, genesis_storage, ExecutionStrategy::NativeWhenPossible) } -impl Client where - B: backend::Backend, - E: CallExecutor, +impl Client where + B: backend::Backend, + E: CallExecutor, Block: BlockT, + H: Hasher, + H::Out: Encodable + Ord, + C: NodeCodec, { /// Creates new Substrate Client with given blockchain and code executor. pub fn new( @@ -267,12 +277,12 @@ impl Client where } /// Create a new block, built on the head of the chain. - pub fn new_block(&self) -> error::Result> where E: Clone { + 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> where E: Clone { + pub fn new_block_at(&self, parent: &BlockId) -> error::Result> where E: Clone { block_builder::BlockBuilder::at_block(parent, &self) } @@ -485,11 +495,14 @@ impl Client where } } -impl bft::BlockImport for Client +impl bft::BlockImport for Client where - B: backend::Backend, - E: CallExecutor, + B: backend::Backend, + E: CallExecutor, Block: BlockT, + H: Hasher, + H::Out: Encodable + Ord, + C: NodeCodec, { fn import_block( &self, @@ -508,11 +521,14 @@ impl bft::BlockImport for Client } } -impl bft::Authorities for Client +impl bft::Authorities for Client where - B: backend::Backend, - E: CallExecutor, + B: backend::Backend, + E: CallExecutor, Block: BlockT, + H: Hasher, + H::Out: Encodable + Ord, + C: NodeCodec, { fn authorities(&self, at: &BlockId) -> Result, bft::Error> { let on_chain_version: Result<_, bft::Error> = self.runtime_version_at(at) @@ -531,10 +547,12 @@ impl bft::Authorities for Client } } -impl BlockchainEvents for Client +impl BlockchainEvents for Client where - E: CallExecutor, + E: CallExecutor, Block: BlockT, + H: Hasher, + C: NodeCodec, { /// Get block import event stream. fn import_notification_stream(&self) -> BlockchainEventStream { @@ -549,11 +567,14 @@ impl BlockchainEvents for Client } } -impl ChainHead for Client +impl ChainHead for Client where - B: backend::Backend, - E: CallExecutor, + B: backend::Backend, + E: CallExecutor, Block: BlockT, + H: Hasher, + H::Out: Encodable + Ord, + C: NodeCodec, { fn best_block_header(&self) -> error::Result<::Header> { Client::best_block_header(self) diff --git a/substrate/client/src/in_mem.rs b/substrate/client/src/in_mem.rs index a12323610a723..7e313336aac14 100644 --- a/substrate/client/src/in_mem.rs +++ b/substrate/client/src/in_mem.rs @@ -28,6 +28,8 @@ use runtime_primitives::traits::{Block as BlockT, Header as HeaderT, Zero, Numbe use runtime_primitives::bft::Justification; use blockchain::{self, BlockStatus}; use state_machine::backend::{Backend as StateBackend, InMemory}; +use patricia_trie::NodeCodec; +use hashdb::Hasher; struct PendingBlock { block: StoredBlock, @@ -248,15 +250,20 @@ 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>, } -impl backend::BlockImportOperation for BlockImportOperation { - type State = InMemory; +impl backend::BlockImportOperation for BlockImportOperation +where + Block: BlockT, + H: Hasher, + C: NodeCodec, +{ + type State = InMemory; fn state(&self) -> error::Result> { Ok(Some(&self.old_state)) @@ -281,7 +288,7 @@ impl backend::BlockImportOperation for BlockImportOperatio self.pending_authorities = Some(authorities); } - fn update_storage(&mut self, update: ::Transaction) -> error::Result<()> { + fn update_storage(&mut self, update: as StateBackend>::Transaction) -> error::Result<()> { self.new_state = Some(self.old_state.update(update)); Ok(()) } @@ -293,18 +300,24 @@ impl backend::BlockImportOperation for BlockImportOperatio } /// In-memory backend. Keeps all states and blocks in memory. Useful for testing. -pub struct Backend where +pub struct Backend +where Block: BlockT, + H: Hasher, + C: NodeCodec { - states: RwLock>, + states: RwLock>>, blockchain: Blockchain, } -impl Backend where +impl Backend +where Block: BlockT, + H: Hasher, + C: NodeCodec { /// Create a new instance of in-mem backend. - pub fn new() -> Backend { + pub fn new() -> Backend { Backend { states: RwLock::new(HashMap::new()), blockchain: Blockchain::new(), @@ -312,12 +325,15 @@ impl Backend where } } -impl backend::Backend for Backend where +impl backend::Backend for Backend +where Block: BlockT, + H: Hasher, + C: NodeCodec + Send + Sync { - type BlockImportOperation = BlockImportOperation; + type BlockImportOperation = BlockImportOperation; type Blockchain = Blockchain; - type State = InMemory; + type State = InMemory; fn begin_operation(&self, block: BlockId) -> error::Result { let state = match block { @@ -340,7 +356,7 @@ impl backend::Backend for Backend where let hash = header.hash(); let parent_hash = *header.parent_hash(); - self.states.write().insert(hash, operation.new_state.unwrap_or_else(|| old_state.clone())); + self.states.write().insert(hash, operation.new_state.unwrap_or_else(|| *old_state.clone())); // REVIEW: this was `.unwrap_or_else(|| old_state.clone())` – but ther compiler complained about trying to insert a rference into the hash map. Not sure how that could have worked before? self.blockchain.insert(hash, header, justification, body, pending_block.is_best); // dumb implementation - store value for each block if pending_block.is_best { @@ -366,7 +382,12 @@ impl backend::Backend for Backend where } } -impl backend::LocalBackend for Backend {} +impl backend::LocalBackend for Backend +where + Block: BlockT, + H: Hasher, + C: NodeCodec, +{} impl Cache { fn insert(&self, at: Block::Hash, authorities: Option>) { diff --git a/substrate/client/src/lib.rs b/substrate/client/src/lib.rs index 8a4a143914a96..1226ad0983d1c 100644 --- a/substrate/client/src/lib.rs +++ b/substrate/client/src/lib.rs @@ -36,6 +36,9 @@ extern crate fnv; extern crate futures; extern crate parking_lot; extern crate triehash; +extern crate patricia_trie; +extern crate hashdb; +extern crate rlp; #[macro_use] extern crate error_chain; #[macro_use] extern crate log; diff --git a/substrate/client/src/light/backend.rs b/substrate/client/src/light/backend.rs index e3b8b42c89c5f..5507c5675a26f 100644 --- a/substrate/client/src/light/backend.rs +++ b/substrate/client/src/light/backend.rs @@ -30,6 +30,9 @@ 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; +use patricia_trie::NodeCodec; +use hashdb::Hasher; +use rlp::Encodable; /// Light client backend. pub struct Backend { @@ -62,10 +65,12 @@ impl Backend { } } -impl ClientBackend for Backend where +impl ClientBackend for Backend where Block: BlockT, S: BlockchainStorage, F: Fetcher, + H: Hasher, + C: NodeCodec, { type BlockImportOperation = ImportOperation; type Blockchain = Blockchain; @@ -106,9 +111,22 @@ impl ClientBackend for Backend where } } -impl RemoteBackend for Backend where Block: BlockT, S: BlockchainStorage, F: Fetcher {} +impl RemoteBackend for Backend +where + Block: BlockT, + S: BlockchainStorage, + F: Fetcher, + H: Hasher, + C: NodeCodec, +{} -impl BlockImportOperation for ImportOperation where Block: BlockT, F: Fetcher { +impl BlockImportOperation for ImportOperation +where + Block: BlockT, + F: Fetcher, + H: Hasher, + C: NodeCodec, +{ type State = OnDemandState; fn state(&self) -> ClientResult> { @@ -132,7 +150,7 @@ impl BlockImportOperation for ImportOperation where B 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(()) } @@ -152,7 +170,13 @@ impl Clone for OnDemandState { } } -impl StateBackend for OnDemandState where Block: BlockT, F: Fetcher { +impl StateBackend for OnDemandState +where + Block: BlockT, + F: Fetcher, + H: Hasher, + C: NodeCodec, +{ type Error = ClientError; type Transaction = (); @@ -175,8 +199,14 @@ impl StateBackend for OnDemandState where Block: BlockT, F: } } -impl TryIntoStateTrieBackend for OnDemandState where Block: BlockT, F: Fetcher { - fn try_into_trie_backend(self) -> Option { +impl TryIntoStateTrieBackend for OnDemandState +where + Block: BlockT, + F: Fetcher, + H: Hasher, + C: NodeCodec, +{ + fn try_into_trie_backend(self) -> Option> { None } } diff --git a/substrate/client/src/light/call_executor.rs b/substrate/client/src/light/call_executor.rs index da196b54b7f60..01454751f01cd 100644 --- a/substrate/client/src/light/call_executor.rs +++ b/substrate/client/src/light/call_executor.rs @@ -23,7 +23,11 @@ use futures::{IntoFuture, Future}; 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, TrieH256, ExecutionManager}; + execution_proof_check, ExecutionManager}; +use primitives::H256; +use patricia_trie::NodeCodec; +use hashdb::Hasher; +use rlp::Encodable; use blockchain::Backend as ChainBackend; use call_executor::{CallExecutor, CallResult}; @@ -46,11 +50,13 @@ impl RemoteCallExecutor { } } -impl CallExecutor for RemoteCallExecutor - where - Block: BlockT, - B: ChainBackend, - F: Fetcher, +impl CallExecutor for RemoteCallExecutor +where + Block: BlockT, + B: ChainBackend, + F: Fetcher, + H: Hasher, + C: NodeCodec, { type Error = ClientError; @@ -75,19 +81,19 @@ impl CallExecutor for RemoteCallExecutor } fn call_at_state< - S: StateBackend, - H: FnOnce(Result, Self::Error>, Result, Self::Error>) -> Result, Self::Error> + S: StateBackend, + F: FnOnce(Result, Self::Error>, Result, Self::Error>) -> Result, Self::Error> >(&self, _state: &S, _changes: &mut OverlayedChanges, _method: &str, _call_data: &[u8], - _m: ExecutionManager + _m: ExecutionManager ) -> ClientResult<(Vec, S::Transaction)> { Err(ClientErrorKind::NotAvailableOnLightClient.into()) } - fn prove_at_state(&self, _state: S, _changes: &mut OverlayedChanges, _method: &str, _call_data: &[u8]) -> ClientResult<(Vec, Vec>)> { + fn prove_at_state>(&self, _state: S, _changes: &mut OverlayedChanges, _method: &str, _call_data: &[u8]) -> ClientResult<(Vec, Vec>)> { Err(ClientErrorKind::NotAvailableOnLightClient.into()) } @@ -97,7 +103,7 @@ impl CallExecutor for RemoteCallExecutor } /// Check remote execution proof using given backend. -pub fn check_execution_proof( +pub fn check_execution_proof( blockchain: &B, executor: &E, request: &RemoteCallRequest, @@ -106,7 +112,9 @@ pub fn check_execution_proof( where Block: BlockT, B: ChainBackend, - E: CodeExecutor, + E: CodeExecutor, + H: Hasher, + H::Out: Encodable + Ord + From, { let local_header = blockchain.header(BlockId::Hash(request.block))?; let local_header = local_header.ok_or_else(|| ClientErrorKind::UnknownBlock(format!("{}", request.block)))?; @@ -115,7 +123,7 @@ pub fn check_execution_proof( } /// Check remote execution proof using given state root. -fn do_check_execution_proof( +fn do_check_execution_proof( local_state_root: Hash, executor: &E, request: &RemoteCallRequest, @@ -123,11 +131,16 @@ fn do_check_execution_proof( ) -> ClientResult where Hash: ::std::fmt::Display + ::std::convert::AsRef<[u8]>, - E: CodeExecutor, + E: CodeExecutor, + H: Hasher, + H::Out: Encodable + Ord + From, { let mut changes = OverlayedChanges::default(); let (local_result, _) = execution_proof_check( - TrieH256::from_slice(local_state_root.as_ref()).into(), + // TrieH256::from_slice(local_state_root.as_ref()).into(), + // H256::from_slice(local_state_root.as_ref()).into(), + // ::Out::from_slice(local_state_root.as_ref()), // TODO: H::Out doesn't know it's a H256 so it can't find the `from_slice` + H256::from_slice(local_state_root.as_ref()).into(), remote_proof, &mut changes, executor, @@ -153,7 +166,7 @@ mod tests { // 'fetch' execution proof from remote node let remote_execution_proof = remote_client.execution_proof(&remote_block_id, "authorities", &[]).unwrap().1; - + // check remote execution proof locally let local_executor = test_client::LocalExecutor::with_heap_pages(8); do_check_execution_proof(remote_block_storage_root.into(), &local_executor, &RemoteCallRequest { diff --git a/substrate/client/src/light/fetcher.rs b/substrate/client/src/light/fetcher.rs index 90622bf6fc008..8d07196e6a09e 100644 --- a/substrate/client/src/light/fetcher.rs +++ b/substrate/client/src/light/fetcher.rs @@ -26,6 +26,8 @@ use call_executor::CallResult; use error::{Error as ClientError, Result as ClientResult}; use light::blockchain::{Blockchain, Storage as BlockchainStorage}; use light::call_executor::check_execution_proof; +use hashdb::Hasher; +use rlp::Encodable; /// Remote call request. #[derive(Clone, Debug, PartialEq, Eq, Hash)] @@ -75,12 +77,14 @@ impl LightDataChecker { } } -impl FetchChecker for LightDataChecker +impl FetchChecker for LightDataChecker where Block: BlockT, S: BlockchainStorage, - E: CodeExecutor, + E: CodeExecutor, F: Fetcher, + H: Hasher, + H::Out: Encodable + Ord + From, { fn check_execution_proof(&self, request: &RemoteCallRequest, remote_proof: Vec>) -> ClientResult { check_execution_proof(&*self.blockchain, &self.executor, request, remote_proof) diff --git a/substrate/client/src/light/mod.rs b/substrate/client/src/light/mod.rs index 40b54cdd634ce..2e4b376095133 100644 --- a/substrate/client/src/light/mod.rs +++ b/substrate/client/src/light/mod.rs @@ -33,6 +33,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; /// Create an instance of light client blockchain backend. pub fn new_light_blockchain, F>(storage: S) -> Arc> { @@ -62,14 +63,15 @@ pub fn new_light( } /// Create an instance of fetch data checker. -pub fn new_fetch_checker( +pub fn new_fetch_checker( blockchain: Arc>, executor: E, ) -> LightDataChecker where B: BlockT, S: BlockchainStorage, - E: CodeExecutor, + E: CodeExecutor, + H: Hasher { LightDataChecker::new(blockchain, executor) } From 54a2b6616bb7ed2698f3455d7bda5971f30b362b Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 10:00:43 +0200 Subject: [PATCH 37/97] typechecks --- substrate/client/src/block_builder.rs | 11 ++-- substrate/client/src/call_executor.rs | 14 ++-- substrate/client/src/client.rs | 72 ++++++++------------- substrate/client/src/in_mem.rs | 4 +- substrate/client/src/light/backend.rs | 12 ++-- substrate/client/src/light/call_executor.rs | 30 ++++----- substrate/client/src/light/fetcher.rs | 12 ++-- substrate/state-machine/src/backend.rs | 11 +++- 8 files changed, 77 insertions(+), 89 deletions(-) diff --git a/substrate/client/src/block_builder.rs b/substrate/client/src/block_builder.rs index ce7a6e3898b60..1eab11774c5b4 100644 --- a/substrate/client/src/block_builder.rs +++ b/substrate/client/src/block_builder.rs @@ -24,6 +24,7 @@ use runtime_primitives::generic::BlockId; use {backend, error, Client, CallExecutor}; use runtime_primitives::{ApplyResult, ApplyOutcome}; use patricia_trie::NodeCodec; +use primitives::{BlakeHasher, BlakeRlpCodec}; use hashdb::Hasher; use rlp::Encodable; @@ -34,6 +35,7 @@ where E: CallExecutor + Clone, Block: BlockT, H: Hasher, + H::Out: Encodable + Ord, C: NodeCodec, { header: ::Header, @@ -43,14 +45,11 @@ where changes: state_machine::OverlayedChanges, } -impl BlockBuilder +impl BlockBuilder where - B: backend::Backend, - E: CallExecutor + Clone, + B: backend::Backend, + E: CallExecutor + Clone, Block: BlockT, - H: Hasher, - H::Out: Encodable + Ord, - C: NodeCodec, { /// Create a new instance of builder from the given client, building on the latest block. pub fn new(client: &Client) -> error::Result { diff --git a/substrate/client/src/call_executor.rs b/substrate/client/src/call_executor.rs index 97f92c3a05270..dd27038407d81 100644 --- a/substrate/client/src/call_executor.rs +++ b/substrate/client/src/call_executor.rs @@ -23,6 +23,7 @@ use state_machine::{self, OverlayedChanges, Ext, use runtime_io::Externalities; use executor::{RuntimeVersion, RuntimeInfo}; use patricia_trie::NodeCodec; +use primitives::{BlakeHasher, BlakeRlpCodec}; use hashdb::Hasher; use rlp::Encodable; @@ -114,14 +115,11 @@ impl Clone for LocalCallExecutor where E: Clone { } } -impl CallExecutor for LocalCallExecutor +impl CallExecutor for LocalCallExecutor where - B: backend::LocalBackend, - E: CodeExecutor + RuntimeInfo, + B: backend::LocalBackend, + E: CodeExecutor + RuntimeInfo, Block: BlockT, - H: Hasher, - H::Out: Encodable + Ord, - C: NodeCodec, { type Error = E::Error; @@ -153,7 +151,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, @@ -172,7 +170,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/client/src/client.rs b/substrate/client/src/client.rs index 8a82f1edacce8..f4aa9e3e80323 100644 --- a/substrate/client/src/client.rs +++ b/substrate/client/src/client.rs @@ -17,13 +17,13 @@ //! Substrate Client use std::sync::Arc; -use std::cmp::Ord; use futures::sync::mpsc; use parking_lot::{Mutex, RwLock}; 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, One, As, NumberFor}; use runtime_primitives::BuildStorage; +use primitives::{BlakeHasher, BlakeRlpCodec}; use primitives::storage::{StorageKey, StorageData}; use codec::Decode; use state_machine::{Ext, OverlayedChanges, Backend as StateBackend, CodeExecutor, ExecutionStrategy, ExecutionManager}; @@ -34,9 +34,6 @@ use call_executor::{CallExecutor, LocalCallExecutor}; use executor::{RuntimeVersion, RuntimeInfo}; use notifications::{StorageNotifications, StorageEventStream}; use {error, in_mem, block_builder, runtime_io, bft, genesis}; -use patricia_trie::NodeCodec; -use hashdb::Hasher; -use rlp::Encodable; /// Type that implements `futures::Stream` of block import events. pub type BlockchainEventStream = mpsc::UnboundedReceiver>; @@ -155,30 +152,24 @@ impl JustifiedHeader { } /// Create an instance of in-memory client. -pub fn new_in_mem( +pub fn new_in_mem( executor: E, genesis_storage: S, -) -> error::Result, LocalCallExecutor, E>, Block>> +) -> error::Result, LocalCallExecutor, E>, Block>> where - E: CodeExecutor + RuntimeInfo, + E: CodeExecutor + RuntimeInfo, S: BuildStorage, Block: BlockT, - H: Hasher, - H::Out: Encodable + Ord, - C: NodeCodec + Send + Sync, { let backend = Arc::new(in_mem::Backend::new()); let executor = LocalCallExecutor::new(backend.clone(), executor); Client::new(backend, executor, genesis_storage, ExecutionStrategy::NativeWhenPossible) } -impl Client where - B: backend::Backend, - E: CallExecutor, +impl Client where + B: backend::Backend, + E: CallExecutor, Block: BlockT, - H: Hasher, - H::Out: Encodable + Ord, - C: NodeCodec, { /// Creates new Substrate Client with given blockchain and code executor. pub fn new( @@ -277,12 +268,16 @@ impl Client where } /// Create a new block, built on the head of the chain. - pub fn new_block(&self) -> error::Result> where E: Clone { + 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> where E: Clone { + pub fn new_block_at(&self, parent: &BlockId) -> error::Result> + where E: Clone + { block_builder::BlockBuilder::at_block(parent, &self) } @@ -495,14 +490,11 @@ impl Client where } } -impl bft::BlockImport for Client +impl bft::BlockImport for Client where - B: backend::Backend, - E: CallExecutor, + B: backend::Backend, + E: CallExecutor, Block: BlockT, - H: Hasher, - H::Out: Encodable + Ord, - C: NodeCodec, { fn import_block( &self, @@ -521,14 +513,11 @@ impl bft::BlockImport for Client } } -impl bft::Authorities for Client +impl bft::Authorities for Client where - B: backend::Backend, - E: CallExecutor, + B: backend::Backend, + E: CallExecutor, Block: BlockT, - H: Hasher, - H::Out: Encodable + Ord, - C: NodeCodec, { fn authorities(&self, at: &BlockId) -> Result, bft::Error> { let on_chain_version: Result<_, bft::Error> = self.runtime_version_at(at) @@ -547,12 +536,10 @@ impl bft::Authorities for Client } } -impl BlockchainEvents for Client - where - E: CallExecutor, - Block: BlockT, - H: Hasher, - C: NodeCodec, +impl BlockchainEvents for Client +where + E: CallExecutor, + Block: BlockT, { /// Get block import event stream. fn import_notification_stream(&self) -> BlockchainEventStream { @@ -567,14 +554,11 @@ impl BlockchainEvents for Client } } -impl ChainHead for Client - where - B: backend::Backend, - E: CallExecutor, - Block: BlockT, - H: Hasher, - H::Out: Encodable + Ord, - C: NodeCodec, +impl ChainHead for Client +where + B: backend::Backend, + E: CallExecutor, + Block: BlockT, { fn best_block_header(&self) -> error::Result<::Header> { Client::best_block_header(self) diff --git a/substrate/client/src/in_mem.rs b/substrate/client/src/in_mem.rs index 7e313336aac14..46006c604921d 100644 --- a/substrate/client/src/in_mem.rs +++ b/substrate/client/src/in_mem.rs @@ -356,7 +356,7 @@ where let hash = header.hash(); let parent_hash = *header.parent_hash(); - self.states.write().insert(hash, operation.new_state.unwrap_or_else(|| *old_state.clone())); // REVIEW: this was `.unwrap_or_else(|| old_state.clone())` – but ther compiler complained about trying to insert a rference into the hash map. Not sure how that could have worked before? + self.states.write().insert(hash, operation.new_state.unwrap_or_else(|| old_state.clone())); // REVIEW: this was `.unwrap_or_else(|| old_state.clone())` – but ther compiler complained about trying to insert a rference into the hash map. Not sure how that could have worked before? self.blockchain.insert(hash, header, justification, body, pending_block.is_best); // dumb implementation - store value for each block if pending_block.is_best { @@ -386,7 +386,7 @@ impl backend::LocalBackend for Backend where Block: BlockT, H: Hasher, - C: NodeCodec, + C: NodeCodec + Send + Sync, {} impl Cache { diff --git a/substrate/client/src/light/backend.rs b/substrate/client/src/light/backend.rs index 5507c5675a26f..237be9046de45 100644 --- a/substrate/client/src/light/backend.rs +++ b/substrate/client/src/light/backend.rs @@ -22,8 +22,11 @@ use std::sync::{Arc, Weak}; use primitives::AuthorityId; use runtime_primitives::{bft::Justification, generic::BlockId}; use runtime_primitives::traits::{Block as BlockT, NumberFor}; -use state_machine::{Backend as StateBackend, TrieBackend as StateTrieBackend, - TryIntoTrieBackend as TryIntoStateTrieBackend}; +use state_machine::{ + Backend as StateBackend, + TrieBackend as StateTrieBackend, + TryIntoTrieBackend as TryIntoStateTrieBackend +}; use backend::{Backend as ClientBackend, BlockImportOperation, RemoteBackend}; use blockchain::HeaderBackend as BlockchainHeaderBackend; @@ -32,7 +35,6 @@ use light::blockchain::{Blockchain, Storage as BlockchainStorage}; use light::fetcher::Fetcher; use patricia_trie::NodeCodec; use hashdb::Hasher; -use rlp::Encodable; /// Light client backend. pub struct Backend { @@ -188,9 +190,9 @@ where // whole state is not available on light node } - fn storage_root(&self, _delta: I) -> ([u8; 32], Self::Transaction) + fn storage_root(&self, _delta: I) -> (H::Out, Self::Transaction) where I: IntoIterator, Option>)> { - ([0; 32], ()) + (H::Out::default(), ()) } fn pairs(&self) -> Vec<(Vec, Vec)> { diff --git a/substrate/client/src/light/call_executor.rs b/substrate/client/src/light/call_executor.rs index 01454751f01cd..f53ca33e6365c 100644 --- a/substrate/client/src/light/call_executor.rs +++ b/substrate/client/src/light/call_executor.rs @@ -24,7 +24,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 primitives::H256; +use primitives::{H256, BlakeHasher, BlakeRlpCodec}; use patricia_trie::NodeCodec; use hashdb::Hasher; use rlp::Encodable; @@ -50,13 +50,11 @@ impl RemoteCallExecutor { } } -impl CallExecutor for RemoteCallExecutor +impl CallExecutor for RemoteCallExecutor where Block: BlockT, B: ChainBackend, F: Fetcher, - H: Hasher, - C: NodeCodec, { type Error = ClientError; @@ -81,19 +79,19 @@ where } fn call_at_state< - S: StateBackend, - F: FnOnce(Result, Self::Error>, Result, Self::Error>) -> Result, Self::Error> + S: StateBackend, + FF: FnOnce(Result, Self::Error>, Result, Self::Error>) -> Result, Self::Error> >(&self, _state: &S, _changes: &mut OverlayedChanges, _method: &str, _call_data: &[u8], - _m: ExecutionManager + _m: ExecutionManager ) -> ClientResult<(Vec, S::Transaction)> { Err(ClientErrorKind::NotAvailableOnLightClient.into()) } - fn prove_at_state>(&self, _state: S, _changes: &mut OverlayedChanges, _method: &str, _call_data: &[u8]) -> ClientResult<(Vec, Vec>)> { + fn prove_at_state>(&self, _state: S, _changes: &mut OverlayedChanges, _method: &str, _call_data: &[u8]) -> ClientResult<(Vec, Vec>)> { Err(ClientErrorKind::NotAvailableOnLightClient.into()) } @@ -103,7 +101,7 @@ where } /// Check remote execution proof using given backend. -pub fn check_execution_proof( +pub fn check_execution_proof( blockchain: &B, executor: &E, request: &RemoteCallRequest, @@ -113,17 +111,19 @@ pub fn check_execution_proof( Block: BlockT, B: ChainBackend, E: CodeExecutor, + // E: CodeExecutor, H: Hasher, H::Out: Encodable + Ord + From, + C: NodeCodec, { let local_header = blockchain.header(BlockId::Hash(request.block))?; let local_header = local_header.ok_or_else(|| ClientErrorKind::UnknownBlock(format!("{}", request.block)))?; let local_state_root = *local_header.state_root(); - do_check_execution_proof(local_state_root.into(), executor, request, remote_proof) + do_check_execution_proof::<_, E, H, C>(local_state_root.into(), executor, request, remote_proof) } /// Check remote execution proof using given state root. -fn do_check_execution_proof( +fn do_check_execution_proof( local_state_root: Hash, executor: &E, request: &RemoteCallRequest, @@ -132,14 +132,14 @@ fn do_check_execution_proof( where Hash: ::std::fmt::Display + ::std::convert::AsRef<[u8]>, E: CodeExecutor, + // E: CodeExecutor, H: Hasher, H::Out: Encodable + Ord + From, + C: NodeCodec, { let mut changes = OverlayedChanges::default(); - let (local_result, _) = execution_proof_check( - // TrieH256::from_slice(local_state_root.as_ref()).into(), - // H256::from_slice(local_state_root.as_ref()).into(), - // ::Out::from_slice(local_state_root.as_ref()), // TODO: H::Out doesn't know it's a H256 so it can't find the `from_slice` + // let (local_result, _) = execution_proof_check::<_, BlakeRlpCodec, _>( + let (local_result, _) = execution_proof_check::( H256::from_slice(local_state_root.as_ref()).into(), remote_proof, &mut changes, diff --git a/substrate/client/src/light/fetcher.rs b/substrate/client/src/light/fetcher.rs index 8d07196e6a09e..fb59ee4743ead 100644 --- a/substrate/client/src/light/fetcher.rs +++ b/substrate/client/src/light/fetcher.rs @@ -18,7 +18,7 @@ use std::sync::Arc; use futures::IntoFuture; - +use primitives::{BlakeHasher, BlakeRlpCodec}; use runtime_primitives::traits::{Block as BlockT}; use state_machine::CodeExecutor; @@ -26,8 +26,6 @@ use call_executor::CallResult; use error::{Error as ClientError, Result as ClientResult}; use light::blockchain::{Blockchain, Storage as BlockchainStorage}; use light::call_executor::check_execution_proof; -use hashdb::Hasher; -use rlp::Encodable; /// Remote call request. #[derive(Clone, Debug, PartialEq, Eq, Hash)] @@ -77,16 +75,14 @@ impl LightDataChecker { } } -impl FetchChecker for LightDataChecker +impl FetchChecker for LightDataChecker where Block: BlockT, S: BlockchainStorage, - E: CodeExecutor, + E: CodeExecutor, F: Fetcher, - H: Hasher, - H::Out: Encodable + Ord + From, { fn check_execution_proof(&self, request: &RemoteCallRequest, remote_proof: Vec>) -> ClientResult { - check_execution_proof(&*self.blockchain, &self.executor, request, remote_proof) + check_execution_proof::<_, _, _, _, BlakeRlpCodec>(&*self.blockchain, &self.executor, request, remote_proof) } } diff --git a/substrate/state-machine/src/backend.rs b/substrate/state-machine/src/backend.rs index 19dc2639413fd..7999a6c51cc40 100644 --- a/substrate/state-machine/src/backend.rs +++ b/substrate/state-machine/src/backend.rs @@ -78,7 +78,8 @@ impl error::Error for Void { /// In-memory backend. Fully recomputes tries on each commit but useful for /// tests. -#[derive(Clone, PartialEq, Eq)] +// #[derive(Clone, PartialEq, Eq)] +#[derive(PartialEq, Eq)] pub struct InMemory { inner: Arc, Vec>>, _hasher: PhantomData, @@ -95,6 +96,14 @@ impl Default for InMemory { } } +impl Clone for InMemory { + fn clone(&self) -> Self { + InMemory { + inner: self.inner.clone(), _hasher: PhantomData, _codec: PhantomData, + } + } +} + impl> InMemory { /// Copy the state, with applied updates pub fn update(&self, changes: >::Transaction) -> Self { From 277aadd5b7d03ca12c0e55a081b4a4b3fde6403c Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 10:04:23 +0200 Subject: [PATCH 38/97] cleanup --- substrate/client/src/light/call_executor.rs | 3 --- substrate/state-machine/src/backend.rs | 1 - 2 files changed, 4 deletions(-) diff --git a/substrate/client/src/light/call_executor.rs b/substrate/client/src/light/call_executor.rs index f53ca33e6365c..73093642aa94e 100644 --- a/substrate/client/src/light/call_executor.rs +++ b/substrate/client/src/light/call_executor.rs @@ -111,7 +111,6 @@ pub fn check_execution_proof( Block: BlockT, B: ChainBackend, E: CodeExecutor, - // E: CodeExecutor, H: Hasher, H::Out: Encodable + Ord + From, C: NodeCodec, @@ -132,13 +131,11 @@ fn do_check_execution_proof( where Hash: ::std::fmt::Display + ::std::convert::AsRef<[u8]>, E: CodeExecutor, - // E: CodeExecutor, H: Hasher, H::Out: Encodable + Ord + From, C: NodeCodec, { let mut changes = OverlayedChanges::default(); - // let (local_result, _) = execution_proof_check::<_, BlakeRlpCodec, _>( let (local_result, _) = execution_proof_check::( H256::from_slice(local_state_root.as_ref()).into(), remote_proof, diff --git a/substrate/state-machine/src/backend.rs b/substrate/state-machine/src/backend.rs index 7999a6c51cc40..00e7c1681a2a2 100644 --- a/substrate/state-machine/src/backend.rs +++ b/substrate/state-machine/src/backend.rs @@ -78,7 +78,6 @@ impl error::Error for Void { /// In-memory backend. Fully recomputes tries on each commit but useful for /// tests. -// #[derive(Clone, PartialEq, Eq)] #[derive(PartialEq, Eq)] pub struct InMemory { inner: Arc, Vec>>, From 02a302add8aa681fbf1ddf721aa9c8c173c113b3 Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 10:46:19 +0200 Subject: [PATCH 39/97] client tests pass --- Cargo.lock | 1 + substrate/client/src/genesis.rs | 5 +++-- substrate/client/src/light/call_executor.rs | 3 ++- substrate/executor/src/native_executor.rs | 9 +++++---- substrate/state-machine/src/backend.rs | 8 +++++++- substrate/test-client/Cargo.toml | 2 ++ substrate/test-client/src/lib.rs | 7 +++++-- 7 files changed, 25 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 56da12da92605..65a917159d0f4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3240,6 +3240,7 @@ dependencies = [ name = "substrate-test-client" version = "0.1.0" dependencies = [ + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", "rhododendron 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-bft 0.1.0", "substrate-client 0.1.0", diff --git a/substrate/client/src/genesis.rs b/substrate/client/src/genesis.rs index 1062ba92c5043..916a98ccbe8c8 100644 --- a/substrate/client/src/genesis.rs +++ b/substrate/client/src/genesis.rs @@ -51,6 +51,7 @@ mod tests { use test_client::runtime::genesismap::{GenesisConfig, additional_storage_with_genesis}; use test_client::runtime::{Hash, Transfer, Block, BlockNumber, Header, Digest, Extrinsic}; use ed25519::{Public, Pair}; + use primitives::{BlakeHasher, BlakeRlpCodec}; 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")); @@ -58,7 +59,7 @@ mod tests { NativeExecutionDispatch::with_heap_pages(8) } - fn construct_block(backend: &InMemory, number: BlockNumber, parent_hash: Hash, state_root: Hash, txs: Vec) -> (Vec, Hash) { + fn construct_block(backend: &InMemory, number: BlockNumber, parent_hash: Hash, state_root: Hash, txs: Vec) -> (Vec, Hash) { use triehash::ordered_trie_root; let transactions = txs.into_iter().map(|tx| { @@ -115,7 +116,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/client/src/light/call_executor.rs b/substrate/client/src/light/call_executor.rs index 73093642aa94e..84a23c37f88cb 100644 --- a/substrate/client/src/light/call_executor.rs +++ b/substrate/client/src/light/call_executor.rs @@ -166,7 +166,8 @@ mod tests { // check remote execution proof locally let local_executor = test_client::LocalExecutor::with_heap_pages(8); - do_check_execution_proof(remote_block_storage_root.into(), &local_executor, &RemoteCallRequest { + + do_check_execution_proof::<_, _, _, BlakeRlpCodec>(remote_block_storage_root.into(), &local_executor, &RemoteCallRequest { block: test_client::runtime::Hash::default(), method: "authorities".into(), call_data: vec![], diff --git a/substrate/executor/src/native_executor.rs b/substrate/executor/src/native_executor.rs index 320fdb05c2f9c..0d76befb5bb49 100644 --- a/substrate/executor/src/native_executor.rs +++ b/substrate/executor/src/native_executor.rs @@ -25,7 +25,6 @@ use twox_hash::XxHash; use std::hash::Hasher; use parking_lot::{Mutex, MutexGuard}; use RuntimeInfo; -use hashdb; use primitives::BlakeHasher; // For the internal Runtime Cache: @@ -109,7 +108,8 @@ 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. const VERSION: RuntimeVersion; @@ -197,6 +197,8 @@ macro_rules! native_executor_instance { native_executor_instance!(IMPL $name, $dispatcher, $version, $code); }; (IMPL $name:ident, $dispatcher:path, $version:path, $code:expr) => { + // TODO: this is not so great – I think I should go back to have dispatch take a type param and modify this macro to accept a type param and then pass it in from the test-client instead + use primitives::BlakeHasher as _BlakeHasher; impl $crate::NativeExecutionDispatch for $name { const VERSION: $crate::RuntimeVersion = $version; fn native_equivalent() -> &'static [u8] { @@ -204,8 +206,7 @@ macro_rules! native_executor_instance { // get a proper build script, this must be strictly adhered to or things will go wrong. $code } - - fn dispatch(ext: &mut $crate::Externalities, method: &str, data: &[u8]) -> $crate::error::Result> { + fn dispatch(ext: &mut $crate::Externalities<_BlakeHasher>, method: &str, data: &[u8]) -> $crate::error::Result> { $crate::with_native_environment(ext, move || $dispatcher(method, data))? .ok_or_else(|| $crate::error::ErrorKind::MethodNotFound(method.to_owned()).into()) } diff --git a/substrate/state-machine/src/backend.rs b/substrate/state-machine/src/backend.rs index 00e7c1681a2a2..bba4f28ee551f 100644 --- a/substrate/state-machine/src/backend.rs +++ b/substrate/state-machine/src/backend.rs @@ -78,7 +78,7 @@ impl error::Error for Void { /// In-memory backend. Fully recomputes tries on each commit but useful for /// tests. -#[derive(PartialEq, Eq)] +#[derive(Eq)] pub struct InMemory { inner: Arc, Vec>>, _hasher: PhantomData, @@ -103,6 +103,12 @@ impl Clone for InMemory { } } +impl PartialEq for InMemory { + fn eq(&self, other: &Self) -> bool { + self.inner.eq(&other.inner) + } +} + impl> InMemory { /// Copy the state, with applied updates pub fn update(&self, changes: >::Transaction) -> Self { diff --git a/substrate/test-client/Cargo.toml b/substrate/test-client/Cargo.toml index 4897dae974704..b31b8b2d0a7bb 100644 --- a/substrate/test-client/Cargo.toml +++ b/substrate/test-client/Cargo.toml @@ -14,3 +14,5 @@ substrate-primitives = { path = "../primitives" } substrate-runtime-support = { path = "../runtime-support" } substrate-test-runtime = { path = "../test-runtime" } substrate-runtime-primitives = { path = "../runtime/primitives" } +hashdb = { git = "https://github.com/paritytech/parity-common" } + diff --git a/substrate/test-client/src/lib.rs b/substrate/test-client/src/lib.rs index d50b49b3c7101..13750215f98d0 100644 --- a/substrate/test-client/src/lib.rs +++ b/substrate/test-client/src/lib.rs @@ -26,6 +26,7 @@ extern crate substrate_primitives as primitives; extern crate substrate_runtime_support as runtime_support; extern crate substrate_runtime_primitives as runtime_primitives; #[macro_use] extern crate substrate_executor as executor; +extern crate hashdb; pub extern crate substrate_test_runtime as runtime; pub extern crate substrate_client as client; @@ -34,10 +35,12 @@ mod client_ext; pub use client_ext::TestClient; +use primitives::{BlakeHasher, BlakeRlpCodec}; + mod local_executor { #![allow(missing_docs)] use super::runtime; - + // TODO: change the macro and pass in the `BlakeHasher` that dispatch needs from here instead native_executor_instance!(pub LocalExecutor, runtime::api::dispatch, runtime::VERSION, include_bytes!("../../test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm")); } @@ -45,7 +48,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>; From dae069bef7164e5f054279a4578e7797ad9cb5df Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 14:38:36 +0200 Subject: [PATCH 40/97] Fix client/db --- Cargo.lock | 1 - substrate/client/db/Cargo.toml | 2 -- substrate/client/db/src/lib.rs | 43 +++++++++++++++++++------------- substrate/client/db/src/utils.rs | 18 +++++++------ 4 files changed, 35 insertions(+), 29 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 65a917159d0f4..c84546fba282a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2690,7 +2690,6 @@ dependencies = [ "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "memorydb 0.2.1 (git+https://github.com/paritytech/parity-common)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", "substrate-client 0.1.0", "substrate-codec 0.1.0", "substrate-executor 0.1.0", diff --git a/substrate/client/db/Cargo.toml b/substrate/client/db/Cargo.toml index 385b007ec7afc..95af2fd905496 100644 --- a/substrate/client/db/Cargo.toml +++ b/substrate/client/db/Cargo.toml @@ -8,9 +8,7 @@ parking_lot = "0.4" log = "0.3" kvdb = { git = "https://github.com/paritytech/parity-common" } kvdb-rocksdb = { git = "https://github.com/paritytech/parity-common" } -# ethereum-types = "0.3" hashdb = { git = "https://github.com/paritytech/parity-common" } -patricia-trie = { git = "https://github.com/paritytech/parity-common" } memorydb = { git = "https://github.com/paritytech/parity-common" } substrate-primitives = { path = "../../../substrate/primitives" } substrate-runtime-primitives = { path = "../../../substrate/runtime/primitives" } diff --git a/substrate/client/db/src/lib.rs b/substrate/client/db/src/lib.rs index 11aaab78e4ff4..02452a1419eaf 100644 --- a/substrate/client/db/src/lib.rs +++ b/substrate/client/db/src/lib.rs @@ -43,19 +43,21 @@ mod utils; use std::sync::Arc; use std::path::PathBuf; +use std::io; use codec::{Decode, Encode}; +use hashdb::Hasher; use kvdb::{KeyValueDB, DBTransaction}; use memorydb::MemoryDB; use parking_lot::RwLock; -use primitives::{H256, AuthorityId}; +use primitives::{H256, AuthorityId, BlakeHasher, BlakeRlpCodec}; use runtime_primitives::generic::BlockId; use runtime_primitives::bft::Justification; use runtime_primitives::traits::{Block as BlockT, Header as HeaderT, As, Hash, HashFor, NumberFor, Zero}; use runtime_primitives::BuildStorage; use state_machine::backend::Backend as StateBackend; use executor::RuntimeInfo; -use state_machine::{CodeExecutor, TrieH256, DBValue, ExecutionStrategy}; +use state_machine::{CodeExecutor, DBValue, ExecutionStrategy}; use utils::{Meta, db_err, meta_keys, number_to_db_key, open_database, read_db, read_id, read_meta}; use state_db::StateDb; pub use state_db::PruningMode; @@ -63,7 +65,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; +pub type DbState = state_machine::TrieBackend; /// Database settings. pub struct DatabaseSettings { @@ -84,7 +86,7 @@ pub fn new_client( ) -> Result, client::LocalCallExecutor, E>, Block>, client::error::Error> where Block: BlockT, - E: CodeExecutor + RuntimeInfo, + E: CodeExecutor + RuntimeInfo, S: BuildStorage, { let backend = Arc::new(Backend::new(settings, FINALIZATION_WINDOW)?); @@ -113,7 +115,7 @@ struct PendingBlock { struct StateMetaDb<'a>(&'a KeyValueDB); impl<'a> state_db::MetaDb for StateMetaDb<'a> { - type Error = kvdb::Error; + type Error = io::Error; // REVIEW: `kvdb::Error` is gone (https://github.com/paritytech/parity-ethereum/pull/8924/files#diff-ead7c616cf8709a265c3297ad8dbfccdL36) and replaced with `io:Error` in other places – is that ok here too? fn get_meta(&self, key: &[u8]) -> Result>, Self::Error> { self.0.get(columns::STATE_META, key).map(|r| r.map(|v| v.to_vec())) @@ -212,13 +214,16 @@ impl client::blockchain::Backend for BlockchainDb { } /// Database transaction -pub struct BlockImportOperation { +pub struct BlockImportOperation { old_state: DbState, - updates: MemoryDB, + updates: MemoryDB, pending_block: Option>, } -impl client::backend::BlockImportOperation for BlockImportOperation { +impl client::backend::BlockImportOperation +for BlockImportOperation +where Block: BlockT, +{ type State = DbState; fn state(&self) -> Result, client::error::Error> { @@ -240,7 +245,7 @@ impl client::backend::BlockImportOperation for BlockImport // currently authorities are not cached on full nodes } - fn update_storage(&mut self, update: MemoryDB) -> Result<(), client::error::Error> { + fn update_storage(&mut self, update: MemoryDB) -> Result<(), client::error::Error> { self.updates = update; Ok(()) } @@ -258,15 +263,15 @@ struct StorageDb { pub state_db: StateDb, } -impl state_machine::Storage for StorageDb { - fn get(&self, key: &TrieH256) -> Result, String> { +impl state_machine::Storage for StorageDb { + fn get(&self, key: &H256) -> Result, String> { self.state_db.get(&key.0.into(), self).map(|r| r.map(|v| DBValue::from_slice(&v))) .map_err(|e| format!("Database backend error: {:?}", e)) } } impl state_db::HashDb for StorageDb { - type Error = kvdb::Error; + type Error = io::Error; // REVIEW: `kvdb::Error` was removed (see above) type Hash = H256; fn get(&self, key: &H256) -> Result>, Self::Error> { @@ -302,7 +307,8 @@ impl Backend { fn from_kvdb(db: Arc, pruning: PruningMode, finalization_window: u64) -> Result { let blockchain = BlockchainDb::new(db.clone())?; - let map_e = |e: state_db::Error| ::client::error::Error::from(format!("State database error: {:?}", e)); + let map_e = |e: state_db::Error| ::client::error::Error::from(format!("State database error: {:?}", e)); + // let map_e = |e: state_db::Error| ::client::error::Error::from(format!("State database error: {:?}", e)); let state_db: StateDb = StateDb::new(pruning, &StateMetaDb(&*db)).map_err(map_e)?; let storage_db = StorageDb { db, @@ -332,8 +338,8 @@ fn apply_state_commit(transaction: &mut DBTransaction, commit: state_db::CommitS } } -impl client::backend::Backend for Backend { - type BlockImportOperation = BlockImportOperation; +impl client::backend::Backend for Backend where Block: BlockT { + type BlockImportOperation = BlockImportOperation; type Blockchain = BlockchainDb; type State = DbState; @@ -447,14 +453,15 @@ impl client::backend::Backend for Backend { } self.blockchain.header(block).and_then(|maybe_hdr| maybe_hdr.map(|hdr| { - let root: TrieH256 = TrieH256::from_slice(hdr.state_root().as_ref()); + // let root: TrieH256 = TrieH256::from_slice(hdr.state_root().as_ref()); + let root: H256 = H256::from_slice(hdr.state_root().as_ref()); DbState::with_storage(self.storage.clone(), root) }).ok_or_else(|| client::error::ErrorKind::UnknownBlock(format!("{:?}", block)).into())) } } -impl client::backend::LocalBackend for Backend -{} +impl client::backend::LocalBackend for Backend +where Block: BlockT {} #[cfg(test)] mod tests { diff --git a/substrate/client/db/src/utils.rs b/substrate/client/db/src/utils.rs index 75c86ae06e151..17cd441486a6a 100644 --- a/substrate/client/db/src/utils.rs +++ b/substrate/client/db/src/utils.rs @@ -18,8 +18,9 @@ //! full and light storages. use std::sync::Arc; +use std::io; -use kvdb::{self, KeyValueDB, DBTransaction}; +use kvdb::{KeyValueDB, DBTransaction}; use kvdb_rocksdb::{Database, DatabaseConfig}; use client; @@ -83,20 +84,21 @@ pub fn db_key_to_number(key: &[u8]) -> client::error::Result where N: As client::error::Error { +pub fn db_err(err: io::Error) -> client::error::Error { use std::error::Error; - match err.kind() { - &kvdb::ErrorKind::Io(ref err) => client::error::ErrorKind::Backend(err.description().into()).into(), - &kvdb::ErrorKind::Msg(ref m) => client::error::ErrorKind::Backend(m.clone()).into(), - _ => client::error::ErrorKind::Backend("Unknown backend error".into()).into(), - } + // REVIEW: not sure what value the `Io`/`Msg` kinds had or what we want to do here + client::error::ErrorKind::Backend(err.description().into()).into() + // match err.kind() { + // &kvdb::ErrorKind::Io(ref err) => client::error::ErrorKind::Backend(err.description().into()).into(), + // &kvdb::ErrorKind::Msg(ref m) => client::error::ErrorKind::Backend(m.clone()).into(), + // _ => client::error::ErrorKind::Backend("Unknown backend error".into()).into(), + // } } /// Open RocksDB database. pub fn open_database(config: &DatabaseSettings, db_type: &str) -> client::error::Result> { let mut db_config = DatabaseConfig::with_columns(Some(NUM_COLUMNS)); db_config.memory_budget = config.cache_size; - db_config.wal = true; let path = config.path.to_str().ok_or_else(|| client::error::ErrorKind::Backend("Invalid database path".into()))?; let db = Database::open(&db_config, &path).map_err(db_err)?; From 7a93cf74f7b174419d606c8cd699ff08b7d4504f Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 15:09:53 +0200 Subject: [PATCH 41/97] cleanup --- substrate/client/db/src/lib.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/substrate/client/db/src/lib.rs b/substrate/client/db/src/lib.rs index 02452a1419eaf..20b31d1484840 100644 --- a/substrate/client/db/src/lib.rs +++ b/substrate/client/db/src/lib.rs @@ -453,7 +453,6 @@ impl client::backend::Backend for Back } self.blockchain.header(block).and_then(|maybe_hdr| maybe_hdr.map(|hdr| { - // let root: TrieH256 = TrieH256::from_slice(hdr.state_root().as_ref()); let root: H256 = H256::from_slice(hdr.state_root().as_ref()); DbState::with_storage(self.storage.clone(), root) }).ok_or_else(|| client::error::ErrorKind::UnknownBlock(format!("{:?}", block)).into())) From 6329abb4ae24d2ad60a245c6c0d7e5e1cf374da4 Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 15:10:08 +0200 Subject: [PATCH 42/97] Fix network --- substrate/network/src/chain.rs | 5 +++-- substrate/network/src/test/mod.rs | 5 ++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/substrate/network/src/chain.rs b/substrate/network/src/chain.rs index f20b7e2b5e688..e5e92590bd8d9 100644 --- a/substrate/network/src/chain.rs +++ b/substrate/network/src/chain.rs @@ -21,6 +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::{BlakeHasher, BlakeRlpCodec}; /// Local client abstraction for the network. pub trait Client: Send + Sync { @@ -50,8 +51,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(&self, origin: BlockOrigin, header: Block::Header, justification: Justification, body: Option>) -> Result { diff --git a/substrate/network/src/test/mod.rs b/substrate/network/src/test/mod.rs index 5a8d82d448398..1652c8f17abc1 100644 --- a/substrate/network/src/test/mod.rs +++ b/substrate/network/src/test/mod.rs @@ -26,6 +26,7 @@ use runtime_primitives::traits::Block as BlockT; use runtime_primitives::generic::BlockId; use io::SyncIo; use protocol::{Context, Protocol}; +use primitives::{BlakeHasher, BlakeRlpCodec}; use config::ProtocolConfig; use service::TransactionPool; use network_libp2p::{NodeIndex, SessionInfo, Severity}; @@ -172,7 +173,9 @@ 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(); edit_block(&mut builder); From dc7fc67f00b564eeed35e9974c988e91c9ad8ddf Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 15:11:06 +0200 Subject: [PATCH 43/97] Fix rpc --- substrate/rpc/src/author/mod.rs | 6 +++--- substrate/rpc/src/chain/mod.rs | 5 +++-- substrate/rpc/src/state/mod.rs | 5 +++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/substrate/rpc/src/author/mod.rs b/substrate/rpc/src/author/mod.rs index 9077abdc3ffd8..a654aea5eb97c 100644 --- a/substrate/rpc/src/author/mod.rs +++ b/substrate/rpc/src/author/mod.rs @@ -26,7 +26,7 @@ use extrinsic_pool::{ }; use jsonrpc_macros::pubsub; use jsonrpc_pubsub::SubscriptionId; -use primitives::Bytes; +use primitives::{Bytes, BlakeHasher, BlakeRlpCodec}; use rpc::futures::{Sink, Stream, Future}; use runtime_primitives::{generic, traits}; use subscriptions::Subscriptions; @@ -86,8 +86,8 @@ impl Author { } impl AuthorApi for Author where - 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, Block: traits::Block + 'static, Hash: traits::MaybeSerializeDebug + Sync + Send + 'static, P: ExtrinsicPool, Hash>, diff --git a/substrate/rpc/src/chain/mod.rs b/substrate/rpc/src/chain/mod.rs index a7a8e8c0e046a..a6f45eb20c6bc 100644 --- a/substrate/rpc/src/chain/mod.rs +++ b/substrate/rpc/src/chain/mod.rs @@ -26,6 +26,7 @@ use rpc::futures::{Future, Sink, Stream}; use runtime_primitives::generic::BlockId; use runtime_primitives::traits::Block as BlockT; use tokio::runtime::TaskExecutor; +use primitives::{BlakeHasher, BlakeRlpCodec}; use subscriptions::Subscriptions; @@ -80,8 +81,8 @@ impl Chain { impl ChainApi 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/rpc/src/state/mod.rs b/substrate/rpc/src/state/mod.rs index 6cf6907712f97..aaa3db31361b4 100644 --- a/substrate/rpc/src/state/mod.rs +++ b/substrate/rpc/src/state/mod.rs @@ -24,6 +24,7 @@ use jsonrpc_macros::pubsub; use jsonrpc_pubsub::SubscriptionId; use primitives::hexdisplay::HexDisplay; use primitives::storage::{StorageKey, StorageData, StorageChangeSet}; +use primitives::{BlakeHasher, BlakeRlpCodec}; use rpc::Result as RpcResult; use rpc::futures::{Future, Sink, Stream}; use runtime_primitives::generic::BlockId; @@ -107,8 +108,8 @@ impl State { 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; From d7c09357027b9e6748264b2e3e12b703be6eced5 Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 15:12:07 +0200 Subject: [PATCH 44/97] Fix service --- substrate/service/src/components.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/substrate/service/src/components.rs b/substrate/service/src/components.rs index fd96dc7c31688..719b5cc42db2a 100644 --- a/substrate/service/src/components.rs +++ b/substrate/service/src/components.rs @@ -28,6 +28,7 @@ use substrate_executor::{NativeExecutor, NativeExecutionDispatch}; use extrinsic_pool::{txpool::Options as ExtrinsicPoolOptions, api::ExtrinsicPool as ExtrinsicPoolApi}; use runtime_primitives::{traits::Block as BlockT, traits::Header as HeaderT, generic::BlockId, BuildStorage}; use config::Configuration; +use primitives::{BlakeHasher, BlakeRlpCodec}; // Type aliases. // These exist mainly to avoid typing `::Foo` all over the code. @@ -152,9 +153,9 @@ pub trait Components { /// Associated service factory. type Factory: ServiceFactory; /// Client backend. - type Backend: 'static + client::backend::Backend>; + type Backend: 'static + client::backend::Backend, BlakeHasher, BlakeRlpCodec>; /// Client executor. - type Executor: 'static + client::CallExecutor> + Send + Sync; + type Executor: 'static + client::CallExecutor, BlakeHasher, BlakeRlpCodec> + Send + Sync; /// Extrinsic pool type. type ExtrinsicPool: ExtrinsicPool>; From a553f31ba331c1a8dd1b7c56ada39f7c6206a440 Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 16:29:33 +0200 Subject: [PATCH 45/97] Make TestExternalities work better au lieu d'un HashMap --- substrate/state-machine/src/testing.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/substrate/state-machine/src/testing.rs b/substrate/state-machine/src/testing.rs index 07a9950e6b7cb..d124f60921e2c 100644 --- a/substrate/state-machine/src/testing.rs +++ b/substrate/state-machine/src/testing.rs @@ -37,6 +37,10 @@ impl TestExternalities { pub fn new() -> Self { TestExternalities {inner: HashMap::new(), _hasher: PhantomData} } + /// Insert key/value + pub fn insert(&mut self, k: Vec, v: Vec) -> Option> { + self.inner.insert(k, v) + } } impl PartialEq for TestExternalities { @@ -59,6 +63,19 @@ impl Default for TestExternalities { fn default() -> Self { Self::new() } } +impl From> for HashMap, Vec> { + fn from(tex: TestExternalities) -> Self { + tex.inner.into() + } +} + +impl From< HashMap, Vec> > for TestExternalities { + fn from(hashmap: HashMap, Vec>) -> Self { + TestExternalities { inner: hashmap, _hasher: PhantomData } + } +} + + impl Externalities for TestExternalities where H::Out: Ord + Encodable { fn storage(&self, key: &[u8]) -> Option> { self.inner.get(key).map(|x| x.to_vec()) From 9bfe799c0d4517ec13f0913da0700bf5f4c145a4 Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 16:50:19 +0200 Subject: [PATCH 46/97] Fix tests in council --- substrate/runtime/council/src/lib.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/substrate/runtime/council/src/lib.rs b/substrate/runtime/council/src/lib.rs index 56d87ea59bff5..798020df02e13 100644 --- a/substrate/runtime/council/src/lib.rs +++ b/substrate/runtime/council/src/lib.rs @@ -46,6 +46,8 @@ use primitives::traits::{Zero, One, RefInto, As, AuxLookup}; use substrate_runtime_support::{StorageValue, StorageMap}; use substrate_runtime_support::dispatch::Result; use staking::address::Address; +#[cfg(any(feature = "std", test))] +use std::collections::HashMap; pub mod voting; @@ -590,7 +592,7 @@ impl Default for GenesisConfig { #[cfg(any(feature = "std", test))] impl primitives::BuildStorage for GenesisConfig { - fn build_storage(self) -> ::std::result::Result { + fn build_storage(self) -> ::std::result::Result, Vec>, String> { use codec::Encode; Ok(map![ @@ -620,6 +622,7 @@ mod tests { use primitives::BuildStorage; use primitives::traits::{HasPublicAux, Identity, BlakeTwo256}; use primitives::testing::{Digest, Header}; + use substrate_primitives::BlakeHasher; impl_outer_dispatch! { #[derive(Debug, Clone, Eq, Serialize, Deserialize, PartialEq)] @@ -666,7 +669,7 @@ mod tests { } impl Trait for Test {} - 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(consensus::GenesisConfig::{ code: vec![], @@ -717,7 +720,7 @@ mod tests { voting_period: 1, }.build_storage().unwrap()); t.extend(timestamp::GenesisConfig::::default().build_storage().unwrap()); - t + t.into() } pub type System = system::Module; @@ -783,7 +786,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]); From e4cefb356e15542a133ff4b218c4f22662ff34d7 Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 16:50:43 +0200 Subject: [PATCH 47/97] Fix tests in contract --- substrate/runtime/contract/Cargo.toml | 1 + substrate/runtime/contract/src/genesis_config.rs | 8 +++++--- substrate/runtime/contract/src/lib.rs | 1 + substrate/runtime/contract/src/tests.rs | 5 +++-- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/substrate/runtime/contract/Cargo.toml b/substrate/runtime/contract/Cargo.toml index 23291d4d67e48..0658425c06cb4 100644 --- a/substrate/runtime/contract/Cargo.toml +++ b/substrate/runtime/contract/Cargo.toml @@ -7,6 +7,7 @@ authors = ["Parity Technologies "] serde = { version = "1.0", default_features = false } serde_derive = { version = "1.0", optional = true } substrate-codec = { path = "../../codec", default_features = false } +substrate-primitives = { path = "../../primitives" } substrate-runtime-consensus = { path = "../../runtime/consensus", default_features = false } substrate-runtime-primitives = { path = "../../runtime/primitives" } substrate-runtime-io = { path = "../../runtime-io", default_features = false } diff --git a/substrate/runtime/contract/src/genesis_config.rs b/substrate/runtime/contract/src/genesis_config.rs index d841f22806a6a..c99532739e856 100644 --- a/substrate/runtime/contract/src/genesis_config.rs +++ b/substrate/runtime/contract/src/genesis_config.rs @@ -22,6 +22,8 @@ use runtime_primitives; use runtime_io::{self, twox_128}; use runtime_support::StorageValue; use codec::Encode; +use std::collections::HashMap; +use substrate_primitives::BlakeHasher; #[derive(Serialize, Deserialize)] #[serde(rename_all = "camelCase")] @@ -35,14 +37,14 @@ pub struct GenesisConfig { } impl runtime_primitives::BuildStorage for GenesisConfig { - fn build_storage(self) -> Result { - let r: runtime_io::TestExternalities = map![ + fn build_storage(self) -> ::std::result::Result, Vec>, String> { + let r: runtime_io::TestExternalities = map![ twox_128(>::key()).to_vec() => self.contract_fee.encode(), twox_128(>::key()).to_vec() => self.call_base_fee.encode(), twox_128(>::key()).to_vec() => self.create_base_fee.encode(), twox_128(>::key()).to_vec() => self.gas_price.encode(), twox_128(>::key()).to_vec() => self.max_depth.encode() ]; - Ok(r) + Ok(r.into()) } } diff --git a/substrate/runtime/contract/src/lib.rs b/substrate/runtime/contract/src/lib.rs index 123574b27c0ac..6761c03442bc6 100644 --- a/substrate/runtime/contract/src/lib.rs +++ b/substrate/runtime/contract/src/lib.rs @@ -65,6 +65,7 @@ extern crate substrate_runtime_session as session; extern crate substrate_runtime_support as runtime_support; extern crate substrate_runtime_primitives as runtime_primitives; +extern crate substrate_primitives; #[cfg(test)] #[macro_use] diff --git a/substrate/runtime/contract/src/tests.rs b/substrate/runtime/contract/src/tests.rs index 503fb780c3010..6e755779378d8 100644 --- a/substrate/runtime/contract/src/tests.rs +++ b/substrate/runtime/contract/src/tests.rs @@ -20,6 +20,7 @@ use runtime_primitives::testing::{Digest, H256, Header}; use runtime_primitives::traits::{BlakeTwo256, HasPublicAux, Identity}; use runtime_primitives::BuildStorage; use runtime_support::StorageMap; +use substrate_primitives::BlakeHasher; use wabt; use { consensus, runtime_io, session, staking, system, timestamp, CodeOf, ContractAddressFor, @@ -72,7 +73,7 @@ impl ContractAddressFor for DummyContractAddressFor { } } -fn new_test_ext(existential_deposit: u64, gas_price: u64) -> runtime_io::TestExternalities { +fn new_test_ext(existential_deposit: u64, gas_price: u64) -> runtime_io::TestExternalities { let mut t = system::GenesisConfig::::default() .build_storage() .unwrap(); @@ -125,7 +126,7 @@ fn new_test_ext(existential_deposit: u64, gas_price: u64) -> runtime_io::TestExt }.build_storage() .unwrap(), ); - t + t.into() } const CODE_TRANSFER: &str = r#" From 627711003f091866b22052acfbcd6e6c9d3b9823 Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 16:51:10 +0200 Subject: [PATCH 48/97] Fix tests in council --- substrate/runtime/consensus/src/lib.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/substrate/runtime/consensus/src/lib.rs b/substrate/runtime/consensus/src/lib.rs index 13d40afe5eab1..c6bc48a438a67 100644 --- a/substrate/runtime/consensus/src/lib.rs +++ b/substrate/runtime/consensus/src/lib.rs @@ -45,6 +45,11 @@ use runtime_support::storage::unhashed::StorageVec; use primitives::traits::{RefInto, MaybeSerializeDebug, MaybeEmpty}; use primitives::bft::MisbehaviorReport; +#[cfg(any(feature = "std", test))] +use substrate_primitives::BlakeHasher; +#[cfg(any(feature = "std", test))] +use std::collections::HashMap; + pub const AUTHORITY_AT: &'static [u8] = b":auth:"; pub const AUTHORITY_COUNT: &'static [u8] = b":auth:len"; @@ -146,14 +151,14 @@ impl Default for GenesisConfig { #[cfg(any(feature = "std", test))] impl primitives::BuildStorage for GenesisConfig { - fn build_storage(self) -> ::std::result::Result { + fn build_storage(self) -> ::std::result::Result, Vec>, String> { use codec::{Encode, KeyedVec}; let auth_count = self.authorities.len() as u32; - let mut r: runtime_io::TestExternalities = self.authorities.into_iter().enumerate().map(|(i, v)| + let mut r: runtime_io::TestExternalities = self.authorities.into_iter().enumerate().map(|(i, v)| ((i as u32).to_keyed_vec(AUTHORITY_AT), v.encode()) ).collect(); r.insert(AUTHORITY_COUNT.to_vec(), auth_count.encode()); r.insert(CODE.to_vec(), self.code); - Ok(r) + Ok(r.into()) } } From adc13a24c005c7ca8563d3c999c69c0289475083 Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 16:53:17 +0200 Subject: [PATCH 49/97] Fix democracy --- substrate/runtime/democracy/src/lib.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/substrate/runtime/democracy/src/lib.rs b/substrate/runtime/democracy/src/lib.rs index 9f9c00d056ab5..34b35b06c5e0a 100644 --- a/substrate/runtime/democracy/src/lib.rs +++ b/substrate/runtime/democracy/src/lib.rs @@ -50,6 +50,9 @@ use primitives::traits::{Zero, Executable, RefInto, As, MaybeSerializeDebug}; use substrate_runtime_support::{StorageValue, StorageMap, Parameter, Dispatchable, IsSubType}; use substrate_runtime_support::dispatch::Result; +#[cfg(any(feature = "std", test))] +use std::collections::HashMap; + mod vote_threshold; pub use vote_threshold::{Approved, VoteThreshold}; @@ -338,7 +341,7 @@ impl Default for GenesisConfig { #[cfg(any(feature = "std", test))] impl primitives::BuildStorage for GenesisConfig { - fn build_storage(self) -> ::std::result::Result { + fn build_storage(self) -> ::std::result::Result, Vec>, String> { use codec::Encode; Ok(map![ @@ -356,7 +359,7 @@ impl primitives::BuildStorage for GenesisConfig mod tests { use super::*; use runtime_io::with_externalities; - use substrate_primitives::H256; + use substrate_primitives::{H256, BlakeHasher}; use primitives::BuildStorage; use primitives::traits::{HasPublicAux, Identity, BlakeTwo256}; use primitives::testing::{Digest, Header}; @@ -407,7 +410,7 @@ mod tests { type Proposal = Proposal; } - 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![], @@ -440,7 +443,7 @@ mod tests { minimum_deposit: 1, }.build_storage().unwrap()); t.extend(timestamp::GenesisConfig::::default().build_storage().unwrap()); - t + t.into() } type System = system::Module; From 252bbd8b545eeac65e4507fa0fb9054a705a92d2 Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 17:21:45 +0200 Subject: [PATCH 50/97] Add comment about odd-looking reexports in tests --- substrate/runtime/council/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/substrate/runtime/council/src/lib.rs b/substrate/runtime/council/src/lib.rs index 798020df02e13..fb6cf6b6bb8c9 100644 --- a/substrate/runtime/council/src/lib.rs +++ b/substrate/runtime/council/src/lib.rs @@ -616,6 +616,7 @@ impl primitives::BuildStorage for GenesisConfig #[cfg(test)] mod tests { + // These `pub` are here for a reason, edit with care pub use super::*; pub use runtime_io::with_externalities; pub use substrate_primitives::H256; From c94018c04b2c735c6c54727d7da12e0d136edbf8 Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 17:25:08 +0200 Subject: [PATCH 51/97] Don't need to load branch --- substrate/primitives/Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/substrate/primitives/Cargo.toml b/substrate/primitives/Cargo.toml index 93b2f30b87a66..e6f8e41d92b54 100644 --- a/substrate/primitives/Cargo.toml +++ b/substrate/primitives/Cargo.toml @@ -9,12 +9,12 @@ substrate-runtime-std = { path = "../runtime-std", default_features = false } substrate-codec = { path = "../codec", default_features = false } elastic-array = "0.10" # TODO: I think we can go back to `default_features = false` when we have a proper impl of `Hasher` to use -fixed-hash = { git = "https://github.com/paritytech/parity-common", branch = "add-fixed-hash", features = ["heapsizeof"] } +fixed-hash = { git = "https://github.com/paritytech/parity-common", features = ["heapsizeof"] } rustc-hex = { version = "2.0", default_features = false } serde = { version = "1.0", default_features = false } serde_derive = { version = "1.0", optional = true } # TODO: Used to fetch `uint` from "https://github.com/rphmeier/primitives.git" – what was `compile-for-wasm` adding? -uint = { git = "https://github.com/paritytech/parity-common", branch = "add-fixed-hash", default_features = false } +uint = { git = "https://github.com/paritytech/parity-common", default_features = false } rlp = { git = "https://github.com/paritytech/parity-common" } twox-hash = { version = "1.1.0", optional = true } byteorder = { version = "1.1", default_features = false } From c49609db0440278de9c2c877cdb3d3096f463d58 Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 17:26:24 +0200 Subject: [PATCH 52/97] Fix staking --- substrate/runtime/staking/src/genesis_config.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/substrate/runtime/staking/src/genesis_config.rs b/substrate/runtime/staking/src/genesis_config.rs index 2987725b7a235..f25b749105ffc 100644 --- a/substrate/runtime/staking/src/genesis_config.rs +++ b/substrate/runtime/staking/src/genesis_config.rs @@ -18,10 +18,12 @@ #![cfg(feature = "std")] +use std::collections::HashMap; use rstd::prelude::*; use codec::Encode; use runtime_support::{StorageValue, StorageMap}; use primitives::traits::{Zero, As}; +use substrate_primitives::BlakeHasher; use {runtime_io, primitives}; use super::{Trait, ENUM_SET_SIZE, EnumSet, NextEnumSet, Intentions, CurrentEra, BondingDuration, CreationFee, TransferFee, ReclaimRebate, @@ -118,10 +120,10 @@ impl Default for GenesisConfig { } impl primitives::BuildStorage for GenesisConfig { - fn build_storage(self) -> Result { + fn build_storage(self) -> ::std::result::Result, Vec>, String> { let total_stake: T::Balance = self.balances.iter().fold(Zero::zero(), |acc, &(_, n)| acc + n); - let mut r: runtime_io::TestExternalities = map![ + let mut r: runtime_io::TestExternalities = map![ Self::hash(>::key()).to_vec() => T::AccountIndex::sa(self.balances.len() / ENUM_SET_SIZE).encode(), Self::hash(>::key()).to_vec() => self.intentions.encode(), Self::hash(>::key()).to_vec() => self.sessions_per_era.encode(), @@ -147,6 +149,6 @@ impl primitives::BuildStorage for GenesisConfig { for (who, value) in self.balances.into_iter() { r.insert(Self::hash(&>::key_for(who)).to_vec(), value.encode()); } - Ok(r) + Ok(r.into()) } } From 0fb6dc11f25139270562bac0e9360de99a5093fc Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 17:27:46 +0200 Subject: [PATCH 53/97] Fix session --- substrate/runtime/session/src/lib.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/substrate/runtime/session/src/lib.rs b/substrate/runtime/session/src/lib.rs index 8e53428de63a0..cc0ef3da66451 100644 --- a/substrate/runtime/session/src/lib.rs +++ b/substrate/runtime/session/src/lib.rs @@ -50,6 +50,9 @@ use primitives::traits::{Zero, One, RefInto, Executable, Convert, As}; use runtime_support::{StorageValue, StorageMap}; use runtime_support::dispatch::Result; +#[cfg(any(feature = "std", test))] +use std::collections::HashMap; + /// A session has changed. pub trait OnSessionChange { /// Session has changed. @@ -256,7 +259,8 @@ impl Default for GenesisConfig { #[cfg(any(feature = "std", test))] impl primitives::BuildStorage for GenesisConfig { - fn build_storage(self) -> ::std::result::Result { + fn build_storage(self) -> ::std::result::Result, Vec>, String> { + use codec::Encode; use primitives::traits::As; Ok(map![ @@ -350,7 +354,7 @@ mod tests { assert_eq!(Session::ideal_session_duration(), 15); // ideal end = 0 + 15 * 3 = 15 // broken_limit = 15 * 130 / 100 = 19 - + System::set_block_number(3); assert_eq!(Session::blocks_remaining(), 2); Timestamp::set_timestamp(9); // earliest end = 9 + 2 * 5 = 19; OK. @@ -378,7 +382,7 @@ mod tests { assert_eq!(Session::blocks_remaining(), 0); Session::check_rotate_session(); assert_eq!(Session::length(), 10); - + System::set_block_number(7); assert_eq!(Session::current_index(), 1); assert_eq!(Session::blocks_remaining(), 5); From 6ebfc7fe6cd477ee1e834ce6084ec8ed30f2ad71 Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 17:28:33 +0200 Subject: [PATCH 54/97] Some polkadot fixes and lockfile --- Cargo.lock | 44 ++++++++++++++++-------------- polkadot/executor/Cargo.toml | 1 + polkadot/executor/src/lib.rs | 1 + polkadot/runtime/src/parachains.rs | 10 ++++--- 4 files changed, 32 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c84546fba282a..98624a93c4180 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -696,7 +696,7 @@ dependencies = [ "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)", "mem 0.1.0 (git+https://github.com/paritytech/parity)", - "parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common.git)", + "parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common)", "parity-wordlist 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -747,7 +747,7 @@ dependencies = [ [[package]] name = "fixed-hash" version = "0.2.2" -source = "git+https://github.com/paritytech/parity-common?branch=add-fixed-hash#b0cf5d1cf5bf0d284fae8e724df00fcb52673542" +source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", @@ -843,7 +843,7 @@ dependencies = [ [[package]] name = "hashdb" version = "0.2.0" -source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" +source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1074,7 +1074,7 @@ dependencies = [ [[package]] name = "kvdb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" +source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common)", @@ -1083,7 +1083,7 @@ dependencies = [ [[package]] name = "kvdb-memorydb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" +source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common)", "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1092,7 +1092,7 @@ dependencies = [ [[package]] name = "kvdb-rocksdb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" +source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1483,7 +1483,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "memorydb" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" +source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", @@ -1693,12 +1693,12 @@ dependencies = [ [[package]] name = "parity-bytes" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" +source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" [[package]] name = "parity-crypto" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common.git#0045887fecd2fec39e56c962a0b27e2caf3b9474" +source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1766,7 +1766,7 @@ dependencies = [ [[package]] name = "patricia-trie" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" +source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", @@ -1789,7 +1789,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "plain_hasher" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" +source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1907,6 +1907,7 @@ version = "0.1.0" dependencies = [ "polkadot-runtime 0.1.0", "substrate-executor 0.1.0", + "substrate-primitives 0.1.0", ] [[package]] @@ -2281,7 +2282,7 @@ dependencies = [ [[package]] name = "rlp" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" +source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2764,7 +2765,7 @@ dependencies = [ "ed25519 0.1.0", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common.git)", + "parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common)", "rand 0.4.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)", @@ -2842,7 +2843,7 @@ dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "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 (git+https://github.com/paritytech/parity-common?branch=add-fixed-hash)", + "fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common)", "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", @@ -2856,7 +2857,7 @@ dependencies = [ "substrate-runtime-std 0.1.0", "substrate-serializer 0.1.0", "twox-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "uint 0.2.2 (git+https://github.com/paritytech/parity-common?branch=add-fixed-hash)", + "uint 0.2.2 (git+https://github.com/paritytech/parity-common)", "wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2921,6 +2922,7 @@ dependencies = [ "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)", "substrate-codec 0.1.0", + "substrate-primitives 0.1.0", "substrate-runtime-consensus 0.1.0", "substrate-runtime-io 0.1.0", "substrate-runtime-primitives 0.1.0", @@ -3019,6 +3021,7 @@ dependencies = [ name = "substrate-runtime-primitives" version = "0.1.0" dependencies = [ + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", "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)", @@ -3030,6 +3033,7 @@ dependencies = [ "substrate-runtime-io 0.1.0", "substrate-runtime-std 0.1.0", "substrate-runtime-support 0.1.0", + "substrate-state-machine 0.1.0", ] [[package]] @@ -3603,7 +3607,7 @@ dependencies = [ [[package]] name = "triehash" version = "0.2.0" -source = "git+https://github.com/paritytech/parity-common#0045887fecd2fec39e56c962a0b27e2caf3b9474" +source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3653,7 +3657,7 @@ dependencies = [ [[package]] name = "uint" version = "0.2.2" -source = "git+https://github.com/paritytech/parity-common?branch=add-fixed-hash#b0cf5d1cf5bf0d284fae8e724df00fcb52673542" +source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3983,7 +3987,7 @@ dependencies = [ "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.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18d6fd718fb4396e7a9c93ac59ba7143501467ca7a143c145b5555a571d5576" -"checksum fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common?branch=add-fixed-hash)" = "" +"checksum fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common)" = "" "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" @@ -4077,7 +4081,7 @@ dependencies = [ "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 (git+https://github.com/paritytech/parity-common)" = "" -"checksum parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common.git)" = "" +"checksum parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum parity-wasm 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e1c91199d14bd5b78ecade323d4a891d094799749c1b9e82d9c590c2e2849a40" "checksum parity-wordlist 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d0dec124478845b142f68b446cbee953d14d4b41f1bc0425024417720dce693" "checksum parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e" @@ -4196,7 +4200,7 @@ dependencies = [ "checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" "checksum ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd2be2d6639d0f8fe6cdda291ad456e23629558d466e2789d2c3e9892bda285d" "checksum uint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "38051a96565903d81c9a9210ce11076b2218f3b352926baa1f5f6abbdfce8273" -"checksum uint 0.2.2 (git+https://github.com/paritytech/parity-common?branch=add-fixed-hash)" = "" +"checksum uint 0.2.2 (git+https://github.com/paritytech/parity-common)" = "" "checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" "checksum unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "284b6d3db520d67fbe88fd778c21510d1b0ba4a551e5d0fbb023d33405f6de8a" "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" diff --git a/polkadot/executor/Cargo.toml b/polkadot/executor/Cargo.toml index e7cfc5b77203d..3e62a0ce23b64 100644 --- a/polkadot/executor/Cargo.toml +++ b/polkadot/executor/Cargo.toml @@ -6,4 +6,5 @@ description = "Polkadot node implementation in Rust." [dependencies] substrate-executor = { path = "../../substrate/executor" } +substrate-primitives = { path = "../../substrate/primitives" } polkadot-runtime = { path = "../runtime" } diff --git a/polkadot/executor/src/lib.rs b/polkadot/executor/src/lib.rs index 82cd5cd47851c..f8fc6a238b6b8 100644 --- a/polkadot/executor/src/lib.rs +++ b/polkadot/executor/src/lib.rs @@ -19,5 +19,6 @@ extern crate polkadot_runtime; #[macro_use] extern crate substrate_executor; +extern crate substrate_primitives as primitives; native_executor_instance!(pub Executor, polkadot_runtime::api::dispatch, polkadot_runtime::VERSION, include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm")); diff --git a/polkadot/runtime/src/parachains.rs b/polkadot/runtime/src/parachains.rs index 5629f440b5431..3f7558abd6262 100644 --- a/polkadot/runtime/src/parachains.rs +++ b/polkadot/runtime/src/parachains.rs @@ -30,7 +30,10 @@ use substrate_runtime_support::dispatch::Result; use rstd::marker::PhantomData; #[cfg(any(feature = "std", test))] -use {runtime_io, runtime_primitives}; +use {runtime_primitives}; + +#[cfg(any(feature = "std", test))] +use std::collections::HashMap; pub trait Trait: system::Trait + session::Trait { /// The position of the set_heads call in the block. @@ -214,8 +217,7 @@ impl Default for GenesisConfig { #[cfg(any(feature = "std", test))] impl runtime_primitives::BuildStorage for GenesisConfig { - fn build_storage(mut self) -> ::std::result::Result { - use std::collections::HashMap; + fn build_storage(mut self) -> ::std::result::Result, Vec>, String> { use codec::Encode; self.parachains.sort_unstable_by_key(|&(ref id, _, _)| id.clone()); @@ -235,7 +237,7 @@ impl runtime_primitives::BuildStorage for GenesisConfig map.insert(head_key, genesis.encode()); } - Ok(map.into()) + Ok(map) } } From 056bffdaa973fc93845550ef9d5df1bf27019faa Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 17:34:00 +0200 Subject: [PATCH 55/97] Fix executive --- Cargo.lock | 2 -- substrate/runtime/executive/src/lib.rs | 11 ++++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 98624a93c4180..dd7f853b003dc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3021,7 +3021,6 @@ dependencies = [ name = "substrate-runtime-primitives" version = "0.1.0" dependencies = [ - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", "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)", @@ -3033,7 +3032,6 @@ dependencies = [ "substrate-runtime-io 0.1.0", "substrate-runtime-std 0.1.0", "substrate-runtime-support 0.1.0", - "substrate-state-machine 0.1.0", ] [[package]] diff --git a/substrate/runtime/executive/src/lib.rs b/substrate/runtime/executive/src/lib.rs index 0f01b7a7cb960..917e170fe085d 100644 --- a/substrate/runtime/executive/src/lib.rs +++ b/substrate/runtime/executive/src/lib.rs @@ -218,7 +218,7 @@ mod tests { use super::*; use staking::Call; use runtime_io::with_externalities; - use substrate_primitives::H256; + use substrate_primitives::{H256, BlakeHasher}; use primitives::BuildStorage; use primitives::traits::{HasPublicAux, Identity, Header as HeaderT, BlakeTwo256, AuxLookup}; use primitives::testing::{Digest, Header, Block}; @@ -288,6 +288,7 @@ mod tests { session_reward: 0, }.build_storage().unwrap()); let xt = primitives::testing::TestXt((1, 0, Call::transfer(2.into(), 69))); + let mut t = runtime_io::TestExternalities::from(t); with_externalities(&mut t, || { Executive::initialise_block(&Header::new(1, H256::default(), H256::default(), [69u8; 32].into(), Digest::default())); Executive::apply_extrinsic(xt).unwrap(); @@ -296,13 +297,13 @@ 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(consensus::GenesisConfig::::default().build_storage().unwrap()); t.extend(session::GenesisConfig::::default().build_storage().unwrap()); t.extend(staking::GenesisConfig::::default().build_storage().unwrap()); t.extend(timestamp::GenesisConfig::::default().build_storage().unwrap()); - t + t.into() } #[test] @@ -312,8 +313,8 @@ mod tests { header: Header { parent_hash: [69u8; 32].into(), number: 1, - state_root: hex!("8fad93b6b9e5251a2e4913598fd0d74a138c0e486eb1133ff8081b429b0c56f2").into(), - extrinsics_root: hex!("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421").into(), + state_root: hex!("02532989c613369596025dfcfc821339fc9861987003924913a5a1382f87034a").into(), + extrinsics_root: hex!("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421").into(), // REVIEW: I expected this to be wrong with a different hasher? digest: Digest { logs: vec![], }, }, extrinsics: vec![], From f565cf9ffeb0cefe29a1464d2c447cbf1acede1b Mon Sep 17 00:00:00 2001 From: David Palm Date: Fri, 3 Aug 2018 17:55:35 +0200 Subject: [PATCH 56/97] fixup lockfile --- Cargo.lock | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.lock b/Cargo.lock index 7489322821c06..5bb7058137347 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2848,6 +2848,7 @@ dependencies = [ "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", "plain_hasher 0.1.0 (git+https://github.com/paritytech/parity-common)", "pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", "rustc-hex 2.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)", From d11d5785d87850d61e76bb0751b5cf1cd4dc83fe Mon Sep 17 00:00:00 2001 From: David Palm Date: Sat, 4 Aug 2018 10:53:45 +0200 Subject: [PATCH 57/97] Fix polkadot/api --- polkadot/api/src/full.rs | 9 +++++---- polkadot/api/src/light.rs | 7 ++++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/polkadot/api/src/full.rs b/polkadot/api/src/full.rs index 7a5aeb31e785c..4ddf43a7f1be4 100644 --- a/polkadot/api/src/full.rs +++ b/polkadot/api/src/full.rs @@ -27,6 +27,7 @@ use runtime::Address; use runtime_primitives::traits::AuxLookup; use primitives::{AccountId, Block, Header, BlockId, Hash, Index, SessionKey, Timestamp, UncheckedExtrinsic}; use primitives::parachain::{CandidateReceipt, DutyRoster, Id as ParaId}; +use substrate_primitives::{BlakeHasher, BlakeRlpCodec}; use {BlockBuilder, PolkadotApi, LocalPolkadotApi, ErrorKind, Error, Result}; @@ -57,7 +58,7 @@ macro_rules! with_runtime { }} } -impl> BlockBuilder for ClientBlockBuilder>, Block> { +impl> BlockBuilder for ClientBlockBuilder>, Block, BlakeHasher, BlakeRlpCodec> { fn push_extrinsic(&mut self, extrinsic: UncheckedExtrinsic) -> Result<()> { self.push(extrinsic).map_err(Into::into) } @@ -68,8 +69,8 @@ impl> BlockBuilder for ClientBlockBuilder> PolkadotApi for Client>, Block> { - type BlockBuilder = ClientBlockBuilder>, Block>; +impl> PolkadotApi for Client>, Block> { + type BlockBuilder = ClientBlockBuilder>, Block, BlakeHasher, BlakeRlpCodec>; fn session_keys(&self, at: &BlockId) -> Result> { with_runtime!(self, at, ::runtime::Consensus::authorities) @@ -155,7 +156,7 @@ impl> PolkadotApi for Client> LocalPolkadotApi for Client>, Block> +impl> LocalPolkadotApi for Client>, Block> {} #[cfg(test)] diff --git a/polkadot/api/src/light.rs b/polkadot/api/src/light.rs index 7e2015c0b701e..1550e208f6465 100644 --- a/polkadot/api/src/light.rs +++ b/polkadot/api/src/light.rs @@ -24,6 +24,7 @@ use primitives::{AccountId, Block, BlockId, Hash, Index, SessionKey, Timestamp, use runtime::Address; use primitives::parachain::{CandidateReceipt, DutyRoster, Id as ParaId}; use {PolkadotApi, BlockBuilder, RemotePolkadotApi, Result, ErrorKind}; +use substrate_primitives::{BlakeHasher, BlakeRlpCodec}; /// Light block builder. TODO: make this work (efficiently) #[derive(Clone, Copy)] @@ -40,9 +41,9 @@ impl BlockBuilder for LightBlockBuilder { } /// Remote polkadot API implementation. -pub struct RemotePolkadotApiWrapper, E: CallExecutor>(pub Arc>); +pub struct RemotePolkadotApiWrapper, E: CallExecutor>(pub Arc>); -impl, E: CallExecutor> PolkadotApi for RemotePolkadotApiWrapper { +impl, E: CallExecutor> PolkadotApi for RemotePolkadotApiWrapper { type BlockBuilder = LightBlockBuilder; fn session_keys(&self, at: &BlockId) -> Result> { @@ -101,4 +102,4 @@ impl, E: CallExecutor> PolkadotApi for RemotePolkadotAp } } -impl, E: CallExecutor> RemotePolkadotApi for RemotePolkadotApiWrapper {} +impl, E: CallExecutor> RemotePolkadotApi for RemotePolkadotApiWrapper {} From c7334b228207c9f1e2b1d80545fce8c5051e6a6a Mon Sep 17 00:00:00 2001 From: David Palm Date: Sat, 4 Aug 2018 11:04:30 +0200 Subject: [PATCH 58/97] Fix polkadot/service --- polkadot/service/src/lib.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/polkadot/service/src/lib.rs b/polkadot/service/src/lib.rs index 10349d94dd8cd..bd68e8d63bb0c 100644 --- a/polkadot/service/src/lib.rs +++ b/polkadot/service/src/lib.rs @@ -52,6 +52,7 @@ use client::Client; use polkadot_network::{PolkadotProtocol, consensus::ConsensusNetwork}; use tokio::runtime::TaskExecutor; use service::FactoryFullConfiguration; +use primitives::{BlakeHasher, BlakeRlpCodec}; pub use service::{Roles, PruningMode, ExtrinsicPoolOptions, ErrorKind, Error, ComponentBlock, LightComponents, FullComponents}; @@ -68,9 +69,9 @@ pub trait Components: service::Components { /// Polkadot API. type Api: 'static + PolkadotApi + 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 { @@ -253,8 +254,8 @@ pub struct TransactionPoolAdapter where A: Send + Sync, E: Send + Sync impl TransactionPoolAdapter where A: Send + Sync, - B: client::backend::Backend + Send + Sync, - E: client::CallExecutor + Send + Sync, + B: client::backend::Backend + Send + Sync, + E: client::CallExecutor + Send + Sync, { fn best_block_id(&self) -> Option { self.client.info() @@ -268,8 +269,8 @@ impl TransactionPoolAdapter impl network::TransactionPool for TransactionPoolAdapter where - B: client::backend::Backend + Send + Sync, - E: client::CallExecutor + Send + Sync, + B: client::backend::Backend + Send + Sync, + E: client::CallExecutor + Send + Sync, A: polkadot_api::PolkadotApi + Send + Sync, { fn transactions(&self) -> Vec<(Hash, Vec)> { @@ -320,8 +321,8 @@ impl network::TransactionPool for TransactionPoolAdapter service::ExtrinsicPool for TransactionPoolAdapter where - 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, A: polkadot_api::PolkadotApi + Send + Sync + 'static, { type Api = TransactionPool; From b6bde9acd8d82c7a32892eaf55f27be812ebad5b Mon Sep 17 00:00:00 2001 From: David Palm Date: Sat, 4 Aug 2018 11:39:19 +0200 Subject: [PATCH 59/97] Fix polkadot/runtime tests --- polkadot/runtime/src/parachains.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/polkadot/runtime/src/parachains.rs b/polkadot/runtime/src/parachains.rs index 3f7558abd6262..1998213a071ad 100644 --- a/polkadot/runtime/src/parachains.rs +++ b/polkadot/runtime/src/parachains.rs @@ -244,8 +244,8 @@ impl runtime_primitives::BuildStorage for GenesisConfig #[cfg(test)] mod tests { use super::*; - use runtime_io::with_externalities; - use substrate_primitives::H256; + use runtime_io::{TestExternalities, with_externalities}; + use substrate_primitives::{H256, BlakeHasher}; use runtime_primitives::BuildStorage; use runtime_primitives::traits::{HasPublicAux, Identity, BlakeTwo256}; use runtime_primitives::testing::{Digest, Header}; @@ -285,7 +285,7 @@ mod tests { type Parachains = Module; - fn new_test_ext(parachains: Vec<(Id, Vec, Vec)>) -> runtime_io::TestExternalities { + fn new_test_ext(parachains: Vec<(Id, Vec, Vec)>) -> TestExternalities { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); t.extend(consensus::GenesisConfig::{ code: vec![], @@ -300,7 +300,7 @@ mod tests { parachains: parachains, phantom: PhantomData, }.build_storage().unwrap()); - t + t.into() } #[test] From 9b139b2c91b0a09943c65fc6b23f8477c3b5a148 Mon Sep 17 00:00:00 2001 From: David Palm Date: Mon, 6 Aug 2018 09:28:03 +0200 Subject: [PATCH 60/97] Fix tests in test-runtime --- substrate/test-runtime/src/system.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/substrate/test-runtime/src/system.rs b/substrate/test-runtime/src/system.rs index cb5ae23eb6c32..deb6f944f5ec7 100644 --- a/substrate/test-runtime/src/system.rs +++ b/substrate/test-runtime/src/system.rs @@ -171,8 +171,9 @@ mod tests { use codec::{Joiner, KeyedVec}; use keyring::Keyring; use ::{Header, Digest, Extrinsic, Transfer}; + use primitives::BlakeHasher; - fn new_test_ext() -> TestExternalities { + fn new_test_ext() -> TestExternalities { map![ twox_128(b"latest").to_vec() => vec![69u8; 32], twox_128(b":auth:len").to_vec() => vec![].and(&3u32), @@ -195,7 +196,7 @@ mod tests { let h = Header { parent_hash: [69u8; 32].into(), number: 1, - state_root: hex!("97dfcd1f8cbf8845fcb544f89332f1a94c1137f7d1b199ef0b0a6ed217015c3e").into(), + state_root: hex!("0c22599e15fb5e052c84f79a2aab179ba6bb238218fd86bdd4a74ebcc87adfcd").into(), extrinsics_root: hex!("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421").into(), digest: Digest { logs: vec![], }, }; @@ -223,7 +224,7 @@ mod tests { header: Header { parent_hash: [69u8; 32].into(), number: 1, - state_root: hex!("0dd8210adaf581464cc68555814a787ed491f8c608d0a0dbbf2208a6d44190b1").into(), + state_root: hex!("0425393fd07e2a806cfd7e990ee91dc92fe6bba34eab2bf45d5be7d67e24d467").into(), extrinsics_root: hex!("951508f2cc0071500a74765ab0fb2f280fdcdd329d5f989dda675010adee99d6").into(), digest: Digest { logs: vec![], }, }, @@ -248,7 +249,7 @@ mod tests { header: Header { parent_hash: b.header.hash(), number: 2, - state_root: hex!("c93f2fd494c386fa32ee76b6198a7ccf5db12c02c3a79755fd2d4646ec2bf8d7").into(), + state_root: hex!("e32dd1d84d9133ca48078d2d83f2b0db19f9d47229ba98bf5ced0e9f86fac2c7").into(), extrinsics_root: hex!("3563642676d7e042c894eedc579ba2d6eeedf9a6c66d9d557599effc9f674372").into(), digest: Digest { logs: vec![], }, }, From 0c82f957aa874f7fb3f9b81cb0568ce9c4f9900d Mon Sep 17 00:00:00 2001 From: David Palm Date: Mon, 6 Aug 2018 10:09:10 +0200 Subject: [PATCH 61/97] Test fixes --- demo/executor/src/lib.rs | 24 +++++++++---------- polkadot/api/src/full.rs | 2 +- substrate/runtime/session/src/lib.rs | 6 ++--- substrate/runtime/staking/src/mock.rs | 6 ++--- substrate/runtime/timestamp/src/lib.rs | 6 ++--- .../test-client/src/block_builder_ext.rs | 3 ++- 6 files changed, 24 insertions(+), 23 deletions(-) diff --git a/demo/executor/src/lib.rs b/demo/executor/src/lib.rs index 5ebece1f609f5..574a02f340aa7 100644 --- a/demo/executor/src/lib.rs +++ b/demo/executor/src/lib.rs @@ -47,7 +47,7 @@ mod tests { use keyring::Keyring; use runtime_support::{Hashable, StorageValue, StorageMap}; use state_machine::{CodeExecutor, TestExternalities}; - use primitives::twox_128; + use primitives::{twox_128, BlakeHasher}; use demo_primitives::{Hash, BlockNumber, AccountId}; use runtime_primitives::traits::Header as HeaderT; use runtime_primitives::{ApplyOutcome, ApplyError, ApplyResult, MaybeUnsigned}; @@ -100,7 +100,7 @@ mod tests { #[test] fn panic_execution_with_foreign_code_gives_error() { - let mut t: TestExternalities = map![ + let mut t: TestExternalities = map![ twox_128(&>::key_for(alice())).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![70u8; 8], twox_128(>::key()).to_vec() => vec![0u8; 8], @@ -119,7 +119,7 @@ mod tests { #[test] fn bad_extrinsic_with_native_equivalent_code_gives_error() { - let mut t: TestExternalities = map![ + let mut t: TestExternalities = map![ twox_128(&>::key_for(alice())).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![70u8; 8], twox_128(>::key()).to_vec() => vec![0u8; 8], @@ -138,7 +138,7 @@ mod tests { #[test] fn successful_execution_with_native_equivalent_code_gives_ok() { - let mut t: TestExternalities = map![ + let mut t: TestExternalities = map![ twox_128(&>::key_for(alice())).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![0u8; 8], twox_128(>::key()).to_vec() => vec![0u8; 8], @@ -161,7 +161,7 @@ mod tests { #[test] fn successful_execution_with_foreign_code_gives_ok() { - let mut t: TestExternalities = map![ + let mut t: TestExternalities = map![ twox_128(&>::key_for(alice())).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![0u8; 8], twox_128(>::key()).to_vec() => vec![0u8; 8], @@ -182,7 +182,7 @@ mod tests { }); } - fn new_test_ext() -> TestExternalities { + fn new_test_ext() -> TestExternalities { use keyring::Keyring::*; let three = [3u8; 32].into(); GenesisConfig { @@ -212,7 +212,7 @@ mod tests { democracy: Some(Default::default()), council: Some(Default::default()), timestamp: Some(Default::default()), - }.build_storage().unwrap() + }.build_storage().unwrap().into() } fn construct_block(number: BlockNumber, parent_hash: Hash, state_root: Hash, extrinsics: Vec) -> (Vec, Hash) { @@ -247,7 +247,7 @@ mod tests { construct_block( 1, [69u8; 32].into(), - hex!("b97d52254fc967bb94bed485de6a738e9fad05decfda3453711677b8becf6d0a").into(), + hex!("3437bf4b182ab17bb322af5c67e55f6be487a77084ad2b4e27ddac7242e4ad21").into(), vec![BareExtrinsic { signed: alice(), index: 0, @@ -260,7 +260,7 @@ mod tests { construct_block( 2, block1().1, - hex!("a1f018d2faa339f72f5ee29050b4670d971e2e271cc06c41ee9cbe1f4c6feec9").into(), + hex!("741fcb660e6fa9f625fbcd993b49f6c1cc4040f5e0cc8727afdedf11fd3c464b").into(), vec![ BareExtrinsic { signed: bob(), @@ -280,7 +280,7 @@ mod tests { construct_block( 1, [69u8; 32].into(), - hex!("41d07010f49aa29b2c9aca542cbaa6f59aafd3dda53cdf711c51ddb7d386912e").into(), + hex!("2c7231a9c210a7aa4bea169d944bc4aaacd517862b244b8021236ffa7f697991").into(), vec![BareExtrinsic { signed: alice(), index: 0, @@ -353,7 +353,7 @@ mod tests { #[test] fn panic_execution_gives_error() { - let mut t: TestExternalities = map![ + let mut t: TestExternalities = map![ twox_128(&>::key_for(alice())).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![70u8; 8], twox_128(>::key()).to_vec() => vec![0u8; 8], @@ -373,7 +373,7 @@ mod tests { #[test] fn successful_execution_gives_ok() { - let mut t: TestExternalities = map![ + let mut t: TestExternalities = map![ twox_128(&>::key_for(alice())).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![0u8; 8], twox_128(>::key()).to_vec() => vec![0u8; 8], diff --git a/polkadot/api/src/full.rs b/polkadot/api/src/full.rs index 4ddf43a7f1be4..a30e7ce818ff3 100644 --- a/polkadot/api/src/full.rs +++ b/polkadot/api/src/full.rs @@ -182,7 +182,7 @@ mod tests { ] } - fn client() -> Client, LocalCallExecutor, NativeExecutor>, Block> { + fn client() -> Client, LocalCallExecutor, NativeExecutor>, Block> { let genesis_config = GenesisConfig { consensus: Some(ConsensusConfig { code: LocalDispatch::native_equivalent().to_vec(), diff --git a/substrate/runtime/session/src/lib.rs b/substrate/runtime/session/src/lib.rs index cc0ef3da66451..22cddfab204b0 100644 --- a/substrate/runtime/session/src/lib.rs +++ b/substrate/runtime/session/src/lib.rs @@ -277,7 +277,7 @@ impl primitives::BuildStorage for GenesisConfig mod tests { use super::*; use runtime_io::with_externalities; - use substrate_primitives::H256; + use substrate_primitives::{H256, BlakeHasher}; use primitives::BuildStorage; use primitives::traits::{HasPublicAux, Identity, BlakeTwo256}; use primitives::testing::{Digest, Header}; @@ -314,7 +314,7 @@ mod tests { type Timestamp = timestamp::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![], @@ -328,7 +328,7 @@ mod tests { validators: vec![1, 2, 3], broken_percent_late: 30, }.build_storage().unwrap()); - t + t.into() } #[test] diff --git a/substrate/runtime/staking/src/mock.rs b/substrate/runtime/staking/src/mock.rs index 66119cef6bd92..9d0c238f78bbe 100644 --- a/substrate/runtime/staking/src/mock.rs +++ b/substrate/runtime/staking/src/mock.rs @@ -21,7 +21,7 @@ use primitives::BuildStorage; use primitives::traits::{HasPublicAux, Identity}; use primitives::testing::{Digest, Header}; -use substrate_primitives::H256; +use substrate_primitives::{H256, BlakeHasher}; use runtime_io; use {GenesisConfig, Module, Trait, consensus, session, system, timestamp}; @@ -58,7 +58,7 @@ impl Trait for Test { type OnAccountKill = (); } -pub fn new_test_ext(ext_deposit: u64, session_length: u64, sessions_per_era: u64, current_era: u64, monied: bool, reward: u64) -> runtime_io::TestExternalities { +pub fn new_test_ext(ext_deposit: u64, session_length: u64, sessions_per_era: u64, current_era: u64, monied: bool, reward: u64) -> runtime_io::TestExternalities { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); let balance_factor = if ext_deposit > 0 { 256 @@ -101,7 +101,7 @@ pub fn new_test_ext(ext_deposit: u64, session_length: u64, sessions_per_era: u64 t.extend(timestamp::GenesisConfig::{ period: 5 }.build_storage().unwrap()); - t + t.into() } pub type System = system::Module; diff --git a/substrate/runtime/timestamp/src/lib.rs b/substrate/runtime/timestamp/src/lib.rs index 0d20bd6b58e97..21a1e8ee84513 100644 --- a/substrate/runtime/timestamp/src/lib.rs +++ b/substrate/runtime/timestamp/src/lib.rs @@ -173,7 +173,7 @@ mod tests { fn timestamp_works() { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); t.extend(GenesisConfig:: { period: 0 }.build_storage().unwrap()); - + let mut t = runtime_io::TestExternalities::from(t); with_externalities(&mut t, || { Timestamp::set_timestamp(42); assert_ok!(Timestamp::aux_dispatch(Call::set(69), &0)); @@ -186,7 +186,7 @@ mod tests { fn double_timestamp_should_fail() { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); t.extend(GenesisConfig:: { period: 5 }.build_storage().unwrap()); - + let mut t = runtime_io::TestExternalities::from(t); with_externalities(&mut t, || { Timestamp::set_timestamp(42); assert_ok!(Timestamp::aux_dispatch(Call::set(69), &0)); @@ -199,7 +199,7 @@ mod tests { fn block_period_is_enforced() { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); t.extend(GenesisConfig:: { period: 5 }.build_storage().unwrap()); - + let mut t = runtime_io::TestExternalities::from(t); with_externalities(&mut t, || { Timestamp::set_timestamp(42); let _ = Timestamp::aux_dispatch(Call::set(46), &0); diff --git a/substrate/test-client/src/block_builder_ext.rs b/substrate/test-client/src/block_builder_ext.rs index 17fdbeba0a537..c27fa5d559941 100644 --- a/substrate/test-client/src/block_builder_ext.rs +++ b/substrate/test-client/src/block_builder_ext.rs @@ -22,6 +22,7 @@ use keyring; use runtime; use {Backend, Executor}; +use primitives::{BlakeHasher, BlakeRlpCodec}; /// Extension trait for test block builder. pub trait BlockBuilderExt { @@ -29,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)) } From 50b4b12fbb8e411095dd81efaed71d945e2a008e Mon Sep 17 00:00:00 2001 From: David Palm Date: Mon, 6 Aug 2018 11:28:18 +0200 Subject: [PATCH 62/97] Fix missing component in the `std` feature --- substrate/runtime/timestamp/Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/substrate/runtime/timestamp/Cargo.toml b/substrate/runtime/timestamp/Cargo.toml index 1b5637a2c33a6..c87da900bfe19 100644 --- a/substrate/runtime/timestamp/Cargo.toml +++ b/substrate/runtime/timestamp/Cargo.toml @@ -26,6 +26,7 @@ std = [ "substrate-runtime-io/std", "substrate-runtime-support/std", "substrate-runtime-primitives/std", + "substrate-runtime-consensus/std", "serde/std", "serde_derive", "substrate-codec/std", From 111f9fde62a11f8c738249ae8ce7f598a4a7d0da Mon Sep 17 00:00:00 2001 From: David Palm Date: Mon, 6 Aug 2018 14:43:05 +0200 Subject: [PATCH 63/97] Use PhantomData and Result from core --- substrate/primitives/src/rlp_codec.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/substrate/primitives/src/rlp_codec.rs b/substrate/primitives/src/rlp_codec.rs index 1be69460a1aa9..b884dd507c8ec 100644 --- a/substrate/primitives/src/rlp_codec.rs +++ b/substrate/primitives/src/rlp_codec.rs @@ -19,7 +19,7 @@ use elastic_array::{ElasticArray1024, ElasticArray128}; use hashdb::Hasher; use rlp::{DecoderError, RlpStream, Rlp, Prototype}; -use std::marker::PhantomData; // TODO: should `use` from core instead? +use core::marker::PhantomData; use patricia_trie::{NibbleSlice, NodeCodec, node::Node, ChildReference}; use hash::H256; @@ -34,7 +34,7 @@ pub type BlakeRlpCodec = RlpCodec; 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 { + fn decode(data: &[u8]) -> ::core::result::Result { let r = Rlp::new(data); match r.prototype()? { // either leaf or extension - decode first item with NibbleSlice::??? From 1276733991bd4abbc92f0691f1a0fd28bc3e505c Mon Sep 17 00:00:00 2001 From: David Palm Date: Mon, 6 Aug 2018 14:43:54 +0200 Subject: [PATCH 64/97] Fix paths Use core --- substrate/primitives/src/hash.rs | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/substrate/primitives/src/hash.rs b/substrate/primitives/src/hash.rs index 539a610a29317..79e0a302c8aca 100644 --- a/substrate/primitives/src/hash.rs +++ b/substrate/primitives/src/hash.rs @@ -21,12 +21,8 @@ use serde::{Serialize, Serializer, Deserialize, Deserializer}; #[cfg(feature = "std")] use bytes; - -#[cfg(feature = "std")] -use std::cmp; - -#[cfg(feature = "std")] -use rlp::{self, Rlp, RlpStream, DecoderError}; +use core::cmp; +use rlp::{Rlp, RlpStream, DecoderError}; macro_rules! impl_rest { ($name: ident, $len: expr) => { @@ -56,13 +52,13 @@ macro_rules! impl_rest { } } - impl rlp::Encodable for $name { + impl ::rlp::Encodable for $name { fn rlp_append(&self, s: &mut RlpStream) { s.encoder().encode_value(self); } } - impl rlp::Decodable for $name { + 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), @@ -103,11 +99,11 @@ mod tests { #[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); + let res = ::rlp::decode::(&data); assert!(res.is_ok()); assert_eq!(res.unwrap(), H160::from(123)); - let res = rlp::decode::(&data); + let res = ::rlp::decode::(&data); assert!(res.is_err()); } From 334e008caa9a5e13606827df4f1a8b73fe447fce Mon Sep 17 00:00:00 2001 From: David Palm Date: Mon, 6 Aug 2018 18:10:18 +0200 Subject: [PATCH 65/97] load heapsize on wasm --- substrate/primitives/src/lib.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/substrate/primitives/src/lib.rs b/substrate/primitives/src/lib.rs index d45579a9f152e..1a7b3596bb75c 100644 --- a/substrate/primitives/src/lib.rs +++ b/substrate/primitives/src/lib.rs @@ -54,7 +54,8 @@ extern crate substrate_runtime_std as rstd; #[cfg(test)] extern crate substrate_serializer; -#[cfg(test)] + +#[cfg(any(test, target_arch = "wasm32"))] extern crate heapsize; #[cfg(test)] From 2faff87ba7d6cbc32e3f666b4dae74c3ca0a878b Mon Sep 17 00:00:00 2001 From: David Palm Date: Mon, 6 Aug 2018 18:15:00 +0200 Subject: [PATCH 66/97] implement `HeapSizeOf` for wasm --- substrate/primitives/Cargo.toml | 4 +++- substrate/primitives/src/hash.rs | 11 +++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/substrate/primitives/Cargo.toml b/substrate/primitives/Cargo.toml index e6f8e41d92b54..b1dcacccb0d48 100644 --- a/substrate/primitives/Cargo.toml +++ b/substrate/primitives/Cargo.toml @@ -8,7 +8,6 @@ crunchy = "0.1" substrate-runtime-std = { path = "../runtime-std", default_features = false } substrate-codec = { path = "../codec", default_features = false } elastic-array = "0.10" -# TODO: I think we can go back to `default_features = false` when we have a proper impl of `Hasher` to use fixed-hash = { git = "https://github.com/paritytech/parity-common", features = ["heapsizeof"] } rustc-hex = { version = "2.0", default_features = false } serde = { version = "1.0", default_features = false } @@ -24,6 +23,9 @@ hashdb = { git = "https://github.com/paritytech/parity-common" } patricia-trie = { git = "https://github.com/paritytech/parity-common" } plain_hasher = { git = "https://github.com/paritytech/parity-common" } +[target.'cfg(target_arch = "wasm32")'.dependencies] +heapsize = { version = "0.4"} + [dev-dependencies] substrate-serializer = { path = "../serializer" } pretty_assertions = "0.4" diff --git a/substrate/primitives/src/hash.rs b/substrate/primitives/src/hash.rs index 79e0a302c8aca..bf259bdfa0b86 100644 --- a/substrate/primitives/src/hash.rs +++ b/substrate/primitives/src/hash.rs @@ -82,6 +82,17 @@ impl_rest!(H160, 20); impl_rest!(H256, 32); impl_rest!(H512, 64); +// REVIEW: The wasm build was broken and would not load `fixed-hash` passing the +// `heapsizeof` feature so resorted to this. `Hasher` binds the `Out` assoc type +// with `HeapSizeOf` (why? I'd say it's only used by `memorydb` to implement `mem_used`). +// An alternative way to fix this would be to use `default_features = false` to load +// `fixed-hash` (instead of the current `features = ["heapsizeof"]` and remove this `#[cfg…` +#[cfg(target_arch = "wasm32")] +impl ::heapsize::HeapSizeOf for H256 { + fn heap_size_of_children(&self) -> usize { 0 } +} + + #[cfg(test)] mod tests { use super::*; From 751fe9ee83fd27f3a81c0bbfdb8d1254cd85289e Mon Sep 17 00:00:00 2001 From: David Palm Date: Mon, 6 Aug 2018 18:28:01 +0200 Subject: [PATCH 67/97] Add toy impl of `blake2_256` for no_std --- substrate/primitives/src/hasher.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/substrate/primitives/src/hasher.rs b/substrate/primitives/src/hasher.rs index a140315edbd7f..5d27715bf552a 100644 --- a/substrate/primitives/src/hasher.rs +++ b/substrate/primitives/src/hasher.rs @@ -19,7 +19,12 @@ use hashdb::Hasher; use plain_hasher::PlainHasher; use hash::H256; +#[cfg(feature = "std")] use hashing::blake2_256; +#[cfg(not(feature = "std"))] +fn blake2_256(x: &[u8]) -> [u8; 32] { + unimplemented!() +} /// Concrete implementation of Hasher using Blake2b 256-bit hashes #[derive(Debug)] From 81d7278911eec848f9cf39ef13460488c5fa851a Mon Sep 17 00:00:00 2001 From: David Palm Date: Mon, 6 Aug 2018 18:29:39 +0200 Subject: [PATCH 68/97] lockfile --- polkadot/runtime/wasm/Cargo.lock | 306 +++++++------------------------ 1 file changed, 65 insertions(+), 241 deletions(-) diff --git a/polkadot/runtime/wasm/Cargo.lock b/polkadot/runtime/wasm/Cargo.lock index a2c3b0413a358..3968c8cdccab5 100644 --- a/polkadot/runtime/wasm/Cargo.lock +++ b/polkadot/runtime/wasm/Cargo.lock @@ -1,16 +1,3 @@ -[[package]] -name = "aho-corasick" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "ansi_term" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "arrayvec" version = "0.4.7" @@ -19,16 +6,6 @@ dependencies = [ "nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "atty" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", - "termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "base58" version = "0.1.0" @@ -124,15 +101,6 @@ dependencies = [ "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "env_logger" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "environmental" version = "0.1.0" @@ -149,27 +117,6 @@ dependencies = [ "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "ethcore-bytes" -version = "0.1.0" -source = "git+https://github.com/paritytech/parity.git#dec390a89fe038337399315daf15e628ffbb4d8e" - -[[package]] -name = "ethcore-logger" -version = "1.12.0" -source = "git+https://github.com/paritytech/parity.git#dec390a89fe038337399315daf15e628ffbb4d8e" -dependencies = [ - "ansi_term 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", - "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "atty 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", - "env_logger 0.4.3 (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)", - "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "ethereum-types" version = "0.3.2" @@ -194,17 +141,19 @@ dependencies = [ [[package]] name = "fixed-hash" -version = "0.1.3" -source = "git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm#8dc457899afdaf968ff7f16140b03d1e37b01d71" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ + "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "fixed-hash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" +version = "0.2.2" +source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", @@ -233,11 +182,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "hashdb" -version = "0.1.1" -source = "git+https://github.com/paritytech/parity.git#dec390a89fe038337399315daf15e628ffbb4d8e" +version = "0.2.0" +source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -280,15 +229,6 @@ dependencies = [ "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "keccak-hash" -version = "0.1.2" -source = "git+https://github.com/paritytech/parity.git#dec390a89fe038337399315daf15e628ffbb4d8e" -dependencies = [ - "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "lazy_static" version = "0.2.11" @@ -320,14 +260,6 @@ dependencies = [ "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "memchr" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "memoffset" version = "0.2.1" @@ -340,16 +272,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "memorydb" -version = "0.1.1" -source = "git+https://github.com/paritytech/parity.git#dec390a89fe038337399315daf15e628ffbb4d8e" +version = "0.2.1" +source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.1.1 (git+https://github.com/paritytech/parity.git)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "keccak-hash 0.1.2 (git+https://github.com/paritytech/parity.git)", - "plain_hasher 0.1.0 (git+https://github.com/paritytech/parity.git)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity.git)", + "plain_hasher 0.1.0 (git+https://github.com/paritytech/parity-common)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", ] [[package]] @@ -383,6 +313,11 @@ 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 = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" + [[package]] name = "parity-wasm" version = "0.31.0" @@ -400,15 +335,6 @@ dependencies = [ "parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "parking_lot" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "parking_lot_core" version = "0.2.14" @@ -422,29 +348,25 @@ dependencies = [ [[package]] name = "patricia-trie" -version = "0.1.0" -source = "git+https://github.com/paritytech/parity.git#dec390a89fe038337399315daf15e628ffbb4d8e" +version = "0.2.1" +source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethcore-bytes 0.1.0 (git+https://github.com/paritytech/parity.git)", - "ethcore-logger 1.12.0 (git+https://github.com/paritytech/parity.git)", - "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.1.1 (git+https://github.com/paritytech/parity.git)", - "keccak-hash 0.1.2 (git+https://github.com/paritytech/parity.git)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", + "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "memorydb 0.1.1 (git+https://github.com/paritytech/parity.git)", + "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity.git)", - "triehash 0.1.0 (git+https://github.com/paritytech/parity.git)", ] [[package]] name = "plain_hasher" version = "0.1.0" -source = "git+https://github.com/paritytech/parity.git#dec390a89fe038337399315daf15e628ffbb4d8e" +source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", ] [[package]] @@ -564,39 +486,6 @@ dependencies = [ "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "redox_syscall" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "redox_termios" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "regex" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "regex-syntax" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "ring" version = "0.12.1" @@ -612,7 +501,7 @@ dependencies = [ [[package]] name = "rlp" version = "0.2.1" -source = "git+https://github.com/paritytech/parity.git#dec390a89fe038337399315daf15e628ffbb4d8e" +source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -639,7 +528,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "rustc-hex" version = "2.0.0" -source = "git+https://github.com/rphmeier/rustc-hex.git#ee2ec40b9062ac7769ccb9dc891d6dc2cc9009d7" +source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "rustc_version" @@ -722,14 +611,20 @@ dependencies = [ "blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.2.3 (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.1.3 (git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm)", - "rustc-hex 2.0.0 (git+https://github.com/rphmeier/rustc-hex.git)", + "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", + "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", + "plain_hasher 0.1.0 (git+https://github.com/paritytech/parity-common)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", + "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)", "substrate-codec 0.1.0", "substrate-runtime-std 0.1.0", "twox-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "uint 0.1.2 (git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm)", + "uint 0.2.2 (git+https://github.com/paritytech/parity-common)", "wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -963,15 +858,15 @@ name = "substrate-state-machine" version = "0.1.0" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.1.1 (git+https://github.com/paritytech/parity.git)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", "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.1.1 (git+https://github.com/paritytech/parity.git)", + "memorydb 0.2.1 (git+https://github.com/paritytech/parity-common)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.1.0 (git+https://github.com/paritytech/parity.git)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", "substrate-primitives 0.1.0", - "triehash 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "triehash 0.2.0 (git+https://github.com/paritytech/parity-common)", ] [[package]] @@ -984,35 +879,6 @@ dependencies = [ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "termion" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "thread_local" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "time" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "tiny-keccak" version = "1.4.2" @@ -1023,24 +889,24 @@ dependencies = [ [[package]] name = "triehash" -version = "0.1.0" -source = "git+https://github.com/paritytech/parity.git#dec390a89fe038337399315daf15e628ffbb4d8e" +version = "0.1.2" +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)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "keccak-hash 0.1.2 (git+https://github.com/paritytech/parity.git)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity.git)", + "keccak-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rlp 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "triehash" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" +version = "0.2.0" +source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "keccak-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", ] [[package]] @@ -1051,28 +917,23 @@ dependencies = [ "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "ucd-util" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "uint" -version = "0.1.2" -source = "git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm#8dc457899afdaf968ff7f16140b03d1e37b01d71" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "uint" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" +version = "0.2.2" +source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1082,29 +943,11 @@ name = "unicode-xid" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "unreachable" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "untrusted" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "utf8-ranges" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "void" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "wasmi" version = "0.4.0" @@ -1136,10 +979,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] -"checksum aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d6531d44de723825aa81398a6415283229725a00fa30713812ab9323faa82fc4" -"checksum ansi_term 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6b3568b48b7cefa6b8ce125f9bb4989e52fbcc29ebea88df04cc7c5f12f70455" "checksum arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a1e964f9e24d588183fcb43503abda40d288c8657dfc27311516ce2f05675aef" -"checksum atty 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "2fc4a1aa4c24c0718a250f0681885c1af91419d242f29eb8f2ab28502d80dbd1" "checksum base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" "checksum bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d0c54bb8f454c567f21197eefcdbf5679d0bd99f2ddbe52e84c77061952e6789" "checksum blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" @@ -1152,44 +992,39 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" "checksum crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a2f4a431c5c9f662e1200b7c7f02c34e91361150e382089a8f2dec3ba680cbda" "checksum elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "88d4851b005ef16de812ea9acdb7bece2f0a40dd86c07b85631d7dafa54537bb" -"checksum env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3ddf21e73e016298f5cb37d6ef8e8da8e39f91f9ec8b0df44b7deb16a9f8cd5b" "checksum ethbloom 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a93a43ce2e9f09071449da36bfa7a1b20b950ee344b6904ff23de493b03b386" -"checksum ethcore-bytes 0.1.0 (git+https://github.com/paritytech/parity.git)" = "" -"checksum ethcore-logger 1.12.0 (git+https://github.com/paritytech/parity.git)" = "" "checksum ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c48729b8aea8aedb12cf4cb2e5cef439fdfe2dda4a89e47eeebd15778ef53b6" "checksum ethereum-types-serialize 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ac59a21a9ce98e188f3dace9eb67a6c4a3c67ec7fbc7218cb827852679dc002" -"checksum fixed-hash 0.1.3 (git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm)" = "" "checksum fixed-hash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18d6fd718fb4396e7a9c93ac59ba7143501467ca7a143c145b5555a571d5576" +"checksum fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common)" = "" "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.1.1 (git+https://github.com/paritytech/parity.git)" = "" +"checksum hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)" = "" "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" "checksum integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)" = "" "checksum keccak-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b7f51f30d7986536accaec4a6a288008dfb3dbffe8a2863a65292bc395a3ae7" -"checksum keccak-hash 0.1.2 (git+https://github.com/paritytech/parity.git)" = "" "checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" "checksum lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e6412c5e2ad9584b0b8e979393122026cdd6d2a80b933f890dcd694ddbe73739" "checksum libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)" = "ac8ebf8343a981e2fa97042b14768f02ed3e1d602eac06cae6166df3c8ced206" "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" "checksum log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "89f010e843f2b1a31dbd316b3b8d443758bc634bed37aabade59c686d644e0a2" -"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_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" -"checksum memorydb 0.1.1 (git+https://github.com/paritytech/parity.git)" = "" +"checksum memorydb 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" "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 (git+https://github.com/paritytech/parity-common)" = "" "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 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d4d05f1349491390b1730afba60bb20d55761bef489a954546b58b4b34e1e2ac" "checksum parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "4db1a8ccf734a7bce794cc19b3df06ed87ab2f3907036b693c68f56b4d4537fa" -"checksum patricia-trie 0.1.0 (git+https://github.com/paritytech/parity.git)" = "" -"checksum plain_hasher 0.1.0 (git+https://github.com/paritytech/parity.git)" = "" +"checksum patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" +"checksum plain_hasher 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ba8d4f9257b85eb6cdf13f055cea3190520aab1409ca2ab43493ea4820c25f0" "checksum proc-macro-hack-impl 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d5cb6f960ad471404618e9817c0e5d10b1ae74cfdf01fab89ea0641fe7fb2892" "checksum proc-macro2 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1fa93823f53cfd0f5ac117b189aed6cfdfb2cfc0a9d82e956dd7927595ed7d46" @@ -1198,15 +1033,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "eba5f8cb59cc50ed56be8880a5c7b496bfd9bd26394e176bc67884094145c2c5" "checksum rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b614fe08b6665cb9a231d07ac1364b0ef3cb3698f1239ee0c4c3a88a524f54c8" "checksum rayon-core 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9d24ad214285a7729b174ed6d3bcfcb80177807f959d95fafd5bfc5c4f201ac8" -"checksum redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "c214e91d3ecf43e9a4e41e578973adeb14b474f2bee858742d127af75a0112b1" -"checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" -"checksum regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9329abc99e39129fcceabd24cf5d85b4671ef7c29c50e972bc5afe32438ec384" -"checksum regex-syntax 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7d707a4fa2637f2dca2ef9fd02225ec7661fe01a53623c1e6515b6916511f7a7" "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" -"checksum rlp 0.2.1 (git+https://github.com/paritytech/parity.git)" = "" +"checksum rlp 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" "checksum rlp 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "89db7f8dfdd5eb7ab3ac3ece7a07fd273a680b4b224cb231181280e8996f9f0b" "checksum rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0ceb8ce7a5e520de349e1fa172baeba4a9e8d5ef06c47471863530bc4972ee1e" -"checksum rustc-hex 2.0.0 (git+https://github.com/rphmeier/rustc-hex.git)" = "" +"checksum rustc-hex 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d2b03280c2813907a030785570c577fb27d3deec8da4c18566751ade94de0ace" "checksum rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a54aa04a10c68c1c4eacb4337fd883b435997ede17a9385784b990777686b09a" "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" @@ -1216,21 +1047,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum smallvec 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "03dab98ab5ded3a8b43b2c80751194608d0b2aa0f1d46cf95d1c35e192844aa7" "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 termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096" -"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" -"checksum triehash 0.1.0 (git+https://github.com/paritytech/parity.git)" = "" "checksum triehash 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2033893a813c70e7d8a739ca6c36dc0a7a2c913ec718d7cbf84a3837bbe3c7ce" +"checksum triehash 0.2.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum twox-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "475352206e7a290c5fccc27624a163e8d0d115f7bb60ca18a64fc9ce056d7435" -"checksum ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd2be2d6639d0f8fe6cdda291ad456e23629558d466e2789d2c3e9892bda285d" -"checksum uint 0.1.2 (git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm)" = "" "checksum uint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "38051a96565903d81c9a9210ce11076b2218f3b352926baa1f5f6abbdfce8273" +"checksum uint 0.2.2 (git+https://github.com/paritytech/parity-common)" = "" "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" -"checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" "checksum untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f392d7819dbe58833e26872f5f6f0d68b7bbbe90fc3667e98731c4a15ad9a7ae" -"checksum utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "662fab6525a98beff2921d7f61a39e7d59e0b425ebc7d0d9e66d316e55124122" -"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" "checksum wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "522fe3fdd44a56f25cd5ddcd8ccdb1cf2e982ceb28fcb00f41d8a018ae5245a8" "checksum winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "04e3bd221fcbe8a271359c04f21a76db7d0c6028862d1bb5512d85e1e2eb5bb3" "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" From dcd9541f4fdeaf55f9f0c3d95ec736a513c2cfd1 Mon Sep 17 00:00:00 2001 From: David Palm Date: Tue, 7 Aug 2018 09:33:06 +0200 Subject: [PATCH 69/97] Use kvdb* from parity-common and fix errors --- polkadot/availability-store/Cargo.toml | 6 +++--- polkadot/availability-store/src/lib.rs | 21 +++------------------ 2 files changed, 6 insertions(+), 21 deletions(-) diff --git a/polkadot/availability-store/Cargo.toml b/polkadot/availability-store/Cargo.toml index 9a926310b04b4..fe60e9c992c98 100644 --- a/polkadot/availability-store/Cargo.toml +++ b/polkadot/availability-store/Cargo.toml @@ -10,6 +10,6 @@ parking_lot = "0.4" log = "0.3" substrate-codec = { path = "../../substrate/codec" } substrate-primitives = { path = "../../substrate/primitives" } -kvdb = { git = "https://github.com/paritytech/parity.git" } -kvdb-rocksdb = { git = "https://github.com/paritytech/parity.git" } -kvdb-memorydb = { git = "https://github.com/paritytech/parity.git" } +kvdb = { git = "https://github.com/paritytech/parity-common.git" } +kvdb-rocksdb = { git = "https://github.com/paritytech/parity-common.git" } +kvdb-memorydb = { git = "https://github.com/paritytech/parity-common.git" } diff --git a/polkadot/availability-store/src/lib.rs b/polkadot/availability-store/src/lib.rs index 33ace5794cfe7..5237ca498194d 100644 --- a/polkadot/availability-store/src/lib.rs +++ b/polkadot/availability-store/src/lib.rs @@ -66,20 +66,6 @@ pub struct Data { pub extrinsic: Option, } -fn extract_io_err(err: ::kvdb::Error) -> io::Error { - match err { - ::kvdb::Error(::kvdb::ErrorKind::Io(io_err), _) => io_err, - ::kvdb::Error(::kvdb::ErrorKind::Msg(msg), _) => io::Error::new( - io::ErrorKind::Other, - msg, - ), - x => io::Error::new( - io::ErrorKind::Other, - format!("Unexpected error variant: {:?}", x), // only necessary because of nonexaustive match. - ) - } -} - fn block_data_key(relay_parent: &Hash, candidate_hash: &Hash) -> Vec { (relay_parent, candidate_hash, 0i8).encode() } @@ -99,14 +85,13 @@ impl Store { pub fn new(config: Config) -> io::Result { let mut db_config = DatabaseConfig::with_columns(Some(columns::NUM_COLUMNS)); db_config.memory_budget = config.cache_size; - db_config.wal = true; let path = config.path.to_str().ok_or_else(|| io::Error::new( io::ErrorKind::Other, format!("Bad database path: {:?}", config.path), ))?; - let db = Database::open(&db_config, &path).map_err(extract_io_err)?; + let db = Database::open(&db_config, &path)?; Ok(Store { inner: Arc::new(db), @@ -151,7 +136,7 @@ impl Store { ); } - self.inner.write(tx).map_err(extract_io_err) + self.inner.write(tx) } /// Note that a set of candidates have been included in a finalized block with given hash and parent hash. @@ -175,7 +160,7 @@ impl Store { } } - self.inner.write(tx).map_err(extract_io_err) + self.inner.write(tx) } /// Query block data. From 2370a16b29dd64fb666e5615f3fe987d30e0e3ff Mon Sep 17 00:00:00 2001 From: David Palm Date: Tue, 7 Aug 2018 09:47:39 +0200 Subject: [PATCH 70/97] rebuilt lockfile --- Cargo.lock | 1141 ++++++++++++++++++++++++++-------------------------- 1 file changed, 580 insertions(+), 561 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fb1c792bae806..bc2456b5c33c3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,7 +23,7 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "0.6.4" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -35,12 +35,12 @@ version = "0.1.0" source = "git+https://github.com/paritytech/aio-limited.git#1f42497dcd2a6f85b83af97cd80314b26a1e4a9e" dependencies = [ "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -58,7 +58,7 @@ name = "ansi_term" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -95,29 +95,29 @@ dependencies = [ [[package]] name = "assert_matches" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "atty" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "backtrace" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "backtrace-sys 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-demangle 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -125,8 +125,8 @@ name = "backtrace-sys" version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -144,7 +144,7 @@ name = "base64" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -152,7 +152,7 @@ name = "base64" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -161,16 +161,16 @@ name = "base64" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "base64" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -179,7 +179,7 @@ name = "bigint" version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -218,7 +218,7 @@ dependencies = [ [[package]] name = "bs58" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -233,29 +233,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "byteorder" -version = "1.2.3" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "bytes" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "cc" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rayon 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "cfg-if" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -269,18 +269,18 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.2" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-integer 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "cid" version = "0.2.3" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ "integer-encoding 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "multibase 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -293,7 +293,7 @@ version = "2.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "atty 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -312,10 +312,10 @@ dependencies = [ [[package]] name = "cmake" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -329,7 +329,7 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -337,7 +337,7 @@ name = "core-foundation-sys" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -364,7 +364,7 @@ name = "crossbeam-deque" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-epoch 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-epoch 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -374,9 +374,9 @@ version = "0.3.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)", - "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -384,13 +384,13 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.4.1" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -400,7 +400,7 @@ name = "crossbeam-utils" version = "0.2.2" 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)", + "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -408,7 +408,7 @@ name = "crossbeam-utils" version = "0.3.2" 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)", + "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -422,20 +422,20 @@ version = "1.1.1" source = "git+https://github.com/paritytech/rust-ctrlc.git#b523017108bb2d571a7a69bd97bc406e63bc7a9d" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "datastore" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ "base64 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "chashmap 2.2.1 (git+https://github.com/redox-os/tfs)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.22 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)", "tempfile 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -494,8 +494,8 @@ name = "demo-primitives" version = "0.1.0" dependencies = [ "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)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-primitives 0.1.0", @@ -512,8 +512,8 @@ dependencies = [ "log 0.3.9 (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 0.1.0", - "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 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", @@ -539,7 +539,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "digest" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -547,7 +547,7 @@ dependencies = [ [[package]] name = "dtoa" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -598,7 +598,7 @@ name = "error-chain" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -606,7 +606,7 @@ name = "error-chain" version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -615,7 +615,7 @@ version = "0.5.7" source = "git+https://github.com/paritytech/rust-secp256k1#db81cfea59014b4d176f10f86ed52e1a130b6822" dependencies = [ "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -627,21 +627,21 @@ dependencies = [ "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types-serialize 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "fixed-hash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "ethcore-io" version = "1.12.0" -source = "git+https://github.com/paritytech/parity#c22498066b6546c4a2bd58f1ff4a664d00142f43" +source = "git+https://github.com/paritytech/parity.git#e8b13cb77e30f60677d09b1b4eab1a4998dde28e" dependencies = [ "crossbeam 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", "timer 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -649,15 +649,15 @@ dependencies = [ [[package]] name = "ethcore-logger" version = "1.12.0" -source = "git+https://github.com/paritytech/parity#c22498066b6546c4a2bd58f1ff4a664d00142f43" +source = "git+https://github.com/paritytech/parity.git#e8b13cb77e30f60677d09b1b4eab1a4998dde28e" dependencies = [ "ansi_term 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "atty 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -671,8 +671,8 @@ dependencies = [ "ethbloom 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types-serialize 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "fixed-hash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "uint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -681,28 +681,28 @@ name = "ethereum-types-serialize" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "ethkey" version = "0.3.0" -source = "git+https://github.com/paritytech/parity#c22498066b6546c4a2bd58f1ff4a664d00142f43" +source = "git+https://github.com/paritytech/parity.git#e8b13cb77e30f60677d09b1b4eab1a4998dde28e" dependencies = [ - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "edit-distance 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "eth-secp256k1 0.5.7 (git+https://github.com/paritytech/rust-secp256k1)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "mem 0.1.0 (git+https://github.com/paritytech/parity)", + "mem 0.1.0 (git+https://github.com/paritytech/parity.git)", "parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common)", "parity-wordlist 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 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)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -730,7 +730,7 @@ name = "fdlimit" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -739,7 +739,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -750,7 +750,7 @@ version = "0.2.2" source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -775,11 +775,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "fs-swap" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "libloading 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -825,19 +827,22 @@ dependencies = [ [[package]] name = "getopts" -version = "0.2.17" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "globset" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -854,7 +859,7 @@ name = "heapsize" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -881,7 +886,7 @@ dependencies = [ [[package]] name = "httparse" -version = "1.2.4" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -890,7 +895,7 @@ version = "0.10.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "httparse 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -899,7 +904,7 @@ dependencies = [ "traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -907,16 +912,16 @@ name = "hyper" version = "0.11.27" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "base64 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "httparse 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "mime 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "mime 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "relay 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", @@ -930,10 +935,10 @@ dependencies = [ [[package]] name = "idna" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-normalization 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -958,7 +963,7 @@ name = "iovec" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -977,7 +982,7 @@ dependencies = [ [[package]] name = "itoa" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -986,10 +991,10 @@ version = "8.0.2" source = "git+https://github.com/paritytech/jsonrpc.git#7e5df8ca2acc01c608b2d2bd8cdcdb19d8cbaa90" dependencies = [ "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "log 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)", - "serde_json 1.0.22 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1000,8 +1005,8 @@ dependencies = [ "hyper 0.11.27 (registry+https://github.com/rust-lang/crates.io-index)", "jsonrpc-core 8.0.2 (git+https://github.com/paritytech/jsonrpc.git)", "jsonrpc-server-utils 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1012,7 +1017,7 @@ source = "git+https://github.com/paritytech/jsonrpc.git#7e5df8ca2acc01c608b2d2bd dependencies = [ "jsonrpc-core 8.0.2 (git+https://github.com/paritytech/jsonrpc.git)", "jsonrpc-pubsub 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)", - "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1021,8 +1026,8 @@ version = "8.0.1" source = "git+https://github.com/paritytech/jsonrpc.git#7e5df8ca2acc01c608b2d2bd8cdcdb19d8cbaa90" dependencies = [ "jsonrpc-core 8.0.2 (git+https://github.com/paritytech/jsonrpc.git)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1030,10 +1035,10 @@ name = "jsonrpc-server-utils" version = "8.0.1" source = "git+https://github.com/paritytech/jsonrpc.git#7e5df8ca2acc01c608b2d2bd8cdcdb19d8cbaa90" dependencies = [ - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "globset 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "globset 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "jsonrpc-core 8.0.2 (git+https://github.com/paritytech/jsonrpc.git)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1046,9 +1051,9 @@ dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "jsonrpc-core 8.0.2 (git+https://github.com/paritytech/jsonrpc.git)", "jsonrpc-server-utils 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "ws 0.7.5 (git+https://github.com/tomusdrw/ws-rs)", ] @@ -1057,7 +1062,7 @@ name = "keccak-hash" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1086,7 +1091,7 @@ version = "0.1.0" source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common)", - "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1096,12 +1101,12 @@ source = "git+https://github.com/paritytech/parity-common#ae80aff497595150045251 dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "fs-swap 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "fs-swap 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "interleaved-ordered 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "rocksdb 0.4.5 (git+https://github.com/paritytech/rust-rocksdb)", ] @@ -1118,8 +1123,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "lazy_static" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "version_check 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "lazycell" @@ -1128,15 +1136,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "libc" -version = "0.2.41" +version = "0.2.43" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "libloading" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "libp2p" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "libp2p-dns 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", @@ -1156,25 +1173,25 @@ dependencies = [ "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "stdweb 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-current-thread 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-current-thread 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-core" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ - "bs58 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bs58 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (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)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "multihash 0.8.1-pre (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "multistream-select 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "protobuf 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "rw-stream-sink 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "smallvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1184,11 +1201,11 @@ dependencies = [ [[package]] name = "libp2p-dns" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "tokio-dns-unofficial 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1197,19 +1214,19 @@ dependencies = [ [[package]] name = "libp2p-floodsub" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ - "bs58 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bs58 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (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)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "protobuf 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "varint 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", @@ -1218,17 +1235,17 @@ dependencies = [ [[package]] name = "libp2p-identify" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (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)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "libp2p-peerstore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "protobuf 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "varint 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", @@ -1237,41 +1254,41 @@ dependencies = [ [[package]] name = "libp2p-kad" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", "bigint 4.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bs58 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bs58 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "datastore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "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)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "libp2p-identify 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "libp2p-ping 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "protobuf 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", "varint 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", ] [[package]] name = "libp2p-mplex" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (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)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "varint 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", @@ -1280,31 +1297,31 @@ dependencies = [ [[package]] name = "libp2p-peerstore" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ - "bs58 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bs58 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "datastore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "owning_ref 0.3.3 (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 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-ping" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "multistream-select 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1312,28 +1329,28 @@ dependencies = [ [[package]] name = "libp2p-ratelimit" version = "0.1.1" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ "aio-limited 0.1.0 (git+https://github.com/paritytech/aio-limited.git)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-relay" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "libp2p-peerstore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "protobuf 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1343,15 +1360,15 @@ dependencies = [ [[package]] name = "libp2p-secio" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ "asn1_der 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "eth-secp256k1 0.5.7 (git+https://github.com/paritytech/rust-secp256k1)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "protobuf 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", "ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", "rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1363,51 +1380,51 @@ dependencies = [ [[package]] name = "libp2p-tcp-transport" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tcp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tcp 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-transport-timeout" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-websocket" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "rw-stream-sink 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "stdweb 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "websocket 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)", + "websocket 0.20.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-yamux" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "yamux 0.1.0 (git+https://github.com/paritytech/yamux)", ] @@ -1441,33 +1458,33 @@ name = "log" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "log" -version = "0.4.1" +version = "0.4.3" 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)", + "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "matches" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "mem" version = "0.1.0" -source = "git+https://github.com/paritytech/parity#c22498066b6546c4a2bd58f1ff4a664d00142f43" +source = "git+https://github.com/paritytech/parity.git#e8b13cb77e30f60677d09b1b4eab1a4998dde28e" [[package]] name = "memchr" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1502,7 +1519,7 @@ dependencies = [ [[package]] name = "mime" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1510,7 +1527,7 @@ dependencies = [ [[package]] name = "mio" -version = "0.6.14" +version = "0.6.15" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1518,11 +1535,11 @@ dependencies = [ "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazycell 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1532,7 +1549,7 @@ version = "0.2.1" 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)", - "net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1540,7 +1557,7 @@ dependencies = [ [[package]] name = "multiaddr" version = "0.3.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ "byteorder 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "cid 0.2.3 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", @@ -1558,7 +1575,7 @@ dependencies = [ [[package]] name = "multihash" version = "0.8.1-pre" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ "sha1 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "sha2 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1568,11 +1585,11 @@ dependencies = [ [[package]] name = "multistream-select" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "varint 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", @@ -1597,9 +1614,9 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "openssl 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)", - "schannel 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "schannel 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", "security-framework 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", "security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1607,12 +1624,12 @@ dependencies = [ [[package]] name = "net2" -version = "0.2.32" +version = "0.2.33" 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.41 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1625,21 +1642,21 @@ name = "num-bigint" version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-integer 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-integer" -version = "0.1.38" +version = "0.1.39" 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)", + "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-traits" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1647,7 +1664,7 @@ name = "num_cpus" version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1666,20 +1683,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.33 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl-sys 0.9.35 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "openssl-sys" -version = "0.9.33" +version = "0.9.35" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", - "vcpkg 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "pkg-config 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)", + "vcpkg 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1687,7 +1704,7 @@ name = "owning_ref" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1709,10 +1726,10 @@ dependencies = [ [[package]] name = "parity-wasm" -version = "0.31.0" +version = "0.31.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)", + "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1745,7 +1762,7 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lock_api 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1757,10 +1774,10 @@ name = "parking_lot_core" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1783,7 +1800,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "pkg-config" -version = "0.3.11" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1830,9 +1847,9 @@ dependencies = [ name = "polkadot-availability-store" version = "0.1.0" dependencies = [ - "kvdb 0.1.0 (git+https://github.com/paritytech/parity.git)", - "kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity.git)", - "kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity.git)", + "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common)", + "kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common)", + "kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity-common)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-primitives 0.1.0", @@ -1848,14 +1865,14 @@ dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "exit-future 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "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)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-primitives 0.1.0", "polkadot-runtime 0.1.0", "polkadot-service 0.3.0", "polkadot-transaction-pool 0.1.0", - "slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-cli 0.3.0", "substrate-client 0.1.0", "substrate-codec 0.1.0", @@ -1877,7 +1894,7 @@ version = "0.1.0" dependencies = [ "ed25519 0.1.0", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-api 0.1.0", "polkadot-cli 0.3.0", "polkadot-primitives 0.1.0", @@ -1905,7 +1922,7 @@ dependencies = [ "polkadot-runtime 0.1.0", "polkadot-statement-table 0.1.0", "polkadot-transaction-pool 0.1.0", - "rhododendron 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rhododendron 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-bft 0.1.0", "substrate-client 0.1.0", "substrate-codec 0.1.0", @@ -1931,13 +1948,13 @@ version = "0.1.0" dependencies = [ "ed25519 0.1.0", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-api 0.1.0", "polkadot-availability-store 0.1.0", "polkadot-consensus 0.1.0", "polkadot-primitives 0.1.0", - "rhododendron 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rhododendron 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-bft 0.1.0", "substrate-codec 0.1.0", "substrate-network 0.1.0", @@ -1960,8 +1977,8 @@ name = "polkadot-primitives" version = "0.1.0" dependencies = [ "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)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-primitives 0.1.0", @@ -1978,8 +1995,8 @@ dependencies = [ "polkadot-primitives 0.1.0", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 0.1.0", - "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 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", @@ -2006,7 +2023,7 @@ dependencies = [ "ed25519 0.1.0", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "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)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-api 0.1.0", @@ -2017,7 +2034,7 @@ dependencies = [ "polkadot-primitives 0.1.0", "polkadot-runtime 0.1.0", "polkadot-transaction-pool 0.1.0", - "slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-client 0.1.0", "substrate-codec 0.1.0", "substrate-network 0.1.0", @@ -2080,7 +2097,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "proc-macro2" -version = "0.4.4" +version = "0.4.9" 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)", @@ -2088,7 +2105,7 @@ dependencies = [ [[package]] name = "protobuf" -version = "2.0.3" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2096,7 +2113,7 @@ name = "pulldown-cmark" version = "0.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "getopts 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "getopts 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2104,7 +2121,7 @@ name = "pwasm-alloc" version = "0.1.0" dependencies = [ "pwasm-libc 0.1.0", - "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2116,9 +2133,9 @@ name = "pwasm-utils" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-wasm 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2133,10 +2150,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "quote" -version = "0.6.3" +version = "0.6.5" 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.9 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2145,7 +2162,7 @@ version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2155,20 +2172,20 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rand" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2181,33 +2198,33 @@ name = "rayon" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rayon-core 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rayon" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ + "crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon-core 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rayon-core" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.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 = "redox_syscall" -version = "0.1.39" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2215,7 +2232,7 @@ name = "redox_termios" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "redox_syscall 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2223,7 +2240,7 @@ name = "regex" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "regex-syntax 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2235,7 +2252,7 @@ name = "regex" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "regex-syntax 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2271,12 +2288,12 @@ name = "remove_dir_all" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rhododendron" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2291,7 +2308,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2301,7 +2318,7 @@ name = "rlp" version = "0.2.1" source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2312,7 +2329,7 @@ name = "rlp" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2323,7 +2340,7 @@ name = "rocksdb" version = "0.4.5" source = "git+https://github.com/paritytech/rust-rocksdb#ecf06adf3148ab10f6f7686b724498382ff4f36e" dependencies = [ - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "local-encoding 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "rocksdb-sys 0.3.0 (git+https://github.com/paritytech/rust-rocksdb)", ] @@ -2333,8 +2350,8 @@ name = "rocksdb-sys" version = "0.3.0" source = "git+https://github.com/paritytech/rust-rocksdb#ecf06adf3148ab10f6f7686b724498382ff4f36e" dependencies = [ - "cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "local-encoding 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "snappy-sys 0.1.0 (git+https://github.com/paritytech/rust-snappy)", ] @@ -2345,7 +2362,7 @@ version = "0.2.36" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2353,7 +2370,7 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2373,7 +2390,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "rustc_version" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2382,9 +2399,9 @@ dependencies = [ [[package]] name = "rw-stream-sink" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2393,7 +2410,7 @@ dependencies = [ name = "safe-mix" version = "0.1.0" dependencies = [ - "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2403,11 +2420,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "schannel" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2427,7 +2444,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2437,7 +2454,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2455,27 +2472,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde" -version = "1.0.70" +version = "1.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde_derive" -version = "1.0.70" +version = "1.0.71" 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)", + "proc-macro2 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.14.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_json" -version = "1.0.22" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 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)", + "dtoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2495,7 +2512,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "block-buffer 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "digest 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", + "digest 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)", "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2524,12 +2541,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "slab" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "slog" -version = "2.2.3" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2537,7 +2554,7 @@ name = "slog-async" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "take_mut 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2547,10 +2564,10 @@ name = "slog-json" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "chrono 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.22 (registry+https://github.com/rust-lang/crates.io-index)", - "slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2560,7 +2577,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crossbeam 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2580,7 +2597,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "smallvec" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2591,13 +2608,13 @@ name = "snappy-sys" version = "0.1.0" source = "git+https://github.com/paritytech/rust-snappy#798408ffef8f86dd51481673aca10f5348d7491b" dependencies = [ - "cmake 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "cmake 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "stable_deref_trait" -version = "1.0.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2628,7 +2645,7 @@ dependencies = [ "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)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rhododendron 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rhododendron 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-executor 0.1.0", "substrate-keyring 0.1.0", @@ -2645,19 +2662,19 @@ version = "0.3.0" dependencies = [ "ansi_term 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", "app_dirs 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "atty 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", - "backtrace 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "exit-future 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "fdlimit 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "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)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "names 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "regex 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-client 0.1.0", "substrate-extrinsic-pool 0.1.0", "substrate-network 0.1.0", @@ -2682,7 +2699,7 @@ dependencies = [ "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", - "slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-bft 0.1.0", "substrate-codec 0.1.0", "substrate-executor 0.1.0", @@ -2729,17 +2746,17 @@ dependencies = [ name = "substrate-executor" version = "0.1.0" 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)", + "assert_matches 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "ed25519 0.1.0", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", "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)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.5.5 (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)", + "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-io 0.1.0", @@ -2747,7 +2764,7 @@ dependencies = [ "substrate-serializer 0.1.0", "substrate-state-machine 0.1.0", "triehash 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "twox-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "twox-hash 1.1.1 (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)", ] @@ -2760,8 +2777,8 @@ dependencies = [ "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)", "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)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "transaction-pool 1.12.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2771,7 +2788,7 @@ version = "0.1.0" dependencies = [ "ed25519 0.1.0", "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)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2783,9 +2800,9 @@ dependencies = [ "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common)", "rand 0.4.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)", - "serde_json 1.0.22 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)", "subtle 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2794,7 +2811,7 @@ dependencies = [ name = "substrate-misbehavior-check" version = "0.1.0" dependencies = [ - "rhododendron 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rhododendron 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-bft 0.1.0", "substrate-codec 0.1.0", "substrate-keyring 0.1.0", @@ -2811,7 +2828,7 @@ dependencies = [ "ed25519 0.1.0", "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethcore-io 1.12.0 (git+https://github.com/paritytech/parity)", + "ethcore-io 1.12.0 (git+https://github.com/paritytech/parity.git)", "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)", @@ -2829,25 +2846,25 @@ dependencies = [ name = "substrate-network-libp2p" version = "0.1.0" dependencies = [ - "assert_matches 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "assert_matches 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethcore-io 1.12.0 (git+https://github.com/paritytech/parity)", - "ethcore-logger 1.12.0 (git+https://github.com/paritytech/parity)", + "ethcore-io 1.12.0 (git+https://github.com/paritytech/parity.git)", + "ethcore-logger 1.12.0 (git+https://github.com/paritytech/parity.git)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "ethkey 0.3.0 (git+https://github.com/paritytech/parity)", + "ethkey 0.3.0 (git+https://github.com/paritytech/parity.git)", "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)", "ipnetwork 0.12.8 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common)", "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", "varint 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", ] @@ -2856,7 +2873,7 @@ name = "substrate-primitives" version = "0.1.0" dependencies = [ "blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "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 (git+https://github.com/paritytech/parity-common)", @@ -2867,12 +2884,12 @@ dependencies = [ "pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", "rustc-hex 2.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)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-runtime-std 0.1.0", "substrate-serializer 0.1.0", - "twox-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "uint 0.2.2 (git+https://github.com/paritytech/parity-common)", "wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2881,7 +2898,7 @@ dependencies = [ name = "substrate-rpc" version = "0.1.0" dependencies = [ - "assert_matches 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "assert_matches 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "jsonrpc-core 8.0.2 (git+https://github.com/paritytech/jsonrpc.git)", "jsonrpc-macros 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)", @@ -2918,8 +2935,8 @@ name = "substrate-runtime-consensus" version = "0.1.0" dependencies = [ "hex-literal 0.1.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)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-io 0.1.0", @@ -2933,11 +2950,11 @@ dependencies = [ name = "substrate-runtime-contract" version = "0.1.0" dependencies = [ - "assert_matches 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-wasm 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)", + "assert_matches 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-wasm 0.31.3 (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)", - "serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-consensus 0.1.0", @@ -2960,8 +2977,8 @@ 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)", "safe-mix 0.1.0", - "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 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", @@ -2983,8 +3000,8 @@ version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 0.1.0", - "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 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-consensus 0.1.0", @@ -3003,8 +3020,8 @@ name = "substrate-runtime-executive" version = "0.1.0" dependencies = [ "hex-literal 0.1.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)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-consensus 0.1.0", @@ -3026,7 +3043,7 @@ dependencies = [ "environmental 0.1.0", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", - "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-std 0.1.0", @@ -3040,10 +3057,10 @@ version = "0.1.0" 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)", - "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.22 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-io 0.1.0", @@ -3055,7 +3072,7 @@ dependencies = [ name = "substrate-runtime-sandbox" version = "0.1.0" dependencies = [ - "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-io 0.1.0", @@ -3070,8 +3087,8 @@ version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 0.1.0", - "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 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", @@ -3090,8 +3107,8 @@ version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 0.1.0", - "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 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", @@ -3113,7 +3130,7 @@ version = "0.1.0" dependencies = [ "pwasm-alloc 0.1.0", "pwasm-libc 0.1.0", - "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3122,8 +3139,8 @@ version = "0.1.0" dependencies = [ "ed25519 0.1.0", "hex-literal 0.1.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)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-io 0.1.0", @@ -3136,8 +3153,8 @@ version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 0.1.0", - "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 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-io 0.1.0", @@ -3151,8 +3168,8 @@ name = "substrate-runtime-timestamp" version = "0.1.0" dependencies = [ "hex-literal 0.1.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)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-consensus 0.1.0", @@ -3167,8 +3184,8 @@ dependencies = [ name = "substrate-runtime-version" version = "0.1.0" dependencies = [ - "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 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-runtime-std 0.1.0", "substrate-runtime-support 0.1.0", @@ -3178,8 +3195,8 @@ dependencies = [ name = "substrate-serializer" version = "0.1.0" dependencies = [ - "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.22 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3189,13 +3206,13 @@ dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "exit-future 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "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)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (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)", - "serde_json 1.0.22 (registry+https://github.com/rust-lang/crates.io-index)", - "slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-client 0.1.0", "substrate-client-db 0.1.0", "substrate-codec 0.1.0", @@ -3218,7 +3235,7 @@ name = "substrate-state-db" version = "0.1.0" dependencies = [ "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", @@ -3228,7 +3245,7 @@ dependencies = [ name = "substrate-state-machine" version = "0.1.0" dependencies = [ - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", "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)", @@ -3244,14 +3261,14 @@ dependencies = [ name = "substrate-telemetry" version = "0.3.0" dependencies = [ - "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "slog-async 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "slog-json 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "slog-scope 4.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "websocket 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)", + "websocket 0.20.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3259,7 +3276,7 @@ name = "substrate-test-client" version = "0.1.0" dependencies = [ "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", - "rhododendron 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rhododendron 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-bft 0.1.0", "substrate-client 0.1.0", "substrate-codec 0.1.0", @@ -3278,8 +3295,8 @@ dependencies = [ "ed25519 0.1.0", "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)", - "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 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", @@ -3297,11 +3314,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "syn" -version = "0.14.1" +version = "0.14.7" 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)", + "proc-macro2 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3335,9 +3352,9 @@ version = "2.2.0" 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)", - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3346,8 +3363,8 @@ name = "termion" version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.39 (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.40 (registry+https://github.com/rust-lang/crates.io-index)", "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3364,7 +3381,7 @@ name = "thread_local" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3373,9 +3390,9 @@ name = "time" version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.41 (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)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3383,7 +3400,7 @@ name = "timer" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "chrono 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3400,15 +3417,15 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-fs 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-fs 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tcp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-udp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tcp 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-udp 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3416,7 +3433,7 @@ name = "tokio-codec" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3426,26 +3443,26 @@ name = "tokio-core" version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", "scoped-tls 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-current-thread" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3455,13 +3472,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-executor" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3469,12 +3486,12 @@ dependencies = [ [[package]] name = "tokio-fs" -version = "0.1.0" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3482,9 +3499,9 @@ name = "tokio-io" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3494,7 +3511,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "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)", - "net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3506,14 +3523,14 @@ dependencies = [ [[package]] name = "tokio-reactor" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3527,37 +3544,37 @@ dependencies = [ [[package]] name = "tokio-tcp" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-threadpool" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crossbeam-deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-timer" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3573,15 +3590,16 @@ dependencies = [ [[package]] name = "tokio-udp" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3637,10 +3655,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "twox-hash" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3663,10 +3681,10 @@ name = "uint" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3674,9 +3692,9 @@ name = "uint" version = "0.2.2" source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" dependencies = [ - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3684,7 +3702,7 @@ name = "unicase" version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3692,7 +3710,7 @@ name = "unicase" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3700,7 +3718,7 @@ name = "unicode-bidi" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3733,11 +3751,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "url" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3749,19 +3767,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "varint" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" dependencies = [ - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "num-bigint 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "vcpkg" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -3780,7 +3798,7 @@ dependencies = [ [[package]] name = "version_check" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -3793,9 +3811,9 @@ name = "wabt" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "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.22 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)", "wabt-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3804,8 +3822,8 @@ name = "wabt-sys" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", - "cmake 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", + "cmake 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3814,7 +3832,7 @@ version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "try-lock 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3823,21 +3841,21 @@ name = "wasmi" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "memory_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "nan-preserving-float 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-wasm 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "websocket" -version = "0.20.2" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "base64 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)", "native-tls 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3847,7 +3865,7 @@ dependencies = [ "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3857,7 +3875,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "winapi" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3884,15 +3902,15 @@ name = "ws" version = "0.7.5" source = "git+https://github.com/tomusdrw/ws-rs#f12d19c4c19422fc79af28a3181f598bc07ecd1e" dependencies = [ - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "httparse 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", "sha1 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3919,17 +3937,17 @@ name = "yamux" version = "0.1.0" source = "git+https://github.com/paritytech/yamux#4e3ae609ad29cae56c249353be37a473413a84da" dependencies = [ - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [metadata] -"checksum aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d6531d44de723825aa81398a6415283229725a00fa30713812ab9323faa82fc4" +"checksum aho-corasick 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c1c6d463cbe7ed28720b5b489e7c083eeb8f90d08be2a0d6bb9e1ffea9ce1afa" "checksum aio-limited 0.1.0 (git+https://github.com/paritytech/aio-limited.git)" = "" "checksum ansi_term 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6b3568b48b7cefa6b8ce125f9bb4989e52fbcc29ebea88df04cc7c5f12f70455" "checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" @@ -3938,35 +3956,35 @@ dependencies = [ "checksum arrayref 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0fd1479b7c29641adbd35ff3b5c293922d696a92f25c8c975da3e0acbc87258f" "checksum arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a1e964f9e24d588183fcb43503abda40d288c8657dfc27311516ce2f05675aef" "checksum asn1_der 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f9dec199e4d3e3263a71ec23fd7f0259b3c6963ff83e6bb4871d9d91343d4c81" -"checksum assert_matches 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "664470abf00fae0f31c0eb6e1ca12d82961b2a2541ef898bc9dd51a9254d218b" -"checksum atty 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "2fc4a1aa4c24c0718a250f0681885c1af91419d242f29eb8f2ab28502d80dbd1" -"checksum backtrace 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "dbdd17cd962b570302f5297aea8648d5923e22e555c2ed2d8b2e34eca646bf6d" +"checksum assert_matches 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7deb0a829ca7bcfaf5da70b073a8d128619259a7be8216a355e23f00763059e5" +"checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652" +"checksum backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "89a47830402e9981c5c41223151efcced65a0510c13097c769cede7efb34782a" "checksum backtrace-sys 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)" = "bff67d0c06556c0b8e6b5f090f0eac52d950d9dfd1d35ba04e4ca3543eaf6a7e" "checksum base-x 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2f59103b47307f76e03bef1633aec7fa9e29bfb5aa6daf5a334f94233c71f6c1" "checksum base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" "checksum base64 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "30e93c03064e7590d0466209155251b90c22e37fab1daf2771582598b5827557" "checksum base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "96434f987501f0ed4eb336a411e0631ecd1afa11574fe148587adc4ff96143c9" "checksum base64 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5032d51da2741729bfdaeb2664d9b8c6d9fd1e2b90715c660b6def36628499c2" -"checksum base64 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9263aa6a38da271eec5c91a83ce1e800f093c8535788d403d626d8d5c3f8f007" +"checksum base64 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "85415d2594767338a74a30c1d370b2f3262ec1b4ed2d7bba5b3faf4de40467d9" "checksum bigint 4.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "da1dde4308822ffaa13665757273a1b787481212f3f9b1c470a864b179a01f1b" "checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d" "checksum bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5" "checksum bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d0c54bb8f454c567f21197eefcdbf5679d0bd99f2ddbe52e84c77061952e6789" "checksum blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" "checksum block-buffer 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a076c298b9ecdb530ed9d967e74a6027d6a7478924520acddcddc24c1c8ab3ab" -"checksum bs58 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2e6ea4851598d7433fbdba71fa2509d9b0df68124b9c0effe7588f5149692d9f" +"checksum bs58 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ddb9ab176abd79659b93be4396f59156c3ee80f8cc83d1cb588335052c428047" "checksum byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40" "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 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 byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8389c509ec62b9fe8eca58c502a0acaf017737355615243496cde4994f8fa4f9" +"checksum bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e178b8e0e239e844b083d5a0d4a156b2654e67f9f80144d48398fcd736a24fb8" +"checksum cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)" = "2119ea4867bd2b8ed3aecab467709720b2d55b1bcfe09f772fd68066eaf15275" +"checksum cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "efe5c877e17a9c717a0bf3613b2709f723202c4e4675cc8f12926ded29bcb17e" "checksum chashmap 2.2.1 (git+https://github.com/redox-os/tfs)" = "" -"checksum chrono 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1cce36c92cb605414e9b824f866f5babe0a0368e39ea07393b9b63cf3844c0e6" +"checksum chrono 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e48d85528df61dc964aa43c5f6ca681a19cfa74939b2348d204bd08a981f2fb0" "checksum cid 0.2.3 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)" = "" "checksum clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b957d88f4b6a63b9d70d5f454ac8011819c6efa7727858f458ab71c756ce2d3e" "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -"checksum cmake 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "95470235c31c726d72bf2e1f421adc1e65b9d561bf5529612cbe1a72da1467b3" +"checksum cmake 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "b56821938fa1a3aaf4f0c4f49504928c5a7fcc56cbc9855be8fc2e98567e750c" "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" @@ -3975,15 +3993,15 @@ dependencies = [ "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" "checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150" -"checksum crossbeam-epoch 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9b4e2817eb773f770dcb294127c011e22771899c21d18fce7dd739c0b9832e81" +"checksum crossbeam-epoch 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2af0e75710d6181e234c8ecc79f14a97907850a541b13b0be1dd10992f2e4620" "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" "checksum crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d636a8b3bcc1b409d7ffd3facef8f21dcb4009626adbd0c5e6c4305c07253c7b" "checksum crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a2f4a431c5c9f662e1200b7c7f02c34e91361150e382089a8f2dec3ba680cbda" "checksum ctrlc 1.1.1 (git+https://github.com/paritytech/rust-ctrlc.git)" = "" "checksum datastore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)" = "" "checksum difference 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3304d19798a8e067e48d8e69b2c37f0b5e9b4e462504ad9e27e9f3fce02bba8" -"checksum digest 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3cae2388d706b52f2f2f9afe280f9d768be36544bd71d1b8120cb34ea6450b55" -"checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab" +"checksum digest 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "5b29c278aa8fd30796bd977169e8004b4aa88cdcd2f32a6eb22bc2d5d38df94a" +"checksum dtoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6d301140eb411af13d3115f9a562c85cc6b541ade9dfa314132244aaee7489dd" "checksum edit-distance 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3bd26878c3d921f89797a4e1a1711919f999a9f6946bb6f5a4ffda126d297b7e" "checksum either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3be565ca5c557d7f59e7cfcf1844f9e3033650c929c6566f511e8005f205c1d0" "checksum elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "88d4851b005ef16de812ea9acdb7bece2f0a40dd86c07b85631d7dafa54537bb" @@ -3992,11 +4010,11 @@ dependencies = [ "checksum error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "07e791d3be96241c77c43846b665ef1384606da2cd2a48730abe606a12906e02" "checksum eth-secp256k1 0.5.7 (git+https://github.com/paritytech/rust-secp256k1)" = "" "checksum ethbloom 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a93a43ce2e9f09071449da36bfa7a1b20b950ee344b6904ff23de493b03b386" -"checksum ethcore-io 1.12.0 (git+https://github.com/paritytech/parity)" = "" -"checksum ethcore-logger 1.12.0 (git+https://github.com/paritytech/parity)" = "" +"checksum ethcore-io 1.12.0 (git+https://github.com/paritytech/parity.git)" = "" +"checksum ethcore-logger 1.12.0 (git+https://github.com/paritytech/parity.git)" = "" "checksum ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c48729b8aea8aedb12cf4cb2e5cef439fdfe2dda4a89e47eeebd15778ef53b6" "checksum ethereum-types-serialize 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ac59a21a9ce98e188f3dace9eb67a6c4a3c67ec7fbc7218cb827852679dc002" -"checksum ethkey 0.3.0 (git+https://github.com/paritytech/parity)" = "" +"checksum ethkey 0.3.0 (git+https://github.com/paritytech/parity.git)" = "" "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 fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" @@ -4006,31 +4024,31 @@ dependencies = [ "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" -"checksum fs-swap 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "31a94e9407e53addc49de767234a0b000978523c59117e5badb575ccbb8370f6" +"checksum fs-swap 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67f816b2a5f8a6628764a4323d1a8d9ad5303266c4e4e4486ba680f477ba7e62" "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 futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "1a70b146671de62ec8c8ed572219ca5d594d9b06c0b364d5e67b722fc559b48c" "checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" "checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb" "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 getopts 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "0a7292d30132fb5424b354f5dc02512a86e4c516fe544bb7a25e7f266951b797" +"checksum globset 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8e49edbcc9c7fc5beb8c0a54e7319ff8bed353a2b55e85811c6281188c2a6c84" "checksum hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)" = "" "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" "checksum hex-literal-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1d340b6514f232f6db1bd16db65302a5278a04fef9ce867cb932e7e5fa21130a" -"checksum httparse 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "c2f407128745b78abc95c0ffbe4e5d37427fdc0d45470710cfef8c44522a2e37" +"checksum httparse 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7b6288d7db100340ca12873fd4d08ad1b8f206a9457798dfb17c018a33fee540" "checksum hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)" = "368cb56b2740ebf4230520e2b90ebb0461e69034d85d1945febd9b3971426db2" "checksum hyper 0.11.27 (registry+https://github.com/rust-lang/crates.io-index)" = "34a590ca09d341e94cddf8e5af0bbccde205d5fbc2fa3c09dd67c7f85cea59d7" -"checksum idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "014b298351066f1512874135335d62a789ffe78a9974f94b43ed5621951eaf7d" +"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" "checksum integer-encoding 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "26746cbc2e680af687e88d717f20ff90079bd10fc984ad57d277cd0e37309fa5" "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 ipnetwork 0.12.8 (registry+https://github.com/rust-lang/crates.io-index)" = "70783119ac90828aaba91eae39db32c6c1b8838deea3637e5238efa0130801ab" "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 itoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5adb58558dcd1d786b5f0bd15f3226ee23486e24b7b58304b60f64dc68e62606" "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)" = "" "checksum jsonrpc-macros 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)" = "" @@ -4044,9 +4062,10 @@ dependencies = [ "checksum kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" "checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" -"checksum lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e6412c5e2ad9584b0b8e979393122026cdd6d2a80b933f890dcd694ddbe73739" +"checksum lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca488b89a5657b0a2ecd45b95609b3e848cf1755da332a0da46e2b2b1cb371a7" "checksum lazycell 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a6f08839bc70ef4a3fe1d566d5350f519c5912ea86be0df1740a7d247c7fc0ef" -"checksum libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)" = "ac8ebf8343a981e2fa97042b14768f02ed3e1d602eac06cae6166df3c8ced206" +"checksum libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)" = "76e3a3ef172f1a0b9a9ff0dd1491ae5e6c948b94479a3021819ba7d860c8645d" +"checksum libloading 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9c3ad660d7cb8c5822cd83d10897b0f1f1526792737a179e73896152f85b88c2" "checksum libp2p 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)" = "" "checksum libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)" = "" "checksum libp2p-dns 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)" = "" @@ -4067,16 +4086,16 @@ dependencies = [ "checksum local-encoding 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e1ceb20f39ff7ae42f3ff9795f3986b1daad821caaa1e1732a0944103a5a1a66" "checksum lock_api 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "949826a5ccf18c1b3a7c3d57692778d21768b79e46eb9dd07bfc4c2160036c54" "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" -"checksum log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "89f010e843f2b1a31dbd316b3b8d443758bc634bed37aabade59c686d644e0a2" -"checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376" -"checksum mem 0.1.0 (git+https://github.com/paritytech/parity)" = "" +"checksum log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "61bd98ae7f7b754bc53dca7d44b604f733c6bba044ea6f41bc8d89272d8161d2" +"checksum matches 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "835511bab37c34c47da5cb44844bea2cfde0236db0b506f90ea4224482c9774a" +"checksum mem 0.1.0 (git+https://github.com/paritytech/parity.git)" = "" "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_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" "checksum memorydb 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" "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" +"checksum mime 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "fe51c8699d2dc522bf8c1ebe26ea2193d151fb54bcdfd7d0318750c189994cd9" +"checksum mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)" = "4fcfcb32d63961fb6f367bfd5d21e4600b92cd310f71f9dca25acae196eb1560" "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" "checksum multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)" = "" "checksum multibase 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b9c35dac080fd6e16a99924c8dfdef0af89d797dd851adab25feaffacf7850d6" @@ -4085,46 +4104,46 @@ dependencies = [ "checksum names 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef320dab323286b50fb5cdda23f61c796a72a89998ab565ca32525c5c556f2da" "checksum nan-preserving-float 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34d4f00fcc2f4c9efa8cc971db0da9e28290e28e97af47585e48691ef10ff31f" "checksum native-tls 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f74dbadc8b43df7864539cedb7bc91345e532fdd913cfdc23ad94f4d2d40fbc0" -"checksum net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)" = "9044faf1413a1057267be51b5afba8eb1090bd2231c693664aa1db716fe1eae0" +"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2" "checksum num-bigint 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)" = "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1" -"checksum num-integer 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)" = "6ac0ea58d64a89d9d6b7688031b3be9358d6c919badcf7fbb0527ccfd891ee45" -"checksum num-traits 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "775393e285254d2f5004596d69bb8bc1149754570dcc08cf30cabeba67955e28" +"checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea" +"checksum num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "630de1ef5cc79d0cdd78b7e33b81f083cbfe90de0f4b2b2f07f905867c70e9fe" "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 openssl-sys 0.9.35 (registry+https://github.com/rust-lang/crates.io-index)" = "912f301a749394e1025d9dcddef6106ddee9252620e6d0a0e5f8d0681de9b129" "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" "checksum parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" -"checksum parity-wasm 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e1c91199d14bd5b78ecade323d4a891d094799749c1b9e82d9c590c2e2849a40" +"checksum parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)" = "511379a8194230c2395d2f5fa627a5a7e108a9f976656ce723ae68fca4097bfc" "checksum parity-wordlist 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d0dec124478845b142f68b446cbee953d14d4b41f1bc0425024417720dce693" "checksum parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e" "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 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "69376b761943787ebd5cc85a5bc95958651a22609c5c1c2b65de21786baec72b" "checksum parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "4db1a8ccf734a7bce794cc19b3df06ed87ab2f3907036b693c68f56b4d4537fa" "checksum patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" "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 pkg-config 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)" = "104630aa1c83213cbc76db0703630fcb0421dac3585063be4ce9a8a2feeaa745" "checksum plain_hasher 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "28ea5118e2f41bfbc974b28d88c07621befd1fa5d6ec23549be96302a1a59dd2" "checksum proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ba8d4f9257b85eb6cdf13f055cea3190520aab1409ca2ab43493ea4820c25f0" "checksum proc-macro-hack-impl 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d5cb6f960ad471404618e9817c0e5d10b1ae74cfdf01fab89ea0641fe7fb2892" -"checksum proc-macro2 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1fa93823f53cfd0f5ac117b189aed6cfdfb2cfc0a9d82e956dd7927595ed7d46" -"checksum protobuf 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7fec4b8f0fa26c52d29c66e93e8624aad859458ec5e5d4f6ddf923954293436a" +"checksum proc-macro2 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)" = "cccdc7557a98fe98453030f077df7f3a042052fae465bb61d2c2c41435cfd9b6" +"checksum protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "128a4f37a2df739a567a8685b17f54aa19b9c3c4a6a5b8731e97a419b3db451c" "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" "checksum quick-error 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5fb6ccf8db7bbcb9c2eae558db5ab4f3da1c2a87e4e597ed394726bc8ea6ca1d" "checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" -"checksum quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e44651a0dc4cdd99f71c83b561e221f714912d11af1a4dff0631f923d53af035" +"checksum quote 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3372dc35766b36a99ce2352bd1b6ea0137c38d215cc0c8780bf6de6df7842ba9" "checksum rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "15a732abf9d20f0ad8eeb6f909bf6868722d9a06e1e50802b6a70351f40b4eb1" "checksum rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "eba5f8cb59cc50ed56be8880a5c7b496bfd9bd26394e176bc67884094145c2c5" -"checksum rand 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6802c0e883716383777e147b7c21323d5de7527257c8b6dc1365a7f2983e90f6" +"checksum rand 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "12397506224b2f93e6664ffc4f664b29be8208e5157d3d90b44f09b5fae470ea" "checksum rand_core 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "edecf0f94da5551fc9b492093e30b041a891657db7940ee221f9d2f66e82eef2" "checksum rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b614fe08b6665cb9a231d07ac1364b0ef3cb3698f1239ee0c4c3a88a524f54c8" -"checksum rayon 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "80e811e76f1dbf68abf87a759083d34600017fc4e10b6bd5ad84a700f9dba4b1" -"checksum rayon-core 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9d24ad214285a7729b174ed6d3bcfcb80177807f959d95fafd5bfc5c4f201ac8" -"checksum redox_syscall 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "6b8493950b18ff11387fef7fd9a9979f4dd77a36e182f754385838c70404b73e" +"checksum rayon 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "df7a791f788cb4c516f0e091301a29c2b71ef680db5e644a7d68835c8ae6dbfa" +"checksum rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b055d1e92aba6877574d8fe604a63c8b5df60f60e5982bf7ccbb1338ea527356" +"checksum redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "c214e91d3ecf43e9a4e41e578973adeb14b474f2bee858742d127af75a0112b1" "checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" "checksum regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9329abc99e39129fcceabd24cf5d85b4671ef7c29c50e972bc5afe32438ec384" "checksum regex 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5bbbea44c5490a1e84357ff28b7d518b4619a159fed5d25f6c1de2d19cc42814" @@ -4132,51 +4151,51 @@ dependencies = [ "checksum regex-syntax 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "747ba3b235651f6e2f67dfa8bcdcd073ddb7c243cb21c442fc12395dfcac212d" "checksum relay 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1576e382688d7e9deecea24417e350d3062d97e32e45d70b1cde65994ff1489a" "checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5" -"checksum rhododendron 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9e38401cc1b63e71ec9119115c7e1354fcf54c8006ad59a22409dd8bd93737b2" +"checksum rhododendron 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c8502867a61713f8297ed13b8de6fcdec1286d3a9ea543628f55bcfa8b30ac57" "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" "checksum rlp 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" "checksum rlp 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "89db7f8dfdd5eb7ab3ac3ece7a07fd273a680b4b224cb231181280e8996f9f0b" "checksum rocksdb 0.4.5 (git+https://github.com/paritytech/rust-rocksdb)" = "" "checksum rocksdb-sys 0.3.0 (git+https://github.com/paritytech/rust-rocksdb)" = "" "checksum rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)" = "f76d05d3993fd5f4af9434e8e436db163a12a9d40e1a58a726f27a01dfd12a2a" -"checksum rustc-demangle 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "76d7ba1feafada44f2d38eed812bd2489a03c0f5abb975799251518b68848649" +"checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395" "checksum rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0ceb8ce7a5e520de349e1fa172baeba4a9e8d5ef06c47471863530bc4972ee1e" "checksum rustc-hex 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d2b03280c2813907a030785570c577fb27d3deec8da4c18566751ade94de0ace" "checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" -"checksum rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a54aa04a10c68c1c4eacb4337fd883b435997ede17a9385784b990777686b09a" +"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" "checksum rw-stream-sink 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)" = "" "checksum safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e27a8b19b835f7aea908818e871f5cc3a5a186550c30773be987e155e8163d8f" -"checksum schannel 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "85fd9df495640643ad2d00443b3d78aae69802ad488debab4f1dd52fc1806ade" +"checksum schannel 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "dc1fabf2a7b6483a141426e1afd09ad543520a77ac49bd03c286e7696ccfd77f" "checksum scoped-tls 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "332ffa32bf586782a3efaeb58f127980944bbc8c4d6913a86107ac2a5ab24b28" "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" "checksum security-framework 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "dfa44ee9c54ce5eecc9de7d5acbad112ee58755239381f687e564004ba4a2332" "checksum security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "5421621e836278a0b139268f36eee0dc7e389b784dc3f79d8f11aabadf41bead" "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -"checksum serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)" = "0c3adf19c07af6d186d91dae8927b83b0553d07ca56cbf7f2f32560455c91920" -"checksum serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)" = "3525a779832b08693031b8ecfb0de81cd71cfd3812088fafe9a7496789572124" -"checksum serde_json 1.0.22 (registry+https://github.com/rust-lang/crates.io-index)" = "84b8035cabe9b35878adec8ac5fe03d5f6bc97ff6edd7ccb96b44c1276ba390e" +"checksum serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)" = "6dfad05c8854584e5f72fb859385ecdfa03af69c3fd0572f0da2d4c95f060bdb" +"checksum serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)" = "b719c6d5e9f73fbc37892246d5852333f040caa617b8873c6aced84bcb28e7bb" +"checksum serde_json 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)" = "c3c6908c7b925cd6c590358a4034de93dbddb20c45e1d021931459fd419bf0e2" "checksum sha1 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cc30b1e1e8c40c121ca33b86c23308a090d19974ef001b4bf6e61fd1a0fb095c" "checksum sha1 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "171698ce4ec7cbb93babeb3190021b4d72e96ccb98e33d277ae4ea959d6f2d9e" "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 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.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fdeff4cd9ecff59ec7e3744cbca73dfe5ac35c2aedb2cfba8a1c715a18912e9d" -"checksum slog 2.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2f7bfce6405155042d42ec0e645efe43eddedd7be280063ce0623b120014e7f9" +"checksum slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5f9776d6b986f77b35c6cf846c11ad986ff128fe0b2b63a3628e3755e8d3102d" +"checksum slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b3253057a9e9e291d19fa9c7645290ab61aff1d009b77b0065fff8accd833c04" "checksum slog-async 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e544d16c6b230d84c866662fe55e31aacfca6ae71e6fc49ae9a311cb379bfc2f" "checksum slog-json 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ddd14b8df2df39378b3e933c79784350bf715b11444d99f903df0253bbe524e5" "checksum slog-scope 4.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "053344c94c0e2b22da6305efddb698d7c485809427cf40555dc936085f67a9df" "checksum smallvec 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4c8cbcd6df1e117c2210e13ab5109635ad68a929fcbb8964dc965b76cb5ee013" "checksum smallvec 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f90c5e5fe535e48807ab94fc611d323935f39d4660c52b26b96446a7b33aef10" "checksum smallvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1347484b6f8bc4b32a9323d9800b6d934376391002ad9c528cc659fe8afc08ee" -"checksum smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "26df3bb03ca5eac2e64192b723d51f56c1b1e0860e7c766281f4598f181acdc8" +"checksum smallvec 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "211a489e65e94b103926d2054ae515a1cdb5d515ea0ef414fee23b7e043ce748" "checksum snappy-sys 0.1.0 (git+https://github.com/paritytech/rust-snappy)" = "" -"checksum stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "15132e0e364248108c5e2c02e3ab539be8d6f5d52a01ca9bbf27ed657316f02b" +"checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" "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.7 (registry+https://github.com/rust-lang/crates.io-index)" = "e2e13df71f29f9440b50261a5882c86eac334f1badb3134ec26f0de2f1418e44" "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" @@ -4191,26 +4210,26 @@ dependencies = [ "checksum tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8ee337e5f4e501fc32966fec6fe0ca0cc1c237b0b1b14a335f8bfe3c5f06e286" "checksum tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "881e9645b81c2ce95fcb799ded2c29ffb9f25ef5bef909089a420e5961dd8ccb" "checksum tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "aeeffbbb94209023feaef3c196a41cbcdafa06b4a6f893f68779bb5e53796f71" -"checksum tokio-current-thread 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9f785265962bde425bf3b77dd6abac6674b8c6d5e8831427383aa9c56c5210e1" +"checksum tokio-current-thread 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8fdfb899688ac16f618076bd09215edbfda0fd5dfecb375b6942636cb31fa8a7" "checksum tokio-dns-unofficial 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bb9bf62ca2c53bf2f2faec3e48a98b6d8c9577c27011cb0203a4beacdc8ab328" -"checksum tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8cac2a7883ff3567e9d66bb09100d09b33d90311feca0206c7ca034bc0c55113" -"checksum tokio-fs 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "76766830bbf9a2d5bfb50c95350d56a2e79e2c80f675967fff448bc615899708" +"checksum tokio-executor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "424f0c87ecd66b863045d84e384cb7ce0ae384d8b065b9f0363d29c0d1b30b2f" +"checksum tokio-fs 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b5cbe4ca6e71cb0b62a66e4e6f53a8c06a6eefe46cc5f665ad6f274c9906f135" "checksum tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a5c9635ee806f26d302b8baa1e145689a280d8f5aa8d0552e7344808da54cc21" "checksum tokio-proto 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8fbb47ae81353c63c487030659494b295f6cb6576242f907f203473b191b0389" -"checksum tokio-reactor 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b3cedc8e5af5131dc3423ffa4f877cce78ad25259a9a62de0613735a13ebc64b" +"checksum tokio-reactor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8703a5762ff6913510dc64272c714c4389ffd8c4b3cf602879b8bd14ff06b604" "checksum tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "24da22d077e0f15f55162bdbdc661228c1581892f52074fb242678d015b45162" -"checksum tokio-tcp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ec9b094851aadd2caf83ba3ad8e8c4ce65a42104f7b94d9e6550023f0407853f" -"checksum tokio-threadpool 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b3c3873a6d8d0b636e024e77b9a82eaab6739578a06189ecd0e731c7308fbc5d" -"checksum tokio-timer 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "028b94314065b90f026a21826cffd62a4e40a92cda3e5c069cc7b02e5945f5e9" +"checksum tokio-tcp 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5b4c329b47f071eb8a746040465fa751bd95e4716e98daef6a9b4e434c17d565" +"checksum tokio-threadpool 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "24ab84f574027b0e875378f31575cf175360891919e93a3490f07e76e00e4efb" +"checksum tokio-timer 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1c76b4e97a4f61030edff8bd272364e4f731b9f54c7307eb4eb733c3926eb96a" "checksum tokio-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "772f4b04e560117fe3b0a53e490c16ddc8ba6ec437015d91fa385564996ed913" -"checksum tokio-udp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "137bda266504893ac4774e0ec4c2108f7ccdbcb7ac8dced6305fe9e4e0b5041a" +"checksum tokio-udp 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "43eb534af6e8f37d43ab1b612660df14755c42bd003c5f8d2475ee78cc4600c0" "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.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "be1efb673ddf49ab4a99893eb3af02f6563636033fb832c2b7f937641ad62b17" "checksum triehash 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2033893a813c70e7d8a739ca6c36dc0a7a2c913ec718d7cbf84a3837bbe3c7ce" "checksum triehash 0.2.0 (git+https://github.com/paritytech/parity-common)" = "" "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 twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4f85be565a110ed72ed7048cf56570db04ce0a592c98aa59b7dacde3e5718750" "checksum typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887" "checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" "checksum ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd2be2d6639d0f8fe6cdda291ad456e23629558d466e2789d2c3e9892bda285d" @@ -4224,21 +4243,21 @@ dependencies = [ "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" "checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" "checksum untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f392d7819dbe58833e26872f5f6f0d68b7bbbe90fc3667e98731c4a15ad9a7ae" -"checksum url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f808aadd8cfec6ef90e4a14eb46f24511824d1ac596b9682703c87056c8678b7" +"checksum url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2a321979c09843d272956e73700d12c4e7d3d92b2ee112b31548aef0d4efc5a6" "checksum utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "662fab6525a98beff2921d7f61a39e7d59e0b425ebc7d0d9e66d316e55124122" "checksum varint 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)" = "" -"checksum vcpkg 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7ed0f6789c8a85ca41bbc1c9d175422116a9869bd1cf31bb08e1493ecce60380" +"checksum vcpkg 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cbe533e138811704c0e3cbde65a818b35d3240409b4346256c5ede403e082474" "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" "checksum vergen 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c3365f36c57e5df714a34be40902b27a992eeddb9996eca52d0584611cf885d" -"checksum version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6b772017e347561807c1aa192438c5fd74242a670a6cffacc40f2defd1dc069d" +"checksum version_check 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7716c242968ee87e5542f8021178248f267f295a5c4803beae8b8b7fd9bc6051" "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" "checksum wabt 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "182ae543249ccf2705f324d233891c1176fca142e137b55ba43d9dbfe93f18a2" "checksum wabt-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ca77c6b934a2b32618941b2f565aac43b8cb7141378c3b4fba4d8fcdcd57da3" "checksum want 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a05d9d966753fa4b5c8db73fcab5eed4549cfe0e1e4e66911e5564a0085c35d1" "checksum wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "522fe3fdd44a56f25cd5ddcd8ccdb1cf2e982ceb28fcb00f41d8a018ae5245a8" -"checksum websocket 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)" = "eb277e7f4c23dc49176f74ae200e77651764efb2c25f56ad2d22623b63826369" +"checksum websocket 0.20.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9234b4e667c19995475227172446884f516ec0963380afa960d962ab9f4c0bfa" "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" -"checksum winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "04e3bd221fcbe8a271359c04f21a76db7d0c6028862d1bb5512d85e1e2eb5bb3" +"checksum winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "773ef9dcc5f24b7d850d0ff101e542ff24c3b090a9768e03ff889fdef41f00fd" "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" From 0d4a4febfb606e5221f21d2771b704ffa58290c2 Mon Sep 17 00:00:00 2001 From: David Palm Date: Tue, 7 Aug 2018 10:02:59 +0200 Subject: [PATCH 71/97] Add dummy impl of `on_advance_round` for rhododendron::Context --- substrate/bft/src/lib.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/substrate/bft/src/lib.rs b/substrate/bft/src/lib.rs index b1091af4096f0..6b60288c66c56 100644 --- a/substrate/bft/src/lib.rs +++ b/substrate/bft/src/lib.rs @@ -260,6 +260,15 @@ impl> rhododendron::Context for BftInstance Box::new(fut) } + + // dummy impl – remove and replace with whatever the proper impl needs to be + fn on_advance_round( + &self, + _propolsal: Option<&Self::Candidate>, + _round: usize, + _next_round: usize, + _reason: rhododendron::AdvanceRoundReason, + ) {} } /// A future that resolves either when canceled (witnessing a block from the network at same height) From 63678153ea12b5569d5e75a6af47b1076fcc41da Mon Sep 17 00:00:00 2001 From: David Palm Date: Tue, 7 Aug 2018 10:43:47 +0200 Subject: [PATCH 72/97] Fix build after merge --- substrate/client/src/client.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/substrate/client/src/client.rs b/substrate/client/src/client.rs index f4f0160e7cd80..7915842b1d8ff 100644 --- a/substrate/client/src/client.rs +++ b/substrate/client/src/client.rs @@ -573,8 +573,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>>> { From cf7e3388af1fa1c4351287e471acc8d4cf002a34 Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 8 Aug 2018 15:30:04 +0200 Subject: [PATCH 73/97] Add HeapSizeOf bound where needed --- substrate/state-machine/Cargo.toml | 11 ++++++----- substrate/state-machine/src/backend.rs | 7 ++++--- substrate/state-machine/src/lib.rs | 6 ++++-- substrate/state-machine/src/proving_backend.rs | 4 +++- substrate/state-machine/src/trie_backend.rs | 9 +++++---- 5 files changed, 22 insertions(+), 15 deletions(-) diff --git a/substrate/state-machine/Cargo.toml b/substrate/state-machine/Cargo.toml index b8f65e1de8a98..0d5ec8fd68b74 100644 --- a/substrate/state-machine/Cargo.toml +++ b/substrate/state-machine/Cargo.toml @@ -9,11 +9,12 @@ byteorder = "1.1" hex-literal = "0.1.0" log = "0.3" parking_lot = "0.4" +heapsize = "0.4" substrate-primitives = { path = "../primitives", version = "0.1.0" } -hashdb = { git = "https://github.com/paritytech/parity-common" } -memorydb = { git = "https://github.com/paritytech/parity-common" } -patricia-trie = { git = "https://github.com/paritytech/parity-common" } -triehash = { git = "https://github.com/paritytech/parity-common" } -rlp = { git = "https://github.com/paritytech/parity-common" } +hashdb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } +memorydb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } +patricia-trie = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } +triehash = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } +rlp = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } diff --git a/substrate/state-machine/src/backend.rs b/substrate/state-machine/src/backend.rs index bba4f28ee551f..7db1e64d3f25f 100644 --- a/substrate/state-machine/src/backend.rs +++ b/substrate/state-machine/src/backend.rs @@ -26,6 +26,7 @@ use hashdb::Hasher; use rlp::Encodable; use trie_backend::{TryIntoTrieBackend, TrieBackend}; use patricia_trie::{TrieDBMut, TrieMut, NodeCodec}; +use heapsize::HeapSizeOf; /// A state backend is used to read state data and can have changes committed /// to it. @@ -109,7 +110,7 @@ impl PartialEq for InMemory { } } -impl> InMemory { +impl> InMemory where H::Out: HeapSizeOf { /// Copy the state, with applied updates pub fn update(&self, changes: >::Transaction) -> Self { let mut inner: HashMap<_, _> = (&*self.inner).clone(); @@ -134,7 +135,7 @@ impl From, Vec>> for InMemory { impl super::Error for Void {} -impl> Backend for InMemory { +impl> Backend for InMemory where H::Out: HeapSizeOf { type Error = Void; type Transaction = Vec<(Vec, Option>)>; @@ -172,7 +173,7 @@ impl> Backend for InMemory { } } -impl> TryIntoTrieBackend for InMemory { +impl> TryIntoTrieBackend for InMemory where H::Out: HeapSizeOf { fn try_into_trie_backend(self) -> Option> { use memorydb::MemoryDB; let mut root = ::Out::default(); diff --git a/substrate/state-machine/src/lib.rs b/substrate/state-machine/src/lib.rs index 8e27476b0e997..18bb38856fc59 100644 --- a/substrate/state-machine/src/lib.rs +++ b/substrate/state-machine/src/lib.rs @@ -31,6 +31,7 @@ extern crate patricia_trie; extern crate byteorder; extern crate parking_lot; extern crate rlp; +extern crate heapsize; #[cfg(test)] extern crate substrate_primitives as primitives; @@ -39,6 +40,7 @@ use std::fmt; use hashdb::Hasher; use patricia_trie::NodeCodec; use rlp::Encodable; +use heapsize::HeapSizeOf; pub mod backend; mod ext; @@ -405,7 +407,7 @@ where Exec: CodeExecutor, C: NodeCodec, B: TryIntoTrieBackend, - H::Out: Ord + Encodable + H::Out: Ord + Encodable + HeapSizeOf, { let trie_backend = backend.try_into_trie_backend() .ok_or_else(|| Box::new(ExecutionError::UnableToGenerateProof) as Box)?; @@ -428,7 +430,7 @@ where H: Hasher, C: NodeCodec, Exec: CodeExecutor, -H::Out: Ord + Encodable +H::Out: Ord + Encodable + HeapSizeOf, { let backend = proving_backend::create_proof_check_backend::(root.into(), proof)?; execute::(&backend, overlay, exec, method, call_data, ExecutionStrategy::NativeWhenPossible) diff --git a/substrate/state-machine/src/proving_backend.rs b/substrate/state-machine/src/proving_backend.rs index 67265eb81934e..daaa18d8b4335 100644 --- a/substrate/state-machine/src/proving_backend.rs +++ b/substrate/state-machine/src/proving_backend.rs @@ -23,6 +23,7 @@ use patricia_trie::{TrieDB, Trie, Recorder, NodeCodec}; use trie_backend::{TrieBackend, Ephemeral}; use {Error, ExecutionError, Backend, TryIntoTrieBackend}; use rlp::Encodable; +use heapsize::HeapSizeOf; /// 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. @@ -54,7 +55,7 @@ impl Backend for ProvingBackend where H: Hasher, C: NodeCodec, - H::Out: Ord + Encodable + H::Out: Ord + Encodable + HeapSizeOf { type Error = String; type Transaction = MemoryDB; @@ -102,6 +103,7 @@ pub fn create_proof_check_backend( where H: Hasher, C: NodeCodec, + H::Out: HeapSizeOf, { let mut db = MemoryDB::new(); for item in proof { diff --git a/substrate/state-machine/src/trie_backend.rs b/substrate/state-machine/src/trie_backend.rs index bfe1926ea60c7..0a4485b05627e 100644 --- a/substrate/state-machine/src/trie_backend.rs +++ b/substrate/state-machine/src/trie_backend.rs @@ -23,6 +23,7 @@ use patricia_trie::{TrieDB, TrieDBMut, TrieError, Trie, TrieMut, NodeCodec}; use std::collections::HashMap; use std::sync::Arc; use std::marker::PhantomData; +use heapsize::HeapSizeOf; pub use hashdb::DBValue; @@ -46,7 +47,7 @@ pub struct TrieBackend> { _codec: PhantomData } -impl> TrieBackend { +impl> TrieBackend where H::Out: HeapSizeOf { /// Create new trie-based backend. pub fn with_storage(db: Arc>, root: H::Out) -> Self { TrieBackend { @@ -88,7 +89,7 @@ impl> TrieBackend { impl super::Error for String {} -impl> Backend for TrieBackend { +impl> Backend for TrieBackend where H::Out: HeapSizeOf { type Error = String; type Transaction = MemoryDB; @@ -198,7 +199,7 @@ pub struct Ephemeral<'a, H: 'a + Hasher> { } // REVIEW: this is boiler plate, need macro? -impl<'a, H: Hasher> AsHashDB for Ephemeral<'a, H> { +impl<'a, H: Hasher> AsHashDB for Ephemeral<'a, H> where H::Out: HeapSizeOf { fn as_hashdb(&self) -> &HashDB { self } fn as_hashdb_mut(&mut self) -> &mut HashDB { self } } @@ -212,7 +213,7 @@ impl<'a, H: Hasher> Ephemeral<'a, H> { } } -impl<'a, H: Hasher> HashDB for Ephemeral<'a, H> { +impl<'a, H: Hasher> HashDB for Ephemeral<'a, H> where H::Out: HeapSizeOf { fn keys(&self) -> HashMap { self.overlay.keys() // TODO: iterate backing } From af1b17e60305c4ebe2b5901c825a91bae553706d Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 8 Aug 2018 15:33:15 +0200 Subject: [PATCH 74/97] Sort out dependencies for no_std --- substrate/primitives/Cargo.toml | 25 +++++++++++++------------ substrate/primitives/src/hash.rs | 14 ++++---------- substrate/primitives/src/hasher.rs | 4 +++- substrate/primitives/src/lib.rs | 7 ++++++- 4 files changed, 26 insertions(+), 24 deletions(-) diff --git a/substrate/primitives/Cargo.toml b/substrate/primitives/Cargo.toml index b1dcacccb0d48..f6308e92fe156 100644 --- a/substrate/primitives/Cargo.toml +++ b/substrate/primitives/Cargo.toml @@ -7,29 +7,26 @@ authors = ["Parity Technologies "] crunchy = "0.1" substrate-runtime-std = { path = "../runtime-std", default_features = false } substrate-codec = { path = "../codec", default_features = false } -elastic-array = "0.10" -fixed-hash = { git = "https://github.com/paritytech/parity-common", features = ["heapsizeof"] } +elastic-array = {version = "0.10", optional = true } +fixed-hash = { git = "https://github.com/paritytech/parity-common", default_features = false, branch = "refactor/no_std-friendly" } rustc-hex = { version = "2.0", default_features = false } serde = { version = "1.0", default_features = false } serde_derive = { version = "1.0", optional = true } # TODO: Used to fetch `uint` from "https://github.com/rphmeier/primitives.git" – what was `compile-for-wasm` adding? -uint = { git = "https://github.com/paritytech/parity-common", default_features = false } -rlp = { git = "https://github.com/paritytech/parity-common" } +uint = { git = "https://github.com/paritytech/parity-common", default_features = false, branch = "refactor/no_std-friendly" } +rlp = { git = "https://github.com/paritytech/parity-common", optional = true, branch = "refactor/no_std-friendly" } twox-hash = { version = "1.1.0", optional = true } byteorder = { version = "1.1", default_features = false } blake2-rfc = { version = "0.2.18", optional = true } wasmi = { version = "0.4", optional = true } -hashdb = { git = "https://github.com/paritytech/parity-common" } -patricia-trie = { git = "https://github.com/paritytech/parity-common" } -plain_hasher = { git = "https://github.com/paritytech/parity-common" } - -[target.'cfg(target_arch = "wasm32")'.dependencies] -heapsize = { version = "0.4"} +hashdb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly", default_features = false } +patricia-trie = { git = "https://github.com/paritytech/parity-common", optional = true, branch = "refactor/no_std-friendly" } +plain_hasher = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly", default_features = false } [dev-dependencies] substrate-serializer = { path = "../serializer" } pretty_assertions = "0.4" -heapsize = { version = "0.4"} +heapsize = "0.4" [features] default = ["std"] @@ -38,6 +35,7 @@ std = [ "uint/std", "fixed-hash/std", "fixed-hash/heapsizeof", + "fixed-hash/libc", "substrate-codec/std", "substrate-runtime-std/std", "serde/std", @@ -45,5 +43,8 @@ std = [ "twox-hash", "blake2-rfc", "serde_derive", - "byteorder/std" + "byteorder/std", + "patricia-trie", + "rlp", + "elastic-array", ] diff --git a/substrate/primitives/src/hash.rs b/substrate/primitives/src/hash.rs index bf259bdfa0b86..ac1707d4aef5e 100644 --- a/substrate/primitives/src/hash.rs +++ b/substrate/primitives/src/hash.rs @@ -21,7 +21,9 @@ 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 { @@ -52,12 +54,14 @@ macro_rules! impl_rest { } } + #[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) { @@ -82,16 +86,6 @@ impl_rest!(H160, 20); impl_rest!(H256, 32); impl_rest!(H512, 64); -// REVIEW: The wasm build was broken and would not load `fixed-hash` passing the -// `heapsizeof` feature so resorted to this. `Hasher` binds the `Out` assoc type -// with `HeapSizeOf` (why? I'd say it's only used by `memorydb` to implement `mem_used`). -// An alternative way to fix this would be to use `default_features = false` to load -// `fixed-hash` (instead of the current `features = ["heapsizeof"]` and remove this `#[cfg…` -#[cfg(target_arch = "wasm32")] -impl ::heapsize::HeapSizeOf for H256 { - fn heap_size_of_children(&self) -> usize { 0 } -} - #[cfg(test)] mod tests { diff --git a/substrate/primitives/src/hasher.rs b/substrate/primitives/src/hasher.rs index 5d27715bf552a..f941ab6904422 100644 --- a/substrate/primitives/src/hasher.rs +++ b/substrate/primitives/src/hasher.rs @@ -21,8 +21,10 @@ use plain_hasher::PlainHasher; use hash::H256; #[cfg(feature = "std")] use hashing::blake2_256; + +// TODO: implement this – might be tricky due to circular dependencies (the external function linking happens in runtime-io) #[cfg(not(feature = "std"))] -fn blake2_256(x: &[u8]) -> [u8; 32] { +fn blake2_256(_x: &[u8]) -> [u8; 32] { unimplemented!() } diff --git a/substrate/primitives/src/lib.rs b/substrate/primitives/src/lib.rs index 1a7b3596bb75c..cf05c2034bb3e 100644 --- a/substrate/primitives/src/lib.rs +++ b/substrate/primitives/src/lib.rs @@ -30,6 +30,7 @@ extern crate fixed_hash; #[macro_use] extern crate uint as uint_crate; extern crate substrate_codec as codec; +#[cfg(feature = "std")] extern crate rlp; #[cfg(feature = "std")] @@ -47,7 +48,9 @@ extern crate core; extern crate wasmi; extern crate hashdb; extern crate plain_hasher; +#[cfg(feature = "std")] extern crate patricia_trie; +#[cfg(feature = "std")] extern crate elastic_array; extern crate substrate_runtime_std as rstd; @@ -55,7 +58,7 @@ extern crate substrate_runtime_std as rstd; #[cfg(test)] extern crate substrate_serializer; -#[cfg(any(test, target_arch = "wasm32"))] +#[cfg(test)] extern crate heapsize; #[cfg(test)] @@ -87,6 +90,7 @@ pub mod sandbox; pub mod storage; pub mod uint; mod authority_id; +#[cfg(feature = "std")] mod rlp_codec; #[cfg(test)] @@ -96,6 +100,7 @@ pub use self::hash::{H160, H256, H512}; pub use self::uint::U256; pub use authority_id::AuthorityId; pub use self::hasher::BlakeHasher; +#[cfg(feature = "std")] pub use self::rlp_codec::BlakeRlpCodec; /// A 512-bit value interpreted as a signature. From ca896979306351ca5a16cfb314f027b620547e18 Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 8 Aug 2018 15:34:41 +0200 Subject: [PATCH 75/97] Add HeapSizeOf bound where needed --- substrate/cli/src/lib.rs | 1 + substrate/client/Cargo.toml | 7 ++++--- substrate/client/db/Cargo.toml | 10 +++++----- substrate/client/src/in_mem.rs | 6 +++++- substrate/client/src/lib.rs | 1 + substrate/client/src/light/call_executor.rs | 5 +++-- substrate/executor/Cargo.toml | 2 +- 7 files changed, 20 insertions(+), 12 deletions(-) diff --git a/substrate/cli/src/lib.rs b/substrate/cli/src/lib.rs index a014189197020..f7820a0d401b2 100644 --- a/substrate/cli/src/lib.rs +++ b/substrate/cli/src/lib.rs @@ -26,6 +26,7 @@ extern crate ansi_term; extern crate regex; extern crate time; extern crate fdlimit; + extern crate futures; extern crate tokio; extern crate names; diff --git a/substrate/client/Cargo.toml b/substrate/client/Cargo.toml index 4a770be49240b..ff33130564eca 100644 --- a/substrate/client/Cargo.toml +++ b/substrate/client/Cargo.toml @@ -13,6 +13,7 @@ hex-literal = "0.1" futures = "0.1.17" ed25519 = { path = "../ed25519" } slog = "^2" +heapsize = "0.4" substrate-bft = { path = "../bft" } substrate-codec = { path = "../codec" } substrate-executor = { path = "../executor" } @@ -23,9 +24,9 @@ substrate-runtime-primitives = { path = "../runtime/primitives" } substrate-state-machine = { path = "../state-machine" } substrate-keyring = { path = "../../substrate/keyring" } substrate-telemetry = { path = "../telemetry" } -hashdb = { git = "https://github.com/paritytech/parity-common" } -patricia-trie = { git = "https://github.com/paritytech/parity-common" } -rlp = { git = "https://github.com/paritytech/parity-common" } +hashdb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } +patricia-trie = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } +rlp = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } [dev-dependencies] substrate-test-client = { path = "../test-client" } diff --git a/substrate/client/db/Cargo.toml b/substrate/client/db/Cargo.toml index 95af2fd905496..5c09c3571810f 100644 --- a/substrate/client/db/Cargo.toml +++ b/substrate/client/db/Cargo.toml @@ -6,10 +6,10 @@ authors = ["Parity Technologies "] [dependencies] parking_lot = "0.4" log = "0.3" -kvdb = { git = "https://github.com/paritytech/parity-common" } -kvdb-rocksdb = { git = "https://github.com/paritytech/parity-common" } -hashdb = { git = "https://github.com/paritytech/parity-common" } -memorydb = { git = "https://github.com/paritytech/parity-common" } +kvdb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } +kvdb-rocksdb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } +hashdb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } +memorydb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } substrate-primitives = { path = "../../../substrate/primitives" } substrate-runtime-primitives = { path = "../../../substrate/runtime/primitives" } substrate-client = { path = "../../../substrate/client" } @@ -20,4 +20,4 @@ substrate-executor = { path = "../../../substrate/executor" } substrate-state-db = { path = "../../../substrate/state-db" } [dev-dependencies] -kvdb-memorydb = { git = "https://github.com/paritytech/parity-common" } +kvdb-memorydb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } diff --git a/substrate/client/src/in_mem.rs b/substrate/client/src/in_mem.rs index 46006c604921d..5060090f9ea2c 100644 --- a/substrate/client/src/in_mem.rs +++ b/substrate/client/src/in_mem.rs @@ -30,6 +30,7 @@ use blockchain::{self, BlockStatus}; use state_machine::backend::{Backend as StateBackend, InMemory}; use patricia_trie::NodeCodec; use hashdb::Hasher; +use heapsize::HeapSizeOf; struct PendingBlock { block: StoredBlock, @@ -262,6 +263,7 @@ where Block: BlockT, H: Hasher, C: NodeCodec, + H::Out: HeapSizeOf, { type State = InMemory; @@ -329,7 +331,8 @@ impl backend::Backend for Backend where Block: BlockT, H: Hasher, - C: NodeCodec + Send + Sync + H::Out: HeapSizeOf, + C: NodeCodec + Send + Sync, { type BlockImportOperation = BlockImportOperation; type Blockchain = Blockchain; @@ -386,6 +389,7 @@ impl backend::LocalBackend for Backend where Block: BlockT, H: Hasher, + H::Out: HeapSizeOf, C: NodeCodec + Send + Sync, {} diff --git a/substrate/client/src/lib.rs b/substrate/client/src/lib.rs index 0277a1a1f03ae..457502b3d6df1 100644 --- a/substrate/client/src/lib.rs +++ b/substrate/client/src/lib.rs @@ -39,6 +39,7 @@ extern crate triehash; extern crate patricia_trie; extern crate hashdb; extern crate rlp; +extern crate heapsize; #[macro_use] extern crate error_chain; #[macro_use] extern crate log; diff --git a/substrate/client/src/light/call_executor.rs b/substrate/client/src/light/call_executor.rs index 84a23c37f88cb..5b8232acee008 100644 --- a/substrate/client/src/light/call_executor.rs +++ b/substrate/client/src/light/call_executor.rs @@ -35,6 +35,7 @@ use error::{Error as ClientError, ErrorKind as ClientErrorKind, Result as Client use light::fetcher::{Fetcher, RemoteCallRequest}; use executor::RuntimeVersion; use codec::Decode; +use heapsize::HeapSizeOf; /// Call executor that executes methods on remote node, querying execution proof /// and checking proof by re-executing locally. @@ -112,7 +113,7 @@ pub fn check_execution_proof( B: ChainBackend, E: CodeExecutor, H: Hasher, - H::Out: Encodable + Ord + From, + H::Out: Encodable + Ord + From + HeapSizeOf, C: NodeCodec, { let local_header = blockchain.header(BlockId::Hash(request.block))?; @@ -132,7 +133,7 @@ fn do_check_execution_proof( Hash: ::std::fmt::Display + ::std::convert::AsRef<[u8]>, E: CodeExecutor, H: Hasher, - H::Out: Encodable + Ord + From, + H::Out: Encodable + Ord + From + HeapSizeOf, C: NodeCodec, { let mut changes = OverlayedChanges::default(); diff --git a/substrate/executor/Cargo.toml b/substrate/executor/Cargo.toml index 63262ad21d699..f967b631c1eaa 100644 --- a/substrate/executor/Cargo.toml +++ b/substrate/executor/Cargo.toml @@ -21,7 +21,7 @@ twox-hash = "1.1.0" lazy_static = "1.0" parking_lot = "*" log = "0.3" -hashdb = { git = "https://github.com/paritytech/parity-common" } +hashdb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } [dev-dependencies] assert_matches = "1.1" From da711eff43f01f0429be82bf1e8e99a4c13f102c Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 8 Aug 2018 15:35:10 +0200 Subject: [PATCH 76/97] use temp branch pending PR merges --- substrate/test-client/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/substrate/test-client/Cargo.toml b/substrate/test-client/Cargo.toml index b31b8b2d0a7bb..7448107b4b1fd 100644 --- a/substrate/test-client/Cargo.toml +++ b/substrate/test-client/Cargo.toml @@ -14,5 +14,5 @@ substrate-primitives = { path = "../primitives" } substrate-runtime-support = { path = "../runtime-support" } substrate-test-runtime = { path = "../test-runtime" } substrate-runtime-primitives = { path = "../runtime/primitives" } -hashdb = { git = "https://github.com/paritytech/parity-common" } +hashdb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } From 3b206c2795078d82b3304a1a21761a0fd23c7d74 Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 8 Aug 2018 15:35:28 +0200 Subject: [PATCH 77/97] Remove unneeded tests --- substrate/runtime-io/Cargo.toml | 4 ---- substrate/runtime-io/with_std.rs | 32 -------------------------------- 2 files changed, 36 deletions(-) diff --git a/substrate/runtime-io/Cargo.toml b/substrate/runtime-io/Cargo.toml index 7cec69b24857a..b46f9909c2018 100644 --- a/substrate/runtime-io/Cargo.toml +++ b/substrate/runtime-io/Cargo.toml @@ -16,10 +16,6 @@ substrate-codec = { path = "../codec", default_features = false } triehash = { version = "0.1.2", optional = true } ed25519 = { path = "../ed25519", optional = true } -[dev-dependencies] -heapsize = "0.4" -rlp = { git = "https://github.com/paritytech/parity-common" } - [features] default = ["std"] std = [ diff --git a/substrate/runtime-io/with_std.rs b/substrate/runtime-io/with_std.rs index 4445ed30a7283..c81cedd079bed 100644 --- a/substrate/runtime-io/with_std.rs +++ b/substrate/runtime-io/with_std.rs @@ -24,11 +24,6 @@ extern crate substrate_state_machine; extern crate triehash; extern crate ed25519; -#[cfg(test)] -extern crate rlp; -#[cfg(test)] -extern crate heapsize; - #[doc(hidden)] pub extern crate substrate_codec as codec; // re-export hashing functions. @@ -199,33 +194,6 @@ macro_rules! impl_stubs { #[cfg(test)] mod std_tests { use super::*; - use rlp::{Encodable, Decodable, RlpStream, Rlp}; - - // TODO: remove these tests (heapsizeof, encodable, decodable) - #[test] - fn test_heapsizeof() { - use heapsize::HeapSizeOf; - let h = H256::new(); - assert_eq!(h.heap_size_of_children(), 0); - } - - // TODO: remove these tests (heapsizeof, encodable, decodable) - #[test] - fn test_hash_is_encodable() { - let h = H256::from(32); - let mut s = RlpStream::new(); - h.rlp_append(&mut s); - let rlp_bytes = s.drain(); - assert_eq!(rlp_bytes.into_vec(), vec![160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32] ); - } - - // TODO: remove these tests (heapsizeof, encodable, decodable) - #[test] - fn test_hash_is_decodable() { - let data = Rlp::new(&[160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32]); - let h = H256::decode(&data).unwrap(); - assert_eq!(h, H256::from(32)); - } #[test] fn storage_works() { From 8064c6d2f98bc4a32d514bfc4ad7721bcbe1bfef Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 8 Aug 2018 15:39:22 +0200 Subject: [PATCH 78/97] Lock file and wasm artifacts --- polkadot/runtime/wasm/Cargo.lock | 81 +++++++++--------- .../release/polkadot_runtime.wasm | Bin 323041 -> 323077 bytes 2 files changed, 39 insertions(+), 42 deletions(-) diff --git a/polkadot/runtime/wasm/Cargo.lock b/polkadot/runtime/wasm/Cargo.lock index 3968c8cdccab5..7457a0c7d6141 100644 --- a/polkadot/runtime/wasm/Cargo.lock +++ b/polkadot/runtime/wasm/Cargo.lock @@ -153,7 +153,7 @@ dependencies = [ [[package]] name = "fixed-hash" version = "0.2.2" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" dependencies = [ "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", @@ -182,11 +182,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "hashdb" -version = "0.2.0" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +version = "0.2.1" +source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -273,13 +272,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "memorydb" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#e513114d69acf55584f346a90cdcd8c45c9a3cbc" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "plain_hasher 0.1.0 (git+https://github.com/paritytech/parity-common)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", + "plain_hasher 0.1.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", ] [[package]] @@ -316,7 +315,7 @@ dependencies = [ [[package]] name = "parity-bytes" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" [[package]] name = "parity-wasm" @@ -349,24 +348,23 @@ dependencies = [ [[package]] name = "patricia-trie" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", "heapsize 0.4.2 (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 (git+https://github.com/paritytech/parity-common)", + "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "plain_hasher" -version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +version = "0.1.1" +source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" dependencies = [ "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", ] [[package]] @@ -501,7 +499,7 @@ dependencies = [ [[package]] name = "rlp" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -612,19 +610,18 @@ dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "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 (git+https://github.com/paritytech/parity-common)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", - "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", - "plain_hasher 0.1.0 (git+https://github.com/paritytech/parity-common)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", + "fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "plain_hasher 0.1.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", "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)", "substrate-codec 0.1.0", "substrate-runtime-std 0.1.0", "twox-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "uint 0.2.2 (git+https://github.com/paritytech/parity-common)", + "uint 0.2.2 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", "wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -858,15 +855,16 @@ 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.0 (git+https://github.com/paritytech/parity-common)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "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 (git+https://github.com/paritytech/parity-common)", + "memorydb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", "substrate-primitives 0.1.0", - "triehash 0.2.0 (git+https://github.com/paritytech/parity-common)", + "triehash 0.2.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", ] [[package]] @@ -901,12 +899,11 @@ dependencies = [ [[package]] name = "triehash" version = "0.2.0" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#e513114d69acf55584f346a90cdcd8c45c9a3cbc" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", ] [[package]] @@ -931,7 +928,7 @@ dependencies = [ [[package]] name = "uint" version = "0.2.2" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -996,11 +993,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c48729b8aea8aedb12cf4cb2e5cef439fdfe2dda4a89e47eeebd15778ef53b6" "checksum ethereum-types-serialize 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ac59a21a9ce98e188f3dace9eb67a6c4a3c67ec7fbc7218cb827852679dc002" "checksum fixed-hash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18d6fd718fb4396e7a9c93ac59ba7143501467ca7a143c145b5555a571d5576" -"checksum fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common)" = "" +"checksum fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" "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.0 (git+https://github.com/paritytech/parity-common)" = "" +"checksum hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" "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" @@ -1013,18 +1010,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "89f010e843f2b1a31dbd316b3b8d443758bc634bed37aabade59c686d644e0a2" "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" "checksum memory_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" -"checksum memorydb 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" +"checksum memorydb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" "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 (git+https://github.com/paritytech/parity-common)" = "" +"checksum parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" "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 (git+https://github.com/paritytech/parity-common)" = "" -"checksum plain_hasher 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" +"checksum patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" +"checksum plain_hasher 0.1.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" "checksum proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ba8d4f9257b85eb6cdf13f055cea3190520aab1409ca2ab43493ea4820c25f0" "checksum proc-macro-hack-impl 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d5cb6f960ad471404618e9817c0e5d10b1ae74cfdf01fab89ea0641fe7fb2892" "checksum proc-macro2 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1fa93823f53cfd0f5ac117b189aed6cfdfb2cfc0a9d82e956dd7927595ed7d46" @@ -1034,7 +1031,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b614fe08b6665cb9a231d07ac1364b0ef3cb3698f1239ee0c4c3a88a524f54c8" "checksum rayon-core 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9d24ad214285a7729b174ed6d3bcfcb80177807f959d95fafd5bfc5c4f201ac8" "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" -"checksum rlp 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" +"checksum rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" "checksum rlp 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "89db7f8dfdd5eb7ab3ac3ece7a07fd273a680b4b224cb231181280e8996f9f0b" "checksum rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0ceb8ce7a5e520de349e1fa172baeba4a9e8d5ef06c47471863530bc4972ee1e" "checksum rustc-hex 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d2b03280c2813907a030785570c577fb27d3deec8da4c18566751ade94de0ace" @@ -1049,10 +1046,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "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.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2033893a813c70e7d8a739ca6c36dc0a7a2c913ec718d7cbf84a3837bbe3c7ce" -"checksum triehash 0.2.0 (git+https://github.com/paritytech/parity-common)" = "" +"checksum triehash 0.2.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" "checksum twox-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "475352206e7a290c5fccc27624a163e8d0d115f7bb60ca18a64fc9ce056d7435" "checksum uint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "38051a96565903d81c9a9210ce11076b2218f3b352926baa1f5f6abbdfce8273" -"checksum uint 0.2.2 (git+https://github.com/paritytech/parity-common)" = "" +"checksum uint 0.2.2 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" "checksum untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f392d7819dbe58833e26872f5f6f0d68b7bbbe90fc3667e98731c4a15ad9a7ae" "checksum wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "522fe3fdd44a56f25cd5ddcd8ccdb1cf2e982ceb28fcb00f41d8a018ae5245a8" diff --git a/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm b/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm index 8d09a81248bc35e0292bd9c0f13b67fe1c70a186..0fee4ebd36e2c3cf201372f1dd0a88361ae0f8a1 100755 GIT binary patch delta 56848 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 hF+CM3H97OV+9iPP5d~GwtJRl@JU7jI=qm8?> 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 delta 57154 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 From 00660268c6d1c3ef9cc7d4677452eb2bf23830e7 Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 8 Aug 2018 15:40:01 +0200 Subject: [PATCH 79/97] lockfile --- Cargo.lock | 147 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 94 insertions(+), 53 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bc2456b5c33c3..a3051da78c5a6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -747,7 +747,7 @@ dependencies = [ [[package]] name = "fixed-hash" version = "0.2.2" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" dependencies = [ "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", @@ -847,11 +847,10 @@ dependencies = [ [[package]] name = "hashdb" -version = "0.2.0" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +version = "0.2.1" +source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1085,6 +1084,15 @@ dependencies = [ "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common)", ] +[[package]] +name = "kvdb" +version = "0.1.0" +source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +dependencies = [ + "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", +] + [[package]] name = "kvdb-memorydb" version = "0.1.0" @@ -1094,6 +1102,15 @@ dependencies = [ "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "kvdb-memorydb" +version = "0.1.0" +source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +dependencies = [ + "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "kvdb-rocksdb" version = "0.1.0" @@ -1111,6 +1128,23 @@ dependencies = [ "rocksdb 0.4.5 (git+https://github.com/paritytech/rust-rocksdb)", ] +[[package]] +name = "kvdb-rocksdb" +version = "0.1.0" +source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +dependencies = [ + "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "fs-swap 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "interleaved-ordered 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "rocksdb 0.4.5 (git+https://github.com/paritytech/rust-rocksdb)", +] + [[package]] name = "language-tags" version = "0.2.2" @@ -1500,13 +1534,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "memorydb" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "plain_hasher 0.1.0 (git+https://github.com/paritytech/parity-common)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", + "plain_hasher 0.1.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", ] [[package]] @@ -1712,6 +1746,11 @@ name = "parity-bytes" version = "0.1.0" source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +[[package]] +name = "parity-bytes" +version = "0.1.0" +source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" + [[package]] name = "parity-crypto" version = "0.1.0" @@ -1783,13 +1822,13 @@ dependencies = [ [[package]] name = "patricia-trie" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", "heapsize 0.4.2 (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 (git+https://github.com/paritytech/parity-common)", + "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1805,12 +1844,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "plain_hasher" -version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +version = "0.1.1" +source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" dependencies = [ "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", ] [[package]] @@ -2316,7 +2354,7 @@ dependencies = [ [[package]] name = "rlp" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" dependencies = [ "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2693,12 +2731,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.0 (git+https://github.com/paritytech/parity-common)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "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)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-bft 0.1.0", "substrate-codec 0.1.0", @@ -2718,12 +2757,12 @@ dependencies = [ name = "substrate-client-db" version = "0.1.0" dependencies = [ - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", - "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common)", - "kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common)", - "kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity-common)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "memorydb 0.2.1 (git+https://github.com/paritytech/parity-common)", + "memorydb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-client 0.1.0", "substrate-codec 0.1.0", @@ -2750,11 +2789,11 @@ dependencies = [ "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "ed25519 0.1.0", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", @@ -2876,13 +2915,13 @@ dependencies = [ "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "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 (git+https://github.com/paritytech/parity-common)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", + "fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", - "plain_hasher 0.1.0 (git+https://github.com/paritytech/parity-common)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "plain_hasher 0.1.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", "pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", "rustc-hex 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2890,7 +2929,7 @@ dependencies = [ "substrate-runtime-std 0.1.0", "substrate-serializer 0.1.0", "twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "uint 0.2.2 (git+https://github.com/paritytech/parity-common)", + "uint 0.2.2 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", "wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3041,8 +3080,6 @@ version = "0.1.0" dependencies = [ "ed25519 0.1.0", "environmental 0.1.0", - "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", @@ -3246,15 +3283,16 @@ name = "substrate-state-machine" version = "0.1.0" dependencies = [ "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "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 (git+https://github.com/paritytech/parity-common)", + "memorydb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", "substrate-primitives 0.1.0", - "triehash 0.2.0 (git+https://github.com/paritytech/parity-common)", + "triehash 0.2.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", ] [[package]] @@ -3275,7 +3313,7 @@ dependencies = [ name = "substrate-test-client" version = "0.1.0" dependencies = [ - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", "rhododendron 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-bft 0.1.0", "substrate-client 0.1.0", @@ -3640,12 +3678,11 @@ dependencies = [ [[package]] name = "triehash" version = "0.2.0" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", ] [[package]] @@ -3658,7 +3695,7 @@ name = "twox-hash" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rand 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3690,7 +3727,7 @@ dependencies = [ [[package]] name = "uint" version = "0.2.2" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" dependencies = [ "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -4020,7 +4057,7 @@ dependencies = [ "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.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18d6fd718fb4396e7a9c93ac59ba7143501467ca7a143c145b5555a571d5576" -"checksum fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common)" = "" +"checksum fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" @@ -4033,7 +4070,7 @@ dependencies = [ "checksum generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d" "checksum getopts 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "0a7292d30132fb5424b354f5dc02512a86e4c516fe544bb7a25e7f266951b797" "checksum globset 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8e49edbcc9c7fc5beb8c0a54e7319ff8bed353a2b55e85811c6281188c2a6c84" -"checksum hashdb 0.2.0 (git+https://github.com/paritytech/parity-common)" = "" +"checksum hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" "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" @@ -4058,8 +4095,11 @@ dependencies = [ "checksum keccak-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b7f51f30d7986536accaec4a6a288008dfb3dbffe8a2863a65292bc395a3ae7" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" "checksum kvdb 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" +"checksum kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" "checksum kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" +"checksum kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" "checksum kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" +"checksum kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" "checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" "checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" "checksum lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca488b89a5657b0a2ecd45b95609b3e848cf1755da332a0da46e2b2b1cb371a7" @@ -4092,7 +4132,7 @@ dependencies = [ "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_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" -"checksum memorydb 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" +"checksum memorydb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" "checksum mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" "checksum mime 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "fe51c8699d2dc522bf8c1ebe26ea2193d151fb54bcdfd7d0318750c189994cd9" "checksum mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)" = "4fcfcb32d63961fb6f367bfd5d21e4600b92cd310f71f9dca25acae196eb1560" @@ -4115,6 +4155,7 @@ dependencies = [ "checksum openssl-sys 0.9.35 (registry+https://github.com/rust-lang/crates.io-index)" = "912f301a749394e1025d9dcddef6106ddee9252620e6d0a0e5f8d0681de9b129" "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" "checksum parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" +"checksum parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" "checksum parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)" = "511379a8194230c2395d2f5fa627a5a7e108a9f976656ce723ae68fca4097bfc" "checksum parity-wordlist 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d0dec124478845b142f68b446cbee953d14d4b41f1bc0425024417720dce693" @@ -4122,10 +4163,10 @@ dependencies = [ "checksum parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d4d05f1349491390b1730afba60bb20d55761bef489a954546b58b4b34e1e2ac" "checksum parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "69376b761943787ebd5cc85a5bc95958651a22609c5c1c2b65de21786baec72b" "checksum parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "4db1a8ccf734a7bce794cc19b3df06ed87ab2f3907036b693c68f56b4d4537fa" -"checksum patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" +"checksum patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" "checksum pkg-config 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)" = "104630aa1c83213cbc76db0703630fcb0421dac3585063be4ce9a8a2feeaa745" -"checksum plain_hasher 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" +"checksum plain_hasher 0.1.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" "checksum pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "28ea5118e2f41bfbc974b28d88c07621befd1fa5d6ec23549be96302a1a59dd2" "checksum proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ba8d4f9257b85eb6cdf13f055cea3190520aab1409ca2ab43493ea4820c25f0" "checksum proc-macro-hack-impl 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d5cb6f960ad471404618e9817c0e5d10b1ae74cfdf01fab89ea0641fe7fb2892" @@ -4153,7 +4194,7 @@ dependencies = [ "checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5" "checksum rhododendron 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c8502867a61713f8297ed13b8de6fcdec1286d3a9ea543628f55bcfa8b30ac57" "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" -"checksum rlp 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" +"checksum rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" "checksum rlp 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "89db7f8dfdd5eb7ab3ac3ece7a07fd273a680b4b224cb231181280e8996f9f0b" "checksum rocksdb 0.4.5 (git+https://github.com/paritytech/rust-rocksdb)" = "" "checksum rocksdb-sys 0.3.0 (git+https://github.com/paritytech/rust-rocksdb)" = "" @@ -4227,14 +4268,14 @@ dependencies = [ "checksum traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" "checksum transaction-pool 1.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "be1efb673ddf49ab4a99893eb3af02f6563636033fb832c2b7f937641ad62b17" "checksum triehash 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2033893a813c70e7d8a739ca6c36dc0a7a2c913ec718d7cbf84a3837bbe3c7ce" -"checksum triehash 0.2.0 (git+https://github.com/paritytech/parity-common)" = "" +"checksum triehash 0.2.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" "checksum try-lock 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee2aa4715743892880f70885373966c83d73ef1b0838a664ef0c76fffd35e7c2" "checksum twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4f85be565a110ed72ed7048cf56570db04ce0a592c98aa59b7dacde3e5718750" "checksum typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887" "checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" "checksum ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd2be2d6639d0f8fe6cdda291ad456e23629558d466e2789d2c3e9892bda285d" "checksum uint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "38051a96565903d81c9a9210ce11076b2218f3b352926baa1f5f6abbdfce8273" -"checksum uint 0.2.2 (git+https://github.com/paritytech/parity-common)" = "" +"checksum uint 0.2.2 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" "checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" "checksum unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "284b6d3db520d67fbe88fd778c21510d1b0ba4a551e5d0fbb023d33405f6de8a" "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" From bfcf5df2a7f7f3743222866d6589d1379d7aebc2 Mon Sep 17 00:00:00 2001 From: David Palm Date: Wed, 8 Aug 2018 16:17:39 +0200 Subject: [PATCH 80/97] Use magic commit for libp2p --- Cargo.lock | 56 +++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a3051da78c5a6..a3d7bf118a290 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -280,7 +280,7 @@ dependencies = [ [[package]] name = "cid" version = "0.2.3" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "integer-encoding 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "multibase 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -429,7 +429,7 @@ dependencies = [ [[package]] name = "datastore" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "base64 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "chashmap 2.2.1 (git+https://github.com/redox-os/tfs)", @@ -1185,7 +1185,7 @@ dependencies = [ [[package]] name = "libp2p" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1214,7 +1214,7 @@ dependencies = [ [[package]] name = "libp2p-core" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "bs58 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1224,7 +1224,7 @@ dependencies = [ "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "multihash 0.8.1-pre (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "multistream-select 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "rw-stream-sink 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", @@ -1235,7 +1235,7 @@ dependencies = [ [[package]] name = "libp2p-dns" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", @@ -1248,7 +1248,7 @@ dependencies = [ [[package]] name = "libp2p-floodsub" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "bs58 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1258,7 +1258,7 @@ dependencies = [ "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1269,7 +1269,7 @@ dependencies = [ [[package]] name = "libp2p-identify" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1288,7 +1288,7 @@ dependencies = [ [[package]] name = "libp2p-kad" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", "bigint 4.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1302,7 +1302,7 @@ dependencies = [ "libp2p-ping 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1315,14 +1315,14 @@ dependencies = [ [[package]] name = "libp2p-mplex" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "bytes 0.4.9 (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)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "varint 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", @@ -1331,7 +1331,7 @@ dependencies = [ [[package]] name = "libp2p-peerstore" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "bs58 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "datastore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", @@ -1346,7 +1346,7 @@ dependencies = [ [[package]] name = "libp2p-ping" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1354,7 +1354,7 @@ dependencies = [ "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", "multistream-select 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1363,7 +1363,7 @@ dependencies = [ [[package]] name = "libp2p-ratelimit" version = "0.1.1" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "aio-limited 0.1.0 (git+https://github.com/paritytech/aio-limited.git)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1376,7 +1376,7 @@ dependencies = [ [[package]] name = "libp2p-relay" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1394,7 +1394,7 @@ dependencies = [ [[package]] name = "libp2p-secio" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "asn1_der 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1414,7 +1414,7 @@ dependencies = [ [[package]] name = "libp2p-tcp-transport" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", @@ -1427,7 +1427,7 @@ dependencies = [ [[package]] name = "libp2p-transport-timeout" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", @@ -1438,7 +1438,7 @@ dependencies = [ [[package]] name = "libp2p-websocket" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", @@ -1453,7 +1453,7 @@ dependencies = [ [[package]] name = "libp2p-yamux" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1591,7 +1591,7 @@ dependencies = [ [[package]] name = "multiaddr" version = "0.3.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "byteorder 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "cid 0.2.3 (git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2)", @@ -1609,7 +1609,7 @@ dependencies = [ [[package]] name = "multihash" version = "0.8.1-pre" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "sha1 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "sha2 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1619,7 +1619,7 @@ dependencies = [ [[package]] name = "multistream-select" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2437,7 +2437,7 @@ dependencies = [ [[package]] name = "rw-stream-sink" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3804,7 +3804,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "varint" version = "0.1.0" -source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#be9b1cf4c6ea4ec2fec35d73fd6f4cd4d2538a10" +source = "git+https://github.com/tomaka/libp2p-rs?branch=polkadot-2#eae2186e40c20efb0daf718e39ff7868718f7437" dependencies = [ "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", From 35b29babf5f0b602abd7d45d2dae9018327e5e53 Mon Sep 17 00:00:00 2001 From: David Palm Date: Thu, 9 Aug 2018 10:27:19 +0200 Subject: [PATCH 81/97] Cleanup --- Cargo.lock | 116 +++++++++--------- polkadot/runtime/src/parachains.rs | 2 +- polkadot/runtime/wasm/Cargo.lock | 78 ++++++------ .../release/polkadot_runtime.wasm | Bin 323077 -> 323311 bytes substrate/cli/src/lib.rs | 1 - substrate/client/Cargo.toml | 6 +- substrate/client/db/Cargo.toml | 10 +- substrate/client/db/src/lib.rs | 5 +- substrate/client/db/src/utils.rs | 6 - substrate/client/src/in_mem.rs | 2 +- substrate/executor/Cargo.toml | 2 +- substrate/executor/src/wasm_executor.rs | 2 +- substrate/primitives/Cargo.toml | 13 +- substrate/primitives/src/hash.rs | 1 - substrate/primitives/src/uint.rs | 1 - substrate/runtime-io/with_std.rs | 5 +- substrate/runtime/council/src/lib.rs | 2 +- substrate/runtime/system/src/lib.rs | 4 - substrate/state-machine/Cargo.toml | 10 +- substrate/state-machine/src/trie_backend.rs | 1 - substrate/test-client/Cargo.toml | 2 +- 21 files changed, 123 insertions(+), 146 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a3d7bf118a290..f7adc10edabc9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -747,7 +747,7 @@ dependencies = [ [[package]] name = "fixed-hash" version = "0.2.2" -source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" dependencies = [ "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", @@ -847,8 +847,8 @@ dependencies = [ [[package]] name = "hashdb" -version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +version = "0.2.0" +source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1087,10 +1087,10 @@ dependencies = [ [[package]] name = "kvdb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", ] [[package]] @@ -1105,9 +1105,9 @@ dependencies = [ [[package]] name = "kvdb-memorydb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" dependencies = [ - "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1131,13 +1131,13 @@ dependencies = [ [[package]] name = "kvdb-rocksdb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "fs-swap 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "interleaved-ordered 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1534,13 +1534,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "memorydb" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "plain_hasher 0.1.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "plain_hasher 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", ] [[package]] @@ -1749,7 +1749,7 @@ source = "git+https://github.com/paritytech/parity-common#ae80aff497595150045251 [[package]] name = "parity-bytes" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" [[package]] name = "parity-crypto" @@ -1822,13 +1822,12 @@ dependencies = [ [[package]] name = "patricia-trie" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", - "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1844,11 +1843,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "plain_hasher" -version = "0.1.1" -source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +version = "0.2.0" +source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" dependencies = [ "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2354,7 +2352,7 @@ dependencies = [ [[package]] name = "rlp" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" dependencies = [ "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2731,13 +2729,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 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "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)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-bft 0.1.0", "substrate-codec 0.1.0", @@ -2757,12 +2755,12 @@ dependencies = [ name = "substrate-client-db" version = "0.1.0" dependencies = [ - "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", - "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", - "kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", - "kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "memorydb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "memorydb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-client 0.1.0", "substrate-codec 0.1.0", @@ -2789,7 +2787,7 @@ dependencies = [ "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "ed25519 0.1.0", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2915,13 +2913,13 @@ dependencies = [ "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "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 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", - "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", - "plain_hasher 0.1.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "plain_hasher 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "rustc-hex 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2929,7 +2927,7 @@ dependencies = [ "substrate-runtime-std 0.1.0", "substrate-serializer 0.1.0", "twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "uint 0.2.2 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "uint 0.2.2 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3283,16 +3281,16 @@ name = "substrate-state-machine" version = "0.1.0" dependencies = [ "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "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 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "memorydb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "substrate-primitives 0.1.0", - "triehash 0.2.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "triehash 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", ] [[package]] @@ -3313,7 +3311,7 @@ dependencies = [ name = "substrate-test-client" version = "0.1.0" dependencies = [ - "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "rhododendron 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-bft 0.1.0", "substrate-client 0.1.0", @@ -3678,11 +3676,11 @@ dependencies = [ [[package]] name = "triehash" version = "0.2.0" -source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", ] [[package]] @@ -3727,7 +3725,7 @@ dependencies = [ [[package]] name = "uint" version = "0.2.2" -source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" dependencies = [ "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -4057,7 +4055,7 @@ dependencies = [ "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.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18d6fd718fb4396e7a9c93ac59ba7143501467ca7a143c145b5555a571d5576" -"checksum fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" +"checksum fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" @@ -4070,7 +4068,7 @@ dependencies = [ "checksum generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d" "checksum getopts 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "0a7292d30132fb5424b354f5dc02512a86e4c516fe544bb7a25e7f266951b797" "checksum globset 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8e49edbcc9c7fc5beb8c0a54e7319ff8bed353a2b55e85811c6281188c2a6c84" -"checksum hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" +"checksum hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "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" @@ -4095,11 +4093,11 @@ dependencies = [ "checksum keccak-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b7f51f30d7986536accaec4a6a288008dfb3dbffe8a2863a65292bc395a3ae7" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" "checksum kvdb 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" -"checksum kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" +"checksum kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "checksum kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" -"checksum kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" +"checksum kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "checksum kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" -"checksum kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" +"checksum kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" "checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" "checksum lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca488b89a5657b0a2ecd45b95609b3e848cf1755da332a0da46e2b2b1cb371a7" @@ -4132,7 +4130,7 @@ dependencies = [ "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_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" -"checksum memorydb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" +"checksum memorydb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "checksum mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" "checksum mime 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "fe51c8699d2dc522bf8c1ebe26ea2193d151fb54bcdfd7d0318750c189994cd9" "checksum mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)" = "4fcfcb32d63961fb6f367bfd5d21e4600b92cd310f71f9dca25acae196eb1560" @@ -4155,7 +4153,7 @@ dependencies = [ "checksum openssl-sys 0.9.35 (registry+https://github.com/rust-lang/crates.io-index)" = "912f301a749394e1025d9dcddef6106ddee9252620e6d0a0e5f8d0681de9b129" "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" "checksum parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" -"checksum parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" +"checksum parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "checksum parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)" = "511379a8194230c2395d2f5fa627a5a7e108a9f976656ce723ae68fca4097bfc" "checksum parity-wordlist 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d0dec124478845b142f68b446cbee953d14d4b41f1bc0425024417720dce693" @@ -4163,10 +4161,10 @@ dependencies = [ "checksum parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d4d05f1349491390b1730afba60bb20d55761bef489a954546b58b4b34e1e2ac" "checksum parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "69376b761943787ebd5cc85a5bc95958651a22609c5c1c2b65de21786baec72b" "checksum parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "4db1a8ccf734a7bce794cc19b3df06ed87ab2f3907036b693c68f56b4d4537fa" -"checksum patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" +"checksum patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" "checksum pkg-config 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)" = "104630aa1c83213cbc76db0703630fcb0421dac3585063be4ce9a8a2feeaa745" -"checksum plain_hasher 0.1.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" +"checksum plain_hasher 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "checksum pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "28ea5118e2f41bfbc974b28d88c07621befd1fa5d6ec23549be96302a1a59dd2" "checksum proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ba8d4f9257b85eb6cdf13f055cea3190520aab1409ca2ab43493ea4820c25f0" "checksum proc-macro-hack-impl 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d5cb6f960ad471404618e9817c0e5d10b1ae74cfdf01fab89ea0641fe7fb2892" @@ -4194,7 +4192,7 @@ dependencies = [ "checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5" "checksum rhododendron 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c8502867a61713f8297ed13b8de6fcdec1286d3a9ea543628f55bcfa8b30ac57" "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" -"checksum rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" +"checksum rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "checksum rlp 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "89db7f8dfdd5eb7ab3ac3ece7a07fd273a680b4b224cb231181280e8996f9f0b" "checksum rocksdb 0.4.5 (git+https://github.com/paritytech/rust-rocksdb)" = "" "checksum rocksdb-sys 0.3.0 (git+https://github.com/paritytech/rust-rocksdb)" = "" @@ -4268,14 +4266,14 @@ dependencies = [ "checksum traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" "checksum transaction-pool 1.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "be1efb673ddf49ab4a99893eb3af02f6563636033fb832c2b7f937641ad62b17" "checksum triehash 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2033893a813c70e7d8a739ca6c36dc0a7a2c913ec718d7cbf84a3837bbe3c7ce" -"checksum triehash 0.2.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" +"checksum triehash 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "checksum try-lock 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee2aa4715743892880f70885373966c83d73ef1b0838a664ef0c76fffd35e7c2" "checksum twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4f85be565a110ed72ed7048cf56570db04ce0a592c98aa59b7dacde3e5718750" "checksum typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887" "checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" "checksum ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd2be2d6639d0f8fe6cdda291ad456e23629558d466e2789d2c3e9892bda285d" "checksum uint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "38051a96565903d81c9a9210ce11076b2218f3b352926baa1f5f6abbdfce8273" -"checksum uint 0.2.2 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" +"checksum uint 0.2.2 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" "checksum unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "284b6d3db520d67fbe88fd778c21510d1b0ba4a551e5d0fbb023d33405f6de8a" "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" diff --git a/polkadot/runtime/src/parachains.rs b/polkadot/runtime/src/parachains.rs index 1998213a071ad..8d50da204e1d5 100644 --- a/polkadot/runtime/src/parachains.rs +++ b/polkadot/runtime/src/parachains.rs @@ -30,7 +30,7 @@ use substrate_runtime_support::dispatch::Result; use rstd::marker::PhantomData; #[cfg(any(feature = "std", test))] -use {runtime_primitives}; +use runtime_primitives; #[cfg(any(feature = "std", test))] use std::collections::HashMap; diff --git a/polkadot/runtime/wasm/Cargo.lock b/polkadot/runtime/wasm/Cargo.lock index 7457a0c7d6141..8988e7e171c2d 100644 --- a/polkadot/runtime/wasm/Cargo.lock +++ b/polkadot/runtime/wasm/Cargo.lock @@ -153,7 +153,7 @@ dependencies = [ [[package]] name = "fixed-hash" version = "0.2.2" -source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" dependencies = [ "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", @@ -182,8 +182,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "hashdb" -version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +version = "0.2.0" +source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -272,13 +272,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "memorydb" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#e513114d69acf55584f346a90cdcd8c45c9a3cbc" +source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a54fe63d0439ec3b0e84ac3aeb90fea1f56e265c" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "plain_hasher 0.1.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "plain_hasher 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", ] [[package]] @@ -315,7 +315,7 @@ dependencies = [ [[package]] name = "parity-bytes" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" [[package]] name = "parity-wasm" @@ -348,23 +348,21 @@ dependencies = [ [[package]] name = "patricia-trie" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", - "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "plain_hasher" -version = "0.1.1" -source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +version = "0.2.0" +source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" dependencies = [ "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -499,7 +497,7 @@ dependencies = [ [[package]] name = "rlp" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -610,18 +608,18 @@ dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "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 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", - "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", - "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", - "plain_hasher 0.1.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "plain_hasher 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "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)", "substrate-codec 0.1.0", "substrate-runtime-std 0.1.0", "twox-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "uint 0.2.2 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "uint 0.2.2 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -855,16 +853,16 @@ 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 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "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 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "memorydb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", "substrate-primitives 0.1.0", - "triehash 0.2.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "triehash 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", ] [[package]] @@ -899,11 +897,11 @@ dependencies = [ [[package]] name = "triehash" version = "0.2.0" -source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#e513114d69acf55584f346a90cdcd8c45c9a3cbc" +source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a54fe63d0439ec3b0e84ac3aeb90fea1f56e265c" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)", + "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", ] [[package]] @@ -928,7 +926,7 @@ dependencies = [ [[package]] name = "uint" version = "0.2.2" -source = "git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly#f47981561433ac5aa20888d8786b9df414262e3c" +source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -993,11 +991,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c48729b8aea8aedb12cf4cb2e5cef439fdfe2dda4a89e47eeebd15778ef53b6" "checksum ethereum-types-serialize 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ac59a21a9ce98e188f3dace9eb67a6c4a3c67ec7fbc7218cb827852679dc002" "checksum fixed-hash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18d6fd718fb4396e7a9c93ac59ba7143501467ca7a143c145b5555a571d5576" -"checksum fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" +"checksum fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "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 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" +"checksum hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "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" @@ -1010,18 +1008,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "89f010e843f2b1a31dbd316b3b8d443758bc634bed37aabade59c686d644e0a2" "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" "checksum memory_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" -"checksum memorydb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" +"checksum memorydb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "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 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" +"checksum parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "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 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" -"checksum plain_hasher 0.1.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" +"checksum patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" +"checksum plain_hasher 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "checksum proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ba8d4f9257b85eb6cdf13f055cea3190520aab1409ca2ab43493ea4820c25f0" "checksum proc-macro-hack-impl 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d5cb6f960ad471404618e9817c0e5d10b1ae74cfdf01fab89ea0641fe7fb2892" "checksum proc-macro2 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1fa93823f53cfd0f5ac117b189aed6cfdfb2cfc0a9d82e956dd7927595ed7d46" @@ -1031,7 +1029,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b614fe08b6665cb9a231d07ac1364b0ef3cb3698f1239ee0c4c3a88a524f54c8" "checksum rayon-core 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9d24ad214285a7729b174ed6d3bcfcb80177807f959d95fafd5bfc5c4f201ac8" "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" -"checksum rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" +"checksum rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "checksum rlp 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "89db7f8dfdd5eb7ab3ac3ece7a07fd273a680b4b224cb231181280e8996f9f0b" "checksum rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0ceb8ce7a5e520de349e1fa172baeba4a9e8d5ef06c47471863530bc4972ee1e" "checksum rustc-hex 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d2b03280c2813907a030785570c577fb27d3deec8da4c18566751ade94de0ace" @@ -1046,10 +1044,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "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.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2033893a813c70e7d8a739ca6c36dc0a7a2c913ec718d7cbf84a3837bbe3c7ce" -"checksum triehash 0.2.0 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" +"checksum triehash 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "checksum twox-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "475352206e7a290c5fccc27624a163e8d0d115f7bb60ca18a64fc9ce056d7435" "checksum uint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "38051a96565903d81c9a9210ce11076b2218f3b352926baa1f5f6abbdfce8273" -"checksum uint 0.2.2 (git+https://github.com/paritytech/parity-common?branch=refactor/no_std-friendly)" = "" +"checksum uint 0.2.2 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" "checksum untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f392d7819dbe58833e26872f5f6f0d68b7bbbe90fc3667e98731c4a15ad9a7ae" "checksum wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "522fe3fdd44a56f25cd5ddcd8ccdb1cf2e982ceb28fcb00f41d8a018ae5245a8" diff --git a/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm b/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm index 0fee4ebd36e2c3cf201372f1dd0a88361ae0f8a1..7c95f020d057fb783ca0546f3824fb852ec3f903 100755 GIT binary patch delta 24688 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 Ss-$94IjTM`-Z8s~X8#A};G$sw delta 24492 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 diff --git a/substrate/cli/src/lib.rs b/substrate/cli/src/lib.rs index f7820a0d401b2..a014189197020 100644 --- a/substrate/cli/src/lib.rs +++ b/substrate/cli/src/lib.rs @@ -26,7 +26,6 @@ extern crate ansi_term; extern crate regex; extern crate time; extern crate fdlimit; - extern crate futures; extern crate tokio; extern crate names; diff --git a/substrate/client/Cargo.toml b/substrate/client/Cargo.toml index ff33130564eca..e6b813710efb0 100644 --- a/substrate/client/Cargo.toml +++ b/substrate/client/Cargo.toml @@ -24,9 +24,9 @@ substrate-runtime-primitives = { path = "../runtime/primitives" } substrate-state-machine = { path = "../state-machine" } substrate-keyring = { path = "../../substrate/keyring" } substrate-telemetry = { path = "../telemetry" } -hashdb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } -patricia-trie = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } -rlp = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } +hashdb = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } +patricia-trie = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } +rlp = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } [dev-dependencies] substrate-test-client = { path = "../test-client" } diff --git a/substrate/client/db/Cargo.toml b/substrate/client/db/Cargo.toml index 5c09c3571810f..e9ea098664912 100644 --- a/substrate/client/db/Cargo.toml +++ b/substrate/client/db/Cargo.toml @@ -6,10 +6,10 @@ authors = ["Parity Technologies "] [dependencies] parking_lot = "0.4" log = "0.3" -kvdb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } -kvdb-rocksdb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } -hashdb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } -memorydb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } +kvdb = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } +kvdb-rocksdb = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } +hashdb = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } +memorydb = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } substrate-primitives = { path = "../../../substrate/primitives" } substrate-runtime-primitives = { path = "../../../substrate/runtime/primitives" } substrate-client = { path = "../../../substrate/client" } @@ -20,4 +20,4 @@ substrate-executor = { path = "../../../substrate/executor" } substrate-state-db = { path = "../../../substrate/state-db" } [dev-dependencies] -kvdb-memorydb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } +kvdb-memorydb = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } diff --git a/substrate/client/db/src/lib.rs b/substrate/client/db/src/lib.rs index 20b31d1484840..5cb44a6a2e7db 100644 --- a/substrate/client/db/src/lib.rs +++ b/substrate/client/db/src/lib.rs @@ -115,7 +115,7 @@ struct PendingBlock { struct StateMetaDb<'a>(&'a KeyValueDB); impl<'a> state_db::MetaDb for StateMetaDb<'a> { - type Error = io::Error; // REVIEW: `kvdb::Error` is gone (https://github.com/paritytech/parity-ethereum/pull/8924/files#diff-ead7c616cf8709a265c3297ad8dbfccdL36) and replaced with `io:Error` in other places – is that ok here too? + type Error = io::Error; fn get_meta(&self, key: &[u8]) -> Result>, Self::Error> { self.0.get(columns::STATE_META, key).map(|r| r.map(|v| v.to_vec())) @@ -271,7 +271,7 @@ impl state_machine::Storage for StorageDb { } impl state_db::HashDb for StorageDb { - type Error = io::Error; // REVIEW: `kvdb::Error` was removed (see above) + type Error = io::Error; type Hash = H256; fn get(&self, key: &H256) -> Result>, Self::Error> { @@ -308,7 +308,6 @@ impl Backend { fn from_kvdb(db: Arc, pruning: PruningMode, finalization_window: u64) -> Result { let blockchain = BlockchainDb::new(db.clone())?; let map_e = |e: state_db::Error| ::client::error::Error::from(format!("State database error: {:?}", e)); - // let map_e = |e: state_db::Error| ::client::error::Error::from(format!("State database error: {:?}", e)); let state_db: StateDb = StateDb::new(pruning, &StateMetaDb(&*db)).map_err(map_e)?; let storage_db = StorageDb { db, diff --git a/substrate/client/db/src/utils.rs b/substrate/client/db/src/utils.rs index 17cd441486a6a..ef80d3b725a20 100644 --- a/substrate/client/db/src/utils.rs +++ b/substrate/client/db/src/utils.rs @@ -86,13 +86,7 @@ pub fn db_key_to_number(key: &[u8]) -> client::error::Result where N: As client::error::Error { use std::error::Error; - // REVIEW: not sure what value the `Io`/`Msg` kinds had or what we want to do here client::error::ErrorKind::Backend(err.description().into()).into() - // match err.kind() { - // &kvdb::ErrorKind::Io(ref err) => client::error::ErrorKind::Backend(err.description().into()).into(), - // &kvdb::ErrorKind::Msg(ref m) => client::error::ErrorKind::Backend(m.clone()).into(), - // _ => client::error::ErrorKind::Backend("Unknown backend error".into()).into(), - // } } /// Open RocksDB database. diff --git a/substrate/client/src/in_mem.rs b/substrate/client/src/in_mem.rs index 5060090f9ea2c..e42e83f75fc5a 100644 --- a/substrate/client/src/in_mem.rs +++ b/substrate/client/src/in_mem.rs @@ -359,7 +359,7 @@ where let hash = header.hash(); let parent_hash = *header.parent_hash(); - self.states.write().insert(hash, operation.new_state.unwrap_or_else(|| old_state.clone())); // REVIEW: this was `.unwrap_or_else(|| old_state.clone())` – but ther compiler complained about trying to insert a rference into the hash map. Not sure how that could have worked before? + self.states.write().insert(hash, operation.new_state.unwrap_or_else(|| old_state.clone())); self.blockchain.insert(hash, header, justification, body, pending_block.is_best); // dumb implementation - store value for each block if pending_block.is_best { diff --git a/substrate/executor/Cargo.toml b/substrate/executor/Cargo.toml index f967b631c1eaa..aec1a610a09b6 100644 --- a/substrate/executor/Cargo.toml +++ b/substrate/executor/Cargo.toml @@ -21,7 +21,7 @@ twox-hash = "1.1.0" lazy_static = "1.0" parking_lot = "*" log = "0.3" -hashdb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } +hashdb = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } [dev-dependencies] assert_matches = "1.1" diff --git a/substrate/executor/src/wasm_executor.rs b/substrate/executor/src/wasm_executor.rs index 4256c5c6550ce..997df761d57c2 100644 --- a/substrate/executor/src/wasm_executor.rs +++ b/substrate/executor/src/wasm_executor.rs @@ -141,7 +141,7 @@ impl ReadPrimitive for MemoryInstance { } } -// REVIEW: this macro does not support `where` clauses and that seems somewhat tricky to add +// TODO: this macro does not support `where` clauses and that seems somewhat tricky to add impl_function_executor!(this: FunctionExecutor<'e, E>, ext_print_utf8(utf8_data: *const u8, utf8_len: u32) => { if let Ok(utf8) = this.memory.get(utf8_data, utf8_len as usize) { diff --git a/substrate/primitives/Cargo.toml b/substrate/primitives/Cargo.toml index f6308e92fe156..d98a1dbf9221c 100644 --- a/substrate/primitives/Cargo.toml +++ b/substrate/primitives/Cargo.toml @@ -8,20 +8,19 @@ crunchy = "0.1" substrate-runtime-std = { path = "../runtime-std", default_features = false } substrate-codec = { path = "../codec", default_features = false } elastic-array = {version = "0.10", optional = true } -fixed-hash = { git = "https://github.com/paritytech/parity-common", default_features = false, branch = "refactor/no_std-friendly" } +fixed-hash = { git = "https://github.com/paritytech/parity-common", default_features = false, branch = "temp/combined-hashdb-plain_hasher-changes" } rustc-hex = { version = "2.0", default_features = false } serde = { version = "1.0", default_features = false } serde_derive = { version = "1.0", optional = true } -# TODO: Used to fetch `uint` from "https://github.com/rphmeier/primitives.git" – what was `compile-for-wasm` adding? -uint = { git = "https://github.com/paritytech/parity-common", default_features = false, branch = "refactor/no_std-friendly" } -rlp = { git = "https://github.com/paritytech/parity-common", optional = true, branch = "refactor/no_std-friendly" } +uint = { git = "https://github.com/paritytech/parity-common", default_features = false, branch = "temp/combined-hashdb-plain_hasher-changes" } +rlp = { git = "https://github.com/paritytech/parity-common", optional = true, branch = "temp/combined-hashdb-plain_hasher-changes" } twox-hash = { version = "1.1.0", optional = true } byteorder = { version = "1.1", default_features = false } blake2-rfc = { version = "0.2.18", optional = true } wasmi = { version = "0.4", optional = true } -hashdb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly", default_features = false } -patricia-trie = { git = "https://github.com/paritytech/parity-common", optional = true, branch = "refactor/no_std-friendly" } -plain_hasher = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly", default_features = false } +hashdb = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes", default_features = false } +patricia-trie = { git = "https://github.com/paritytech/parity-common", optional = true, branch = "temp/combined-hashdb-plain_hasher-changes" } +plain_hasher = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes", default_features = false } [dev-dependencies] substrate-serializer = { path = "../serializer" } diff --git a/substrate/primitives/src/hash.rs b/substrate/primitives/src/hash.rs index ac1707d4aef5e..89f2961b95283 100644 --- a/substrate/primitives/src/hash.rs +++ b/substrate/primitives/src/hash.rs @@ -86,7 +86,6 @@ impl_rest!(H160, 20); impl_rest!(H256, 32); impl_rest!(H512, 64); - #[cfg(test)] mod tests { use super::*; diff --git a/substrate/primitives/src/uint.rs b/substrate/primitives/src/uint.rs index c6c94c120ec94..92ab73b70a716 100644 --- a/substrate/primitives/src/uint.rs +++ b/substrate/primitives/src/uint.rs @@ -66,7 +66,6 @@ mod tests { ($name::from(1_000), "0x3e8"), ($name::from(100_000), "0x186a0"), ($name::from(u64::max_value()), "0xffffffffffffffff"), - // TODO: `uint` doesn't have the same conversion facilities as `ethereum_types::H256` – need to port over the manual impls from `ethereum-types` to the macro so we can to `1.into()` ($name::from(u64::max_value()) + $name::from(1), "0x10000000000000000"), ]; diff --git a/substrate/runtime-io/with_std.rs b/substrate/runtime-io/with_std.rs index c81cedd079bed..8b1a3e404c7c8 100644 --- a/substrate/runtime-io/with_std.rs +++ b/substrate/runtime-io/with_std.rs @@ -36,8 +36,6 @@ use primitives::H256; // TODO: use the real error, not NoError. -// REVIEW: The `environmental!` machinery can't really work with generics so need a concrete impl here. -// This means that consumers of the generated code can't use generics either? environmental!(ext: trait Externalities); /// Get `key` from storage and return a `Vec`, empty if there's a problem. @@ -94,7 +92,6 @@ pub fn chain_id() -> u64 { } /// "Commit" all existing operations and get the resultant storage root. -// TODO: this used to be: `pub fn storage_root() -> [u8; 32]` – does it really need to use H256? pub fn storage_root() -> H256 { ext::with(|ext| ext.storage_root() @@ -130,7 +127,7 @@ pub fn ed25519_verify>(sig: &[u8; 64], msg: &[u8], pubkey: P) -> /// Execute the given closure with global function available whose functionality routes into the /// externalities `ext`. Forwards the value that the closure returns. -// TODO: need a concrete hasher here due to limitations of the `environmental!` macro, otherwise a type param would have been fine I think. +// NOTE: need a concrete hasher here due to limitations of the `environmental!` macro, otherwise a type param would have been fine I think. pub fn with_externalities R>(ext: &mut Externalities, f: F) -> R { ext::using(ext, f) } diff --git a/substrate/runtime/council/src/lib.rs b/substrate/runtime/council/src/lib.rs index fb6cf6b6bb8c9..37d4d619c62b7 100644 --- a/substrate/runtime/council/src/lib.rs +++ b/substrate/runtime/council/src/lib.rs @@ -616,7 +616,7 @@ impl primitives::BuildStorage for GenesisConfig #[cfg(test)] mod tests { - // These `pub` are here for a reason, edit with care + // These re-exports are here for a reason, edit with care pub use super::*; pub use runtime_io::with_externalities; pub use substrate_primitives::H256; diff --git a/substrate/runtime/system/src/lib.rs b/substrate/runtime/system/src/lib.rs index 24133436baf50..5cfa5d1e7b4d1 100644 --- a/substrate/runtime/system/src/lib.rs +++ b/substrate/runtime/system/src/lib.rs @@ -207,10 +207,6 @@ impl Default for GenesisConfig { #[cfg(any(feature = "std", test))] impl primitives::BuildStorage for GenesisConfig { - // TODO: I don't think passing a StorageMap instead of a TextExternalities can work here, as - // StorageMap does not implement the Externalities trait, but it compiles and there are no tests - // so… - // fn build_storage(self) -> Result, String> { fn build_storage(self) -> Result { use codec::Encode; diff --git a/substrate/state-machine/Cargo.toml b/substrate/state-machine/Cargo.toml index 0d5ec8fd68b74..f03401eb8c7b1 100644 --- a/substrate/state-machine/Cargo.toml +++ b/substrate/state-machine/Cargo.toml @@ -13,8 +13,8 @@ heapsize = "0.4" substrate-primitives = { path = "../primitives", version = "0.1.0" } -hashdb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } -memorydb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } -patricia-trie = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } -triehash = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } -rlp = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } +hashdb = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } +memorydb = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } +patricia-trie = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } +triehash = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } +rlp = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } diff --git a/substrate/state-machine/src/trie_backend.rs b/substrate/state-machine/src/trie_backend.rs index 0a4485b05627e..8dca8451ae9e6 100644 --- a/substrate/state-machine/src/trie_backend.rs +++ b/substrate/state-machine/src/trie_backend.rs @@ -198,7 +198,6 @@ pub struct Ephemeral<'a, H: 'a + Hasher> { overlay: &'a mut MemoryDB, } -// REVIEW: this is boiler plate, need macro? impl<'a, H: Hasher> AsHashDB for Ephemeral<'a, H> where H::Out: HeapSizeOf { fn as_hashdb(&self) -> &HashDB { self } fn as_hashdb_mut(&mut self) -> &mut HashDB { self } diff --git a/substrate/test-client/Cargo.toml b/substrate/test-client/Cargo.toml index 7448107b4b1fd..b7f3f9d1d7db3 100644 --- a/substrate/test-client/Cargo.toml +++ b/substrate/test-client/Cargo.toml @@ -14,5 +14,5 @@ substrate-primitives = { path = "../primitives" } substrate-runtime-support = { path = "../runtime-support" } substrate-test-runtime = { path = "../test-runtime" } substrate-runtime-primitives = { path = "../runtime/primitives" } -hashdb = { git = "https://github.com/paritytech/parity-common", branch = "refactor/no_std-friendly" } +hashdb = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } From 04b70654c684a784883165cb295016be8d2f04a5 Mon Sep 17 00:00:00 2001 From: David Palm Date: Thu, 9 Aug 2018 11:46:28 +0200 Subject: [PATCH 82/97] Implement blake2_256 for no_std --- .../release/polkadot_runtime.wasm | Bin 323311 -> 323311 bytes substrate/primitives/src/hasher.rs | 13 ++++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm b/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm index 7c95f020d057fb783ca0546f3824fb852ec3f903..c2688995d5d947ab7db01b0693001baefccf0094 100755 GIT binary patch delta 15601 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 IEFFOV1HTv>m;e9( delta 15272 zcmb6=2S8Ovw(rbb>Z3f0B2s)53t|Bj3$bvmF&bN9ViFA^prQ!KLj?=PPV8RwU=*<% z6%|Eu&FUt^Y!b6ED@v@f5PMB@O>h1)_r3dgn(Y4nH;Z%U%*>f{&YUuHX5P1#{Jy>9 zx6I-p6&4g08b-0gLMYf*_!=lq%vU)Lt(5@wLJubw7boUq^!D;%CdrApntV(?PRz^2 zh0*`rT^M6d%*CDl@pYn4C+hC*>g4C==j7+)LWQ3nQ#P|^ZbuJQ8;pep`KWS=6}-L} zjLDO8$7SWD=ccDw3`@Y2o=Km{8R?d^q|q5!DH9A!!8%>YjS3;0m0o4vKUIMuJR$C za?OHjgDK2lluPI7A9HOV4|Pc0EE}X|w(VoVeA~zE`Bk|--+8vRqp`QxN81tGN8g^W zV3RTIz`m*{O?t#oi7_2mq%wB!7|5vl*WiI%nkX-+RLn1%85KQV?&Z0pvf3cGGxZ@l zmsD0MFMr3y=#t_0Br26DBfk{Y0dH=0W7jLI9*s?P72sF1%LMp`Y?+C&v!%=}_CtXv zTp%(#%V26q2wiMteUp4lXZXWP#bxGbfo#LZ7PxEybYldnoq0`w4iy|0waJC!1o|t5 z5loOP&3Z*tN6eCdTB}CSKGFzZj)W;b_m(GiG#JcIvg>%+(8BO|x%yQkya?18TQ-9n z8mq2v1~lr&>Ul0X}EeM8b*S1 z-3nsO6+dhbtp(13ts#$nx(biAhC&#=oiKqI8xm_BE5|~S==QKJ)Ug{Y@l*`-`w#6G zuq+N-+2d8XJq{uq=85!{4Pm}!E}w((vPmXvyd7kDe7dUI5GKi)q+De@G9LyGz>>CQ*F}4c~f@N6T z1sc)9;My(_810~h4!Yv->1xv?8gPXMh=IR!f$!lB9MY3Chom3VO_RR*ayRg0Z1*Z0 zmk7TKn$lzl(`kZwnozdWdss^=drb1Ev!07kfevfqQvR2oqXypeL+l zAFsqAy`ZJwXJ)Uz7Fw&`kOZC%!6*IT zrVV8W4CxOqk%?fpmq=DrF76NQ*i{9O_J^*vDTdiPFO)`jfDxDUhQQS?!gqfnpv!O= zjSB}tOX}xm@And#21A7U{2<5#=WRl5JniOjZ!pyACJAAz724Zo+eXV-ng(TTQz>>F10fMROKr|mm}`__zg}&mS?}LU6Q48Su}o-+ z>&C#V0?GGdAYT|u_E>00D>8p9w4>tiSQte`@Hl7!Bh@bBAWY*pDIL~0FBQTLz?gIh z#o+N)#cn(amOc+TOO(2n*fcqaV``8!?+U@wQ*xJAzDNMO~oBzkF0wN z2X*?XKIRY|T8OgBZD}dh{e;|_+UW|LOiPrQO?o{V_hv&^NWll$m(;*1RrLLU;A?zC3S+AP`huJ?%v1}#<3xX4UVKnUB0{8`J zoqsKaY_Y%-i~cVQyt4>?7lCC*F@)%W#jl>EL9-zU|6NQDnCR*|3r=;|WHl+1IZ!a; zY;z(uMRL|g+U?F+*6j`nQ3ta7d9$I$Yw3O=c{7tMIYn_bbq-twNW;GK;02#CX4Zlg z@o;BRF5srIxM?25m~^nW+0=p=2zqrMnM@jb&4*YRgNgHD>PrsFRR3vePFptz^ZDz~ z`u>i6t7oJ80*GbB`<29*LTMd$cSyF~)_KKRV#S2CA8Gn*d(8scU@hH`PZmJ5kY1}2 zc*QYPkkeUO0%C`Vxo^QcB36Yiq}ixGWFb_OJMmp46kr^-SqwdeKesHVSVRiZw;ZA% zRh?80=rm9knP0k*^eU6jebp{COLAi?${E zXicg;nX8(yojehNRHq&AitdZd`2HSn#@RdJvFIJMhm8KKT@>xtt-**2YmjeMhCHx{IAliLV3tH-l5M_o$Sw$V5naSyFnBL0Faj(0!q375?y7{Z z1sz1%06~zTF$KF<(T2@Ry(Y}vRTTY3;HU#|-!q*;So4~_`;V~0h$?WgKyM9E3CW-9{AyxWU5vqae@i|)3j3T)Fy#d0MK#_1OOWbcGK7LPQYa8()_x6Hfd|Vp#{I+G$dl7iueWDgk4U4uc{4^_g=Wom zZP1!qhq(#pAx%nVifM*$Nrt|jaUSgi6tk{E0;{Q)>6NQ61IDW(uE7WpvZlpug*UHT zML@>}KRj^{nq$lj=*7<4bwk~G114x1A8-qHK{gIKMf+VFTJNWK%RX4-#$Lh6x4{P{ z;QZU9-PU;$1Z!dn^~r5InRGi#43ewm@PfJLv5hB|aX42|S{Va;1Kb*AKXQ zNe*h!T?ibndz7ag>0d+j4U0po!>5kfZgx+(W}46Y9>n@=+^9*tji!y@!HiZ(+}R+M zHVRkW(|oPQr4VFK_HYCG--qrn317YsKZxpp2hfBq+JqAyK#pTl;MiQe{{Th^V|(G7 zdSjF7jcw*P(4%1vMRc+?vO*IWtwNLcZo<>wz~PwB$`U(}eRBC29cIbFN#-WjKqzTj zOq(4z*DGB0w~%X7(g1w%A?#z9%T_-Ef1j&X3)Q<`FGK1Ygo%&H>sxTdBPeHQHmbir zf*#jAROB&2$uc~QGPO>ZSZ`tsk4h|D=gi$E1mf&_iS;0+Iytdc4hC=5wG~NQ8>ydB zf(&AomOm}vAnQ)UPqqr!<{$m+OSamDb$}e~=)$J|ccXCo!2aY=n{B5?IKhGjN{=>!F_> zvhP6@X_j26XGB_ivLh7o?|L#1a7p)Y74zZmUd+r^ZNMhptN~tnp*DB4ls%XOvNxi^u%ga-jonG+@ni9ni;IFH=`EV3qJ+yg3Do7L>ufUttn1$+iS-oz37|1FFTCLe;e|j@Hd}?lipEPE#2@=DC2-S&= zSl*m9_Y^yK5(4E>Nc+|GL2NV^M?uzv`VwGd6V_bY63sKSX&}zvWJ7hp$Ps>8kS+wReLlG#9870qo} z1FS(5G4jvrsJFk8x4j9Cs9LkVAA~vR)@|KGJHRM|$anN-wf1QWcg(PnVY2Z>8&hk# zjR+d6tl8NPCMiSy7VtD_RV{X{WbC+(rs~1&cf~e{$Z4e%?r)&n+-oM6pmEo_(j@rl zUik@(ta9GhUuizb__T6zs?|6Njw*>%!$jsXx&WL~T3%?Ye4_e@4(C;IzORZqL`QI{ z4t%ep>m3T`vWsboviQANA-U@Jnv3yw-YaAe%ZU?hxz_ycDojvj91ej=Rc{~uz{yy) zl}34+B>DE1s?-lJy24aN{$~VRAVxG*7XH&Fl_`RpoPo63;Uf`Q`!o_s5%|tZb_i za4Q1kNR~u6t?C`bbtQRY*5H{UPbR|O`riQm*pRuQpTk20O z*%v@PRT{R_Np!WuvAM$Je~Dw?!z_H*jvZp3Zo{4JnRX7l)SlgGR1D-MYYh4UgOou_ zy3AFcyCt*twkZX-L?T}~b1M%Dl)<+Xpio(KJCpwX?e-XUY+hCBo!_;4g_QeI;FuSz z)Gb1f7bLNr51u3CyZN9y6e-QVNhMkceH5CV!Bs@)s_Jii0g9E{Z}Zu|wkZQ2hLQVK zCOwQ|zdqejsd+e^&D#F-;NnNq1=GqOKZuN%lKO5uxZ5i zd$HUJ`l6E)l=xhKy6wK!b^zw6FFV6}jWa?&I&1AW!g}Ys zNZk2p+-b8EdQj#?6GJ?n^?=6g_)6=b7M`&B&n&4YJb?ks!Bbuk&*lQUdc$;>q|Wh% z#vG<%xi4hMMRROdX7-Om`qkS8{Wk5Kt~&O;`!YSrTr(dB_)&(9!tzuu5KL6 zdua!iTSNFMVLo&p)fi6?<%85;Ix-6gG+CY5FpPYOHzzg37hmGf37l`e#Ag62*^aKm zcu#6jUmV8cxuBJj=4RY7oHtU3_vS8u|LDx3*!jKqZD%VrEfUyf;ZyL(4rHR#u&*QQ zhdcs$>)K&WXSX(xcDxn=zp6=nxVIC`SF`%_yHdaZ=e?tC3G@q1Es4}gcBOkjlp6BA zv}Oky^1nlmy%n0)in%FcCCP5K+`2W#*V>>~BqkW>uwdpqF3b+$is?R?C|$cX3G?u9Hp(CELcdVnmtEV1BSLv7ySEEx zgz^L^K{b?j_g`3{b@tUd6VWZkoAOlmCcLK+^3{PYIRi1>&}bg6Pv>C|8|vI>ehAo> z3hdsR$f>B%!itCNt|d11RA6Rnn&@@h(VAbTP-2~5tq}7!cD6}pSqLAgHfzf%B}I4& zVrU*49;qJBz8HQ^Ft9L|hYJSw#`3Pjz=K%ckCpCLJH_$mfE}v9$?bTJ^Ht(VHX?~Q z60_R#03rJY?fFK5AUa+{pbm=XUjyW+u^qV|1xK}aC;lA^$QNfqS~=Qq)5%#J3~3Eb z`8fDFULdHedG0T%>)VwhzTJiA2}${Pt(TO;!cd=5I=$jO6p~e4&_Vcw+rTPW56~n8@b|ZnO+TGnr2(dr>#bJXv3Zh8WzFyZ(g$<9lig zk=>I&d`6``gi3qVr>*~5rKy9XN^k1L-^EMuY>1$SuIxWH*1L~imA31{O^0^VBDk6s zQZB+^nrxb>jG~}TQKoo9xKh4e3pjL?e0#RCVT-u=RDRsD z8oy`^!8|jJ6f%Df25mQ`jYjEcgur-`f*3tgpro=R<;}>gnUW}R25QJp*X1B#N3>^MElLJL^jdYyu zfXvW=NyG`gFQ5ydWw`%&b|SQh^rizV0s+@PUFnNDdQfq_63hFshHTjaRqe+fiw7lG zF_Zt7PDV$E#Tr zw>3cNV`ur&yXtqaR%P!Hy(I-sHRd4)+j`O$c z>*GFUZ|nJsNuSW6I_4M?*A6(~82cMd>GB!#5Ugsr)t;X-7YVYk{|UB)9bbbFudoLA z@Pu_YKct3Dr+hpXJ!G+(7P6C+g>eMDdy-ApZ&wn}GfjPP>?!t^=%wLut)*@M@ipqe zTJ|D?*KplwN&qduMrYU*_R$_(c7_dRhjwGpJ?p$8x$7=p*@GcxDF^zFz+s)b&p9>+ zcHrmd*uSmm6jzaDzw-`$c3#T^VB`f>2(#5K7YM)DwV5xnmTc8t9B`2#C6caRWM^TP zdgKzLr#L(CtII5yik~jC_EgX;QTWOgrroxTy}}k)Vek9T6I*~~bpKUACEbIWolNu9 zkLqY9D8ims*%v}*e6O)^V6*n99j+5{AzID1r{7@f8~wFWP?TtLlZCah?-}*OMXA26 ztkge_=^r#E^CpWbEIlCf?vRLUb=0Qm9hX@Lc7XOTHmy8FpHw+yB(oB0m&6edbyW!VyETDx$n{Mi4p|(AbS?7z0fAbclpD5H7-(s~u z`-x$9*d1Ds?sr*t3j4cN(g06@@wntZ3ncNsbDt%`4)xA`mH;qMjr@j<1==Pr`j*nA z6OCAXf(2s1Ll%wSe#?wDb^gIvPtCva_lLAqrp0Lch&6;|YM)1pj?gRAS^s9i+-x=N zpX!}O5nW{p+nyszau@G^Pu^kK0zCgcDJm`UkRR9z$tZlm2DkCD*<@0``GqBLaurd3 zkQ%%N_~Rc;xOsKp6ZR_8dj3RdL+Xi@!1uD!5=>@1+W)p5-j0>fdWg4rl_j`=@g}|M ziI73#0eAkIOM9!lS`hnI-zo$_((>1YCA6@S<_BAl z!kGz1DJ_zn?8{Tc-Rd@9E|NBQ+LuppJkpG$gl}fjc9+V6Ox}haXoPz*`75j>5S_Dlo5F7cP4xE8V7TgHGW4dhFZ}`incPf< zKq_OX45#vA0=A~Ig!)HNxyEQR^rUhU{fYjgsNR`My?lv9^(KX zqQMIdhVKZmkU%hX@O0=fRO?_c?4b7k4)9lPaGeuYM zfmP(a=vz>#BmPhD4C>#9`UTti>l{A|uWo2E#8RI}RQgc)KK+TM(EAg-P-_s1t-ID%J5?tt-j^`b*{&DnI zLJiM5G#saIF+uP%1HQDu&B0bqZ<5#|2&UI>+3MG9j69*zpV~7CnNaR(s*C>1No*lh z`se^bA)Vk2)oND@&y(7CSaOpS(lRGcOtPfq8ss0B(_`%h>6zMlX>)Rl_JG=)o|&4K zXONfCTg!ajgjKFUSi~FS@qF$z{L~5>;U%zSW=*6g*}3VNV-2!+*J^YX(5dMe2?kj_ ztu&fMJtZfN`ebD$jY&%ruPt?WZccKhWlUO*6;2N>2yrbRn_U-93bBJ8a?~jgkuv5J-+>B zI#Eckgd5D@QR01S;tbxHRjw97YQgGOr+Sx(y2e z7fl7k8aj- zN!n@79hYXd{&+y%A%HQsxPS-a_B@*L{5tGk#G9Fa77Z?>&Q<>aKL<%{gh=Svk3BIXcPWiHEUKP8wNPim*B>oc`4eoOlrJ zfq!bBm~NSvoSQ=GbjLnpN+$9Au)ZpI{!vszaqBEnxK$hIyP@tnh+I;FWD=ewL+H$| z4R~V~Z`bmi=;fo?jyW?c*PJq$FXqseiryzZ5cRsvR*RmsMObpb7eC%&pDUM; zAGcStQzw)5+pD=bm$X=VWDPSukudZ`f@14uW`+PEAfT z=VoP@GqR>qxDY^%((G(f9o&KU7V&60ummjTVN`Tp%%iACSIQ9yV6)AxTK-t$7 zZ}FH0BKvCXo0654ku_$FL8i3!*|*5=mF`COg}j-s$PF4@vy*d@t$wk3Hy)kJI|e-x za34!fN?XyEGA@~Z>!h(dYY+P8Q3{(5{Uh@zflFun;yhAzI--A&$6x4pey^BQLuegk zkgp4nn+6(}mP{-?s0XBErBVQ(3!=n)(q=kIRL$d^Mf&xddAx6cHu8{79T)-2$0?9#g^l~C&H$9J(=32({P zsyMWSUiMb2gg62x#YheD#ANR5ZXqA63GW(yv6M$RKM@`L(Y%Z|;PQq;g7D_^o_m5bs3$JJRvPEDK5T)iGJ&ro0LsIealT6mzL+_tL;?lFyB+3`TIcXVX3)$y0vo^V3q|P;8QT{Ob6)ZX?1>m5sBqKIE zBQ?Oc&PYw@arUFHq?cIAi*{5YIQ^p3h~D(ByePGy)MwjT=?!|%OvL~^TPu09v4b%A z0ukNy7GdJGQZyS^Pe=&LIHyOTqLWDde)0 zPAB7{qf)SM$Jlns@f|vLic3z5kBe{LA@jwj8HlD#9tkWEzql+-W!W!VTSs1zy0S^H z*(r>{8&^n>IYOw#IJHh{$SjVn=jy06*DCVtuO$aUjUnHPY4J6}Gz|eyen2aB=$cf>roV0_ zaL;wgjFYZQ5o|_^9WsE;T#SXss4q1K;o7^jYDKpt53D&Y#j%2Vf)iQcB>N~cZn`fe zP;##IO{tU@leTCpOen&!(E}-5nnf9HI|*4h?;cS#oAgXyz8F(Xd|dn3F)1<0DXFP3 zF=;W_>ZVkJ!8b|YD6Oa|U+P(^%(GQ~5h&)-5Dv2UX{C$d5Dej5^(&L>C!*{ z$aEP6JCax=p138=X|Nog{l)1DsJ6Ge;i}uxO0GbqRmi>WNNd7ZKJ$yzRnPt)b+z_; u)G)df(6(CjKSwQf{59$t(A3owORCzT{pi%uDRC+7 [u8; 32] { - unimplemented!() +extern "C" { + fn ext_blake2_256(data: *const u8, len: u32, out: *mut u8); +} +#[cfg(not(feature = "std"))] +fn blake2_256(data: &[u8]) -> [u8; 32] { + let mut result: [u8; 32] = Default::default(); + unsafe { + ext_blake2_256(data.as_ptr(), data.len() as u32, result.as_mut_ptr()); + } + result } /// Concrete implementation of Hasher using Blake2b 256-bit hashes From 8152a7887914e992cd02036ea4a27768fe752b3f Mon Sep 17 00:00:00 2001 From: David Palm Date: Thu, 9 Aug 2018 12:19:45 +0200 Subject: [PATCH 83/97] Back on parity-common master --- Cargo.lock | 146 ++++++------------ polkadot/runtime/wasm/Cargo.lock | 74 ++++----- .../release/polkadot_runtime.wasm | Bin 323311 -> 323662 bytes substrate/client/Cargo.toml | 6 +- substrate/client/db/Cargo.toml | 10 +- substrate/executor/Cargo.toml | 2 +- substrate/primitives/Cargo.toml | 12 +- substrate/state-machine/Cargo.toml | 10 +- substrate/test-client/Cargo.toml | 2 +- 9 files changed, 109 insertions(+), 153 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f7adc10edabc9..60a074d30dd3c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -747,7 +747,7 @@ dependencies = [ [[package]] name = "fixed-hash" version = "0.2.2" -source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" dependencies = [ "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", @@ -847,8 +847,8 @@ dependencies = [ [[package]] name = "hashdb" -version = "0.2.0" -source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" +version = "0.2.1" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1078,43 +1078,25 @@ dependencies = [ [[package]] name = "kvdb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common)", ] -[[package]] -name = "kvdb" -version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" -dependencies = [ - "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", -] - [[package]] name = "kvdb-memorydb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" dependencies = [ "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common)", "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "kvdb-memorydb" -version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" -dependencies = [ - "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "kvdb-rocksdb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1128,23 +1110,6 @@ dependencies = [ "rocksdb 0.4.5 (git+https://github.com/paritytech/rust-rocksdb)", ] -[[package]] -name = "kvdb-rocksdb" -version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" -dependencies = [ - "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "fs-swap 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "interleaved-ordered 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "rocksdb 0.4.5 (git+https://github.com/paritytech/rust-rocksdb)", -] - [[package]] name = "language-tags" version = "0.2.2" @@ -1534,13 +1499,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "memorydb" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "plain_hasher 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "plain_hasher 0.2.0 (git+https://github.com/paritytech/parity-common)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", ] [[package]] @@ -1744,17 +1709,12 @@ dependencies = [ [[package]] name = "parity-bytes" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" - -[[package]] -name = "parity-bytes" -version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" [[package]] name = "parity-crypto" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common#ae80aff49759515004525180c20ad322d010fa6e" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" dependencies = [ "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1822,12 +1782,12 @@ dependencies = [ [[package]] name = "patricia-trie" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1844,7 +1804,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "plain_hasher" version = "0.2.0" -source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" dependencies = [ "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2352,7 +2312,7 @@ dependencies = [ [[package]] name = "rlp" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" dependencies = [ "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2729,13 +2689,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.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common)", "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)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-bft 0.1.0", "substrate-codec 0.1.0", @@ -2755,12 +2715,12 @@ dependencies = [ name = "substrate-client-db" version = "0.1.0" dependencies = [ - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", - "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", - "kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", - "kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common)", + "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common)", + "kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common)", + "kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity-common)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "memorydb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "memorydb 0.2.1 (git+https://github.com/paritytech/parity-common)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-client 0.1.0", "substrate-codec 0.1.0", @@ -2787,7 +2747,7 @@ dependencies = [ "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "ed25519 0.1.0", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2913,13 +2873,13 @@ dependencies = [ "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "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 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", - "plain_hasher 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", + "plain_hasher 0.2.0 (git+https://github.com/paritytech/parity-common)", "pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", "rustc-hex 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2927,7 +2887,7 @@ dependencies = [ "substrate-runtime-std 0.1.0", "substrate-serializer 0.1.0", "twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "uint 0.2.2 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "uint 0.2.2 (git+https://github.com/paritytech/parity-common)", "wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3281,16 +3241,16 @@ name = "substrate-state-machine" version = "0.1.0" dependencies = [ "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common)", "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 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "memorydb 0.2.1 (git+https://github.com/paritytech/parity-common)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", "substrate-primitives 0.1.0", - "triehash 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "triehash 0.2.0 (git+https://github.com/paritytech/parity-common)", ] [[package]] @@ -3311,7 +3271,7 @@ dependencies = [ name = "substrate-test-client" version = "0.1.0" dependencies = [ - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common)", "rhododendron 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-bft 0.1.0", "substrate-client 0.1.0", @@ -3676,11 +3636,11 @@ dependencies = [ [[package]] name = "triehash" version = "0.2.0" -source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", ] [[package]] @@ -3693,7 +3653,7 @@ name = "twox-hash" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3725,7 +3685,7 @@ dependencies = [ [[package]] name = "uint" version = "0.2.2" -source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" dependencies = [ "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -4055,7 +4015,7 @@ dependencies = [ "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.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18d6fd718fb4396e7a9c93ac59ba7143501467ca7a143c145b5555a571d5576" -"checksum fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" +"checksum fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common)" = "" "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" @@ -4068,7 +4028,7 @@ dependencies = [ "checksum generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d" "checksum getopts 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "0a7292d30132fb5424b354f5dc02512a86e4c516fe544bb7a25e7f266951b797" "checksum globset 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8e49edbcc9c7fc5beb8c0a54e7319ff8bed353a2b55e85811c6281188c2a6c84" -"checksum hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" +"checksum hashdb 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" "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" @@ -4093,11 +4053,8 @@ dependencies = [ "checksum keccak-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b7f51f30d7986536accaec4a6a288008dfb3dbffe8a2863a65292bc395a3ae7" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" "checksum kvdb 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" -"checksum kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "checksum kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" -"checksum kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "checksum kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" -"checksum kvdb-rocksdb 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" "checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" "checksum lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca488b89a5657b0a2ecd45b95609b3e848cf1755da332a0da46e2b2b1cb371a7" @@ -4130,7 +4087,7 @@ dependencies = [ "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_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" -"checksum memorydb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" +"checksum memorydb 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" "checksum mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" "checksum mime 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "fe51c8699d2dc522bf8c1ebe26ea2193d151fb54bcdfd7d0318750c189994cd9" "checksum mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)" = "4fcfcb32d63961fb6f367bfd5d21e4600b92cd310f71f9dca25acae196eb1560" @@ -4153,7 +4110,6 @@ dependencies = [ "checksum openssl-sys 0.9.35 (registry+https://github.com/rust-lang/crates.io-index)" = "912f301a749394e1025d9dcddef6106ddee9252620e6d0a0e5f8d0681de9b129" "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" "checksum parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" -"checksum parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" "checksum parity-crypto 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)" = "511379a8194230c2395d2f5fa627a5a7e108a9f976656ce723ae68fca4097bfc" "checksum parity-wordlist 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d0dec124478845b142f68b446cbee953d14d4b41f1bc0425024417720dce693" @@ -4161,10 +4117,10 @@ dependencies = [ "checksum parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d4d05f1349491390b1730afba60bb20d55761bef489a954546b58b4b34e1e2ac" "checksum parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "69376b761943787ebd5cc85a5bc95958651a22609c5c1c2b65de21786baec72b" "checksum parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "4db1a8ccf734a7bce794cc19b3df06ed87ab2f3907036b693c68f56b4d4537fa" -"checksum patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" +"checksum patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" "checksum pkg-config 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)" = "104630aa1c83213cbc76db0703630fcb0421dac3585063be4ce9a8a2feeaa745" -"checksum plain_hasher 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" +"checksum plain_hasher 0.2.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "28ea5118e2f41bfbc974b28d88c07621befd1fa5d6ec23549be96302a1a59dd2" "checksum proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ba8d4f9257b85eb6cdf13f055cea3190520aab1409ca2ab43493ea4820c25f0" "checksum proc-macro-hack-impl 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d5cb6f960ad471404618e9817c0e5d10b1ae74cfdf01fab89ea0641fe7fb2892" @@ -4192,7 +4148,7 @@ dependencies = [ "checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5" "checksum rhododendron 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c8502867a61713f8297ed13b8de6fcdec1286d3a9ea543628f55bcfa8b30ac57" "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" -"checksum rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" +"checksum rlp 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" "checksum rlp 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "89db7f8dfdd5eb7ab3ac3ece7a07fd273a680b4b224cb231181280e8996f9f0b" "checksum rocksdb 0.4.5 (git+https://github.com/paritytech/rust-rocksdb)" = "" "checksum rocksdb-sys 0.3.0 (git+https://github.com/paritytech/rust-rocksdb)" = "" @@ -4266,14 +4222,14 @@ dependencies = [ "checksum traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" "checksum transaction-pool 1.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "be1efb673ddf49ab4a99893eb3af02f6563636033fb832c2b7f937641ad62b17" "checksum triehash 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2033893a813c70e7d8a739ca6c36dc0a7a2c913ec718d7cbf84a3837bbe3c7ce" -"checksum triehash 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" +"checksum triehash 0.2.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum try-lock 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee2aa4715743892880f70885373966c83d73ef1b0838a664ef0c76fffd35e7c2" "checksum twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4f85be565a110ed72ed7048cf56570db04ce0a592c98aa59b7dacde3e5718750" "checksum typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887" "checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" "checksum ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd2be2d6639d0f8fe6cdda291ad456e23629558d466e2789d2c3e9892bda285d" "checksum uint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "38051a96565903d81c9a9210ce11076b2218f3b352926baa1f5f6abbdfce8273" -"checksum uint 0.2.2 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" +"checksum uint 0.2.2 (git+https://github.com/paritytech/parity-common)" = "" "checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" "checksum unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "284b6d3db520d67fbe88fd778c21510d1b0ba4a551e5d0fbb023d33405f6de8a" "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" diff --git a/polkadot/runtime/wasm/Cargo.lock b/polkadot/runtime/wasm/Cargo.lock index 8988e7e171c2d..32fe199a6a895 100644 --- a/polkadot/runtime/wasm/Cargo.lock +++ b/polkadot/runtime/wasm/Cargo.lock @@ -153,7 +153,7 @@ dependencies = [ [[package]] name = "fixed-hash" version = "0.2.2" -source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" dependencies = [ "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", @@ -182,8 +182,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "hashdb" -version = "0.2.0" -source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" +version = "0.2.1" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -272,13 +272,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "memorydb" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a54fe63d0439ec3b0e84ac3aeb90fea1f56e265c" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "plain_hasher 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "plain_hasher 0.2.0 (git+https://github.com/paritytech/parity-common)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", ] [[package]] @@ -315,7 +315,7 @@ dependencies = [ [[package]] name = "parity-bytes" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" [[package]] name = "parity-wasm" @@ -348,19 +348,19 @@ dependencies = [ [[package]] name = "patricia-trie" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "plain_hasher" version = "0.2.0" -source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" dependencies = [ "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -497,7 +497,7 @@ dependencies = [ [[package]] name = "rlp" version = "0.2.1" -source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -608,18 +608,18 @@ dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "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 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", - "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", - "plain_hasher 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", + "plain_hasher 0.2.0 (git+https://github.com/paritytech/parity-common)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", "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)", "substrate-codec 0.1.0", "substrate-runtime-std 0.1.0", "twox-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "uint 0.2.2 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "uint 0.2.2 (git+https://github.com/paritytech/parity-common)", "wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -853,16 +853,16 @@ 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.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common)", "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 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "memorydb 0.2.1 (git+https://github.com/paritytech/parity-common)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", "substrate-primitives 0.1.0", - "triehash 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "triehash 0.2.0 (git+https://github.com/paritytech/parity-common)", ] [[package]] @@ -897,11 +897,11 @@ dependencies = [ [[package]] name = "triehash" version = "0.2.0" -source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a54fe63d0439ec3b0e84ac3aeb90fea1f56e265c" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", - "rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common)", + "rlp 0.2.1 (git+https://github.com/paritytech/parity-common)", ] [[package]] @@ -926,7 +926,7 @@ dependencies = [ [[package]] name = "uint" version = "0.2.2" -source = "git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes#a076abd118d3cada804d2802a018a3cc2a55f22f" +source = "git+https://github.com/paritytech/parity-common#26baede0d9cd8cdad3511d75408228051dbc23dd" dependencies = [ "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -991,11 +991,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c48729b8aea8aedb12cf4cb2e5cef439fdfe2dda4a89e47eeebd15778ef53b6" "checksum ethereum-types-serialize 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ac59a21a9ce98e188f3dace9eb67a6c4a3c67ec7fbc7218cb827852679dc002" "checksum fixed-hash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18d6fd718fb4396e7a9c93ac59ba7143501467ca7a143c145b5555a571d5576" -"checksum fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" +"checksum fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common)" = "" "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.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" +"checksum hashdb 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" "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" @@ -1008,18 +1008,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "89f010e843f2b1a31dbd316b3b8d443758bc634bed37aabade59c686d644e0a2" "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" "checksum memory_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" -"checksum memorydb 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" +"checksum memorydb 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" "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 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" +"checksum parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common)" = "" "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 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" -"checksum plain_hasher 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" +"checksum patricia-trie 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" +"checksum plain_hasher 0.2.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ba8d4f9257b85eb6cdf13f055cea3190520aab1409ca2ab43493ea4820c25f0" "checksum proc-macro-hack-impl 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d5cb6f960ad471404618e9817c0e5d10b1ae74cfdf01fab89ea0641fe7fb2892" "checksum proc-macro2 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1fa93823f53cfd0f5ac117b189aed6cfdfb2cfc0a9d82e956dd7927595ed7d46" @@ -1029,7 +1029,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b614fe08b6665cb9a231d07ac1364b0ef3cb3698f1239ee0c4c3a88a524f54c8" "checksum rayon-core 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9d24ad214285a7729b174ed6d3bcfcb80177807f959d95fafd5bfc5c4f201ac8" "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" -"checksum rlp 0.2.1 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" +"checksum rlp 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" "checksum rlp 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "89db7f8dfdd5eb7ab3ac3ece7a07fd273a680b4b224cb231181280e8996f9f0b" "checksum rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0ceb8ce7a5e520de349e1fa172baeba4a9e8d5ef06c47471863530bc4972ee1e" "checksum rustc-hex 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d2b03280c2813907a030785570c577fb27d3deec8da4c18566751ade94de0ace" @@ -1044,10 +1044,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "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.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2033893a813c70e7d8a739ca6c36dc0a7a2c913ec718d7cbf84a3837bbe3c7ce" -"checksum triehash 0.2.0 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" +"checksum triehash 0.2.0 (git+https://github.com/paritytech/parity-common)" = "" "checksum twox-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "475352206e7a290c5fccc27624a163e8d0d115f7bb60ca18a64fc9ce056d7435" "checksum uint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "38051a96565903d81c9a9210ce11076b2218f3b352926baa1f5f6abbdfce8273" -"checksum uint 0.2.2 (git+https://github.com/paritytech/parity-common?branch=temp/combined-hashdb-plain_hasher-changes)" = "" +"checksum uint 0.2.2 (git+https://github.com/paritytech/parity-common)" = "" "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" "checksum untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f392d7819dbe58833e26872f5f6f0d68b7bbbe90fc3667e98731c4a15ad9a7ae" "checksum wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "522fe3fdd44a56f25cd5ddcd8ccdb1cf2e982ceb28fcb00f41d8a018ae5245a8" diff --git a/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm b/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm index c2688995d5d947ab7db01b0693001baefccf0094..7295f5ef1e5fc0dcea7a019733820bb49c5c4a20 100755 GIT binary patch delta 41285 zcmbS!2Ygh;_Wzx^yPL8pn_fxoh5$)up*MwGkS0Z{*bqVpkU$CvAS$pyic|?+U_e0- zsUlLMZ?VUY;#2I1sMxWC`qcMC`G3#cdv}-O^Y{Mnxw&`RnKNh3IdkSr*&jYgc=cpL zeQ}oRn>SAx@9@p@`IPb8C%@&vv$U~ z38j_Q>tppW|WoID)r1$R*BEzX=Syg<0hcURAn`bEv~MfcJsK>*)wX&Dr?J1 znkfd0E}dOkGINHVX&sB1R8|>UOo($|Ig+|6>sjn9#7``qQB^apq-tj63}pk03`Er` zcd-aJQ*`EbUf!q275yT2y%oKVapMN(?)*fJwN{wU`bW3X6kYKktn+eB@g!+n_mt-< zv2Mh>Jc-6fVYw{P80ngEd2+fI;bBoNC`FYe!prkjr8gT90>nd6fRhpm#|b!&ux8Oz zOH_Ftrwpk^=dkNz0n-JTsRR>P7+bAB?qtoDyq+-@z> zCR(Ik&rJ9$-5FlO_M{ocSCF(!uQNN#c*(tD0%#Zs8m18qnQTdb#-SuIJK0WZ5&+2b z)Jsv!gk;jn@JC&rVRco4)m11TZgox*qjmJvJ`0T$N_R*!{#)OKFhVGj=vn}_kxUIu zGFk4DNrbB}v>3I?;tP+3WGdj=+;kpX6W2?^{ab9T7Lv$BS~3G%8kWa|Gj#cy*um-G zYzHt&(iAXymKJ7xJ3U#(e`5E5M|OB7`GWX(vK6$&nk_RRyr^mV_8Eo|A+qfmUx0a}>8Vgk|Og~3`556x)LXvSJIXxVib|R2!{F$5< zml)(Ark_P#BQIrI1Xwi;62slbgNdz-mr^oAQ2ainHX7;SGF@}%9`QqOo^I49d5ra` z*)pSvP-E)si`sHW+Cm_yKr&h@N{*_l({O2pqtdkTg8XnqY(%_L9O*09u$>JAeAYD2zqiLtV zteAA8lEN%@(f^^ubK%iJGjq(CZu&1jmG1~4W%swI@nlV-Hd%xraO zJaonD0F@+kOYJaE6XT}LX1+@ourhOvb>`s#;&7DpWClo~1nWjzs;MY+O}>H8MeVW` z9(u?mHL~~+kdlw_Q*z>^dJnn1j;KiLXfx9#yMh$lU-Z7o1 z(%)9l7)~Ugg~Br8vZjJr=VpC*4TLeMNP@b-)*k`Y63`!qEVZHAs>N0X=f90#Rg&Wh z$1^zrc~{(#ihi=rR6Eg%e&6y&MbGg#6yx!1ogZ#6&Sf`ay^LnsYLxuAyhRL^ZUjIh3u&K=01ncw3*r z3XCgzcL9jodOwTretp)mmd1%bD~(w#1{u4r&>b|W8P&O&##4H@lx+#u=#V#pC5yN# zdA_kPZwkt%=3kD=ug)JHQ$QVX5~H}PIX%e@59iNh!MFq&*R|zZm9;irZPSk>Hzc)9 zq&5_^YZuIxuf=uK4NVeUTGi65O}wPz~8ElgMxX}DR0B!j{PV-w)08+ zJ>7X&Fg-!05A8CTN6?sYl{O57yRTck19ku7^2@nw)nILiM>Ed$>Sng8sc~&l9_Vpf zQ31g1EgBC5V|40-ExOqWkTpGAc7kzV?kr?YZ$@Ms(d+?ypKG=Ve-||$%?ge8o8N7e zT~TB_-QtqO3`eyYeV>yZ>yRBAMjiWI-$%kw+s+|9SV!a2Ay+c3q0P`*YT?$a+DnYh zA?SmvCW1{wVP~FeOdd8gtsotvW4^kcc}e}Pht^m16H2*fZo{j?hN`Wm=qL7p!#a5S zgA%I#twM6zHyUP^eoB6OSRjWnU{ue9VD@1AhEes@U!xxZHlK~|fWN6%e<*Q^A)aeE zcl8n$d$LvM2puW-E7E<6fjXlG;P*uloW8+)=|4d36`B%Jj&q9!jzp>>n5CCNE6 zITwNND!Q^A#(+7kj1iSdY_Bn;a%%SG`l8MX1Ok?(uC!I|t1s#ygDwPHE8C49D=W~Z z@l|WtLq=hBu904y1Q>S5^GUDZty^-6UfMg3AeEZL&F1}&^YL82p1MtKU1 z8>atYSLZyxI;U<|S6*`+s(ZeshG2E8oz4mx_S9|+XO98xf$SNe+{_qO=`IJ{r+$ZUI%i<=#9|zl7ywQA?D3)#C-h z(UM$HKGq$m%y@5ZYhV^OuMaRAG_N}VES^_L01nN&8ia}Uc@fpl*Sl>~31;k}hEm28jZd(>^S7=OGP(e`(x`9hQ3-87E!G$gG_xQqV@welmc5I9>Y0;}l z?X})y-5iI&5vBsQ{Z9W7oDr zp;c?IVnd9N))MHbb8(|3wT2Hj^k&A^viX-9RUA-+S$FqmyNyYAXSdqBS_&n%q-5XfqVAAUhW4u- z$u^qWnWxfF2BY@C-Q^h7+>OSvX?=_vreaXJ#8?UaJ;*4YLW!5q;m4-l?6!ayxa`YZHqa>kGJ}7!+L-s{)x_%Wd^raE+vb$Ut}}+6>dvk=R-CHD-?OJC zMb^VS(V{fBr*FfwuXGNW4}Q}?g-X7?9fiL6wgt;K627~+l`SPuB){3JLFxlU*s=vo zq6ib?(08rb4aOJW^c|<9qKszx2`5R66fWQ~uBeDf7=z%6n(JuntDtk3G?vVLzte@01@q zAZFu_{qg;@o43+r)xA$NYyEU(exp|T1Fcp_VucHpV zVUrl9vK(XQm$^orv%7KR%Lpn|`JZAm;pl%7S+ViOf3Ag6Ec*Ql{9W|>K>U5}_hxLX z@vqvb zEnkb)3bZ`WR%5}ROW0;3>Rdbg?Rl)#oZ0Keu-sVl^p|eMMaqFd->>jHAEYCpJ4-SC%P$bubb4`T42e1yYYW*{!U^Kib8{F#g&>@n9J1 znl#X>UP$MEuck^1i0?#RI2+Fj#L{qf6T4CH2v)>5JxIx&#LW>b3y5uqV0Z9e?-Tiv z806N7k&&!DKOx)DNjx6Oa`}C-4edmNn`QA&t&}NlHjqse2i@!**Zmtojs!^#S*I_G zc}==?67NQ_biQJPSz}%_%VQ(N@Mz`*DQctHpuZ+XcnoXD(nR+dCRmAhGlq3!r6N2Q z6qw{+7|SMc)<%32#~RpVu{oYi^Br4gP7U2L&c(VPiQdk-nZ};GZ{KwTI>@wa3Vj_wzhe2+# z7RYe{SD0$)~% z@ei>Ilz;UhHZS8=SdN8qsvJs7shh=bUHE%w*Bf2=(C8-6a+eWNJmsDw(YhNiB7#t|ei~H%vG~CvyPw)g`sXYo`AZSomOsIg{r_ysv(P;Mw}m{3nu&LY zXwsgKBBW~D^LAjF?d^FN+1LwO7HDyh`)nf|y(lN%=3At8;P0~W;!Fp=5Zv%gH{OyT zzfb(o&1C<)?tCPgJ*PWr)5L?_`38gr^x#dPP$u=@r2%tS{Lz`$LYGeO!g~^c16_DO zlo*lAX2(6SPAXofRJ?i0L+ix*x$H)?sCzT^JvFAFIctx`jBU=k{5AhS(475}erTPX zZ0XDkD+rV%ql@cDmGWG{nzH`37FR7D4=sLeQ`QN1t)f?&c)lrH0kpbh@V5N(U1D@V5Mp8Go9H9QE6_u3C z2tKyE)?@aYu37zO`E!r@hYwU;WNW(ht{(U-`@&BNeF74I**xX`>OpEaXT$tA4^dC@ z;(!bK|I2gaX+gD+wpHApa0kOOAU#bL^ug2|HCOQr6stP&G+1Kd{*JsI_3j59`6v*t zeJ8#q@kVeR^%hpA0`lp9yajVH3~K}0uv*bMpFIn4${xs4MSKApND#&rK(QByCkogE zey0%LmMn*_7osop7qU)j$)rd;-V$P4ATDpkPPn!R436RA>5i;50T|jEY7h#xHQaZ% z-z5&W2GSFEqCQ6OnzS?F>ELm|Th*40qe7?KN_f)?5!}8(yio{b{x7+&6`R_#aNcm2 z*x8;n4M8P07GBVJP~aFVH_k{H*E)rc>;!)!A)i0(aDPTbua zq~OB^4~q+qj18iq2gEcp*%Y*}>~gl4Rf^$#U^t+=3wxT(F{&q=P)S;t@D2n`m-S?CnN9YQ z)6PUpeA$cn_;(w`lp^*!5up@%$|eF0hZYfpE{X7%9w0)3Xxkfc`C?>m);)><+6W8G zNW1fQ?h8h+pE!*1n^ zHi+REy@(0sUh!XRIvbGTM69ZXh*uZPxk6yT5oEu0CYbuPpu4IF(symA&gIGQ?_s6U0C0N2{ z4LeB~gP<(7t{2Y?VwYQp%JJW7$DzTjrK2he!~Pw8S=zcG?0VGN?kbidYKO4-7q#rN zYh=ro4rQ%SDj`s6r0@)5ZnNmuHiQnt*aFuV>p{QhfX@16nCyx^!&xhKuc#i*hS~$E zbXO^IAbo8(n}ji=^9Xh`wcC=XuST!|*V*j?GlhKGt-kOblBLeJ>22%U=0$rn6U#?} zvg5?VBiURVCt8@%O`Q6SV%GwvO{3V15S#{$W*5z9O%rg#XtoJ**X3%qn}4xhd~!9r zHlbP%_oA5?&UoKw9_4^dEQXF@TUfPVty!w;C!$q+fL0c zTnpO&63Oedmr^@wNlm25%SZ>po21Y=4%~R#W=7syzdEAF#{iHfIhhtc;@v6q^ z#jV8A66P9JD?J$}x%87dO?QKIm!5`=u;5287|g)4T9BcIu_WKuX4om& zJ74+H4yMXc>pvS!ccC^HhRS|J6V&8F&%>5GjETt_}V$7Cz)EXY@@sX{FVb^`H7cz{2C zC}&N;I{PbGc167^`r&$eqJBP^j5qn+6CPkqtUv%DgA%Zshs9pmW&Q(3x?)?`dZ##bm4j+Z=$iJ6(4uMQ(P zb{>lXY1!mF2E;x(P=$IDNf)ypv=XsjVW1}L=gU_MNvCPfi@0y>v;g0sss!sfUeYTl& zzTtb+_BjW$0sh4{Om`S3`fJj+Zl?c@m0%)iPUpQdS;GIXi9pf{vmk+Vn^e=_CFnRk zbo3{a2O8KO@o7t+b4EF74gC<&vmA=V?TwQni3p6d$y%ysrpX0|_)gj_thCb7s1C`m zjoh1}r^CvItcHqZ&}e8eon=EFFEScTY-2SSnaHN;nXmlMHUt?0=J*mzqq55yUt)ut zMm;o`2;;fXh(Kmb*_+&iMI_IqEQkxlUBuO}=Dq$$!vWkGrX>VWTq9=Hu(lbyKw@*y z$Cs`DRFjmWTP6wO1@6DO)`S$vEsPi{+|M13u5(!pFi(&8j< zo16y&U9k-GIQc~;E^3pb2o2IF;okL~SI`umiwd5kMpBx`LmC`k-qI*hO1&5i*K*%XaSX!wAcgU%Nq5zXP5;4mRkG0Hi#G#lqMd&4QJ%5T|>*SEiFPN^J zB}tc+i$7hvnv;?-s!TOT@esJ-nC1(WFRkHV1`7^(>a;lAgja zaqnD~OV%HvX#MnqxhylnCc8QLxg;ed{lT4~6ElqOaxBcjDA6b@;b%8q3VU?RUt!_gcCO)@i#9`31;Llbp3I+O-tMFFc(!!%+CE2CRd*LJl&IfrHV z;G}hOvJp%!2-*iUx^gYfoN9zjKmOa41Dn^#ykD=9GoB_za@r9FHxhhSPYXc!dY%|U?-QP^rE(!Jxm@XrW0 zl48uEJe0SiSt1QvM17~`wg(*< z<-yEeOFu6PxW;Qyc9hA&Bp42eGiwz2bJ%b%^*07EOv=DwdHiRNlOvH@4Ct(BF_Wiy zW{JD!uqL!AfRsSf^OXRN|KOnWm4ILn=xlVbDVq-484&}hKEfN-)QcA?T6sBE_0@W-X1%&k}VlBurv6#tPK(KIH zPJ&)o0W9M&9>fpK@U$d+PjN5y?&g6Vy-~b~rtY+-C|w#sWDeAe1M^r?J|UimcH@st zbt&#(c^WT+apH%0OfxkBCCRRqJ}TLj=(iZn6Cyr#2d5zxo5XF2YZSwL@bF10dSq;) zxXH)bpl^5hSofCZsHde{eft?FpW%6ST^bsLW-U>LyAD1if)w=IpfL(;G?F%I7_f3m zCnE$d9rmIWFWH%YWu(PuW+oIR$IssyX{~9uDSCsZGtvt{q&2Oy7?Q^XstuD?a~>v+ z)nOT9p(?t~XKe>c)S)O$my<-@R1_BKE-7s}9`deAW|xx+B%;58TR?p@iUadmQZGwi zBuJ;!`TFA06KaW5U_vdNx3MB$sIb8Ph0Z0FYxW9pAR22jAT%tSzDM_49a_o-Wi5f8rhfS6MGfW!X34NnMR_dAadt02j%`&)MAznI6{bu0>LBe_51L(vs>w;0lOTO}CN(_dvUZV3C5TlE*i}AqhA}S; zwXGS3t9Sb=pw0V0N3<-n4sddxPVHb zQ2}tEAmFk>A8uDz$Y4KvVcq1JT$#@Aa;!? zUd&qEhs8Oq-UPFpom4{>Y9Ii%wQjE#+u`7vSYW9Z8@Fh8M2H1{>Ccd&Ng+Ab zFKmRxhwW&6<<57$?m?qyZa%D<|LfLwSub}3fLlSJk+Mq7WyjAdBGDiE(P!(yc-{#<76Da%^U zAb~|Box#n+~?g|H7TDE{e?({Wr6Gyryqv8L_`%!=V;|Y<nU7Y zS&zaZxbw3#ucs%{WJVmHl^IW=6b4vD2DU5(2$|xazLibk#)6G~*#_gKjoExty}){3 z@|~LoVH^73P5r$a%u^b)7z>kK#YXTPsmdJIIf_ljLz}K-ZyV<}r6#>=Z4Za_A(sK= zRxcxSV=RyNTZ2#%O2XHQUW~z~6LQv7hc{vpZc#a?s_1HDNkINdqBU z*jpI^SyVj3Mg9G3Eg&@CV{SYwd{DwYx<{gSb`N;s@70oa~N;@$_$Oh4h>n*5}W zd{y&Ck-~73#1VM?3?~0xr=H;r*P?p+XyzP+EkxCO<+ei`f>q6u2U*LI-4>5O$eLu` zij`VvrRP`^d%64BW4T(z@I5RmjIxjiBXb`s0~;>h$7pNg{(WpFHDy0ra1sCcCqIlW zxX8Q0&v492JnU!KEiF4fLH!!q^imlzK8h{G?j<#>&HnbB_7f4{PnRN#l2JIVLpewlMGAF z#Ce{ZXmGO!I3fIS zo}8pd?nNJjd*(9;v*$MExz;n#%M8!v6#mj)WB!&LWAi=oqydH?1h^O6>#{4r0M&6!2ZDkAc_%TkKa1u~E z_PTo};SCW0qlca|Db!bOL-9mo_Reeqv0>*eZi@iNxHrz&cc`hM@9H9te_{_b;v9f; z3=SDZuY;>6-¬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 EA1DVP(f|Me delta 40753 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"] [dependencies] parking_lot = "0.4" log = "0.3" -kvdb = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } -kvdb-rocksdb = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } -hashdb = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } -memorydb = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } +kvdb = { git = "https://github.com/paritytech/parity-common" } +kvdb-rocksdb = { git = "https://github.com/paritytech/parity-common" } +hashdb = { git = "https://github.com/paritytech/parity-common" } +memorydb = { git = "https://github.com/paritytech/parity-common" } substrate-primitives = { path = "../../../substrate/primitives" } substrate-runtime-primitives = { path = "../../../substrate/runtime/primitives" } substrate-client = { path = "../../../substrate/client" } @@ -20,4 +20,4 @@ substrate-executor = { path = "../../../substrate/executor" } substrate-state-db = { path = "../../../substrate/state-db" } [dev-dependencies] -kvdb-memorydb = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } +kvdb-memorydb = { git = "https://github.com/paritytech/parity-common" } diff --git a/substrate/executor/Cargo.toml b/substrate/executor/Cargo.toml index aec1a610a09b6..63262ad21d699 100644 --- a/substrate/executor/Cargo.toml +++ b/substrate/executor/Cargo.toml @@ -21,7 +21,7 @@ twox-hash = "1.1.0" lazy_static = "1.0" parking_lot = "*" log = "0.3" -hashdb = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } +hashdb = { git = "https://github.com/paritytech/parity-common" } [dev-dependencies] assert_matches = "1.1" diff --git a/substrate/primitives/Cargo.toml b/substrate/primitives/Cargo.toml index d98a1dbf9221c..ccb1f57fb04de 100644 --- a/substrate/primitives/Cargo.toml +++ b/substrate/primitives/Cargo.toml @@ -8,19 +8,19 @@ crunchy = "0.1" substrate-runtime-std = { path = "../runtime-std", default_features = false } substrate-codec = { path = "../codec", default_features = false } elastic-array = {version = "0.10", optional = true } -fixed-hash = { git = "https://github.com/paritytech/parity-common", default_features = false, branch = "temp/combined-hashdb-plain_hasher-changes" } +fixed-hash = { git = "https://github.com/paritytech/parity-common", default_features = false } rustc-hex = { version = "2.0", default_features = false } serde = { version = "1.0", default_features = false } serde_derive = { version = "1.0", optional = true } -uint = { git = "https://github.com/paritytech/parity-common", default_features = false, branch = "temp/combined-hashdb-plain_hasher-changes" } -rlp = { git = "https://github.com/paritytech/parity-common", optional = true, branch = "temp/combined-hashdb-plain_hasher-changes" } +uint = { git = "https://github.com/paritytech/parity-common", default_features = false } +rlp = { git = "https://github.com/paritytech/parity-common", optional = true } twox-hash = { version = "1.1.0", optional = true } byteorder = { version = "1.1", default_features = false } blake2-rfc = { version = "0.2.18", optional = true } wasmi = { version = "0.4", optional = true } -hashdb = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes", default_features = false } -patricia-trie = { git = "https://github.com/paritytech/parity-common", optional = true, branch = "temp/combined-hashdb-plain_hasher-changes" } -plain_hasher = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes", default_features = false } +hashdb = { git = "https://github.com/paritytech/parity-common", default_features = false } +patricia-trie = { git = "https://github.com/paritytech/parity-common", optional = true } +plain_hasher = { git = "https://github.com/paritytech/parity-common", default_features = false } [dev-dependencies] substrate-serializer = { path = "../serializer" } diff --git a/substrate/state-machine/Cargo.toml b/substrate/state-machine/Cargo.toml index f03401eb8c7b1..6e199f429b0be 100644 --- a/substrate/state-machine/Cargo.toml +++ b/substrate/state-machine/Cargo.toml @@ -13,8 +13,8 @@ heapsize = "0.4" substrate-primitives = { path = "../primitives", version = "0.1.0" } -hashdb = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } -memorydb = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } -patricia-trie = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } -triehash = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } -rlp = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } +hashdb = { git = "https://github.com/paritytech/parity-common" } +memorydb = { git = "https://github.com/paritytech/parity-common" } +patricia-trie = { git = "https://github.com/paritytech/parity-common" } +triehash = { git = "https://github.com/paritytech/parity-common" } +rlp = { git = "https://github.com/paritytech/parity-common" } diff --git a/substrate/test-client/Cargo.toml b/substrate/test-client/Cargo.toml index b7f3f9d1d7db3..b31b8b2d0a7bb 100644 --- a/substrate/test-client/Cargo.toml +++ b/substrate/test-client/Cargo.toml @@ -14,5 +14,5 @@ substrate-primitives = { path = "../primitives" } substrate-runtime-support = { path = "../runtime-support" } substrate-test-runtime = { path = "../test-runtime" } substrate-runtime-primitives = { path = "../runtime/primitives" } -hashdb = { git = "https://github.com/paritytech/parity-common", branch = "temp/combined-hashdb-plain_hasher-changes" } +hashdb = { git = "https://github.com/paritytech/parity-common" } From 11ea51724717670514fec44ec9fe22708700996e Mon Sep 17 00:00:00 2001 From: David Palm Date: Thu, 9 Aug 2018 13:23:50 +0200 Subject: [PATCH 84/97] missing type params --- substrate/rpc/src/state/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/substrate/rpc/src/state/mod.rs b/substrate/rpc/src/state/mod.rs index da0497eacec9f..ccbcba2a2a6f3 100644 --- a/substrate/rpc/src/state/mod.rs +++ b/substrate/rpc/src/state/mod.rs @@ -92,8 +92,8 @@ impl State { impl 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, { fn unwrap_or_best(&self, hash: Trailing) -> Result { Ok(match hash.into() { From 19d07dbcc1e7dcfff5ba75472ecbe0972ab8a3f3 Mon Sep 17 00:00:00 2001 From: Gav Wood Date: Thu, 9 Aug 2018 15:55:17 +0200 Subject: [PATCH 85/97] Update Cargo.lock --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 71c3009893c24..5b01d4286d5fb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2766,7 +2766,7 @@ dependencies = [ "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-io 0.1.0", From 60df8c1f6fb0fcc4fed779e71759dc78945311eb Mon Sep 17 00:00:00 2001 From: David Palm Date: Thu, 9 Aug 2018 16:51:25 +0200 Subject: [PATCH 86/97] whitespace --- substrate/primitives/src/rlp_codec.rs | 82 +++++++++++++-------------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/substrate/primitives/src/rlp_codec.rs b/substrate/primitives/src/rlp_codec.rs index b884dd507c8ec..b104d8b9f9acc 100644 --- a/substrate/primitives/src/rlp_codec.rs +++ b/substrate/primitives/src/rlp_codec.rs @@ -71,53 +71,53 @@ impl NodeCodec for RlpCodec { 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 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); + 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() + 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() - } + { + 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() + } } From c30dff09739fc3ee6677e995610b57ba19ebec10 Mon Sep 17 00:00:00 2001 From: David Palm Date: Tue, 14 Aug 2018 10:12:14 +0200 Subject: [PATCH 87/97] Rename concrete Rlp node codec "RlpCodec" and use everywhere Implement a Keccak-flavoured Rlp NodeCodec and use everywhere Add a KeccakHasher --- polkadot/api/src/full.rs | 12 +- polkadot/api/src/light.rs | 8 +- polkadot/service/src/lib.rs | 18 +-- substrate/client/db/src/lib.rs | 10 +- substrate/client/src/block_builder.rs | 8 +- substrate/client/src/call_executor.rs | 10 +- substrate/client/src/client.rs | 30 ++--- substrate/client/src/genesis.rs | 6 +- substrate/client/src/light/call_executor.rs | 10 +- substrate/client/src/light/fetcher.rs | 4 +- substrate/network/src/chain.rs | 6 +- substrate/network/src/test/mod.rs | 4 +- substrate/primitives/Cargo.toml | 6 +- substrate/primitives/src/hasher.rs | 83 ++++++++++---- substrate/primitives/src/lib.rs | 14 ++- substrate/primitives/src/rlp_codec.rs | 106 +++++++++++++++++- substrate/rpc/src/author/mod.rs | 6 +- substrate/rpc/src/chain/mod.rs | 6 +- substrate/rpc/src/state/mod.rs | 10 +- substrate/service/src/components.rs | 6 +- substrate/state-machine/src/lib.rs | 8 +- .../state-machine/src/proving_backend.rs | 10 +- substrate/state-machine/src/trie_backend.rs | 8 +- .../test-client/src/block_builder_ext.rs | 4 +- substrate/test-client/src/lib.rs | 4 +- 25 files changed, 273 insertions(+), 124 deletions(-) diff --git a/polkadot/api/src/full.rs b/polkadot/api/src/full.rs index a30e7ce818ff3..9dfa14ac924b6 100644 --- a/polkadot/api/src/full.rs +++ b/polkadot/api/src/full.rs @@ -27,7 +27,7 @@ use runtime::Address; use runtime_primitives::traits::AuxLookup; use primitives::{AccountId, Block, Header, BlockId, Hash, Index, SessionKey, Timestamp, UncheckedExtrinsic}; use primitives::parachain::{CandidateReceipt, DutyRoster, Id as ParaId}; -use substrate_primitives::{BlakeHasher, BlakeRlpCodec}; +use substrate_primitives::{BlakeHasher, RlpCodec}; use {BlockBuilder, PolkadotApi, LocalPolkadotApi, ErrorKind, Error, Result}; @@ -58,7 +58,7 @@ macro_rules! with_runtime { }} } -impl> BlockBuilder for ClientBlockBuilder>, Block, BlakeHasher, BlakeRlpCodec> { +impl> BlockBuilder for ClientBlockBuilder>, Block, BlakeHasher, RlpCodec> { fn push_extrinsic(&mut self, extrinsic: UncheckedExtrinsic) -> Result<()> { self.push(extrinsic).map_err(Into::into) } @@ -69,8 +69,8 @@ impl> BlockBuilder for Client } } -impl> PolkadotApi for Client>, Block> { - type BlockBuilder = ClientBlockBuilder>, Block, BlakeHasher, BlakeRlpCodec>; +impl> PolkadotApi for Client>, Block> { + type BlockBuilder = ClientBlockBuilder>, Block, BlakeHasher, RlpCodec>; fn session_keys(&self, at: &BlockId) -> Result> { with_runtime!(self, at, ::runtime::Consensus::authorities) @@ -156,7 +156,7 @@ impl> PolkadotApi for Client< } } -impl> LocalPolkadotApi for Client>, Block> +impl> LocalPolkadotApi for Client>, Block> {} #[cfg(test)] @@ -182,7 +182,7 @@ mod tests { ] } - fn client() -> Client, LocalCallExecutor, NativeExecutor>, Block> { + fn client() -> Client, LocalCallExecutor, NativeExecutor>, Block> { let genesis_config = GenesisConfig { consensus: Some(ConsensusConfig { code: LocalDispatch::native_equivalent().to_vec(), diff --git a/polkadot/api/src/light.rs b/polkadot/api/src/light.rs index 1550e208f6465..2b081fbbdc156 100644 --- a/polkadot/api/src/light.rs +++ b/polkadot/api/src/light.rs @@ -24,7 +24,7 @@ use primitives::{AccountId, Block, BlockId, Hash, Index, SessionKey, Timestamp, use runtime::Address; use primitives::parachain::{CandidateReceipt, DutyRoster, Id as ParaId}; use {PolkadotApi, BlockBuilder, RemotePolkadotApi, Result, ErrorKind}; -use substrate_primitives::{BlakeHasher, BlakeRlpCodec}; +use substrate_primitives::{BlakeHasher, RlpCodec}; /// Light block builder. TODO: make this work (efficiently) #[derive(Clone, Copy)] @@ -41,9 +41,9 @@ impl BlockBuilder for LightBlockBuilder { } /// Remote polkadot API implementation. -pub struct RemotePolkadotApiWrapper, E: CallExecutor>(pub Arc>); +pub struct RemotePolkadotApiWrapper, E: CallExecutor>(pub Arc>); -impl, E: CallExecutor> PolkadotApi for RemotePolkadotApiWrapper { +impl, E: CallExecutor> PolkadotApi for RemotePolkadotApiWrapper { type BlockBuilder = LightBlockBuilder; fn session_keys(&self, at: &BlockId) -> Result> { @@ -102,4 +102,4 @@ impl, E: CallExecutor, E: CallExecutor> RemotePolkadotApi for RemotePolkadotApiWrapper {} +impl, E: CallExecutor> RemotePolkadotApi for RemotePolkadotApiWrapper {} diff --git a/polkadot/service/src/lib.rs b/polkadot/service/src/lib.rs index 97a0887dbd13a..6b056cee29472 100644 --- a/polkadot/service/src/lib.rs +++ b/polkadot/service/src/lib.rs @@ -53,7 +53,7 @@ use client::Client; use polkadot_network::{PolkadotProtocol, consensus::ConsensusNetwork}; use tokio::runtime::TaskExecutor; use service::FactoryFullConfiguration; -use primitives::{BlakeHasher, BlakeRlpCodec}; +use primitives::{BlakeHasher, RlpCodec}; pub use service::{Roles, PruningMode, ExtrinsicPoolOptions, ErrorKind, Error, ComponentBlock, LightComponents, FullComponents}; @@ -70,9 +70,9 @@ pub trait Components: service::Components { /// Polkadot API. type Api: 'static + PolkadotApi + 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 { @@ -272,8 +272,8 @@ pub struct TransactionPoolAdapter where A: Send + Sync, E: Send + Sync impl TransactionPoolAdapter where A: Send + Sync, - B: client::backend::Backend + Send + Sync, - E: client::CallExecutor + Send + Sync, + B: client::backend::Backend + Send + Sync, + E: client::CallExecutor + Send + Sync, { fn best_block_id(&self) -> Option { self.client.info() @@ -287,8 +287,8 @@ impl TransactionPoolAdapter impl network::TransactionPool for TransactionPoolAdapter where - B: client::backend::Backend + Send + Sync, - E: client::CallExecutor + Send + Sync, + B: client::backend::Backend + Send + Sync, + E: client::CallExecutor + Send + Sync, A: polkadot_api::PolkadotApi + Send + Sync, { fn transactions(&self) -> Vec<(Hash, Vec)> { @@ -339,8 +339,8 @@ impl network::TransactionPool for TransactionPoolAdapter service::ExtrinsicPool for TransactionPoolAdapter where - 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, A: polkadot_api::PolkadotApi + Send + Sync + 'static, { type Api = TransactionPool; diff --git a/substrate/client/db/src/lib.rs b/substrate/client/db/src/lib.rs index 849c2e341078f..c794a7689c067 100644 --- a/substrate/client/db/src/lib.rs +++ b/substrate/client/db/src/lib.rs @@ -53,7 +53,7 @@ use hashdb::Hasher; use kvdb::{KeyValueDB, DBTransaction}; use memorydb::MemoryDB; use parking_lot::RwLock; -use primitives::{H256, AuthorityId, BlakeHasher, BlakeRlpCodec}; +use primitives::{H256, AuthorityId, BlakeHasher, RlpCodec}; use runtime_primitives::generic::BlockId; use runtime_primitives::bft::Justification; use runtime_primitives::traits::{Block as BlockT, Header as HeaderT, As, Hash, HashFor, NumberFor, Zero}; @@ -68,7 +68,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; +pub type DbState = state_machine::TrieBackend; /// Database settings. pub struct DatabaseSettings { @@ -223,7 +223,7 @@ pub struct BlockImportOperation { pending_block: Option>, } -impl client::backend::BlockImportOperation +impl client::backend::BlockImportOperation for BlockImportOperation where Block: BlockT, { @@ -340,7 +340,7 @@ fn apply_state_commit(transaction: &mut DBTransaction, commit: state_db::CommitS } } -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; @@ -461,7 +461,7 @@ impl client::backend::Backend for Back } } -impl client::backend::LocalBackend for Backend +impl client::backend::LocalBackend for Backend where Block: BlockT {} #[cfg(test)] diff --git a/substrate/client/src/block_builder.rs b/substrate/client/src/block_builder.rs index 1eab11774c5b4..7365f4886fe6f 100644 --- a/substrate/client/src/block_builder.rs +++ b/substrate/client/src/block_builder.rs @@ -24,7 +24,7 @@ use runtime_primitives::generic::BlockId; use {backend, error, Client, CallExecutor}; use runtime_primitives::{ApplyResult, ApplyOutcome}; use patricia_trie::NodeCodec; -use primitives::{BlakeHasher, BlakeRlpCodec}; +use primitives::{BlakeHasher, RlpCodec}; use hashdb::Hasher; use rlp::Encodable; @@ -45,10 +45,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/client/src/call_executor.rs b/substrate/client/src/call_executor.rs index dd27038407d81..e8e98a4aac7b7 100644 --- a/substrate/client/src/call_executor.rs +++ b/substrate/client/src/call_executor.rs @@ -23,7 +23,7 @@ use state_machine::{self, OverlayedChanges, Ext, use runtime_io::Externalities; use executor::{RuntimeVersion, RuntimeInfo}; use patricia_trie::NodeCodec; -use primitives::{BlakeHasher, BlakeRlpCodec}; +use primitives::{BlakeHasher, RlpCodec}; use hashdb::Hasher; use rlp::Encodable; @@ -115,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, { @@ -151,7 +151,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, @@ -170,7 +170,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/client/src/client.rs b/substrate/client/src/client.rs index 2f6b5b58dff26..0c9ed54c8c3db 100644 --- a/substrate/client/src/client.rs +++ b/substrate/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, One, As, NumberFor}; use runtime_primitives::BuildStorage; -use primitives::{BlakeHasher, BlakeRlpCodec}; +use primitives::{BlakeHasher, RlpCodec}; use primitives::storage::{StorageKey, StorageData}; use codec::Decode; use state_machine::{Ext, OverlayedChanges, Backend as StateBackend, CodeExecutor, ExecutionStrategy, ExecutionManager}; @@ -161,7 +161,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, @@ -173,8 +173,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. @@ -274,14 +274,14 @@ impl Client where } /// 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) @@ -498,8 +498,8 @@ impl Client where impl bft::BlockImport for Client where - B: backend::Backend, - E: CallExecutor, + B: backend::Backend, + E: CallExecutor, Block: BlockT, { fn import_block( @@ -521,8 +521,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> { @@ -544,7 +544,7 @@ impl bft::Authorities for Client impl BlockchainEvents for Client where - E: CallExecutor, + E: CallExecutor, Block: BlockT, { /// Get block import event stream. @@ -562,8 +562,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> { @@ -573,8 +573,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/client/src/genesis.rs b/substrate/client/src/genesis.rs index 916a98ccbe8c8..8e55a747ec2f6 100644 --- a/substrate/client/src/genesis.rs +++ b/substrate/client/src/genesis.rs @@ -51,7 +51,7 @@ mod tests { use test_client::runtime::genesismap::{GenesisConfig, additional_storage_with_genesis}; use test_client::runtime::{Hash, Transfer, Block, BlockNumber, Header, Digest, Extrinsic}; use ed25519::{Public, Pair}; - use primitives::{BlakeHasher, BlakeRlpCodec}; + use primitives::{BlakeHasher, RlpCodec}; 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,7 +59,7 @@ mod tests { NativeExecutionDispatch::with_heap_pages(8) } - fn construct_block(backend: &InMemory, number: BlockNumber, parent_hash: Hash, state_root: Hash, txs: Vec) -> (Vec, Hash) { + fn construct_block(backend: &InMemory, number: BlockNumber, parent_hash: Hash, state_root: Hash, txs: Vec) -> (Vec, Hash) { use triehash::ordered_trie_root; let transactions = txs.into_iter().map(|tx| { @@ -116,7 +116,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/client/src/light/call_executor.rs b/substrate/client/src/light/call_executor.rs index 5b8232acee008..d03c9397f4075 100644 --- a/substrate/client/src/light/call_executor.rs +++ b/substrate/client/src/light/call_executor.rs @@ -24,7 +24,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 primitives::{H256, BlakeHasher, BlakeRlpCodec}; +use primitives::{H256, BlakeHasher, RlpCodec}; use patricia_trie::NodeCodec; use hashdb::Hasher; use rlp::Encodable; @@ -51,7 +51,7 @@ impl RemoteCallExecutor { } } -impl CallExecutor for RemoteCallExecutor +impl CallExecutor for RemoteCallExecutor where Block: BlockT, B: ChainBackend, @@ -80,7 +80,7 @@ where } fn call_at_state< - S: StateBackend, + S: StateBackend, FF: FnOnce(Result, Self::Error>, Result, Self::Error>) -> Result, Self::Error> >(&self, _state: &S, @@ -92,7 +92,7 @@ where Err(ClientErrorKind::NotAvailableOnLightClient.into()) } - fn prove_at_state>(&self, _state: S, _changes: &mut OverlayedChanges, _method: &str, _call_data: &[u8]) -> ClientResult<(Vec, Vec>)> { + fn prove_at_state>(&self, _state: S, _changes: &mut OverlayedChanges, _method: &str, _call_data: &[u8]) -> ClientResult<(Vec, Vec>)> { Err(ClientErrorKind::NotAvailableOnLightClient.into()) } @@ -168,7 +168,7 @@ mod tests { // check remote execution proof locally let local_executor = test_client::LocalExecutor::with_heap_pages(8); - do_check_execution_proof::<_, _, _, BlakeRlpCodec>(remote_block_storage_root.into(), &local_executor, &RemoteCallRequest { + do_check_execution_proof::<_, _, _, RlpCodec>(remote_block_storage_root.into(), &local_executor, &RemoteCallRequest { block: test_client::runtime::Hash::default(), method: "authorities".into(), call_data: vec![], diff --git a/substrate/client/src/light/fetcher.rs b/substrate/client/src/light/fetcher.rs index fb59ee4743ead..4423f4e25cef4 100644 --- a/substrate/client/src/light/fetcher.rs +++ b/substrate/client/src/light/fetcher.rs @@ -18,7 +18,7 @@ use std::sync::Arc; use futures::IntoFuture; -use primitives::{BlakeHasher, BlakeRlpCodec}; +use primitives::{BlakeHasher, RlpCodec}; use runtime_primitives::traits::{Block as BlockT}; use state_machine::CodeExecutor; @@ -83,6 +83,6 @@ impl FetchChecker for LightDataChecker F: Fetcher, { fn check_execution_proof(&self, request: &RemoteCallRequest, remote_proof: Vec>) -> ClientResult { - check_execution_proof::<_, _, _, _, BlakeRlpCodec>(&*self.blockchain, &self.executor, request, remote_proof) + check_execution_proof::<_, _, _, _, RlpCodec>(&*self.blockchain, &self.executor, request, remote_proof) } } diff --git a/substrate/network/src/chain.rs b/substrate/network/src/chain.rs index e5e92590bd8d9..de448ee1817d2 100644 --- a/substrate/network/src/chain.rs +++ b/substrate/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::{BlakeHasher, BlakeRlpCodec}; +use primitives::{BlakeHasher, RlpCodec}; /// Local client abstraction for the network. pub trait Client: Send + Sync { @@ -51,8 +51,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(&self, origin: BlockOrigin, header: Block::Header, justification: Justification, body: Option>) -> Result { diff --git a/substrate/network/src/test/mod.rs b/substrate/network/src/test/mod.rs index 1652c8f17abc1..a33386740aced 100644 --- a/substrate/network/src/test/mod.rs +++ b/substrate/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::{BlakeHasher, BlakeRlpCodec}; +use primitives::{BlakeHasher, RlpCodec}; use config::ProtocolConfig; use service::TransactionPool; use network_libp2p::{NodeIndex, SessionInfo, Severity}; @@ -174,7 +174,7 @@ impl Peer { } fn generate_blocks(&self, count: usize, mut edit_block: F) - where F: FnMut(&mut BlockBuilder) + where F: FnMut(&mut BlockBuilder) { for _ in 0 .. count { let mut builder = self.client.new_block().unwrap(); diff --git a/substrate/primitives/Cargo.toml b/substrate/primitives/Cargo.toml index 59b8d9273512c..e3579e8c67708 100644 --- a/substrate/primitives/Cargo.toml +++ b/substrate/primitives/Cargo.toml @@ -17,12 +17,15 @@ uint = { git = "https://github.com/paritytech/parity-common", default_features = rlp = { git = "https://github.com/paritytech/parity-common", optional = true } twox-hash = { version = "1.1.0", optional = true } byteorder = { version = "1.1", default_features = false } -blake2-rfc = { version = "0.2.18", optional = true } wasmi = { version = "0.4", optional = true } hashdb = { git = "https://github.com/paritytech/parity-common", default_features = false } patricia-trie = { git = "https://github.com/paritytech/parity-common", optional = true } plain_hasher = { git = "https://github.com/paritytech/parity-common", default_features = false } +# TODO: use a feature to switch here? +blake2-rfc = { version = "0.2.18", optional = true } +tiny-keccak = { version = "1.4", optional = true } + [dev-dependencies] substrate-serializer = { path = "../serializer" } pretty_assertions = "0.4" @@ -42,6 +45,7 @@ std = [ "rustc-hex/std", "twox-hash", "blake2-rfc", + "tiny-keccak", "serde_derive", "byteorder/std", "patricia-trie", diff --git a/substrate/primitives/src/hasher.rs b/substrate/primitives/src/hasher.rs index 609356a457e89..a93e391a6ce2a 100644 --- a/substrate/primitives/src/hasher.rs +++ b/substrate/primitives/src/hasher.rs @@ -19,30 +19,69 @@ use hashdb::Hasher; use plain_hasher::PlainHasher; use hash::H256; -#[cfg(feature = "std")] -use hashing::blake2_256; -#[cfg(not(feature = "std"))] -extern "C" { - fn ext_blake2_256(data: *const u8, len: u32, out: *mut u8); -} -#[cfg(not(feature = "std"))] -fn blake2_256(data: &[u8]) -> [u8; 32] { - let mut result: [u8; 32] = Default::default(); - unsafe { - ext_blake2_256(data.as_ptr(), data.len() as u32, result.as_mut_ptr()); +pub mod blake { + use super::{Hasher, PlainHasher, H256}; + #[cfg(feature = "std")] + use hashing::blake2_256; + + #[cfg(not(feature = "std"))] + extern "C" { + fn ext_blake2_256(data: *const u8, len: u32, out: *mut u8); + } + #[cfg(not(feature = "std"))] + fn blake2_256(data: &[u8]) -> [u8; 32] { + let mut result: [u8; 32] = Default::default(); + unsafe { + ext_blake2_256(data.as_ptr(), data.len() as u32, result.as_mut_ptr()); + } + result } - result -} -/// Concrete implementation of Hasher using Blake2b 256-bit hashes -#[derive(Debug)] -pub struct BlakeHasher; -impl Hasher for BlakeHasher { - type Out = H256; - type StdHasher = PlainHasher; - const LENGTH:usize = 32; - fn hash(x: &[u8]) -> Self::Out { - blake2_256(x).into() + /// Concrete implementation of Hasher using Blake2b 256-bit hashes + #[derive(Debug)] + pub struct BlakeHasher; + + impl Hasher for BlakeHasher { + type Out = H256; + type StdHasher = PlainHasher; + const LENGTH:usize = 32; + fn hash(x: &[u8]) -> Self::Out { + blake2_256(x).into() + } } } + +pub mod keccak { + use super::{Hasher, PlainHasher, H256}; + + #[cfg(feature = "std")] + use tiny_keccak::keccak256; + + #[cfg(not(feature = "std"))] + extern "C" { + fn ext_keccak256(data: *const u8, len: u32, out: *mut u8); + } + + #[cfg(not(feature = "std"))] + fn keccak256(data: &[u8]) -> [u8; 32] { + let mut result: [u8; 32] = Default::default(); + unsafe { + ext_keccak256(data.as_ptr(), data.len() as u32, result.as_mut_ptr()); + } + result + } + + /// Concrete implementation of Hasher using Keccak 256-bit hashes + #[derive(Debug)] + pub struct KeccakHasher; + + impl Hasher for KeccakHasher { + type Out = H256; + type StdHasher = PlainHasher; + const LENGTH : usize = 32; + fn hash(x: &[u8]) -> Self::Out { + keccak256(x).into() + } + } +} \ No newline at end of file diff --git a/substrate/primitives/src/lib.rs b/substrate/primitives/src/lib.rs index ae4cc2af4601b..ab68c85ef07f7 100644 --- a/substrate/primitives/src/lib.rs +++ b/substrate/primitives/src/lib.rs @@ -40,8 +40,13 @@ extern crate rlp; extern crate serde; #[cfg(feature = "std")] extern crate twox_hash; + #[cfg(feature = "std")] extern crate blake2_rfc; + +#[cfg(feature = "std")] +extern crate tiny_keccak; + #[cfg(feature = "std")] #[macro_use] extern crate serde_derive; @@ -88,7 +93,7 @@ pub use hashing::{blake2_256, twox_128, twox_256}; pub mod hexdisplay; pub mod hash; -pub mod hasher; +mod hasher; pub mod sandbox; pub mod storage; pub mod uint; @@ -102,9 +107,12 @@ mod tests; pub use self::hash::{H160, H256, H512}; pub use self::uint::U256; pub use authority_id::AuthorityId; -pub use self::hasher::BlakeHasher; + +pub use self::hasher::blake::BlakeHasher; +pub use self::hasher::keccak::KeccakHasher; + #[cfg(feature = "std")] -pub use self::rlp_codec::BlakeRlpCodec; +pub use self::rlp_codec::RlpCodec; /// A 512-bit value interpreted as a signature. pub type Signature = hash::H512; diff --git a/substrate/primitives/src/rlp_codec.rs b/substrate/primitives/src/rlp_codec.rs index b104d8b9f9acc..cf3e57605ecab 100644 --- a/substrate/primitives/src/rlp_codec.rs +++ b/substrate/primitives/src/rlp_codec.rs @@ -23,15 +23,22 @@ use core::marker::PhantomData; use patricia_trie::{NibbleSlice, NodeCodec, node::Node, ChildReference}; use hash::H256; -use hasher::BlakeHasher; +use BlakeHasher; +use KeccakHasher; /// Concrete implementation of a `NodeCodec` with Rlp encoding, generic over the `Hasher` -pub struct RlpCodec {mark: PhantomData} +pub struct RlpNodeCodec {mark: PhantomData} + +// /// Convenience type for a Blake2b/Rlp flavoured NodeCodec +// pub type RlpCodecBlake = RlpNodeCodec; + +/// Convenience type for a Keccak/Rlp flavoured NodeCodec +pub type RlpCodecKeccak = RlpNodeCodec; /// Convenience type for a Blake2b/Rlp flavoured NodeCodec -pub type BlakeRlpCodec = RlpCodec; +pub type RlpCodec = RlpCodecKeccak; -impl NodeCodec for RlpCodec { +impl NodeCodec for RlpNodeCodec { 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]) -> ::core::result::Result { @@ -121,3 +128,94 @@ impl NodeCodec for RlpCodec { stream.drain() } } + +impl NodeCodec for RlpNodeCodec { + type Error = DecoderError; + const HASHED_NULL_NODE : H256 = H256( [0x56, 0xe8, 0x1f, 0x17, 0x1b, 0xcc, 0x55, 0xa6, 0xff, 0x83, 0x45, 0xe6, 0x92, 0xc0, 0xf8, 0x6e, 0x5b, 0x48, 0xe0, 0x1b, 0x99, 0x6c, 0xad, 0xc0, 0x01, 0x62, 0x2f, 0xb5, 0xe3, 0x63, 0xb4, 0x21] ); + 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() == KeccakHasher::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() + } +} \ No newline at end of file diff --git a/substrate/rpc/src/author/mod.rs b/substrate/rpc/src/author/mod.rs index a654aea5eb97c..adf2617396b7c 100644 --- a/substrate/rpc/src/author/mod.rs +++ b/substrate/rpc/src/author/mod.rs @@ -26,7 +26,7 @@ use extrinsic_pool::{ }; use jsonrpc_macros::pubsub; use jsonrpc_pubsub::SubscriptionId; -use primitives::{Bytes, BlakeHasher, BlakeRlpCodec}; +use primitives::{Bytes, BlakeHasher, RlpCodec}; use rpc::futures::{Sink, Stream, Future}; use runtime_primitives::{generic, traits}; use subscriptions::Subscriptions; @@ -86,8 +86,8 @@ impl Author { } impl AuthorApi for Author where - 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, Block: traits::Block + 'static, Hash: traits::MaybeSerializeDebug + Sync + Send + 'static, P: ExtrinsicPool, Hash>, diff --git a/substrate/rpc/src/chain/mod.rs b/substrate/rpc/src/chain/mod.rs index 971cbd043bafc..9a8b029a947aa 100644 --- a/substrate/rpc/src/chain/mod.rs +++ b/substrate/rpc/src/chain/mod.rs @@ -26,7 +26,7 @@ use rpc::futures::{stream, Future, Sink, Stream}; use runtime_primitives::generic::BlockId; use runtime_primitives::traits::Block as BlockT; use tokio::runtime::TaskExecutor; -use primitives::{BlakeHasher, BlakeRlpCodec}; +use primitives::{BlakeHasher, RlpCodec}; use subscriptions::Subscriptions; @@ -81,8 +81,8 @@ impl Chain { impl ChainApi 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/rpc/src/state/mod.rs b/substrate/rpc/src/state/mod.rs index ccbcba2a2a6f3..50452341f8bc1 100644 --- a/substrate/rpc/src/state/mod.rs +++ b/substrate/rpc/src/state/mod.rs @@ -24,7 +24,7 @@ use jsonrpc_macros::pubsub; use jsonrpc_pubsub::SubscriptionId; use primitives::hexdisplay::HexDisplay; use primitives::storage::{StorageKey, StorageData, StorageChangeSet}; -use primitives::{BlakeHasher, BlakeRlpCodec}; +use primitives::{BlakeHasher, RlpCodec}; use rpc::Result as RpcResult; use rpc::futures::{stream, Future, Sink, Stream}; use runtime_primitives::generic::BlockId; @@ -92,8 +92,8 @@ impl State { impl 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, { fn unwrap_or_best(&self, hash: Trailing) -> Result { Ok(match hash.into() { @@ -105,8 +105,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/service/src/components.rs b/substrate/service/src/components.rs index 719b5cc42db2a..690318b6a9670 100644 --- a/substrate/service/src/components.rs +++ b/substrate/service/src/components.rs @@ -28,7 +28,7 @@ use substrate_executor::{NativeExecutor, NativeExecutionDispatch}; use extrinsic_pool::{txpool::Options as ExtrinsicPoolOptions, api::ExtrinsicPool as ExtrinsicPoolApi}; use runtime_primitives::{traits::Block as BlockT, traits::Header as HeaderT, generic::BlockId, BuildStorage}; use config::Configuration; -use primitives::{BlakeHasher, BlakeRlpCodec}; +use primitives::{BlakeHasher, RlpCodec}; // Type aliases. // These exist mainly to avoid typing `::Foo` all over the code. @@ -153,9 +153,9 @@ pub trait Components { /// Associated service factory. type Factory: ServiceFactory; /// Client backend. - type Backend: 'static + client::backend::Backend, BlakeHasher, BlakeRlpCodec>; + type Backend: 'static + client::backend::Backend, BlakeHasher, RlpCodec>; /// Client executor. - type Executor: 'static + client::CallExecutor, BlakeHasher, BlakeRlpCodec> + Send + Sync; + type Executor: 'static + client::CallExecutor, BlakeHasher, RlpCodec> + Send + Sync; /// Extrinsic pool type. type ExtrinsicPool: ExtrinsicPool>; diff --git a/substrate/state-machine/src/lib.rs b/substrate/state-machine/src/lib.rs index 18bb38856fc59..a5b8f59c67dc2 100644 --- a/substrate/state-machine/src/lib.rs +++ b/substrate/state-machine/src/lib.rs @@ -441,7 +441,7 @@ mod tests { use super::*; use super::backend::InMemory; use super::ext::Ext; - use primitives::{BlakeHasher, BlakeRlpCodec, H256}; + use primitives::{BlakeHasher, RlpCodec, H256}; struct DummyCodeExecutor { native_available: bool, @@ -513,7 +513,7 @@ mod tests { b"dogglesworth".to_vec() => b"catXXX".to_vec(), b"doug".to_vec() => b"notadog".to_vec() ]; - let backend = InMemory::::from(initial); + let backend = InMemory::::from(initial); let mut overlay = OverlayedChanges { committed: map![ b"dog".to_vec() => Some(b"puppy".to_vec()), @@ -583,7 +583,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 @@ -599,7 +599,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()), diff --git a/substrate/state-machine/src/proving_backend.rs b/substrate/state-machine/src/proving_backend.rs index daaa18d8b4335..b3d0b163eff17 100644 --- a/substrate/state-machine/src/proving_backend.rs +++ b/substrate/state-machine/src/proving_backend.rs @@ -123,9 +123,9 @@ mod tests { use backend::{InMemory}; use trie_backend::tests::test_trie; use super::*; - use primitives::{BlakeHasher, BlakeRlpCodec}; + use primitives::{BlakeHasher, RlpCodec}; - fn test_proving() -> ProvingBackend { + fn test_proving() -> ProvingBackend { ProvingBackend::new(test_trie()) } @@ -143,7 +143,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] @@ -162,7 +162,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])); @@ -177,7 +177,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/state-machine/src/trie_backend.rs b/substrate/state-machine/src/trie_backend.rs index 8dca8451ae9e6..f6ae37c0487fc 100644 --- a/substrate/state-machine/src/trie_backend.rs +++ b/substrate/state-machine/src/trie_backend.rs @@ -277,13 +277,13 @@ impl TrieBackendStorage { pub mod tests { use super::*; use std::collections::HashSet; - use primitives::{BlakeHasher, BlakeRlpCodec, H256}; + use primitives::{BlakeHasher, RlpCodec, H256}; fn test_db() -> (MemoryDB, H256) { let mut root = H256::default(); let mut mdb = MemoryDB::::new(); { - let mut trie = TrieDBMut::<_, BlakeRlpCodec>::new(&mut mdb, &mut root); + let mut trie = TrieDBMut::<_, RlpCodec>::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"); @@ -292,7 +292,7 @@ pub mod tests { (mdb, root) } - pub(crate) fn test_trie() -> TrieBackend { + pub(crate) fn test_trie() -> TrieBackend { let (mdb, root) = test_db(); TrieBackend::with_memorydb(mdb, root) } @@ -314,7 +314,7 @@ pub mod tests { #[test] fn pairs_are_empty_on_empty_storage() { - let db = TrieBackend::::with_memorydb( + let db = TrieBackend::::with_memorydb( MemoryDB::new(), Default::default() ); diff --git a/substrate/test-client/src/block_builder_ext.rs b/substrate/test-client/src/block_builder_ext.rs index c27fa5d559941..e046c24f32ee9 100644 --- a/substrate/test-client/src/block_builder_ext.rs +++ b/substrate/test-client/src/block_builder_ext.rs @@ -22,7 +22,7 @@ use keyring; use runtime; use {Backend, Executor}; -use primitives::{BlakeHasher, BlakeRlpCodec}; +use primitives::{BlakeHasher, RlpCodec}; /// 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/test-client/src/lib.rs b/substrate/test-client/src/lib.rs index ec7abb7346065..93bf3c7cb02d0 100644 --- a/substrate/test-client/src/lib.rs +++ b/substrate/test-client/src/lib.rs @@ -37,7 +37,7 @@ mod block_builder_ext; pub use client_ext::TestClient; pub use block_builder_ext::BlockBuilderExt; -use primitives::{BlakeHasher, BlakeRlpCodec}; +use primitives::{BlakeHasher, RlpCodec}; mod local_executor { #![allow(missing_docs)] @@ -50,7 +50,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>; From 0c66dec2494768cf9f1abddc3177877409f361ec Mon Sep 17 00:00:00 2001 From: David Palm Date: Tue, 14 Aug 2018 11:21:18 +0200 Subject: [PATCH 88/97] Switch to use KeccakHasher --- demo/executor/src/lib.rs | 31 +++++++++++------- polkadot/api/src/full.rs | 12 +++---- polkadot/api/src/light.rs | 8 ++--- polkadot/runtime/src/parachains.rs | 4 +-- polkadot/service/src/lib.rs | 18 +++++------ substrate/client/db/src/lib.rs | 20 ++++++------ substrate/client/src/block_builder.rs | 8 ++--- substrate/client/src/call_executor.rs | 12 +++---- substrate/client/src/client.rs | 32 +++++++++---------- substrate/client/src/genesis.rs | 6 ++-- substrate/client/src/light/call_executor.rs | 8 ++--- substrate/client/src/light/fetcher.rs | 4 +-- substrate/executor/src/lib.rs | 4 +-- substrate/executor/src/native_executor.rs | 18 +++++------ substrate/executor/src/wasm_executor.rs | 14 ++++---- substrate/network/src/chain.rs | 6 ++-- substrate/network/src/test/mod.rs | 4 +-- substrate/rpc/src/author/mod.rs | 6 ++-- substrate/rpc/src/chain/mod.rs | 6 ++-- substrate/rpc/src/state/mod.rs | 10 +++--- substrate/runtime-io/with_std.rs | 11 ++++--- substrate/runtime/consensus/src/lib.rs | 4 +-- .../runtime/contract/src/genesis_config.rs | 4 +-- substrate/runtime/contract/src/tests.rs | 4 +-- substrate/runtime/council/src/lib.rs | 6 ++-- substrate/runtime/democracy/src/lib.rs | 4 +-- substrate/runtime/executive/src/lib.rs | 9 ++++-- substrate/runtime/session/src/lib.rs | 4 +-- .../runtime/staking/src/genesis_config.rs | 4 +-- substrate/runtime/staking/src/mock.rs | 4 +-- substrate/runtime/system/src/lib.rs | 4 +-- substrate/service/src/components.rs | 6 ++-- substrate/state-machine/src/lib.rs | 13 +++++--- .../state-machine/src/proving_backend.rs | 10 +++--- substrate/state-machine/src/testing.rs | 9 ++++-- substrate/state-machine/src/trie_backend.rs | 10 +++--- .../test-client/src/block_builder_ext.rs | 4 +-- substrate/test-client/src/lib.rs | 4 +-- substrate/test-runtime/src/system.rs | 19 ++++++++--- 39 files changed, 196 insertions(+), 168 deletions(-) diff --git a/demo/executor/src/lib.rs b/demo/executor/src/lib.rs index 574a02f340aa7..12223666b7272 100644 --- a/demo/executor/src/lib.rs +++ b/demo/executor/src/lib.rs @@ -47,7 +47,7 @@ mod tests { use keyring::Keyring; use runtime_support::{Hashable, StorageValue, StorageMap}; use state_machine::{CodeExecutor, TestExternalities}; - use primitives::{twox_128, BlakeHasher}; + use primitives::{twox_128, KeccakHasher}; use demo_primitives::{Hash, BlockNumber, AccountId}; use runtime_primitives::traits::Header as HeaderT; use runtime_primitives::{ApplyOutcome, ApplyError, ApplyResult, MaybeUnsigned}; @@ -100,7 +100,7 @@ mod tests { #[test] fn panic_execution_with_foreign_code_gives_error() { - let mut t: TestExternalities = map![ + let mut t: TestExternalities = map![ twox_128(&>::key_for(alice())).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![70u8; 8], twox_128(>::key()).to_vec() => vec![0u8; 8], @@ -119,7 +119,7 @@ mod tests { #[test] fn bad_extrinsic_with_native_equivalent_code_gives_error() { - let mut t: TestExternalities = map![ + let mut t: TestExternalities = map![ twox_128(&>::key_for(alice())).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![70u8; 8], twox_128(>::key()).to_vec() => vec![0u8; 8], @@ -138,7 +138,7 @@ mod tests { #[test] fn successful_execution_with_native_equivalent_code_gives_ok() { - let mut t: TestExternalities = map![ + let mut t: TestExternalities = map![ twox_128(&>::key_for(alice())).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![0u8; 8], twox_128(>::key()).to_vec() => vec![0u8; 8], @@ -161,7 +161,7 @@ mod tests { #[test] fn successful_execution_with_foreign_code_gives_ok() { - let mut t: TestExternalities = map![ + let mut t: TestExternalities = map![ twox_128(&>::key_for(alice())).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![0u8; 8], twox_128(>::key()).to_vec() => vec![0u8; 8], @@ -182,7 +182,7 @@ mod tests { }); } - fn new_test_ext() -> TestExternalities { + fn new_test_ext() -> TestExternalities { use keyring::Keyring::*; let three = [3u8; 32].into(); GenesisConfig { @@ -247,7 +247,10 @@ mod tests { construct_block( 1, [69u8; 32].into(), - hex!("3437bf4b182ab17bb322af5c67e55f6be487a77084ad2b4e27ddac7242e4ad21").into(), + // Blake + // hex!("3437bf4b182ab17bb322af5c67e55f6be487a77084ad2b4e27ddac7242e4ad21").into(), + // Keccak + hex!("b97d52254fc967bb94bed485de6a738e9fad05decfda3453711677b8becf6d0a").into(), vec![BareExtrinsic { signed: alice(), index: 0, @@ -260,7 +263,10 @@ mod tests { construct_block( 2, block1().1, - hex!("741fcb660e6fa9f625fbcd993b49f6c1cc4040f5e0cc8727afdedf11fd3c464b").into(), + // Blake + // hex!("741fcb660e6fa9f625fbcd993b49f6c1cc4040f5e0cc8727afdedf11fd3c464b").into(), + // Keccak + hex!("a1f018d2faa339f72f5ee29050b4670d971e2e271cc06c41ee9cbe1f4c6feec9").into(), vec![ BareExtrinsic { signed: bob(), @@ -280,7 +286,10 @@ mod tests { construct_block( 1, [69u8; 32].into(), - hex!("2c7231a9c210a7aa4bea169d944bc4aaacd517862b244b8021236ffa7f697991").into(), + // Blake + // hex!("2c7231a9c210a7aa4bea169d944bc4aaacd517862b244b8021236ffa7f697991").into(), + // Keccak + hex!("41d07010f49aa29b2c9aca542cbaa6f59aafd3dda53cdf711c51ddb7d386912e").into(), vec![BareExtrinsic { signed: alice(), index: 0, @@ -353,7 +362,7 @@ mod tests { #[test] fn panic_execution_gives_error() { - let mut t: TestExternalities = map![ + let mut t: TestExternalities = map![ twox_128(&>::key_for(alice())).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![70u8; 8], twox_128(>::key()).to_vec() => vec![0u8; 8], @@ -373,7 +382,7 @@ mod tests { #[test] fn successful_execution_gives_ok() { - let mut t: TestExternalities = map![ + let mut t: TestExternalities = map![ twox_128(&>::key_for(alice())).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], twox_128(>::key()).to_vec() => vec![0u8; 8], twox_128(>::key()).to_vec() => vec![0u8; 8], diff --git a/polkadot/api/src/full.rs b/polkadot/api/src/full.rs index 9dfa14ac924b6..a84d304828725 100644 --- a/polkadot/api/src/full.rs +++ b/polkadot/api/src/full.rs @@ -27,7 +27,7 @@ use runtime::Address; use runtime_primitives::traits::AuxLookup; use primitives::{AccountId, Block, Header, BlockId, Hash, Index, SessionKey, Timestamp, UncheckedExtrinsic}; use primitives::parachain::{CandidateReceipt, DutyRoster, Id as ParaId}; -use substrate_primitives::{BlakeHasher, RlpCodec}; +use substrate_primitives::{KeccakHasher, RlpCodec}; use {BlockBuilder, PolkadotApi, LocalPolkadotApi, ErrorKind, Error, Result}; @@ -58,7 +58,7 @@ macro_rules! with_runtime { }} } -impl> BlockBuilder for ClientBlockBuilder>, Block, BlakeHasher, RlpCodec> { +impl> BlockBuilder for ClientBlockBuilder>, Block, KeccakHasher, RlpCodec> { fn push_extrinsic(&mut self, extrinsic: UncheckedExtrinsic) -> Result<()> { self.push(extrinsic).map_err(Into::into) } @@ -69,8 +69,8 @@ impl> BlockBuilder for ClientBlock } } -impl> PolkadotApi for Client>, Block> { - type BlockBuilder = ClientBlockBuilder>, Block, BlakeHasher, RlpCodec>; +impl> PolkadotApi for Client>, Block> { + type BlockBuilder = ClientBlockBuilder>, Block, KeccakHasher, RlpCodec>; fn session_keys(&self, at: &BlockId) -> Result> { with_runtime!(self, at, ::runtime::Consensus::authorities) @@ -156,7 +156,7 @@ impl> PolkadotApi for Client> LocalPolkadotApi for Client>, Block> +impl> LocalPolkadotApi for Client>, Block> {} #[cfg(test)] @@ -182,7 +182,7 @@ mod tests { ] } - fn client() -> Client, LocalCallExecutor, NativeExecutor>, Block> { + fn client() -> Client, LocalCallExecutor, NativeExecutor>, Block> { let genesis_config = GenesisConfig { consensus: Some(ConsensusConfig { code: LocalDispatch::native_equivalent().to_vec(), diff --git a/polkadot/api/src/light.rs b/polkadot/api/src/light.rs index 2b081fbbdc156..488fd0144c47d 100644 --- a/polkadot/api/src/light.rs +++ b/polkadot/api/src/light.rs @@ -24,7 +24,7 @@ use primitives::{AccountId, Block, BlockId, Hash, Index, SessionKey, Timestamp, use runtime::Address; use primitives::parachain::{CandidateReceipt, DutyRoster, Id as ParaId}; use {PolkadotApi, BlockBuilder, RemotePolkadotApi, Result, ErrorKind}; -use substrate_primitives::{BlakeHasher, RlpCodec}; +use substrate_primitives::{KeccakHasher, RlpCodec}; /// Light block builder. TODO: make this work (efficiently) #[derive(Clone, Copy)] @@ -41,9 +41,9 @@ impl BlockBuilder for LightBlockBuilder { } /// Remote polkadot API implementation. -pub struct RemotePolkadotApiWrapper, E: CallExecutor>(pub Arc>); +pub struct RemotePolkadotApiWrapper, E: CallExecutor>(pub Arc>); -impl, E: CallExecutor> PolkadotApi for RemotePolkadotApiWrapper { +impl, E: CallExecutor> PolkadotApi for RemotePolkadotApiWrapper { type BlockBuilder = LightBlockBuilder; fn session_keys(&self, at: &BlockId) -> Result> { @@ -102,4 +102,4 @@ impl, E: CallExecutor, E: CallExecutor> RemotePolkadotApi for RemotePolkadotApiWrapper {} +impl, E: CallExecutor> RemotePolkadotApi for RemotePolkadotApiWrapper {} diff --git a/polkadot/runtime/src/parachains.rs b/polkadot/runtime/src/parachains.rs index 8d50da204e1d5..a4ff032f5e478 100644 --- a/polkadot/runtime/src/parachains.rs +++ b/polkadot/runtime/src/parachains.rs @@ -245,7 +245,7 @@ impl runtime_primitives::BuildStorage for GenesisConfig mod tests { use super::*; use runtime_io::{TestExternalities, with_externalities}; - use substrate_primitives::{H256, BlakeHasher}; + use substrate_primitives::{H256, KeccakHasher}; use runtime_primitives::BuildStorage; use runtime_primitives::traits::{HasPublicAux, Identity, BlakeTwo256}; use runtime_primitives::testing::{Digest, Header}; @@ -285,7 +285,7 @@ mod tests { type Parachains = Module; - fn new_test_ext(parachains: Vec<(Id, Vec, Vec)>) -> TestExternalities { + fn new_test_ext(parachains: Vec<(Id, Vec, Vec)>) -> TestExternalities { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); t.extend(consensus::GenesisConfig::{ code: vec![], diff --git a/polkadot/service/src/lib.rs b/polkadot/service/src/lib.rs index 6b056cee29472..4e59a22ca2b1f 100644 --- a/polkadot/service/src/lib.rs +++ b/polkadot/service/src/lib.rs @@ -53,7 +53,7 @@ use client::Client; use polkadot_network::{PolkadotProtocol, consensus::ConsensusNetwork}; use tokio::runtime::TaskExecutor; use service::FactoryFullConfiguration; -use primitives::{BlakeHasher, RlpCodec}; +use primitives::{KeccakHasher, RlpCodec}; pub use service::{Roles, PruningMode, ExtrinsicPoolOptions, ErrorKind, Error, ComponentBlock, LightComponents, FullComponents}; @@ -70,9 +70,9 @@ pub trait Components: service::Components { /// Polkadot API. type Api: 'static + PolkadotApi + 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 { @@ -272,8 +272,8 @@ pub struct TransactionPoolAdapter where A: Send + Sync, E: Send + Sync impl TransactionPoolAdapter where A: Send + Sync, - B: client::backend::Backend + Send + Sync, - E: client::CallExecutor + Send + Sync, + B: client::backend::Backend + Send + Sync, + E: client::CallExecutor + Send + Sync, { fn best_block_id(&self) -> Option { self.client.info() @@ -287,8 +287,8 @@ impl TransactionPoolAdapter impl network::TransactionPool for TransactionPoolAdapter where - B: client::backend::Backend + Send + Sync, - E: client::CallExecutor + Send + Sync, + B: client::backend::Backend + Send + Sync, + E: client::CallExecutor + Send + Sync, A: polkadot_api::PolkadotApi + Send + Sync, { fn transactions(&self) -> Vec<(Hash, Vec)> { @@ -339,8 +339,8 @@ impl network::TransactionPool for TransactionPoolAdapter service::ExtrinsicPool for TransactionPoolAdapter where - 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, A: polkadot_api::PolkadotApi + Send + Sync + 'static, { type Api = TransactionPool; diff --git a/substrate/client/db/src/lib.rs b/substrate/client/db/src/lib.rs index c794a7689c067..2fa5fb61515ef 100644 --- a/substrate/client/db/src/lib.rs +++ b/substrate/client/db/src/lib.rs @@ -53,7 +53,7 @@ use hashdb::Hasher; use kvdb::{KeyValueDB, DBTransaction}; use memorydb::MemoryDB; use parking_lot::RwLock; -use primitives::{H256, AuthorityId, BlakeHasher, RlpCodec}; +use primitives::{H256, AuthorityId, KeccakHasher, RlpCodec}; use runtime_primitives::generic::BlockId; use runtime_primitives::bft::Justification; use runtime_primitives::traits::{Block as BlockT, Header as HeaderT, As, Hash, HashFor, NumberFor, Zero}; @@ -68,7 +68,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; +pub type DbState = state_machine::TrieBackend; /// Database settings. pub struct DatabaseSettings { @@ -89,7 +89,7 @@ pub fn new_client( ) -> Result, client::LocalCallExecutor, E>, Block>, client::error::Error> where Block: BlockT, - E: CodeExecutor + RuntimeInfo, + E: CodeExecutor + RuntimeInfo, S: BuildStorage, { let backend = Arc::new(Backend::new(settings, FINALIZATION_WINDOW)?); @@ -223,8 +223,8 @@ pub struct BlockImportOperation { pending_block: Option>, } -impl client::backend::BlockImportOperation -for BlockImportOperation +impl client::backend::BlockImportOperation +for BlockImportOperation where Block: BlockT, { type State = DbState; @@ -248,7 +248,7 @@ where Block: BlockT, // currently authorities are not cached on full nodes } - fn update_storage(&mut self, update: MemoryDB) -> Result<(), client::error::Error> { + fn update_storage(&mut self, update: MemoryDB) -> Result<(), client::error::Error> { self.updates = update; Ok(()) } @@ -266,7 +266,7 @@ struct StorageDb { pub state_db: StateDb, } -impl state_machine::Storage for StorageDb { +impl state_machine::Storage for StorageDb { fn get(&self, key: &H256) -> Result, String> { self.state_db.get(&key.0.into(), self).map(|r| r.map(|v| DBValue::from_slice(&v))) .map_err(|e| format!("Database backend error: {:?}", e)) @@ -340,8 +340,8 @@ fn apply_state_commit(transaction: &mut DBTransaction, commit: state_db::CommitS } } -impl client::backend::Backend for Backend where Block: BlockT { - type BlockImportOperation = BlockImportOperation; +impl client::backend::Backend for Backend where Block: BlockT { + type BlockImportOperation = BlockImportOperation; type Blockchain = BlockchainDb; type State = DbState; @@ -461,7 +461,7 @@ impl client::backend::Backend for Backend client::backend::LocalBackend for Backend +impl client::backend::LocalBackend for Backend where Block: BlockT {} #[cfg(test)] diff --git a/substrate/client/src/block_builder.rs b/substrate/client/src/block_builder.rs index 7365f4886fe6f..30216f4157f27 100644 --- a/substrate/client/src/block_builder.rs +++ b/substrate/client/src/block_builder.rs @@ -24,7 +24,7 @@ use runtime_primitives::generic::BlockId; use {backend, error, Client, CallExecutor}; use runtime_primitives::{ApplyResult, ApplyOutcome}; use patricia_trie::NodeCodec; -use primitives::{BlakeHasher, RlpCodec}; +use primitives::{KeccakHasher, RlpCodec}; use hashdb::Hasher; use rlp::Encodable; @@ -45,10 +45,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/client/src/call_executor.rs b/substrate/client/src/call_executor.rs index e8e98a4aac7b7..6da6d0a04f00b 100644 --- a/substrate/client/src/call_executor.rs +++ b/substrate/client/src/call_executor.rs @@ -23,7 +23,7 @@ use state_machine::{self, OverlayedChanges, Ext, use runtime_io::Externalities; use executor::{RuntimeVersion, RuntimeInfo}; use patricia_trie::NodeCodec; -use primitives::{BlakeHasher, RlpCodec}; +use primitives::{KeccakHasher, RlpCodec}; use hashdb::Hasher; use rlp::Encodable; @@ -115,10 +115,10 @@ impl Clone for LocalCallExecutor where E: Clone { } } -impl CallExecutor for LocalCallExecutor +impl CallExecutor for LocalCallExecutor where - B: backend::LocalBackend, - E: CodeExecutor + RuntimeInfo, + B: backend::LocalBackend, + E: CodeExecutor + RuntimeInfo, Block: BlockT, { type Error = E::Error; @@ -151,7 +151,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, @@ -170,7 +170,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/client/src/client.rs b/substrate/client/src/client.rs index 0c9ed54c8c3db..e989da8a92dda 100644 --- a/substrate/client/src/client.rs +++ b/substrate/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, One, As, NumberFor}; use runtime_primitives::BuildStorage; -use primitives::{BlakeHasher, RlpCodec}; +use primitives::{KeccakHasher, RlpCodec}; use primitives::storage::{StorageKey, StorageData}; use codec::Decode; use state_machine::{Ext, OverlayedChanges, Backend as StateBackend, CodeExecutor, ExecutionStrategy, ExecutionManager}; @@ -161,9 +161,9 @@ 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, + E: CodeExecutor + RuntimeInfo, S: BuildStorage, Block: BlockT, { @@ -173,8 +173,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. @@ -274,14 +274,14 @@ impl Client where } /// 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) @@ -498,8 +498,8 @@ impl Client where impl bft::BlockImport for Client where - B: backend::Backend, - E: CallExecutor, + B: backend::Backend, + E: CallExecutor, Block: BlockT, { fn import_block( @@ -521,8 +521,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> { @@ -544,7 +544,7 @@ impl bft::Authorities for Client impl BlockchainEvents for Client where - E: CallExecutor, + E: CallExecutor, Block: BlockT, { /// Get block import event stream. @@ -562,8 +562,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> { @@ -573,8 +573,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/client/src/genesis.rs b/substrate/client/src/genesis.rs index 8e55a747ec2f6..88d99e88e4da9 100644 --- a/substrate/client/src/genesis.rs +++ b/substrate/client/src/genesis.rs @@ -51,7 +51,7 @@ mod tests { use test_client::runtime::genesismap::{GenesisConfig, additional_storage_with_genesis}; use test_client::runtime::{Hash, Transfer, Block, BlockNumber, Header, Digest, Extrinsic}; use ed25519::{Public, Pair}; - use primitives::{BlakeHasher, RlpCodec}; + use primitives::{KeccakHasher, RlpCodec}; 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,7 +59,7 @@ mod tests { NativeExecutionDispatch::with_heap_pages(8) } - fn construct_block(backend: &InMemory, number: BlockNumber, parent_hash: Hash, state_root: Hash, txs: Vec) -> (Vec, Hash) { + fn construct_block(backend: &InMemory, number: BlockNumber, parent_hash: Hash, state_root: Hash, txs: Vec) -> (Vec, Hash) { use triehash::ordered_trie_root; let transactions = txs.into_iter().map(|tx| { @@ -116,7 +116,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/client/src/light/call_executor.rs b/substrate/client/src/light/call_executor.rs index d03c9397f4075..fbb18067fac98 100644 --- a/substrate/client/src/light/call_executor.rs +++ b/substrate/client/src/light/call_executor.rs @@ -24,7 +24,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 primitives::{H256, BlakeHasher, RlpCodec}; +use primitives::{H256, KeccakHasher, RlpCodec}; use patricia_trie::NodeCodec; use hashdb::Hasher; use rlp::Encodable; @@ -51,7 +51,7 @@ impl RemoteCallExecutor { } } -impl CallExecutor for RemoteCallExecutor +impl CallExecutor for RemoteCallExecutor where Block: BlockT, B: ChainBackend, @@ -80,7 +80,7 @@ where } fn call_at_state< - S: StateBackend, + S: StateBackend, FF: FnOnce(Result, Self::Error>, Result, Self::Error>) -> Result, Self::Error> >(&self, _state: &S, @@ -92,7 +92,7 @@ where Err(ClientErrorKind::NotAvailableOnLightClient.into()) } - fn prove_at_state>(&self, _state: S, _changes: &mut OverlayedChanges, _method: &str, _call_data: &[u8]) -> ClientResult<(Vec, Vec>)> { + fn prove_at_state>(&self, _state: S, _changes: &mut OverlayedChanges, _method: &str, _call_data: &[u8]) -> ClientResult<(Vec, Vec>)> { Err(ClientErrorKind::NotAvailableOnLightClient.into()) } diff --git a/substrate/client/src/light/fetcher.rs b/substrate/client/src/light/fetcher.rs index 4423f4e25cef4..2f819dd62d9b0 100644 --- a/substrate/client/src/light/fetcher.rs +++ b/substrate/client/src/light/fetcher.rs @@ -18,7 +18,7 @@ use std::sync::Arc; use futures::IntoFuture; -use primitives::{BlakeHasher, RlpCodec}; +use primitives::{KeccakHasher, RlpCodec}; use runtime_primitives::traits::{Block as BlockT}; use state_machine::CodeExecutor; @@ -79,7 +79,7 @@ impl FetchChecker for LightDataChecker where Block: BlockT, S: BlockchainStorage, - E: CodeExecutor, + E: CodeExecutor, F: Fetcher, { fn check_execution_proof(&self, request: &RemoteCallRequest, remote_proof: Vec>) -> ClientResult { diff --git a/substrate/executor/src/lib.rs b/substrate/executor/src/lib.rs index 407069982f2f0..df7b86262f962 100644 --- a/substrate/executor/src/lib.rs +++ b/substrate/executor/src/lib.rs @@ -75,7 +75,7 @@ pub use native_executor::{with_native_environment, NativeExecutor, NativeExecuti pub use state_machine::Externalities; pub use runtime_version::RuntimeVersion; pub use codec::Codec; -use primitives::BlakeHasher; +use primitives::KeccakHasher; /// Provides runtime information. pub trait RuntimeInfo { @@ -83,7 +83,7 @@ pub trait RuntimeInfo { const NATIVE_VERSION: Option; /// Extract RuntimeVersion of given :code block - fn runtime_version> ( + fn runtime_version> ( &self, ext: &mut E, code: &[u8] diff --git a/substrate/executor/src/native_executor.rs b/substrate/executor/src/native_executor.rs index 0d76befb5bb49..c1bd44fd935d8 100644 --- a/substrate/executor/src/native_executor.rs +++ b/substrate/executor/src/native_executor.rs @@ -25,7 +25,7 @@ use twox_hash::XxHash; use std::hash::Hasher; use parking_lot::{Mutex, MutexGuard}; use RuntimeInfo; -use primitives::BlakeHasher; +use primitives::KeccakHasher; // For the internal Runtime Cache: // Is it compatible enough to run this natively or do we need to fall back on the WasmModule @@ -57,7 +57,7 @@ fn gen_cache_key(code: &[u8]) -> u64 { /// fetch a runtime version from the cache or if there is no cached version yet, create /// the runtime version entry for `code`, determines whether `Compatibility::IsCompatible` /// can be used by by comparing returned RuntimeVersion to `ref_version` -fn fetch_cached_runtime_version<'a, E: Externalities>( +fn fetch_cached_runtime_version<'a, E: Externalities>( wasm_executor: &WasmExecutor, cache: &'a mut MutexGuard, ext: &mut E, @@ -95,7 +95,7 @@ fn safe_call(f: F) -> Result /// Set up the externalities and safe calling environment to execute calls to a native runtime. /// /// If the inner closure panics, it will be caught and return an error. -pub fn with_native_environment(ext: &mut Externalities, f: F) -> Result +pub fn with_native_environment(ext: &mut Externalities, f: F) -> Result where F: ::std::panic::UnwindSafe + FnOnce() -> U { ::runtime_io::with_externalities(ext, move || safe_call(f)) @@ -109,7 +109,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. const VERSION: RuntimeVersion; @@ -152,7 +152,7 @@ impl Clone for NativeExecutor { impl RuntimeInfo for NativeExecutor { const NATIVE_VERSION: Option = Some(D::VERSION); - fn runtime_version>( + fn runtime_version>( &self, ext: &mut E, code: &[u8], @@ -165,10 +165,10 @@ impl RuntimeInfo for NativeExecutor { } } -impl CodeExecutor for NativeExecutor { +impl CodeExecutor for NativeExecutor { type Error = Error; - fn call>( + fn call>( &self, ext: &mut E, code: &[u8], @@ -198,7 +198,7 @@ macro_rules! native_executor_instance { }; (IMPL $name:ident, $dispatcher:path, $version:path, $code:expr) => { // TODO: this is not so great – I think I should go back to have dispatch take a type param and modify this macro to accept a type param and then pass it in from the test-client instead - use primitives::BlakeHasher as _BlakeHasher; + use primitives::KeccakHasher as _KeccakHasher; impl $crate::NativeExecutionDispatch for $name { const VERSION: $crate::RuntimeVersion = $version; fn native_equivalent() -> &'static [u8] { @@ -206,7 +206,7 @@ macro_rules! native_executor_instance { // get a proper build script, this must be strictly adhered to or things will go wrong. $code } - fn dispatch(ext: &mut $crate::Externalities<_BlakeHasher>, method: &str, data: &[u8]) -> $crate::error::Result> { + fn dispatch(ext: &mut $crate::Externalities<_KeccakHasher>, method: &str, data: &[u8]) -> $crate::error::Result> { $crate::with_native_environment(ext, move || $dispatcher(method, data))? .ok_or_else(|| $crate::error::ErrorKind::MethodNotFound(method.to_owned()).into()) } diff --git a/substrate/executor/src/wasm_executor.rs b/substrate/executor/src/wasm_executor.rs index 997df761d57c2..ed6cdbf9e799b 100644 --- a/substrate/executor/src/wasm_executor.rs +++ b/substrate/executor/src/wasm_executor.rs @@ -30,7 +30,7 @@ use wasm_utils::UserError; use primitives::{blake2_256, twox_128, twox_256}; use primitives::hexdisplay::HexDisplay; use primitives::sandbox as sandbox_primitives; -use primitives::BlakeHasher; +use primitives::KeccakHasher; use triehash::ordered_trie_root; use sandbox; @@ -74,7 +74,7 @@ macro_rules! debug_trace { ( $( $x:tt )* ) => () } -struct FunctionExecutor<'e, E: Externalities + 'e> { +struct FunctionExecutor<'e, E: Externalities + 'e> { sandbox_store: sandbox::Store, heap: Heap, memory: MemoryRef, @@ -83,7 +83,7 @@ struct FunctionExecutor<'e, E: Externalities + 'e> { hash_lookup: HashMap, Vec>, } -impl<'e, E: Externalities> FunctionExecutor<'e, E> { +impl<'e, E: Externalities> FunctionExecutor<'e, E> { fn new(m: MemoryRef, heap_pages: usize, t: Option, e: &'e mut E) -> Result { Ok(FunctionExecutor { sandbox_store: sandbox::Store::new(), @@ -96,7 +96,7 @@ impl<'e, E: Externalities> FunctionExecutor<'e, E> { } } -impl<'e, E: Externalities> sandbox::SandboxCapabilities for FunctionExecutor<'e, E> { +impl<'e, E: Externalities> sandbox::SandboxCapabilities for FunctionExecutor<'e, E> { fn store(&self) -> &sandbox::Store { &self.sandbox_store } @@ -480,7 +480,7 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, this.sandbox_store.memory_teardown(memory_idx)?; Ok(()) }, - => <'e, E: Externalities + 'e> + => <'e, E: Externalities + 'e> ); /// Wasm rust executor for contracts. @@ -512,7 +512,7 @@ impl WasmExecutor { /// Call a given method in the given code. /// This should be used for tests only. - pub fn call>( + pub fn call>( &self, ext: &mut E, code: &[u8], @@ -524,7 +524,7 @@ impl WasmExecutor { } /// Call a given method in the given wasm-module runtime. - pub fn call_in_wasm_module>( + pub fn call_in_wasm_module>( &self, ext: &mut E, module: &Module, diff --git a/substrate/network/src/chain.rs b/substrate/network/src/chain.rs index de448ee1817d2..2755c9e61b8b7 100644 --- a/substrate/network/src/chain.rs +++ b/substrate/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::{BlakeHasher, RlpCodec}; +use primitives::{KeccakHasher, RlpCodec}; /// Local client abstraction for the network. pub trait Client: Send + Sync { @@ -51,8 +51,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(&self, origin: BlockOrigin, header: Block::Header, justification: Justification, body: Option>) -> Result { diff --git a/substrate/network/src/test/mod.rs b/substrate/network/src/test/mod.rs index a33386740aced..9d98a66d948b7 100644 --- a/substrate/network/src/test/mod.rs +++ b/substrate/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::{BlakeHasher, RlpCodec}; +use primitives::{KeccakHasher, RlpCodec}; use config::ProtocolConfig; use service::TransactionPool; use network_libp2p::{NodeIndex, SessionInfo, Severity}; @@ -174,7 +174,7 @@ impl Peer { } fn generate_blocks(&self, count: usize, mut edit_block: F) - where F: FnMut(&mut BlockBuilder) + where F: FnMut(&mut BlockBuilder) { for _ in 0 .. count { let mut builder = self.client.new_block().unwrap(); diff --git a/substrate/rpc/src/author/mod.rs b/substrate/rpc/src/author/mod.rs index adf2617396b7c..eb0942a71e9cc 100644 --- a/substrate/rpc/src/author/mod.rs +++ b/substrate/rpc/src/author/mod.rs @@ -26,7 +26,7 @@ use extrinsic_pool::{ }; use jsonrpc_macros::pubsub; use jsonrpc_pubsub::SubscriptionId; -use primitives::{Bytes, BlakeHasher, RlpCodec}; +use primitives::{Bytes, KeccakHasher, RlpCodec}; use rpc::futures::{Sink, Stream, Future}; use runtime_primitives::{generic, traits}; use subscriptions::Subscriptions; @@ -86,8 +86,8 @@ impl Author { } impl AuthorApi for Author where - 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, Block: traits::Block + 'static, Hash: traits::MaybeSerializeDebug + Sync + Send + 'static, P: ExtrinsicPool, Hash>, diff --git a/substrate/rpc/src/chain/mod.rs b/substrate/rpc/src/chain/mod.rs index 9a8b029a947aa..d704c18272a6f 100644 --- a/substrate/rpc/src/chain/mod.rs +++ b/substrate/rpc/src/chain/mod.rs @@ -26,7 +26,7 @@ use rpc::futures::{stream, Future, Sink, Stream}; use runtime_primitives::generic::BlockId; use runtime_primitives::traits::Block as BlockT; use tokio::runtime::TaskExecutor; -use primitives::{BlakeHasher, RlpCodec}; +use primitives::{KeccakHasher, RlpCodec}; use subscriptions::Subscriptions; @@ -81,8 +81,8 @@ impl Chain { impl ChainApi 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/rpc/src/state/mod.rs b/substrate/rpc/src/state/mod.rs index 50452341f8bc1..3f08fb5a06468 100644 --- a/substrate/rpc/src/state/mod.rs +++ b/substrate/rpc/src/state/mod.rs @@ -24,7 +24,7 @@ use jsonrpc_macros::pubsub; use jsonrpc_pubsub::SubscriptionId; use primitives::hexdisplay::HexDisplay; use primitives::storage::{StorageKey, StorageData, StorageChangeSet}; -use primitives::{BlakeHasher, RlpCodec}; +use primitives::{KeccakHasher, RlpCodec}; use rpc::Result as RpcResult; use rpc::futures::{stream, Future, Sink, Stream}; use runtime_primitives::generic::BlockId; @@ -92,8 +92,8 @@ impl State { impl 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, { fn unwrap_or_best(&self, hash: Trailing) -> Result { Ok(match hash.into() { @@ -105,8 +105,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/runtime-io/with_std.rs b/substrate/runtime-io/with_std.rs index 8b1a3e404c7c8..44b12e44a16c9 100644 --- a/substrate/runtime-io/with_std.rs +++ b/substrate/runtime-io/with_std.rs @@ -29,6 +29,7 @@ pub extern crate substrate_codec as codec; // re-export hashing functions. pub use primitives::{blake2_256, twox_128, twox_256}; +pub use primitives::KeccakHasher; pub use primitives::BlakeHasher; pub use substrate_state_machine::{Externalities, TestExternalities}; use primitives::hexdisplay::HexDisplay; @@ -36,7 +37,7 @@ use primitives::H256; // TODO: use the real error, not NoError. -environmental!(ext: trait Externalities); +environmental!(ext: trait Externalities); /// Get `key` from storage and return a `Vec`, empty if there's a problem. pub fn storage(key: &[u8]) -> Option> { @@ -128,7 +129,7 @@ pub fn ed25519_verify>(sig: &[u8; 64], msg: &[u8], pubkey: P) -> /// Execute the given closure with global function available whose functionality routes into the /// externalities `ext`. Forwards the value that the closure returns. // NOTE: need a concrete hasher here due to limitations of the `environmental!` macro, otherwise a type param would have been fine I think. -pub fn with_externalities R>(ext: &mut Externalities, f: F) -> R { +pub fn with_externalities R>(ext: &mut Externalities, f: F) -> R { ext::using(ext, f) } @@ -194,7 +195,7 @@ mod std_tests { #[test] fn storage_works() { - let mut t = TestExternalities::::new(); + let mut t = TestExternalities::::new(); assert!(with_externalities(&mut t, || { assert_eq!(storage(b"hello"), None); set_storage(b"hello", b"world"); @@ -215,7 +216,7 @@ mod std_tests { #[test] fn read_storage_works() { - let mut t: TestExternalities = map![ + let mut t: TestExternalities = map![ b":test".to_vec() => b"\x0b\0\0\0Hello world".to_vec() ]; @@ -231,7 +232,7 @@ mod std_tests { #[test] fn clear_prefix_works() { - let mut t: TestExternalities = map![ + let mut t: TestExternalities = 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/runtime/consensus/src/lib.rs b/substrate/runtime/consensus/src/lib.rs index c6bc48a438a67..3b9e2554b4631 100644 --- a/substrate/runtime/consensus/src/lib.rs +++ b/substrate/runtime/consensus/src/lib.rs @@ -46,7 +46,7 @@ use primitives::traits::{RefInto, MaybeSerializeDebug, MaybeEmpty}; use primitives::bft::MisbehaviorReport; #[cfg(any(feature = "std", test))] -use substrate_primitives::BlakeHasher; +use substrate_primitives::KeccakHasher; #[cfg(any(feature = "std", test))] use std::collections::HashMap; @@ -154,7 +154,7 @@ impl primitives::BuildStorage for GenesisConfig fn build_storage(self) -> ::std::result::Result, Vec>, String> { use codec::{Encode, KeyedVec}; let auth_count = self.authorities.len() as u32; - let mut r: runtime_io::TestExternalities = self.authorities.into_iter().enumerate().map(|(i, v)| + let mut r: runtime_io::TestExternalities = self.authorities.into_iter().enumerate().map(|(i, v)| ((i as u32).to_keyed_vec(AUTHORITY_AT), v.encode()) ).collect(); r.insert(AUTHORITY_COUNT.to_vec(), auth_count.encode()); diff --git a/substrate/runtime/contract/src/genesis_config.rs b/substrate/runtime/contract/src/genesis_config.rs index c99532739e856..89f94b40b94ef 100644 --- a/substrate/runtime/contract/src/genesis_config.rs +++ b/substrate/runtime/contract/src/genesis_config.rs @@ -23,7 +23,7 @@ use runtime_io::{self, twox_128}; use runtime_support::StorageValue; use codec::Encode; use std::collections::HashMap; -use substrate_primitives::BlakeHasher; +use substrate_primitives::KeccakHasher; #[derive(Serialize, Deserialize)] #[serde(rename_all = "camelCase")] @@ -38,7 +38,7 @@ pub struct GenesisConfig { impl runtime_primitives::BuildStorage for GenesisConfig { fn build_storage(self) -> ::std::result::Result, Vec>, String> { - let r: runtime_io::TestExternalities = map![ + let r: runtime_io::TestExternalities = map![ twox_128(>::key()).to_vec() => self.contract_fee.encode(), twox_128(>::key()).to_vec() => self.call_base_fee.encode(), twox_128(>::key()).to_vec() => self.create_base_fee.encode(), diff --git a/substrate/runtime/contract/src/tests.rs b/substrate/runtime/contract/src/tests.rs index 7c2b0cc6c3734..28dc55eb8917c 100644 --- a/substrate/runtime/contract/src/tests.rs +++ b/substrate/runtime/contract/src/tests.rs @@ -20,7 +20,7 @@ use runtime_primitives::testing::{Digest, H256, Header}; use runtime_primitives::traits::{BlakeTwo256, HasPublicAux, Identity}; use runtime_primitives::BuildStorage; use runtime_support::StorageMap; -use substrate_primitives::BlakeHasher; +use substrate_primitives::KeccakHasher; use wabt; use { consensus, runtime_io, session, staking, system, timestamp, CodeOf, ContractAddressFor, @@ -73,7 +73,7 @@ impl ContractAddressFor for DummyContractAddressFor { } } -fn new_test_ext(existential_deposit: u64, gas_price: u64) -> runtime_io::TestExternalities { +fn new_test_ext(existential_deposit: u64, gas_price: u64) -> runtime_io::TestExternalities { let mut t = system::GenesisConfig::::default() .build_storage() .unwrap(); diff --git a/substrate/runtime/council/src/lib.rs b/substrate/runtime/council/src/lib.rs index 37d4d619c62b7..fc993eb677a1b 100644 --- a/substrate/runtime/council/src/lib.rs +++ b/substrate/runtime/council/src/lib.rs @@ -623,7 +623,7 @@ mod tests { use primitives::BuildStorage; use primitives::traits::{HasPublicAux, Identity, BlakeTwo256}; use primitives::testing::{Digest, Header}; - use substrate_primitives::BlakeHasher; + use substrate_primitives::KeccakHasher; impl_outer_dispatch! { #[derive(Debug, Clone, Eq, Serialize, Deserialize, PartialEq)] @@ -670,7 +670,7 @@ mod tests { } impl Trait for Test {} - 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(consensus::GenesisConfig::{ code: vec![], @@ -787,7 +787,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/runtime/democracy/src/lib.rs b/substrate/runtime/democracy/src/lib.rs index e85f9ed8dc36a..4981cb6df6f77 100644 --- a/substrate/runtime/democracy/src/lib.rs +++ b/substrate/runtime/democracy/src/lib.rs @@ -360,7 +360,7 @@ impl primitives::BuildStorage for GenesisConfig mod tests { use super::*; use runtime_io::with_externalities; - use substrate_primitives::{H256, BlakeHasher}; + use substrate_primitives::{H256, KeccakHasher}; use primitives::BuildStorage; use primitives::traits::{HasPublicAux, Identity, BlakeTwo256}; use primitives::testing::{Digest, Header}; @@ -411,7 +411,7 @@ mod tests { type Proposal = Proposal; } - 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/runtime/executive/src/lib.rs b/substrate/runtime/executive/src/lib.rs index 917e170fe085d..a7e222ac5fd31 100644 --- a/substrate/runtime/executive/src/lib.rs +++ b/substrate/runtime/executive/src/lib.rs @@ -218,7 +218,7 @@ mod tests { use super::*; use staking::Call; use runtime_io::with_externalities; - use substrate_primitives::{H256, BlakeHasher}; + use substrate_primitives::{H256, KeccakHasher}; use primitives::BuildStorage; use primitives::traits::{HasPublicAux, Identity, Header as HeaderT, BlakeTwo256, AuxLookup}; use primitives::testing::{Digest, Header, Block}; @@ -297,7 +297,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(consensus::GenesisConfig::::default().build_storage().unwrap()); t.extend(session::GenesisConfig::::default().build_storage().unwrap()); @@ -313,7 +313,10 @@ mod tests { header: Header { parent_hash: [69u8; 32].into(), number: 1, - state_root: hex!("02532989c613369596025dfcfc821339fc9861987003924913a5a1382f87034a").into(), + // Blake + // state_root: hex!("02532989c613369596025dfcfc821339fc9861987003924913a5a1382f87034a").into(), + // Keccak + state_root: hex!("8fad93b6b9e5251a2e4913598fd0d74a138c0e486eb1133ff8081b429b0c56f2").into(), extrinsics_root: hex!("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421").into(), // REVIEW: I expected this to be wrong with a different hasher? digest: Digest { logs: vec![], }, }, diff --git a/substrate/runtime/session/src/lib.rs b/substrate/runtime/session/src/lib.rs index 22cddfab204b0..d34a11c27b227 100644 --- a/substrate/runtime/session/src/lib.rs +++ b/substrate/runtime/session/src/lib.rs @@ -277,7 +277,7 @@ impl primitives::BuildStorage for GenesisConfig mod tests { use super::*; use runtime_io::with_externalities; - use substrate_primitives::{H256, BlakeHasher}; + use substrate_primitives::{H256, KeccakHasher}; use primitives::BuildStorage; use primitives::traits::{HasPublicAux, Identity, BlakeTwo256}; use primitives::testing::{Digest, Header}; @@ -314,7 +314,7 @@ mod tests { type Timestamp = timestamp::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/runtime/staking/src/genesis_config.rs b/substrate/runtime/staking/src/genesis_config.rs index f25b749105ffc..af221cc3862ac 100644 --- a/substrate/runtime/staking/src/genesis_config.rs +++ b/substrate/runtime/staking/src/genesis_config.rs @@ -23,7 +23,7 @@ use rstd::prelude::*; use codec::Encode; use runtime_support::{StorageValue, StorageMap}; use primitives::traits::{Zero, As}; -use substrate_primitives::BlakeHasher; +use substrate_primitives::KeccakHasher; use {runtime_io, primitives}; use super::{Trait, ENUM_SET_SIZE, EnumSet, NextEnumSet, Intentions, CurrentEra, BondingDuration, CreationFee, TransferFee, ReclaimRebate, @@ -123,7 +123,7 @@ impl primitives::BuildStorage for GenesisConfig { fn build_storage(self) -> ::std::result::Result, Vec>, String> { let total_stake: T::Balance = self.balances.iter().fold(Zero::zero(), |acc, &(_, n)| acc + n); - let mut r: runtime_io::TestExternalities = map![ + let mut r: runtime_io::TestExternalities = map![ Self::hash(>::key()).to_vec() => T::AccountIndex::sa(self.balances.len() / ENUM_SET_SIZE).encode(), Self::hash(>::key()).to_vec() => self.intentions.encode(), Self::hash(>::key()).to_vec() => self.sessions_per_era.encode(), diff --git a/substrate/runtime/staking/src/mock.rs b/substrate/runtime/staking/src/mock.rs index 9d0c238f78bbe..62b344a7ba1e1 100644 --- a/substrate/runtime/staking/src/mock.rs +++ b/substrate/runtime/staking/src/mock.rs @@ -21,7 +21,7 @@ use primitives::BuildStorage; use primitives::traits::{HasPublicAux, Identity}; use primitives::testing::{Digest, Header}; -use substrate_primitives::{H256, BlakeHasher}; +use substrate_primitives::{H256, KeccakHasher}; use runtime_io; use {GenesisConfig, Module, Trait, consensus, session, system, timestamp}; @@ -58,7 +58,7 @@ impl Trait for Test { type OnAccountKill = (); } -pub fn new_test_ext(ext_deposit: u64, session_length: u64, sessions_per_era: u64, current_era: u64, monied: bool, reward: u64) -> runtime_io::TestExternalities { +pub fn new_test_ext(ext_deposit: u64, session_length: u64, sessions_per_era: u64, current_era: u64, monied: bool, reward: u64) -> runtime_io::TestExternalities { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); let balance_factor = if ext_deposit > 0 { 256 diff --git a/substrate/runtime/system/src/lib.rs b/substrate/runtime/system/src/lib.rs index 5cfa5d1e7b4d1..60dd6059b4070 100644 --- a/substrate/runtime/system/src/lib.rs +++ b/substrate/runtime/system/src/lib.rs @@ -49,7 +49,7 @@ use rstd::marker::PhantomData; use codec::Encode; #[cfg(any(feature = "std", test))] -use runtime_io::{twox_128, TestExternalities, BlakeHasher}; +use runtime_io::{twox_128, TestExternalities, KeccakHasher}; /// Compute the extrinsics root of a list of extrinsics. pub fn extrinsics_root(extrinsics: &[E]) -> H::Output { @@ -142,7 +142,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 { 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(), diff --git a/substrate/service/src/components.rs b/substrate/service/src/components.rs index 690318b6a9670..e58699063fd88 100644 --- a/substrate/service/src/components.rs +++ b/substrate/service/src/components.rs @@ -28,7 +28,7 @@ use substrate_executor::{NativeExecutor, NativeExecutionDispatch}; use extrinsic_pool::{txpool::Options as ExtrinsicPoolOptions, api::ExtrinsicPool as ExtrinsicPoolApi}; use runtime_primitives::{traits::Block as BlockT, traits::Header as HeaderT, generic::BlockId, BuildStorage}; use config::Configuration; -use primitives::{BlakeHasher, RlpCodec}; +use primitives::{KeccakHasher, RlpCodec}; // Type aliases. // These exist mainly to avoid typing `::Foo` all over the code. @@ -153,9 +153,9 @@ pub trait Components { /// Associated service factory. type Factory: ServiceFactory; /// Client backend. - type Backend: 'static + client::backend::Backend, BlakeHasher, RlpCodec>; + type Backend: 'static + client::backend::Backend, KeccakHasher, RlpCodec>; /// Client executor. - type Executor: 'static + client::CallExecutor, BlakeHasher, RlpCodec> + Send + Sync; + type Executor: 'static + client::CallExecutor, KeccakHasher, RlpCodec> + Send + Sync; /// Extrinsic pool type. type ExtrinsicPool: ExtrinsicPool>; diff --git a/substrate/state-machine/src/lib.rs b/substrate/state-machine/src/lib.rs index a5b8f59c67dc2..396e10c5e229a 100644 --- a/substrate/state-machine/src/lib.rs +++ b/substrate/state-machine/src/lib.rs @@ -441,7 +441,7 @@ mod tests { use super::*; use super::backend::InMemory; use super::ext::Ext; - use primitives::{BlakeHasher, RlpCodec, H256}; + use primitives::{KeccakHasher, RlpCodec, H256}; struct DummyCodeExecutor { native_available: bool, @@ -513,7 +513,7 @@ mod tests { b"dogglesworth".to_vec() => b"catXXX".to_vec(), b"doug".to_vec() => b"notadog".to_vec() ]; - let backend = InMemory::::from(initial); + let backend = InMemory::::from(initial); let mut overlay = OverlayedChanges { committed: map![ b"dog".to_vec() => Some(b"puppy".to_vec()), @@ -526,7 +526,10 @@ mod tests { ], }; let mut ext = Ext::new(&mut overlay, &backend); - const ROOT: [u8; 32] = hex!("6ca394ff9b13d6690a51dea30b1b5c43108e52944d30b9095227c49bae03ff8b"); + // Blake + // const ROOT: [u8; 32] = hex!("6ca394ff9b13d6690a51dea30b1b5c43108e52944d30b9095227c49bae03ff8b"); + // Keccak + const ROOT: [u8; 32] = hex!("8aad789dff2f538bca5d8ea56e8abe10f4c7ba3a5dea95fea4cd6e7c3a1168d3"); assert_eq!(ext.storage_root(), H256(ROOT)); } @@ -583,7 +586,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 @@ -599,7 +602,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()), diff --git a/substrate/state-machine/src/proving_backend.rs b/substrate/state-machine/src/proving_backend.rs index b3d0b163eff17..db8d142452eba 100644 --- a/substrate/state-machine/src/proving_backend.rs +++ b/substrate/state-machine/src/proving_backend.rs @@ -123,9 +123,9 @@ mod tests { use backend::{InMemory}; use trie_backend::tests::test_trie; use super::*; - use primitives::{BlakeHasher, RlpCodec}; + use primitives::{KeccakHasher, RlpCodec}; - fn test_proving() -> ProvingBackend { + fn test_proving() -> ProvingBackend { ProvingBackend::new(test_trie()) } @@ -143,7 +143,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] @@ -162,7 +162,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])); @@ -177,7 +177,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/state-machine/src/testing.rs b/substrate/state-machine/src/testing.rs index d124f60921e2c..955cb77464b4e 100644 --- a/substrate/state-machine/src/testing.rs +++ b/substrate/state-machine/src/testing.rs @@ -104,15 +104,18 @@ impl Externalities for TestExternalities where H::Out: Ord + En #[cfg(test)] mod tests { use super::*; - use primitives::{BlakeHasher, H256}; + use primitives::{KeccakHasher, H256}; #[test] fn commit_should_work() { - let mut ext = TestExternalities::::new(); + let mut ext = TestExternalities::::new(); 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"); + // Blake + // const ROOT: [u8; 32] = hex!("6ca394ff9b13d6690a51dea30b1b5c43108e52944d30b9095227c49bae03ff8b"); + // Keccak + const ROOT: [u8; 32] = hex!("8aad789dff2f538bca5d8ea56e8abe10f4c7ba3a5dea95fea4cd6e7c3a1168d3"); assert_eq!(ext.storage_root(), H256(ROOT)); } } diff --git a/substrate/state-machine/src/trie_backend.rs b/substrate/state-machine/src/trie_backend.rs index f6ae37c0487fc..1a219881db8d4 100644 --- a/substrate/state-machine/src/trie_backend.rs +++ b/substrate/state-machine/src/trie_backend.rs @@ -277,11 +277,11 @@ impl TrieBackendStorage { pub mod tests { use super::*; use std::collections::HashSet; - use primitives::{BlakeHasher, RlpCodec, H256}; + use primitives::{KeccakHasher, RlpCodec, H256}; - fn test_db() -> (MemoryDB, H256) { + fn test_db() -> (MemoryDB, H256) { let mut root = H256::default(); - let mut mdb = MemoryDB::::new(); + let mut mdb = MemoryDB::::new(); { let mut trie = TrieDBMut::<_, RlpCodec>::new(&mut mdb, &mut root); trie.insert(b"key", b"value").expect("insert failed"); @@ -292,7 +292,7 @@ pub mod tests { (mdb, root) } - pub(crate) fn test_trie() -> TrieBackend { + pub(crate) fn test_trie() -> TrieBackend { let (mdb, root) = test_db(); TrieBackend::with_memorydb(mdb, root) } @@ -314,7 +314,7 @@ pub mod tests { #[test] fn pairs_are_empty_on_empty_storage() { - let db = TrieBackend::::with_memorydb( + let db = TrieBackend::::with_memorydb( MemoryDB::new(), Default::default() ); diff --git a/substrate/test-client/src/block_builder_ext.rs b/substrate/test-client/src/block_builder_ext.rs index e046c24f32ee9..a1894f5fa68f3 100644 --- a/substrate/test-client/src/block_builder_ext.rs +++ b/substrate/test-client/src/block_builder_ext.rs @@ -22,7 +22,7 @@ use keyring; use runtime; use {Backend, Executor}; -use primitives::{BlakeHasher, RlpCodec}; +use primitives::{KeccakHasher, RlpCodec}; /// 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/test-client/src/lib.rs b/substrate/test-client/src/lib.rs index 93bf3c7cb02d0..6a7e52a20103c 100644 --- a/substrate/test-client/src/lib.rs +++ b/substrate/test-client/src/lib.rs @@ -37,7 +37,7 @@ mod block_builder_ext; pub use client_ext::TestClient; pub use block_builder_ext::BlockBuilderExt; -use primitives::{BlakeHasher, RlpCodec}; +use primitives::{KeccakHasher, RlpCodec}; mod local_executor { #![allow(missing_docs)] @@ -50,7 +50,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/test-runtime/src/system.rs b/substrate/test-runtime/src/system.rs index deb6f944f5ec7..fcb2b951b6449 100644 --- a/substrate/test-runtime/src/system.rs +++ b/substrate/test-runtime/src/system.rs @@ -171,9 +171,9 @@ mod tests { use codec::{Joiner, KeyedVec}; use keyring::Keyring; use ::{Header, Digest, Extrinsic, Transfer}; - use primitives::BlakeHasher; + use primitives::KeccakHasher; - fn new_test_ext() -> TestExternalities { + fn new_test_ext() -> TestExternalities { map![ twox_128(b"latest").to_vec() => vec![69u8; 32], twox_128(b":auth:len").to_vec() => vec![].and(&3u32), @@ -196,7 +196,10 @@ mod tests { let h = Header { parent_hash: [69u8; 32].into(), number: 1, - state_root: hex!("0c22599e15fb5e052c84f79a2aab179ba6bb238218fd86bdd4a74ebcc87adfcd").into(), + // Blake + // state_root: hex!("0c22599e15fb5e052c84f79a2aab179ba6bb238218fd86bdd4a74ebcc87adfcd").into(), + // Keccak + state_root: hex!("97dfcd1f8cbf8845fcb544f89332f1a94c1137f7d1b199ef0b0a6ed217015c3e").into(), extrinsics_root: hex!("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421").into(), digest: Digest { logs: vec![], }, }; @@ -224,7 +227,10 @@ mod tests { header: Header { parent_hash: [69u8; 32].into(), number: 1, - state_root: hex!("0425393fd07e2a806cfd7e990ee91dc92fe6bba34eab2bf45d5be7d67e24d467").into(), + // Blake + // state_root: hex!("0425393fd07e2a806cfd7e990ee91dc92fe6bba34eab2bf45d5be7d67e24d467").into(), + // Keccak + state_root: hex!("0dd8210adaf581464cc68555814a787ed491f8c608d0a0dbbf2208a6d44190b1").into(), extrinsics_root: hex!("951508f2cc0071500a74765ab0fb2f280fdcdd329d5f989dda675010adee99d6").into(), digest: Digest { logs: vec![], }, }, @@ -249,7 +255,10 @@ mod tests { header: Header { parent_hash: b.header.hash(), number: 2, - state_root: hex!("e32dd1d84d9133ca48078d2d83f2b0db19f9d47229ba98bf5ced0e9f86fac2c7").into(), + // Blake + // state_root: hex!("e32dd1d84d9133ca48078d2d83f2b0db19f9d47229ba98bf5ced0e9f86fac2c7").into(), + // Keccak + state_root: hex!("c93f2fd494c386fa32ee76b6198a7ccf5db12c02c3a79755fd2d4646ec2bf8d7").into(), extrinsics_root: hex!("3563642676d7e042c894eedc579ba2d6eeedf9a6c66d9d557599effc9f674372").into(), digest: Digest { logs: vec![], }, }, From af96467bde1d1a7e059621861b40b9c9432da967 Mon Sep 17 00:00:00 2001 From: David Palm Date: Tue, 14 Aug 2018 11:28:02 +0200 Subject: [PATCH 89/97] Lock file and runtimes --- Cargo.lock | 13 +++--- polkadot/runtime/wasm/Cargo.lock | 41 +++++++++++++----- .../release/polkadot_runtime.compact.wasm | Bin 221887 -> 247589 bytes .../release/polkadot_runtime.wasm | Bin 324706 -> 324709 bytes substrate/executor/wasm/Cargo.lock | 33 ++++++++++---- .../release/runtime_test.compact.wasm | Bin 14419 -> 17022 bytes .../release/runtime_test.wasm | Bin 14548 -> 54587 bytes 7 files changed, 63 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5b01d4286d5fb..650a55e597c1c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2764,9 +2764,9 @@ dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-io 0.1.0", @@ -2900,6 +2900,7 @@ dependencies = [ "substrate-codec-derive 0.1.0", "substrate-runtime-std 0.1.0", "substrate-serializer 0.1.0", + "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "uint 0.2.2 (git+https://github.com/paritytech/parity-common)", "wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2987,9 +2988,9 @@ 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)", + "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", @@ -3010,9 +3011,9 @@ name = "substrate-runtime-democracy" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (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.71 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-codec-derive 0.1.0", "substrate-primitives 0.1.0", @@ -3097,9 +3098,9 @@ name = "substrate-runtime-session" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (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.71 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", @@ -3117,9 +3118,9 @@ name = "substrate-runtime-staking" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (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.71 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", @@ -3163,9 +3164,9 @@ name = "substrate-runtime-system" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (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.71 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-io 0.1.0", diff --git a/polkadot/runtime/wasm/Cargo.lock b/polkadot/runtime/wasm/Cargo.lock index 9db5905d601b2..b452d6cfaddce 100644 --- a/polkadot/runtime/wasm/Cargo.lock +++ b/polkadot/runtime/wasm/Cargo.lock @@ -341,7 +341,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -384,7 +384,7 @@ version = "0.1.0" dependencies = [ "integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)", "polkadot-primitives 0.1.0", - "safe-mix 0.1.0", + "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-consensus 0.1.0", @@ -537,7 +537,8 @@ dependencies = [ [[package]] name = "safe-mix" -version = "0.1.0" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -577,8 +578,11 @@ dependencies = [ [[package]] name = "smallvec" -version = "0.6.1" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "stable_deref_trait" @@ -629,6 +633,7 @@ dependencies = [ "substrate-codec 0.1.0", "substrate-codec-derive 0.1.0", "substrate-runtime-std 0.1.0", + "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "twox-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "uint 0.2.2 (git+https://github.com/paritytech/parity-common)", "wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -656,7 +661,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)", - "safe-mix 0.1.0", + "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)", "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", @@ -678,7 +683,7 @@ name = "substrate-runtime-democracy" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "safe-mix 0.1.0", + "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)", "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", @@ -757,7 +762,7 @@ name = "substrate-runtime-session" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "safe-mix 0.1.0", + "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)", "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", @@ -777,7 +782,7 @@ name = "substrate-runtime-staking" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "safe-mix 0.1.0", + "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)", "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", @@ -822,7 +827,7 @@ name = "substrate-runtime-system" version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "safe-mix 0.1.0", + "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)", "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", @@ -952,11 +957,24 @@ name = "unicode-xid" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "unreachable" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "untrusted" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "wasmi" version = "0.4.0" @@ -1048,12 +1066,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0ceb8ce7a5e520de349e1fa172baeba4a9e8d5ef06c47471863530bc4972ee1e" "checksum rustc-hex 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d2b03280c2813907a030785570c577fb27d3deec8da4c18566751ade94de0ace" "checksum rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a54aa04a10c68c1c4eacb4337fd883b435997ede17a9385784b990777686b09a" +"checksum safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7f7bf422d23a88c16d5090d455f182bc99c60af4df6a345c63428acf5129e347" "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" "checksum serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)" = "fba5be06346c5200249c8c8ca4ccba4a09e8747c71c16e420bd359a0db4d8f91" "checksum serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)" = "79e4620ba6fbe051fc7506fab6f84205823564d55da18d55b695160fb3479cd8" -"checksum smallvec 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "03dab98ab5ded3a8b43b2c80751194608d0b2aa0f1d46cf95d1c35e192844aa7" +"checksum smallvec 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "211a489e65e94b103926d2054ae515a1cdb5d515ea0ef414fee23b7e043ce748" "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" @@ -1063,7 +1082,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum uint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "38051a96565903d81c9a9210ce11076b2218f3b352926baa1f5f6abbdfce8273" "checksum uint 0.2.2 (git+https://github.com/paritytech/parity-common)" = "" "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" +"checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" "checksum untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f392d7819dbe58833e26872f5f6f0d68b7bbbe90fc3667e98731c4a15ad9a7ae" +"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" "checksum wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "522fe3fdd44a56f25cd5ddcd8ccdb1cf2e982ceb28fcb00f41d8a018ae5245a8" "checksum winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "04e3bd221fcbe8a271359c04f21a76db7d0c6028862d1bb5512d85e1e2eb5bb3" "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" diff --git a/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm b/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm index c2f710732e26ac9502cb58c805bfe73bcae40392..cf74d7e39f754f760342cf3ca28ea91e1ae8be86 100644 GIT binary patch literal 247589 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 delta 83283 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 v@!VaJ0Jmc|1~e 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 diff --git a/substrate/executor/wasm/Cargo.lock b/substrate/executor/wasm/Cargo.lock index 9d2f6ce2eff55..c1f049b09a6f1 100644 --- a/substrate/executor/wasm/Cargo.lock +++ b/substrate/executor/wasm/Cargo.lock @@ -18,14 +18,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "fixed-hash" -version = "0.1.3" -source = "git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm#8dc457899afdaf968ff7f16140b03d1e37b01d71" +version = "0.2.2" +source = "git+https://github.com/paritytech/parity-common#9bcbfa0f10fee1852791ce07338d664817f69521" + +[[package]] +name = "hashdb" +version = "0.2.1" +source = "git+https://github.com/paritytech/parity-common#9bcbfa0f10fee1852791ce07338d664817f69521" [[package]] name = "nodrop" version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "plain_hasher" +version = "0.2.0" +source = "git+https://github.com/paritytech/parity-common#9bcbfa0f10fee1852791ce07338d664817f69521" +dependencies = [ + "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "proc-macro2" version = "0.4.9" @@ -115,13 +128,15 @@ version = "0.1.0" 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.1.3 (git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm)", + "fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common)", + "hashdb 0.2.1 (git+https://github.com/paritytech/parity-common)", + "plain_hasher 0.2.0 (git+https://github.com/paritytech/parity-common)", "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)", "substrate-codec 0.1.0", "substrate-codec-derive 0.1.0", "substrate-runtime-std 0.1.0", - "uint 0.1.2 (git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm)", + "uint 0.2.2 (git+https://github.com/paritytech/parity-common)", ] [[package]] @@ -166,8 +181,8 @@ dependencies = [ [[package]] name = "uint" -version = "0.1.2" -source = "git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm#8dc457899afdaf968ff7f16140b03d1e37b01d71" +version = "0.2.2" +source = "git+https://github.com/paritytech/parity-common#9bcbfa0f10fee1852791ce07338d664817f69521" dependencies = [ "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -182,8 +197,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a1e964f9e24d588183fcb43503abda40d288c8657dfc27311516ce2f05675aef" "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.1.3 (git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm)" = "" +"checksum fixed-hash 0.2.2 (git+https://github.com/paritytech/parity-common)" = "" +"checksum hashdb 0.2.1 (git+https://github.com/paritytech/parity-common)" = "" "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2" +"checksum plain_hasher 0.2.0 (git+https://github.com/paritytech/parity-common)" = "" "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" @@ -192,5 +209,5 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" "checksum serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)" = "db99f3919e20faa51bb2996057f5031d8685019b5a06139b1ce761da671b8526" "checksum syn 0.14.7 (registry+https://github.com/rust-lang/crates.io-index)" = "e2e13df71f29f9440b50261a5882c86eac334f1badb3134ec26f0de2f1418e44" -"checksum uint 0.1.2 (git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm)" = "" +"checksum uint 0.2.2 (git+https://github.com/paritytech/parity-common)" = "" "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" diff --git a/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm b/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm index dc9795fe746ca97128f7f5c609f753aec272dd2b..ff8dd1188da3fda680d4a51949cdc0db23eac293 100644 GIT binary patch delta 5038 zcmcImU5p!76`rxjKe0W#-fo&~l5H|}9I~4<-kI^(GjKNDV>Uk_iu_t)Vs=a(NUDWW3S>F#n|$RC@{Dxw|B|EDYtnXnX- z6fs}qhr}I%O?B_{;^x=)Rbt{x;X8}J4PUc!OVy6A2}H&4=v`Fab%$jS7Z6*&GMmF z#Mtxk@U;a!5U<(NV>m6^Qn#2;#EY_oqoQ9-DhYg&7Y`Lvw(u~Mo|D1UQcNhMl~i6R zCeO*(SMZ`>Q%OB?C_jIY!O6uKi&D3ch>jMAK6ONhXKQBo32 zo>auH5~~T|Ao}o=FbhO*NhpTjJ#a#S@hKQs2N+Pn05d2_e5CM|gZm}65&q@C0@ts= z_bxL4C%Z}U;P2Ur;jd$&lg|j zE1cSV>*#wT9zQ$wn;2v_m%fkRr}X2}TlrWvd~{ixTT&A6$^QG--w^DqE#;TOZ!Ir| zKgsPqiWi}nW&uhl>00b*C2{8FjT<-K5X_j%$b{$Nhs%rl9%%SL=oZp(1loR2=qkzl ziLI5L>lQP3O|x*Ml*CfZEo7m7F+f@*5oyS6@dAv%y9=NyWsBV+))(bDw)TrT>|~W3 z!kc5^h4h>pXNsOK$Vv_nv*+Y{Z~`x2HKpXD@X83U#BScEH9yrF>{bgg%aXfNo6JV% zvZ$A>RRRzrEHjWPxf(c1C|S^!Wn9527Ez$-+OdX! zVCL=wbB~f^Fta?Zvj~^W!UgFqn6ru;Q6vLkfHxq`DRP8!Hp0o=E}%eIc(Yq@;aO$} zT2$qfRf)3-mb!|JbW}3-UPjuU3v!$Ve`+qx?#jC(k_@)uq0H>QDP%cYE^A!uW1|d} z7)Qif4NG;z2@9#4my2mTI4=tz2kC>T@)q|>F@I+9xfkWMl0PFo`y$#>a0xFsf%FCg zNjavZ0y~}GD`a=w6l~sD;C#A}W`x^$W~<0`r|g6eX3~XJ9H@{|65C@|Q+UEK7xD{S zh{}uPII46}drA9gkRwn1D%(4G}GQHfyH~EVUIWqAD5w@YLbsXi?o_supWU z3}m22@>yGw@ML`yXjw`B?bLjLIKd3>3{bHFBZ@m5DSRq zTn>G>z!KhG;#RWZyDNpKZnL#y#ush@*==kAFfhZX8s$tb8%+_8o zz;icY|26WA#U*m`HaCWhdkpd@S95HoWEcaW1q>APrhu-*#sCtKrzXoDZ1Y!EY6*58 znW5w{NYM52vn;N`|3BrC@zZ}H)0D@*9iAd_OrY?~+BL@XFJZLLlSa<<}BU9&~&hH{ph{|I}ezfmsR{f#JI ztnmGfAy{>xMQ>>aj8-VAo2{zr70MAcgQ4FUpm+khKBNws4v44hf@67=x~mx#LnEfC zlHvp7No(x0+HN`nmzPWQIM-+IjRxh#nrgMIx~^48)zVa#9DRm^-d2H@w%YMK zYjj*Lv(^xxH4Ct_5E=PtVZ+99us!j`at{TKNDmo>l zJ3@bK;twaNjNv30x0|gEpA$}8TGgsl^;}gqtL8EDHUMZ8k>}gj$89*>LZm#?Lz_X0 zS8MJku78ZvJA4lA*6Fj98IPO>3!M43)pF2`bw{^z8pMqr>u4ceRN~LT)x=%2Tbjg z%=w4_bQqRx8X=BLbd6LsP4#NpiMx%MsZkVzCogaq(<#I!(5>-v%PPhh z?Yo%IgVpA=fwgPIq7~CXk!iZC8v6Y?pTb?2_yom#YL36{oVVpjL|2EHHzOMOlTm*q z!;kUqre56Qo5>oD?VXREbUM}10+IVI%ot16wSAHGLEq&eBE2Rzq0e$TpZNhF`W2Z= zwx+(Z;}v7SI?s1^&;8ngNca(h-;6kzPJT<@?GRn3&IHXQ+78xv*CA%5>Q+%aEwp^o zwCbPwZ6wN6K|+WHGaMpwrV?B{N8iAI#guenBg{|5Ed&rkpW delta 2498 zcmbVNU1%It6ux)FQ_eXZ#ck|eaBw``F-5{D$UmE3Q$VG~WuA(?C{Hpx|n@Vb<)xwdZIQqQ^tX}<2g zv2=3%gk}9{nJXK%cin^9c~J>+wUcL(+!^JNqvb;8A+#iKrjdDCOtW=L0Zh{pX@$H* zWd4+L$tS!JK9aY)k@OByC6SR87VgsJ?LIlF$HwJTc1VK!NlSoQ%gM>Z5+=~hDkRzN zlbe$@DTMW0`9lnIet2}+NkrJ})bl*7T?G8kexMXZXU zjScCUr#Jp=erXIvqoCZMlO!t{T~b3ArMzS=_kS;?IX>`PR3%@@$PTqgtLD_;sB*Og z4$08SHD3*m_#KI)$W)j+gK2;oi4@TBt+%nw=~!vSJm1(kk|D~sB7dUDpwqOTOPTh? z4xOaRiL`XOLXTf&1`2n8qZ{O@(NGxSuZEdT!P!K=Yf1SE2bf}%AWj<^TIoe5m^I6o_g+*l5 zDV70MC#_j>J0}(w7q5!8HAhvdpc2>{tW;yUCKW#5QAN88dCDcfEAliVFI6_U>)RqH zm26&F=_t=?c#T*=C~(u7OXJd$`66211$~7g;H#Fq;5a6K7s~8wnP*tfs5-9~vMRpB zRD~{M)+MY{%4T=7DL#QmGNpPb0c@PYFD`{qg)pFn`@AO0Ub}1E!p!piPi{SM=kN(M zva)g!s>D)*jp9ip(xn8s4Jj%~)mfB?lWXfKA-Z5c#OzarOvF?_sO{ZIL!JAwO7$5P zQOx`UFso7k{sHrkD1h2P7E&ja5UGLFpkNb})Duu=JZV5lS}m3(v}hHy?nAIiV7nh$ zF)|8hK0`zJvNW7UqDAzz!4~6Dyx0^#0t000(!0>`HbF9iTb8em$vjaJSzMxF1 z>ApNu6z)Wj4OgHP zFr^}em;gyeU1q_>)$=7@1i_?WsTXMGpx&Z?Vy0YUPXXv_h==bOWVR#P2#%cQTI>`^ zA^#xC{$f&m&+Ma5APYKi{E5k8=z2va=e{?*MA ztr-|kZNMcWj-(s@Q5z@ zU=6n7x<|U1JTlU<=d+%+aDWWuhiD5qmn|!b*HTE>4>Kl>3(A$FEoe`^F9&KD2*q;qak1kIo%A VHg@drk%LF)UweK3(w)gm@?TTqe6#=n diff --git a/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.wasm b/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.wasm index a541c157f8a5b829c931a442ec735c4201ebe5a0..1ec3b71e614c91f6a6f4ef7ef0541bafea1adb2f 100755 GIT binary patch literal 54587 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 delta 2522 zcmbVOU1%Le6rS0?yLazSb`#S!e{Iihq`kMTP14ldYEV1Z#x}NSE8>$#)l}-1(%42S zqTGn3_CZt_`=X%u6et!8*9XNPswgN{6x2td2tpqO1wnlDJF|%tjKn6+Y0p}YTY}>Fg`uU;GX76mGlxUs3_~Q@nT>0$v_uJ;u z4Nn=hsxiHZBncfB4OgU_lNw3wq}SS9*hJm&NTyrtBDu^^`&3H5ZT7G0?U+?_((LN} zvQt?z?l^xq=C*a)+Wryk-Kzxo+ADHN{|yJa0-CxbvI+&M z$ipe+Q%LwAOj59SFkLf1l~l$~&AQ7LmxttK0UH;0xiu0LPB;R&HN1iX3}Hf^d4(j~ zL-Gr9CWLTymJebWTEA(Jmx|1%fRXr9Dj)`c&ZXTUdzcU z=JUbH;RXl~$?O@t-^&X7 zCUa;0E=FGu*9{H7ZAVzudHlx95j`Z*N$)W7E(u<%Z;(IQ4}jI^q((W z6uPFpl)uG=Y`O=@uRCD|s_RagRkW9dW>odIu~6jIDOL_uCmbwmokETmMbnv~ zDpgQCtc{imxLC#tZwRQO{kbAzm0S@;7E_QZ7nJDBq9B!ST^i}Q$h+_vv*@6Sx-*j{ zr6)6?`r8Uc!<3f0;WeRfH)IiNS>zZ`t8O08W3WQG=hhOqB8XqsWYA|qBN`8VF@i>39WrSY_i056*POqSZE%HkPtXKj0TRaKp~<;dvgW3IHtTgKIh?L zChJ1p%Z>_rCO}vfZX0IW3VFrR0GCw;T0-cy1;9gqj&NkisnB2j0)U|wOf79K805rO>4_6q1*`qaK0r~nj>&zS&8yGD`fkU!~ zDk_Q7nwDr&Y~c+mj&Xoz+@`v2<45MT(aZ%3^YQ4w?JFYo0Sj)l#my>;YqfM0E**3x zOY!gDXz@ETtH-t^D-h)&F!i^A*2;YaHv2CCta9!kq~XryJx$>O8LA9zTGf`FDePyd z7p#X~sE2P6n Date: Tue, 14 Aug 2018 15:17:42 +0200 Subject: [PATCH 90/97] fixup lockfile --- Cargo.lock | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index aa26655ff431f..1e6879efd2a81 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2237,7 +2237,6 @@ dependencies = [ "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2897,7 +2896,7 @@ dependencies = [ "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", "unsigned-varint 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3806,7 +3805,7 @@ name = "unsigned-varint" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] From 2325dc8462360a5dd49bb653c6840f60a35b7cfb Mon Sep 17 00:00:00 2001 From: David Palm Date: Tue, 14 Aug 2018 16:31:53 +0200 Subject: [PATCH 91/97] Fix outstanding issue using concrete types (thanks @gnunicorn) --- .../release/polkadot_runtime.compact.wasm | Bin 247589 -> 251742 bytes .../release/polkadot_runtime.wasm | Bin 324709 -> 328856 bytes substrate/client/src/light/call_executor.rs | 18 +++++++----------- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm b/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm index cf74d7e39f754f760342cf3ca28ea91e1ae8be86..471b151284c52a32e5cc36fe789c7a261d45a6a7 100644 GIT binary patch delta 82665 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 )l<8W@g9;odGG$>=L6Hbf7eToRb7 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 l!?42gXe({J7;B}C(C?x RemoteCallExecutor { } } -impl CallExecutor for RemoteCallExecutor +impl CallExecutor for RemoteCallExecutor where Block: BlockT, B: ChainBackend, F: Fetcher, - H: Hasher, - H::Out: Ord + Encodable, - C: NodeCodec, { type Error = ClientError; @@ -79,15 +77,13 @@ impl CallExecutor for RemoteCallExecutor } fn runtime_version(&self, id: &BlockId) -> ClientResult { - // let call_result = self.call(id, "version", &[])?; - // RuntimeVersion::decode(&mut call_result.return_data.as_slice()) - // .ok_or_else(|| ClientErrorKind::VersionInvalid.into()) - // TODO: - Err(ClientErrorKind::VersionInvalid.into()) + let call_result = self.call(id, "version", &[])?; + RuntimeVersion::decode(&mut call_result.return_data.as_slice()) + .ok_or_else(|| ClientErrorKind::VersionInvalid.into()) } fn call_at_state< - S: StateBackend, + S: StateBackend, FF: FnOnce(Result, Self::Error>, Result, Self::Error>) -> Result, Self::Error> >(&self, _state: &S, @@ -99,7 +95,7 @@ impl CallExecutor for RemoteCallExecutor Err(ClientErrorKind::NotAvailableOnLightClient.into()) } - fn prove_at_state>( + fn prove_at_state>( &self, _state: S, _changes: &mut OverlayedChanges, From 68665b33c8ee08edb83065f46dcc004bd1056b95 Mon Sep 17 00:00:00 2001 From: David Palm Date: Tue, 14 Aug 2018 16:51:14 +0200 Subject: [PATCH 92/97] Cleanup --- substrate/primitives/Cargo.toml | 2 +- substrate/primitives/src/lib.rs | 3 +- substrate/primitives/src/rlp_codec.rs | 105 ++------------------------ 3 files changed, 9 insertions(+), 101 deletions(-) diff --git a/substrate/primitives/Cargo.toml b/substrate/primitives/Cargo.toml index e3579e8c67708..9e2a882846e3b 100644 --- a/substrate/primitives/Cargo.toml +++ b/substrate/primitives/Cargo.toml @@ -22,8 +22,8 @@ hashdb = { git = "https://github.com/paritytech/parity-common", default_features patricia-trie = { git = "https://github.com/paritytech/parity-common", optional = true } plain_hasher = { git = "https://github.com/paritytech/parity-common", default_features = false } -# TODO: use a feature to switch here? blake2-rfc = { version = "0.2.18", optional = true } +# Switch back to Blake after PoC-3 is out and remove this tiny-keccak = { version = "1.4", optional = true } [dev-dependencies] diff --git a/substrate/primitives/src/lib.rs b/substrate/primitives/src/lib.rs index ab68c85ef07f7..7a7e211b7b35e 100644 --- a/substrate/primitives/src/lib.rs +++ b/substrate/primitives/src/lib.rs @@ -43,7 +43,7 @@ extern crate twox_hash; #[cfg(feature = "std")] extern crate blake2_rfc; - +// Switch back to Blake after PoC-3 is out #[cfg(feature = "std")] extern crate tiny_keccak; @@ -108,6 +108,7 @@ pub use self::hash::{H160, H256, H512}; pub use self::uint::U256; pub use authority_id::AuthorityId; +// Switch back to Blake after PoC-3 is out pub use self::hasher::blake::BlakeHasher; pub use self::hasher::keccak::KeccakHasher; diff --git a/substrate/primitives/src/rlp_codec.rs b/substrate/primitives/src/rlp_codec.rs index cf3e57605ecab..917d81145c36b 100644 --- a/substrate/primitives/src/rlp_codec.rs +++ b/substrate/primitives/src/rlp_codec.rs @@ -29,108 +29,15 @@ use KeccakHasher; /// Concrete implementation of a `NodeCodec` with Rlp encoding, generic over the `Hasher` pub struct RlpNodeCodec {mark: PhantomData} -// /// Convenience type for a Blake2b/Rlp flavoured NodeCodec -// pub type RlpCodecBlake = RlpNodeCodec; - /// Convenience type for a Keccak/Rlp flavoured NodeCodec -pub type RlpCodecKeccak = RlpNodeCodec; - -/// Convenience type for a Blake2b/Rlp flavoured NodeCodec -pub type RlpCodec = RlpCodecKeccak; - -impl NodeCodec for RlpNodeCodec { - 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]) -> ::core::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() == BlakeHasher::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() - } -} +pub type RlpCodec = RlpNodeCodec; +// When switching to Blake2, use this instead: +// pub type RlpCodec = RlpNodeCodec; -impl NodeCodec for RlpNodeCodec { +impl NodeCodec for RlpCodec { type Error = DecoderError; + // When switching to Blake2, use this null node + // 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] ); const HASHED_NULL_NODE : H256 = H256( [0x56, 0xe8, 0x1f, 0x17, 0x1b, 0xcc, 0x55, 0xa6, 0xff, 0x83, 0x45, 0xe6, 0x92, 0xc0, 0xf8, 0x6e, 0x5b, 0x48, 0xe0, 0x1b, 0x99, 0x6c, 0xad, 0xc0, 0x01, 0x62, 0x2f, 0xb5, 0xe3, 0x63, 0xb4, 0x21] ); fn decode(data: &[u8]) -> ::std::result::Result { let r = Rlp::new(data); From 41072ebd10bd293f749b76f78c4eb7806645d029 Mon Sep 17 00:00:00 2001 From: David Palm Date: Tue, 14 Aug 2018 16:53:00 +0200 Subject: [PATCH 93/97] More cleanup --- substrate/primitives/src/lib.rs | 2 +- substrate/primitives/src/rlp_codec.rs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/substrate/primitives/src/lib.rs b/substrate/primitives/src/lib.rs index 7a7e211b7b35e..07f658dd8ae9d 100644 --- a/substrate/primitives/src/lib.rs +++ b/substrate/primitives/src/lib.rs @@ -109,7 +109,7 @@ pub use self::uint::U256; pub use authority_id::AuthorityId; // Switch back to Blake after PoC-3 is out -pub use self::hasher::blake::BlakeHasher; +// pub use self::hasher::blake::BlakeHasher; pub use self::hasher::keccak::KeccakHasher; #[cfg(feature = "std")] diff --git a/substrate/primitives/src/rlp_codec.rs b/substrate/primitives/src/rlp_codec.rs index 917d81145c36b..5a779cb738dee 100644 --- a/substrate/primitives/src/rlp_codec.rs +++ b/substrate/primitives/src/rlp_codec.rs @@ -23,7 +23,8 @@ use core::marker::PhantomData; use patricia_trie::{NibbleSlice, NodeCodec, node::Node, ChildReference}; use hash::H256; -use BlakeHasher; +// When switching to Blake2, use this instead: +// use BlakeHasher; use KeccakHasher; /// Concrete implementation of a `NodeCodec` with Rlp encoding, generic over the `Hasher` From 58d919d238f552a330f21db83066a00d673df224 Mon Sep 17 00:00:00 2001 From: David Palm Date: Tue, 14 Aug 2018 16:56:15 +0200 Subject: [PATCH 94/97] Comment out Blake2 Hasher --- substrate/primitives/src/hasher.rs | 57 +++++++++++++++--------------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/substrate/primitives/src/hasher.rs b/substrate/primitives/src/hasher.rs index a93e391a6ce2a..6096540aa347d 100644 --- a/substrate/primitives/src/hasher.rs +++ b/substrate/primitives/src/hasher.rs @@ -20,37 +20,38 @@ use hashdb::Hasher; use plain_hasher::PlainHasher; use hash::H256; -pub mod blake { - use super::{Hasher, PlainHasher, H256}; - #[cfg(feature = "std")] - use hashing::blake2_256; +// Use this when switching to Blake2 after PoC-3 +// pub mod blake { +// use super::{Hasher, PlainHasher, H256}; +// #[cfg(feature = "std")] +// use hashing::blake2_256; - #[cfg(not(feature = "std"))] - extern "C" { - fn ext_blake2_256(data: *const u8, len: u32, out: *mut u8); - } - #[cfg(not(feature = "std"))] - fn blake2_256(data: &[u8]) -> [u8; 32] { - let mut result: [u8; 32] = Default::default(); - unsafe { - ext_blake2_256(data.as_ptr(), data.len() as u32, result.as_mut_ptr()); - } - result - } +// #[cfg(not(feature = "std"))] +// extern "C" { +// fn ext_blake2_256(data: *const u8, len: u32, out: *mut u8); +// } +// #[cfg(not(feature = "std"))] +// fn blake2_256(data: &[u8]) -> [u8; 32] { +// let mut result: [u8; 32] = Default::default(); +// unsafe { +// ext_blake2_256(data.as_ptr(), data.len() as u32, result.as_mut_ptr()); +// } +// result +// } - /// Concrete implementation of Hasher using Blake2b 256-bit hashes - #[derive(Debug)] - pub struct BlakeHasher; +// /// Concrete implementation of Hasher using Blake2b 256-bit hashes +// #[derive(Debug)] +// pub struct BlakeHasher; - impl Hasher for BlakeHasher { - type Out = H256; - type StdHasher = PlainHasher; - const LENGTH:usize = 32; - fn hash(x: &[u8]) -> Self::Out { - blake2_256(x).into() - } - } -} +// impl Hasher for BlakeHasher { +// type Out = H256; +// type StdHasher = PlainHasher; +// const LENGTH:usize = 32; +// fn hash(x: &[u8]) -> Self::Out { +// blake2_256(x).into() +// } +// } +// } pub mod keccak { use super::{Hasher, PlainHasher, H256}; From 38f489540af58599f8d9e74bb74197eb40f7bb1a Mon Sep 17 00:00:00 2001 From: David Palm Date: Tue, 14 Aug 2018 17:23:14 +0200 Subject: [PATCH 95/97] implement ext_keccak256 --- Cargo.lock | 1 + .../release/polkadot_runtime.compact.wasm | Bin 251742 -> 251742 bytes .../release/polkadot_runtime.wasm | Bin 328856 -> 328859 bytes substrate/executor/Cargo.toml | 1 + substrate/executor/src/lib.rs | 1 + substrate/executor/src/wasm_executor.rs | 10 ++++++++++ .../release/runtime_test.compact.wasm | Bin 17022 -> 17022 bytes .../release/runtime_test.wasm | Bin 54587 -> 54587 bytes substrate/runtime-io/with_std.rs | 3 ++- 9 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 1e6879efd2a81..48570c6a4b793 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2794,6 +2794,7 @@ dependencies = [ "substrate-runtime-version 0.1.0", "substrate-serializer 0.1.0", "substrate-state-machine 0.1.0", + "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "triehash 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "wabt 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm b/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm index 471b151284c52a32e5cc36fe789c7a261d45a6a7..8e1771edf57bfe12c695406aa9696b85f26f7e29 100644 GIT binary patch delta 14847 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 delta 19246 zcmbV!33wDm)BjY@WOHneO-O)*YZFL9xRP)aM6zBrS8xdp zgg_2%fq(&qn;@w8s(^}ufXJb8D3@|6y!!w3?9OI`_&wkEAD+%kRaaM6S65Y6_smi_ zCvfSUz^w`FS$B6g=4LedGCw!P&7FDrnfy#%%#HcGF)`Vec z8A+q0#pIWmnVB{r!8$%CDY;Si$bXXES~BA z-QxIml4N$Xc%)jS#?r;b6^RAC1x@*qY^Z?G+si_1&+_Z+r^U7=OGD^XMYpB(h$h*R zm$h}9;2{OInqSHs7t9NGENEl2&-0T|CA499J^YaCRG7n{39C7O1>dG8>gyr32{uiqA`% zG8$xixH^}n+0xg%#XjC-ySb(X+xxz){@M=g(x!?5Ykg$H+pEyt-BxdNb7nbhE8H-R zm94VX-`Eq}Mr@o+V=I2zIG$*NZOEnZ!d(l#HXoQh|*1W|)~_9kJW?t)5Co4qa6-KT?hoYBIIZJFh* z3|nlLTRZVl-lCARsCPQ8AQ%#w;osd$|{gjG!+eQ;*+17q=0E)F% z)FC!wQ^nic!!S!cw1@@TcJDYKrZYy3s=sSjrPP*fB{Z*`Egt*eiM3^~<92$7t#YTi zkBddj);;Wm{xDT{mVC6<{L+Qo%xN@%ce7Vb~YX1=@b8d<`0_ zh(GjapgMUb6~TUa$Q(M%J}lrr%%L!Lw1CU+5=>N`@GcD@!-)bR057hfM%*-q;OE>p zk0vm6sXB8WO(oIr>_U6PzZU{=norHAvmR#Z<|A9a;XHpK^?EwdW$(*NDzA#jNauGG-x0ch(G@ExWq}ttGf~$vxOf?Z?eI0j~Dif*cTi0pznJQP_4;x;sjn&I zTvPb`t#kpkRYtI78(E&vhY&hKpH!E5F4k9n1XayKFe@EDpmvnNvp=9IdT*?%H>#jx zdT&2gP!i@*?X{iy>e3FNq5RJs^Z{;(HmYqX6ZRia%`Y(EWze9ySf%Ssn9S5YR9`n4 zxyoe9_fRYiRxj?M*@z)(>V8@z!m=ry0#(yNYOezvKp(!jl9uW6R;{?a-yxbwgZcSG z)DSoJA$8)j`cnrQ#t-$U25fpEzto@J1l#xlWTUhEJdodVe7=lfGB9yEWYQhfo|A4UDxnL<8p6g3C>iTO9AQC;?Rp_uGZY$LE5pwuy*n;+3fM0 zBvM7vZk97bJMLyOd71gv(GaeywWsS9sL$vqJR-*)|l;*!~D%PkO0BOM)Jg|)XqP}f%g#iO4*dk zH%z4%laBV($br2!75+7X2Teo#O5r`G(OY>{9%~74hFWy3ZGKFVSespZ>HqTR!q}zR zF2r@SCnWD?=Uh|wKWD&?v3Qtj@=hO86#HVkZF6N*wd{>Q`jDDq$HAK%)k8J2J%_dRviKJY?=hH|A~9M|23Wrqjnz zJ&oc6KA|omimd#EO5mFDN2#}12o@f#N^@LthYycxp|8WISe4P~j!zN46VzLu($N4K z&Uc-oC>pL_I!7bjc*%6?#=b1!SEs|RzbWBZLu&H+?@&1({5Ew9`?4gyt#C6DfEf}v zLu!~TY)G*vTAW3T!*3&*JXOMdr&BHVT?vnzPSF@Zzv&e3p(~sByhPsusg1kUW!gk( z{K91Nh{qDnwN^_h;(ojGw&mujIq;UZLOZyps8g z*Qh%yTEQ1z(^grH|G4W2SRbt5$F9?tcDjxA(;zXjK#al-E-PaI;%2fqG~eku)i($d z%V|FES6WO%c<2rKLukD2O}gkJSsy;^7F}~eEOd-PED-hXV6`8@zq~`gqDR>hliEn~ zt7fT=s9(U7!pXwESi#qZ(;Ie6;{Fk2rA$6Pg5qcl-yT8fxHXET;q2i%>byw$uUORI zZGzmczKi8v&@&Q!LBWK7)s#9?I`?fxohggI+zeUAS*@!m-lr#dU<;~VX+|}OvialY zG@e~r!N;~h4vFC|YXJjaSR~|f67vTwXfj(;9jUI5rpay?ba)%Pm6f!io-obpZJ_lW zzP~Nz?KBT+M|auXLf)b$h4JIz)W~*XS${9HWXXs9K-*#i#6M|INtCNL>pZ+0G0IQi#uQ zJx?FeICaMhlu7p2J#VU!x8Byr@2}V>{v+?=Y2v-=L<9 zU){iB*vS<QoQvTAsJ1PYSwPnRU}jD9`>~eT{!VcQ8%hA zo6z27&W+&RcC%=HZ!ZfM23dC>>kNj2_pvF&ii-Hz{j3Y{s`&uRSA;o>Jf45{A&XXT zuVL;)SJdvK*f4QGrA6rd=`2fh6Pv;A!Dt(2vRV9xG8Vfxn{EK(!1$~z6$#!$;)@C(o z1}s#q?9L98VA|m&)}4RWlhvX_XBe!Uf|?_u)o=3}tjC{cs&QXa9NOL*ENc>cb7T6o8CVl@AP zSTo-FAsKk{`_$0U9LIF(jQa>}Y}Y!$4lw`m0c~+qNAdj+v2Ffk9slwn^T2X$$ItjA2dr75`x6A&r12qM_BR7OZh;? zLipd0$iu&)v>KZorGiZjUd)(*$3DgebbqNX)5FI!vEk0u@Ov*ya3~T6A209L=*+&T z$l`XCEEsmdf04^*2dJ(iZu}Q@6@6>cKegM9bewN}Ku!KdWmo=2UVXES`^U1Vf)=o_ z(*@5kD?6~Jpp5nUA2=i4Om-3HS$3zC`!M!`LlI%R4vY>}y69jO+Ih%|kr}cBQ5xGa(-gQ!LcOr=@o*f#nxv7RPov z6^gT+DKuI=rm(@}&~p^;YheE9RokIYGO$tXpl%du9e0){0)%F&D?Hdz_BL^U0}FQH zIo*@xV)^^SlSMjNzTj1jWo>ni7u-8)KgNV~R<_(0CsX3!^)3#{qQt{(LP(D?TI`XK zZwq5JM5y@7$bwU=VwP(f`gCm7x{R*$vwP^*Z8#(mx zHNp_1czz3}aH9_kb^5kJvdVW|M2fqjta48~&%1^8g$lzeD_3 z09(cOtyME>u;<7l*-{fW`SCh+cOYvn1M~xUZk>9w77O!YGf4FhV~jlamQ_k-uR5U$ z_kUKd$2&AcFomZ=p*4AWLl$P2$jWAw@rMmrBX&h|GZBgKGUIL9&rPum?*_O>IP1ga zt>y#6Sv&T)jN8K5^QIy&M@*;>>-RQVPt+2gu?KmHOqCH zxb6U0j*m5CSI~#2ThwH9Gl6s8(CEPQo?rxBhq6c%}{e&O;wGFX_N)@R+vDgXPcUac$WmG5ue(WfA)H z>z?(WQdMb(_ags8yoPzi@Zb*Y5l+~Gve;&1dWW;1k}fC9wLDf9TN$xq@k|XS&ot`N$hlFGYF1~moV*9&9doT;@gUG{QYeXdmf_>&1E@;Q(K@ZFYY@V zW@tIhKh0$$(P7K6Y$>t#w(`%%v3fO}DWaz{VyTbEu~&&*+`{`zVDf%{!7qL&v`Ac&k(3jmFMb;1}P&&Mjff2-PK0qaQY`*QxyLUuymV?e!)_*?nN?i?PlF`q3EOyU-4 zOw=KZ*hOL(Z@i7wATi$87qh!8cn*osiy3Up+G9-;@mIW-n?pQ-!xJ#vANW(Hd}A5o ze8W;UUZ||$vMQCi%n@joVzIcjjQuH8^2>5WMX1E95Nio+C9;rh6N&VhLN-_QG-5?n zPi|HESiXYI6xLM47GjZ9KPX~}`aIMORowr!&F-_Kjd?w-tWZ z)-&u(?X4=V{jyujixYz>+BWBQpzX?yFr-VUjr2!?$F!}Dgfk3npWfx>CzMcOywzLF z&>d~svO_wzJGTchEVZ`Yzqje2M?@T@?Rtv%Q-#)<*-Jlb(~sKl)_Cvlp+PRK&CZiQ z+nwKg+Z7e*Q(dsxKSfm(-Ss5eWvhf1_uXqQ=zh6}R}>Y!?&JM5py3bVJdYziwYZyR zk!}5hmO^*u9*846!^5|+lsFW*=iy~ax2^o69*wKm_s2mu<9|1xk)KJi9Nkbc^Y3#W zUK3foxsFJKYS?bv5Sh5Hu88VVb-5X@GEZu0(ARCrGL>n`QLz2IH>CQy9a6P!C;L$x z)@^l_AJtM`aLFk(YprjtDfET|SZxcZ-(AyC7X`Ys#u`n5bi7KQ+ma?vh&_++t1ge9 zQ=Xkc6e8Cm+Hv~QfC{G7AL+ilNO|Y zHDfn~IN=$Jlc3XTawvHT*W{UDIJ(K@Y8Z_W@zvZAKyUGsMzkHb2H`km z`R@kaIh-2uif$|c9co*S$nI>Rb0g0$^hA>OVY%4xHv`ERI;d$CWe9d#fcq`t_o zwFM#K!JF!!6n35Xh!QN2+GjoIs~8S_UG8spQvSv3a)F4h$$jOa7{Et;Wj8X|=g&6t z5(1Fz%q7lGz9A0=7o1qcQa(@WC(m{=Q|G-Rf6M4ATgPuZ2H8JMFfG6iMl#JLQ-))p1^&F5Q9KCyLvcdj&jIHvA2DYZB>jK&H^k5yi z=)0!2Z%)TJj;L%yPKDW;e`f?uhwolxYqs0wf7h+W_ggjhT0lMqk*!^Qir=r-zq3I6 z`un>E_=KjxnHX^Cb7rhzpE&IE2WuRo+8&-6E6&*M!WEyLY6k*sZO?UN`?lM%&vnLe zoNfC#Oa}&&YdERBlduUfXMNw%KCTwF-@cErkGqBK)$@%h(RTAxZG-*w1xTZi=u{jz z-w1KN;@S^ikY9>fYRpVwirEiaR#U3&ql@OC5q2EYaArxIh?qv&{=C@I(>YvQ>q}Hl zgx!>diBJ5DS%Ob%AJ~X!V1^GW2nP7T!puws{N!is2Ydjd?)aSfde*bkc{u32LATWa zIxNd3PPRn1+PwG(Q`E=bumjMCy7v@2#L$|*bp}UaIK|s=hMgOR&m?Acl3P5b(_&Ap zQ}v5Z@@qs~4eczaDx&@TE^Y~`AZ#$MpU9DJi*6XiPD;*Di z2Qc3}_Etj)yZljMtdV4bEDHzA!929T90vgh_m{7Vfp;4y*Owd5qfisNor=wDl{CdT zAJC-1=VQ7wbKjKL%FU{z(azSY1VNUj?d{F_S0r%sHxp%K1!{hxoFX)&KC&WD_j0~e zGxLNEtft9~yj?c{?VZHyDe^eilT{eN=@hx+|EghobyBL_rP>D{h*qDClD7uYDn5Cd z+yJ)~)8uICuYNvFu0?rMy-ZTDBuT}%hvEJaNjP1TBwoiPHN@T1$0T*ZeGCe!q!ZpI zsRQmheF(GD7XvTahkHnp7w(tPzA^4kw#SQjt^H8kL7yk-3~u|{88ih0Uo_MO=wUKR z-2jUs1kf4(8-AXHzK4Te=ks)Yo+J$mw2v^;(I6hM>qvB17i?&deFQPM3p#xOCcr|I zI$qbLF7T8690q+X`j_tF!5{YnC^CvJv5pth;X3kv!~54VN!>wP*FmrIc@m#o+axsw z%|hJsgj!QjTssyO0^b%zbUY4oX~td0_rbHE9};YmVqEaAIPh(O7jvJAc0MlkuR7{~ z0sj~5_&lwnevXQKG!!b_in~zllPc5&&;`p3u}{TT++C+aANgb8h4DU*;yMr=zZCYT zjifUq6)Mps)(MsYCq`O{dRLp!=TxWDJBY4pk_?~^#JvvgUbqWyxR1h6Dgg^VKSP>^ z0`BENTyY?#0~YhQ3im+V)6u(7;ZVS$!6I;}=K`<8GtK}|udbOXf8^%xot={yXHCx? zosezKkt{zg=1~jeI&5kIKfg+Dz={j_ofX(y;!Cnc3*^8i;%hylhiEe{B`ppqpMXsQ zPRg<-=A>k#Ck(e*wJ*hvFOX}BPsFY)kQ<86!MqpB;o>{6Rtx1u;#;o)3*}bg{pf;) za=pAI9DIBPpLBeXogf5~EaGz~V}L+rS(DNdQ${CbS%)R&fW7!Y(C98|tXYYYMSK@% z2k~vUWI60?m!2^?B|R}GBP%;$ct)0l?;AlF(IqiGJtN2LsI;0>hVv%*5EdT}K9`Td z;sd<2eA!$_e8gz<>6JbfAC4!RQ__>I<0Z=xfo#B!%S-ux^5v-dGnb(v zP^ZpG%o<_M(Hj*n36`9W@=Fz8L)lRZ?zNmNh*mAv-NG zd!%F$UkrgW@A{q`Sa+QOG&N^iv$Mq%W?9E2W+h9O-Gw~oJ=y&H*MdS5GdmMviZ5y$ z>b646i*{z{1wDGN72~>5!iU@B)~v9UudvA>&z9rOg`GN0*wIcWICdDQ#d(Rnc5D{(eZ&bS zW0= zZ0Bm;u0U>JKEB$?Egi%9wh9!(`hGPZTL4jT2)v>IqAgm(_Y@$+99Y9|709*x#U|e_ z%Q!K+c==IliQG=SKIyYWZtcHgtzMm&1k2gCmKQ9MpAqjyzFs0nF}%fo0V%G zZB0(mN0YzNzC>)@XkQ{OY_xk5GTGnCaTP%`Do2`tE${A~{xQ zuvSBH&~5Ze$`~65Wu#<)=S6{m(*ctOec*Wd!7@3b#%!EJ8$AVjtTiVCPP?d_$1In_ zUls?{#sJV}W@IO(nNzaOg1`z+ABq|WCrJOP0F4?4;ZE7$ak7djP(a{-c=d8QCP;jQ zVy8{Y$Vkf=K3uZk*!|jaITnY>yl$Z!VGGF41aS<}Q-CJXLi;sTftW;0rxwe# zqQ7u9#9|AbIKlKZ@DV#9doS7;Zg02S+twYLFuo^upjtt`BOxu>!8?^896#P6T%;{u zRU+452Y2%AC30-d>pMZ{gQeM=Gtz3d{~XNnfIljcBN14*YBgW*%^T%ly03n+QTBAB2K>u% z*-ZD;-^%5_#ttp}OVWAdkCTx&eq0lcGL`7NXgmyfZ^2}u5>4o5E?{>7=P5B~kgcxZ zQ}@bsx*c?&S%PQGaG;&An=yI;#_xm!0Z7qp@mEC?Hvn>XCPn*#brXJJuiPqq>>&G| z&hV`i?e8f`rGO(uk3McOpP}6`M?Lwu1#fb|LPF3>v5mpU1BF&98gcD`c4p*hCl;`S zI9dVoZG753IVA6Tf+U?pF7Dk(l5)*xepHDmN448fN!y&zf0W=d7ue&p6mu8Ddr*u5d3eO$|CddqtRP?0JYUB<3Oe<*u=Pz)Z*{-=kI&{3NNbgE@5C zYJe;3W^CQSgnGVkzg)ldyNTF1qnS?TgdJo~SW|uLAHZn}zqntnleYscA%U}{6Lz$8 z!c{HbM-z-ol4aKFMR2+bI6%OjOq2O{z(OIqFizOP(g}m5ha_pz{K=;ukVoX@50fN} z%GuNjJDNJ-Drsh-i6+foq)BrNFl<+oPH6BkU{}>RVFybm>>`aDA9GNy)3skx^??lo z>^d+f>|o`DtE5ZeCk|qF(;h-FA=Gl#dN_pAVdDn^E5-O?3f2ylq|X3&R(Qma1O6DW zT*zX&xWesO^Z<-l&qzS$ItUTrWh+iMM2GHfu_6NIivcT34%eFwfqX4vW4v zfqbLhx`xJVmrh1)<=`%9Ve(sqJz35bE>L^Bnxz2e(t-y;1A`1wPAT{yr=8c zM)zV+j|7O(NCqzr%+`s$w4Nse#1xBKF4}O#%8$u5NjdV^5!c2OtfN=;!40o#*uvrppN?81m7q z2{+%AgBw^tq%rHDVY>npqhcL3@FlhXP1!3n@6|VP5R8(8vIwOVWfO{iH69{Kol%}g z8G$k$}UDECkbT<|N96PBTfbn#0R{fZkPNpGOUBYoRC5Fz&z9_}C!)UPai zg@zyGf)~l;Oq602kx1&-Z7_R)BJx4ObQ{W16#aT(s3c{etVJ1QtkOOjrjCrKh% z69m;Os^epZ=?(sO`0#(Bcg2qs{pR71Nb77U`c;f)k)4U8tXq*_$TS|{*6%NHgPC}Pz2*+D1vcY2jeAAF#i9f&yzZX zseXx$L?$Q_#9|k`4>}7%i9l)L((xobPeqxFGS3D78no6QB?%?jMT18{^971XKTc}& zn16Bov%-$AnGB;s$w8TbqF*9$*oh)?fU7R}=;4yo1?5c?v3%>-Ts$v8S&FjK1>dqR zT*EXNqY$n$RFcH@(RVS*GcI)f@H`4-EQ$@K2xT3LzmgFyb2nZEO4yX~tLT@jzu13l~e?8Wa)a zccbW6HN2WoOZkl4dZK>68Xc^3q)uPq`CF8;DCbf1OFUmd`58sTRQ=L%zXErUuM1J8 z`?Nt=?11ttiiNkUqjU@xu{j7Jq1hM|aTjwe?o&`ixE-zXI?5DZ`d$rcq8uUY!Ot{R zdSMUVsG0IEqn2uU3nh&qH>(?~T&3%(TTA7%8n$aV64hzfl?KFy^|ezyb6dgh zVqSFu_4wA?NHaS5AK_!AtHbMt=NP#f;yKqH+*ReYqOmi#PjK31y@HA@9{YK&K6UQiAy3FuKt% zKZ#!Xn-ap(UwIOJ>o=t?W$-)Kl!YvFfZlNoKlvD18#9JayR6jWnSUr|9`u(Iho9kT z`u*&`&~G+>50n&ns>33} ze^fEXPr9I*W%!kt zy`LZcL_hPWe^r~en41SbL2k9>`A^XOq}Hw5#>NhBJ-pQd8d$A$01v+g zrVF1yhv9>jSr~hB-jdt~iEmb{SCyO=?~(ghoZ;fVnT=fk+o{F>{9mUEXr0!+, this.memory.set(out, &result).map_err(|_| UserError("Invalid attempt to set result in ext_blake2_256"))?; Ok(()) }, + ext_keccak256(data: *const u8, len: u32, out: *mut u8) => { + let result = if len == 0 { + keccak256(&[0u8; 0]) + } else { + keccak256(&this.memory.get(data, len as usize).map_err(|_| UserError("Invalid attempt to get data in ext_keccak256"))?) + }; + this.memory.set(out, &result).map_err(|_| UserError("Invalid attempt to set result in ext_keccak256"))?; + Ok(()) + }, ext_ed25519_verify(msg_data: *const u8, msg_len: u32, sig_data: *const u8, pubkey_data: *const u8) -> u32 => { let mut sig = [0u8; 64]; this.memory.get_into(sig_data, &mut sig[..]).map_err(|_| UserError("Invalid attempt to get signature in ext_ed25519_verify"))?; diff --git a/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm b/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm index ff8dd1188da3fda680d4a51949cdc0db23eac293..ad7e8d7ad171d1d3b1672d794a0773b6970186da 100644 GIT binary patch delta 127 zcmey@!uYR+af1{S6C2}Z8K#qxle1(4G@6;2S?d|=nCg`o91XISSX3AkSRCKCA7F4~ z7SI4PC9)J46_^AxHuK8FGH%`_dyQLAQ-RfyBg^pzND;Rqi-6|lg_>(cS-s;`d_pES d+K5cPVsFf-IoZ!Xhe^wPvW%U|W?hFsCIEMZ8K#qx8qLhito4j_O!dkPjt1FEEGi5NEROHn4=^|~3upqF z5?Kn23QPi;n`32S87DuL4%oa)_8PaKh61Z2N0#FckV0-p76FaT3pLk@PM&R_!>Bpg T&)$bg%Y3qooyulihd?F(OmZMk diff --git a/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.wasm b/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.wasm index 1ec3b71e614c91f6a6f4ef7ef0541bafea1adb2f..4dd7ec49e42eb71b1ebadc606735e84dd4bd7f60 100755 GIT binary patch delta 121 zcmdnJih1`c<_$qiOl*vsLzsl5Ccl;q&}e36X02zeW2#qXa5TtPVo_mGU~zoket^M| zSwJ7il*m$GRA3U&-`pn?%edKE?i#nCfdZ=|N0#FckRonJ76F6JN?I?MPp-J+!)P#> Y`%(^*q4{L_3lfv{FY<4Gd&!Rp0PL3}LI3~& delta 121 zcmdnJih1`c<_$qiOpI)sLzsl5G@6;2S?d|=nCg`o91XISSX3AkSRCKCA7F4~7BB!Z zC9)J46_^AJHs6zpWt^NQ6R_D@?i#nCz5=TwN0#FckV0-p76JXuN?I?MPmZ{h!)P#> Y`;rfnq4{L_3lfv{FY<4Gd&!Rp0It3x>;M1& diff --git a/substrate/runtime-io/with_std.rs b/substrate/runtime-io/with_std.rs index 44b12e44a16c9..f543b8ae2c893 100644 --- a/substrate/runtime-io/with_std.rs +++ b/substrate/runtime-io/with_std.rs @@ -30,7 +30,8 @@ pub extern crate substrate_codec as codec; pub use primitives::{blake2_256, twox_128, twox_256}; pub use primitives::KeccakHasher; -pub use primitives::BlakeHasher; +// Switch to this after PoC-3 +// pub use primitives::BlakeHasher; pub use substrate_state_machine::{Externalities, TestExternalities}; use primitives::hexdisplay::HexDisplay; use primitives::H256; From 0c19e18c422dad4abd09f0291ffed5ee7cf19d4b Mon Sep 17 00:00:00 2001 From: David Palm Date: Tue, 14 Aug 2018 18:48:23 +0200 Subject: [PATCH 96/97] Address todo: FetchChecker is generic --- substrate/client/src/light/backend.rs | 3 ++- substrate/client/src/light/fetcher.rs | 30 +++++++++++++++++---------- substrate/client/src/light/mod.rs | 6 ++++-- substrate/service/src/components.rs | 6 +++--- substrate/state-machine/src/lib.rs | 1 - 5 files changed, 28 insertions(+), 18 deletions(-) diff --git a/substrate/client/src/light/backend.rs b/substrate/client/src/light/backend.rs index 76f2fd3997e8c..9187566f5b090 100644 --- a/substrate/client/src/light/backend.rs +++ b/substrate/client/src/light/backend.rs @@ -238,6 +238,7 @@ pub mod tests { use light::new_fetch_checker; use light::fetcher::{Fetcher, FetchChecker, RemoteCallRequest}; use super::*; + use primitives::{KeccakHasher, RlpCodec}; pub type OkCallFetcher = Mutex; @@ -270,7 +271,7 @@ pub mod tests { // check remote read proof locally let local_executor = test_client::LocalExecutor::with_heap_pages(8); - let local_checker = new_fetch_checker(local_executor); + let local_checker = new_fetch_checker::<_, KeccakHasher, RlpCodec>(local_executor); let request = RemoteReadRequest { block: remote_block_hash, header: remote_block_header, diff --git a/substrate/client/src/light/fetcher.rs b/substrate/client/src/light/fetcher.rs index 896d4102e75b8..694abeb8f17a5 100644 --- a/substrate/client/src/light/fetcher.rs +++ b/substrate/client/src/light/fetcher.rs @@ -18,9 +18,14 @@ use futures::IntoFuture; -use primitives::{KeccakHasher, RlpCodec, H256}; +use primitives::H256; +use hashdb::Hasher; +use patricia_trie::NodeCodec; +use rlp::Encodable; +use heapsize::HeapSizeOf; use runtime_primitives::traits::{Block as BlockT, Header as HeaderT}; use state_machine::{CodeExecutor, read_proof_check}; +use std::marker::PhantomData; use call_executor::CallResult; use error::{Error as ClientError, Result as ClientResult}; @@ -84,24 +89,29 @@ 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, + executor, _hasher: PhantomData, _codec: PhantomData } } } -impl FetchChecker for LightDataChecker +impl FetchChecker for LightDataChecker where Block: BlockT, - Block::Hash: Into<[u8; 32]>, - E: CodeExecutor, + Block::Hash: Into, + E: CodeExecutor, + H: Hasher, + C: NodeCodec + Sync + Send, + H::Out: Ord + Encodable + HeapSizeOf + From, { fn check_read_proof( &self, @@ -109,8 +119,7 @@ impl FetchChecker for LightDataChecker remote_proof: Vec> ) -> ClientResult>> { let local_state_root = request.header.state_root().clone(); - // TODO: this seems like it could/should use generics - read_proof_check::(H256(local_state_root.into()), remote_proof, &request.key).map_err(Into::into) + read_proof_check::(local_state_root.into(), remote_proof, &request.key).map_err(Into::into) } fn check_execution_proof( @@ -118,7 +127,6 @@ impl FetchChecker for LightDataChecker request: &RemoteCallRequest, remote_proof: Vec> ) -> ClientResult { - // TODO: this seems like it could/should use generics - check_execution_proof::<_, _, KeccakHasher, RlpCodec>(&self.executor, request, remote_proof) + check_execution_proof::<_, _, H, C>(&self.executor, request, remote_proof) } } diff --git a/substrate/client/src/light/mod.rs b/substrate/client/src/light/mod.rs index 103acb7ace008..ba175b14a883d 100644 --- a/substrate/client/src/light/mod.rs +++ b/substrate/client/src/light/mod.rs @@ -34,6 +34,7 @@ use light::blockchain::{Blockchain, Storage as BlockchainStorage}; use light::call_executor::RemoteCallExecutor; use light::fetcher::{Fetcher, LightDataChecker}; use hashdb::Hasher; +use patricia_trie::NodeCodec; /// Create an instance of light client blockchain backend. pub fn new_light_blockchain, F>(storage: S) -> Arc> { @@ -63,12 +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/service/src/components.rs b/substrate/service/src/components.rs index 78daba50c224b..d653168fbbfc5 100644 --- a/substrate/service/src/components.rs +++ b/substrate/service/src/components.rs @@ -28,7 +28,7 @@ use substrate_executor::{NativeExecutor, NativeExecutionDispatch}; use extrinsic_pool::{txpool::Options as ExtrinsicPoolOptions, api::ExtrinsicPool as ExtrinsicPoolApi}; use runtime_primitives::{traits::Block as BlockT, traits::Header as HeaderT, generic::BlockId, BuildStorage}; use config::Configuration; -use primitives::{KeccakHasher, RlpCodec}; +use primitives::{KeccakHasher, RlpCodec, H256}; // Type aliases. // These exist mainly to avoid typing `::Foo` all over the code. @@ -216,7 +216,7 @@ pub struct LightComponents { impl Components for LightComponents where - <::Block as BlockT>::Hash: Into<[u8; 32]>, + <::Block as BlockT>::Hash: Into, { type Factory = Factory; type Executor = LightExecutor; @@ -240,7 +240,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(executor)); + let fetch_checker = Arc::new(client::light::new_fetch_checker::<_, KeccakHasher, RlpCodec>(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/state-machine/src/lib.rs b/substrate/state-machine/src/lib.rs index 735759d3710dc..17ccc412287be 100644 --- a/substrate/state-machine/src/lib.rs +++ b/substrate/state-machine/src/lib.rs @@ -465,7 +465,6 @@ where C: NodeCodec, H::Out: Ord + Encodable + HeapSizeOf { - // let backend = proving_backend::create_proof_check_backend::(root.into(), proof)?; let backend = proving_backend::create_proof_check_backend::(root, proof)?; backend.storage(key).map_err(|e| Box::new(e) as Box) } From a1a5bc1853dba3d18067cc88173a9e2444b4c19b Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Wed, 15 Aug 2018 11:45:01 +0200 Subject: [PATCH 97/97] all tests passing --- demo/executor/src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/demo/executor/src/lib.rs b/demo/executor/src/lib.rs index f379747a9e1db..ed028a5c20165 100644 --- a/demo/executor/src/lib.rs +++ b/demo/executor/src/lib.rs @@ -250,7 +250,7 @@ mod tests { // Blake // hex!("3437bf4b182ab17bb322af5c67e55f6be487a77084ad2b4e27ddac7242e4ad21").into(), // Keccak - hex!("b97d52254fc967bb94bed485de6a738e9fad05decfda3453711677b8becf6d0a").into(), + hex!("c563199c60df7d914262b1775b284870f3a5da2f24b56d2c6288b37c815a6cd9").into(), vec![BareExtrinsic { signed: alice(), index: 0, @@ -266,7 +266,7 @@ mod tests { // Blake // hex!("741fcb660e6fa9f625fbcd993b49f6c1cc4040f5e0cc8727afdedf11fd3c464b").into(), // Keccak - hex!("a1f018d2faa339f72f5ee29050b4670d971e2e271cc06c41ee9cbe1f4c6feec9").into(), + hex!("83f71d5475f63350825b0301de322233d3711a9f3fcfd74050d1534af47a36b3").into(), vec![ BareExtrinsic { signed: bob(), @@ -322,7 +322,7 @@ mod tests { // Blake // hex!("2c7231a9c210a7aa4bea169d944bc4aaacd517862b244b8021236ffa7f697991").into(), // Keccak - hex!("41d07010f49aa29b2c9aca542cbaa6f59aafd3dda53cdf711c51ddb7d386912e").into(), + hex!("06d026c0d687ec583660a6052de6f89acdb24ea964d06be3831c837c3c426966").into(), vec![BareExtrinsic { signed: alice(), index: 0,