Support multi-hash in multi-trie via PlainDB (#1106)

* Temporarily pin trie to #2

* Use generic and delay trait object casting

Rust does not support super-trait upcasting

* Add PlainDB impl for Ephemeral

* Add PlainDB trait alias for completeness

* Use PlainDB for test TrieBackendStorage fetch

We always check overlay first for a storage fetch, which already checked null data. Using PlainDB here makes it work
nicer with other PlainDB overlays.

* Update trie reference

* Use HashDBRef in places when approriate

* Use PlainDBRef in places when approriate

* Update trie crate reference

* Remove unused HashDB::keys

* Patch dependencies

* Fix cargolock

* Update cargo lock again
This commit is contained in:
Wei Tang
2019-02-06 11:16:40 +01:00
committed by Arkadiy Paronyan
parent fa2e323478
commit 1ba7e35c18
11 changed files with 322 additions and 105 deletions
+46 -46
View File
@@ -922,12 +922,12 @@ dependencies = [
[[package]]
name = "hash-db"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "git+https://github.com/paritytech/trie#18cd9434609560dec0b3ceacaab55d491ce7eeb2"
[[package]]
name = "hash256-std-hasher"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "git+https://github.com/paritytech/trie#18cd9434609560dec0b3ceacaab55d491ce7eeb2"
dependencies = [
"crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1209,10 +1209,10 @@ dependencies = [
[[package]]
name = "keccak-hasher"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "git+https://github.com/paritytech/trie#18cd9434609560dec0b3ceacaab55d491ce7eeb2"
dependencies = [
"hash-db 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"hash256-std-hasher 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
"hash-db 0.9.0 (git+https://github.com/paritytech/trie)",
"hash256-std-hasher 0.9.1 (git+https://github.com/paritytech/trie)",
"tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1704,9 +1704,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "memory-db"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "git+https://github.com/paritytech/trie#18cd9434609560dec0b3ceacaab55d491ce7eeb2"
dependencies = [
"hash-db 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"hash-db 0.9.0 (git+https://github.com/paritytech/trie)",
"heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1891,7 +1891,7 @@ dependencies = [
"substrate-primitives 0.1.0",
"substrate-state-machine 0.1.0",
"substrate-trie 0.4.0",
"trie-root 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
"trie-root 0.9.1 (git+https://github.com/paritytech/trie)",
"wabt 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -2860,7 +2860,7 @@ name = "sr-io"
version = "0.1.0"
dependencies = [
"environmental 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"hash-db 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"hash-db 0.9.0 (git+https://github.com/paritytech/trie)",
"libsecp256k1 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"parity-codec 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -3480,7 +3480,7 @@ 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.25 (registry+https://github.com/rust-lang/crates.io-index)",
"hash-db 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"hash-db 0.9.0 (git+https://github.com/paritytech/trie)",
"heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d)",
@@ -3509,7 +3509,7 @@ name = "substrate-client-db"
version = "0.1.0"
dependencies = [
"env_logger 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"hash-db 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"hash-db 0.9.0 (git+https://github.com/paritytech/trie)",
"kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d)",
"kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d)",
"kvdb-rocksdb 0.1.4 (git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d)",
@@ -3799,8 +3799,8 @@ dependencies = [
"base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
"byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"hash-db 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"hash256-std-hasher 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
"hash-db 0.9.0 (git+https://github.com/paritytech/trie)",
"hash256-std-hasher 0.9.1 (git+https://github.com/paritytech/trie)",
"heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"impl-serde 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -3935,7 +3935,7 @@ dependencies = [
name = "substrate-state-machine"
version = "0.1.0"
dependencies = [
"hash-db 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"hash-db 0.9.0 (git+https://github.com/paritytech/trie)",
"heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -3944,8 +3944,8 @@ dependencies = [
"substrate-panic-handler 0.1.0",
"substrate-primitives 0.1.0",
"substrate-trie 0.4.0",
"trie-db 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
"trie-root 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
"trie-db 0.9.1 (git+https://github.com/paritytech/trie)",
"trie-root 0.9.1 (git+https://github.com/paritytech/trie)",
]
[[package]]
@@ -4037,16 +4037,16 @@ name = "substrate-trie"
version = "0.4.0"
dependencies = [
"criterion 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
"hash-db 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"hash-db 0.9.0 (git+https://github.com/paritytech/trie)",
"hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"keccak-hasher 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"memory-db 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
"keccak-hasher 0.2.1 (git+https://github.com/paritytech/trie)",
"memory-db 0.9.1 (git+https://github.com/paritytech/trie)",
"parity-codec 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"substrate-primitives 0.1.0",
"trie-bench 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
"trie-db 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
"trie-root 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
"trie-standardmap 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
"trie-bench 0.10.0 (git+https://github.com/paritytech/trie)",
"trie-db 0.9.1 (git+https://github.com/paritytech/trie)",
"trie-root 0.9.1 (git+https://github.com/paritytech/trie)",
"trie-standardmap 0.9.1 (git+https://github.com/paritytech/trie)",
]
[[package]]
@@ -4399,25 +4399,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "trie-bench"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "git+https://github.com/paritytech/trie#18cd9434609560dec0b3ceacaab55d491ce7eeb2"
dependencies = [
"criterion 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
"hash-db 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"keccak-hasher 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"memory-db 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
"hash-db 0.9.0 (git+https://github.com/paritytech/trie)",
"keccak-hasher 0.2.1 (git+https://github.com/paritytech/trie)",
"memory-db 0.9.1 (git+https://github.com/paritytech/trie)",
"parity-codec 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"trie-db 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
"trie-root 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
"trie-standardmap 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
"trie-db 0.9.1 (git+https://github.com/paritytech/trie)",
"trie-root 0.9.1 (git+https://github.com/paritytech/trie)",
"trie-standardmap 0.9.1 (git+https://github.com/paritytech/trie)",
]
[[package]]
name = "trie-db"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "git+https://github.com/paritytech/trie#18cd9434609560dec0b3ceacaab55d491ce7eeb2"
dependencies = [
"elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
"hash-db 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"hash-db 0.9.0 (git+https://github.com/paritytech/trie)",
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -4425,19 +4425,19 @@ dependencies = [
[[package]]
name = "trie-root"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "git+https://github.com/paritytech/trie#18cd9434609560dec0b3ceacaab55d491ce7eeb2"
dependencies = [
"hash-db 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"hash-db 0.9.0 (git+https://github.com/paritytech/trie)",
]
[[package]]
name = "trie-standardmap"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "git+https://github.com/paritytech/trie#18cd9434609560dec0b3ceacaab55d491ce7eeb2"
dependencies = [
"criterion 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
"hash-db 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"keccak-hasher 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"hash-db 0.9.0 (git+https://github.com/paritytech/trie)",
"keccak-hasher 0.2.1 (git+https://github.com/paritytech/trie)",
]
[[package]]
@@ -4460,7 +4460,7 @@ name = "twox-hash"
version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"rand 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -4890,8 +4890,8 @@ dependencies = [
"checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb"
"checksum globset 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4743617a7464bbda3c8aec8558ff2f9429047e025771037df561d383337ff865"
"checksum h2 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "ddb2b25a33e231484694267af28fec74ac63b5ccf51ee2065a5e313b834d836e"
"checksum hash-db 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dc5ec43724866bbc8337e09cab4d4b5f9fdbbe589f04bdc8bfda906a639ad338"
"checksum hash256-std-hasher 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5fc2d94c8e127b205b3caf6fd3013fb5e5b314234bb0b9bea6588c52fddbb82b"
"checksum hash-db 0.9.0 (git+https://github.com/paritytech/trie)" = "<none>"
"checksum hash256-std-hasher 0.9.1 (git+https://github.com/paritytech/trie)" = "<none>"
"checksum heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1679e6ea370dee694f91f1dc469bf94cf8f52051d147aec3e1f9497c6fc22461"
"checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205"
"checksum hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77"
@@ -4920,7 +4920,7 @@ dependencies = [
"checksum jsonrpc-pubsub 10.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "56608ed54b1b2a69f4357cb8bdfbcbd99fe1179383c03a09bb428931bd35f592"
"checksum jsonrpc-server-utils 10.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5521613b31ea22d36d9f95ad642058dccec846a94ed8690957652d479f620707"
"checksum jsonrpc-ws-server 10.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20b8333a5a6e6ccbcf5c90f90919de557cba4929efa164e9bd0e8e497eb20e46"
"checksum keccak-hasher 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c75270466c10e5204b2121f9eddb1f7a0fa9d3d753aba51dcd027c00084fb778"
"checksum keccak-hasher 0.2.1 (git+https://github.com/paritytech/trie)" = "<none>"
"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?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d)" = "<none>"
"checksum kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d)" = "<none>"
@@ -4961,7 +4961,7 @@ dependencies = [
"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
"checksum memchr 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e1dd4eaac298c32ce07eb6ed9242eda7d82955b9170b7d6db59b2e02cc63fcb8"
"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3"
"checksum memory-db 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c0c940ff365f921ac747e7a009d8f9688105acf956f3fbb7fd967920737e935d"
"checksum memory-db 0.9.1 (git+https://github.com/paritytech/trie)" = "<none>"
"checksum memory_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882"
"checksum mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0"
"checksum mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)" = "71646331f2619b1026cc302f87a2b8b648d5c6dd6937846a16cc8ce0f347f432"
@@ -5122,10 +5122,10 @@ dependencies = [
"checksum tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "66268575b80f4a4a710ef83d087fdfeeabdce9b74c797535fbac18a2cb906e92"
"checksum tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "037ffc3ba0e12a0ab4aca92e5234e0dedeb48fddf6ccd260f1f150a36a9f2445"
"checksum traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079"
"checksum trie-bench 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b6a334b73cca143545b1cede73ea70f10a838376c5ec3c1e5365b65d57abe52e"
"checksum trie-db 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9ec6ceb1ad749359cedcf6fa95d7b5104acf70e871e2416e71cabcc3a8b2dbb8"
"checksum trie-root 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6294c313431d8bd2dda88db3a57550c4911dd6f7f0e8be6001e23c1e6cbdcf1b"
"checksum trie-standardmap 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "30da337fb1e61993d3f6a6fed2957d13f7a604097e34d1ea9715c2f0b2df616e"
"checksum trie-bench 0.10.0 (git+https://github.com/paritytech/trie)" = "<none>"
"checksum trie-db 0.9.1 (git+https://github.com/paritytech/trie)" = "<none>"
"checksum trie-root 0.9.1 (git+https://github.com/paritytech/trie)" = "<none>"
"checksum trie-standardmap 0.9.1 (git+https://github.com/paritytech/trie)" = "<none>"
"checksum try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382"
"checksum twofish 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1eef327f05b0d0ec1b9d7d119d8f4d9f602ceee37e0540aff8071e8e66c2e22e"
"checksum twox-hash 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "555cd4909480122bbbf21e34faac4cb08a171f324775670447ed116726c474af"