Switch to shiny new fast, RLP-less trie (#795)

* Bump codec

* Fix tests

* Patricia trie builds

* Introduce trie

* Some yak shaving.

* Some fixes

* Remove RLP ref

* Fixes

* It builds!

* Some tests fixed

* Another test fix

* Rejig more hashes

* substrate-trie::iterator_works test

* Update lock

* Polish

* Docs

* Undo incorrect "fix" for tests

* Fix nits
This commit is contained in:
Gav Wood
2018-09-25 15:32:22 +01:00
committed by Arkadiy Paronyan
parent b02c274374
commit 82d6ca3484
90 changed files with 1977 additions and 1129 deletions
+3 -2
View File
@@ -36,14 +36,15 @@ extern crate substrate_primitives as primitives;
extern crate substrate_serializer as serializer;
extern crate substrate_state_machine as state_machine;
extern crate sr_version as runtime_version;
extern crate substrate_trie as trie;
extern crate serde;
extern crate wasmi;
extern crate byteorder;
extern crate triehash;
extern crate trie_root;
extern crate parking_lot;
extern crate twox_hash;
extern crate hashdb;
extern crate hash_db;
#[macro_use] extern crate log;
@@ -103,7 +103,7 @@ pub trait NativeExecutionDispatch: Send + Sync {
/// Dispatch a method and input data to be executed natively. Returns `Some` result or `None`
/// if the `method` is unknown. Panics if there's an unrecoverable error.
// fn dispatch<H: hashdb::Hasher>(ext: &mut Externalities<H>, method: &str, data: &[u8]) -> Result<Vec<u8>>;
// fn dispatch<H: hash_db::Hasher>(ext: &mut Externalities<H>, method: &str, data: &[u8]) -> Result<Vec<u8>>;
fn dispatch(ext: &mut Externalities<Blake2Hasher>, method: &str, data: &[u8]) -> Result<Vec<u8>>;
/// Get native runtime version.
+10 -10
View File
@@ -539,14 +539,14 @@ impl Store {
#[cfg(test)]
mod tests {
use primitives::{Blake2Hasher, RlpCodec};
use primitives::{Blake2Hasher};
use wasm_executor::WasmExecutor;
use state_machine::TestExternalities;
use wabt;
#[test]
fn sandbox_should_work() {
let mut ext = TestExternalities::<Blake2Hasher, RlpCodec>::default();
let mut ext = TestExternalities::<Blake2Hasher>::default();
let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm");
let code = wabt::wat2wasm(r#"
@@ -578,7 +578,7 @@ mod tests {
#[test]
fn sandbox_trap() {
let mut ext = TestExternalities::<Blake2Hasher, RlpCodec>::default();
let mut ext = TestExternalities::<Blake2Hasher>::default();
let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm");
let code = wabt::wat2wasm(r#"
@@ -599,7 +599,7 @@ mod tests {
#[test]
fn start_called() {
let mut ext = TestExternalities::<Blake2Hasher, RlpCodec>::default();
let mut ext = TestExternalities::<Blake2Hasher>::default();
let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm");
let code = wabt::wat2wasm(r#"
@@ -637,7 +637,7 @@ mod tests {
#[test]
fn invoke_args() {
let mut ext = TestExternalities::<Blake2Hasher, RlpCodec>::default();
let mut ext = TestExternalities::<Blake2Hasher>::default();
let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm");
let code = wabt::wat2wasm(r#"
@@ -671,7 +671,7 @@ mod tests {
#[test]
fn return_val() {
let mut ext = TestExternalities::<Blake2Hasher, RlpCodec>::default();
let mut ext = TestExternalities::<Blake2Hasher>::default();
let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm");
let code = wabt::wat2wasm(r#"
@@ -693,7 +693,7 @@ mod tests {
#[test]
fn unlinkable_module() {
let mut ext = TestExternalities::<Blake2Hasher, RlpCodec>::default();
let mut ext = TestExternalities::<Blake2Hasher>::default();
let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm");
let code = wabt::wat2wasm(r#"
@@ -713,7 +713,7 @@ mod tests {
#[test]
fn corrupted_module() {
let mut ext = TestExternalities::<Blake2Hasher, RlpCodec>::default();
let mut ext = TestExternalities::<Blake2Hasher>::default();
let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm");
// Corrupted wasm file
@@ -727,7 +727,7 @@ mod tests {
#[test]
fn start_fn_ok() {
let mut ext = TestExternalities::<Blake2Hasher, RlpCodec>::default();
let mut ext = TestExternalities::<Blake2Hasher>::default();
let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm");
let code = wabt::wat2wasm(r#"
@@ -750,7 +750,7 @@ mod tests {
#[test]
fn start_fn_traps() {
let mut ext = TestExternalities::<Blake2Hasher, RlpCodec>::default();
let mut ext = TestExternalities::<Blake2Hasher>::default();
let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm");
let code = wabt::wat2wasm(r#"
+13 -14
View File
@@ -30,7 +30,7 @@ use primitives::{blake2_256, twox_128, twox_256, ed25519};
use primitives::hexdisplay::HexDisplay;
use primitives::sandbox as sandbox_primitives;
use primitives::Blake2Hasher;
use triehash::ordered_trie_root;
use trie::ordered_trie_root;
use sandbox;
@@ -554,7 +554,6 @@ impl WasmExecutor {
#[cfg(test)]
mod tests {
use primitives::RlpCodec;
use super::*;
use codec::Encode;
use state_machine::TestExternalities;
@@ -568,7 +567,7 @@ mod tests {
#[test]
fn returning_should_work() {
let mut ext = TestExternalities::<_, RlpCodec>::default();
let mut ext = TestExternalities::default();
let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm");
let output = WasmExecutor::new().call(&mut ext, 8, &test_code[..], "test_empty_return", &[]).unwrap();
@@ -577,7 +576,7 @@ mod tests {
#[test]
fn panicking_should_work() {
let mut ext = TestExternalities::<_, RlpCodec>::default();
let mut ext = TestExternalities::default();
let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm");
let output = WasmExecutor::new().call(&mut ext, 8, &test_code[..], "test_panic", &[]);
@@ -589,7 +588,7 @@ mod tests {
#[test]
fn storage_should_work() {
let mut ext = TestExternalities::<_, RlpCodec>::default();
let mut ext = TestExternalities::default();
ext.set_storage(b"foo".to_vec(), b"bar".to_vec());
let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm");
@@ -597,7 +596,7 @@ mod tests {
assert_eq!(output, b"all ok!".to_vec());
let expected = TestExternalities::<_, _>::new(map![
let expected = TestExternalities::new(map![
b"input".to_vec() => b"Hello world".to_vec(),
b"foo".to_vec() => b"bar".to_vec(),
b"baz".to_vec() => b"bar".to_vec()
@@ -607,7 +606,7 @@ mod tests {
#[test]
fn clear_prefix_should_work() {
let mut ext = TestExternalities::<_, RlpCodec>::default();
let mut ext = TestExternalities::default();
ext.set_storage(b"aaa".to_vec(), b"1".to_vec());
ext.set_storage(b"aab".to_vec(), b"2".to_vec());
ext.set_storage(b"aba".to_vec(), b"3".to_vec());
@@ -620,7 +619,7 @@ mod tests {
assert_eq!(output, b"all ok!".to_vec());
let expected: TestExternalities<_, RlpCodec> = map![
let expected: TestExternalities<_> = map![
b"aaa".to_vec() => b"1".to_vec(),
b"aab".to_vec() => b"2".to_vec(),
b"bbb".to_vec() => b"5".to_vec()
@@ -630,7 +629,7 @@ mod tests {
#[test]
fn blake2_256_should_work() {
let mut ext = TestExternalities::<_, RlpCodec>::default();
let mut ext = TestExternalities::default();
let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm");
assert_eq!(
WasmExecutor::new().call(&mut ext, 8, &test_code[..], "test_blake2_256", &[]).unwrap(),
@@ -644,7 +643,7 @@ mod tests {
#[test]
fn twox_256_should_work() {
let mut ext = TestExternalities::<_, RlpCodec>::default();
let mut ext = TestExternalities::default();
let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm");
assert_eq!(
WasmExecutor::new().call(&mut ext, 8, &test_code[..], "test_twox_256", &[]).unwrap(),
@@ -658,7 +657,7 @@ mod tests {
#[test]
fn twox_128_should_work() {
let mut ext = TestExternalities::<_, RlpCodec>::default();
let mut ext = TestExternalities::default();
let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm");
assert_eq!(
WasmExecutor::new().call(&mut ext, 8, &test_code[..], "test_twox_128", &[]).unwrap(),
@@ -672,7 +671,7 @@ mod tests {
#[test]
fn ed25519_verify_should_work() {
let mut ext = TestExternalities::<Blake2Hasher, RlpCodec>::default();
let mut ext = TestExternalities::<Blake2Hasher>::default();
let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm");
let key = ed25519::Pair::from_seed(&blake2_256(b"test"));
let sig = key.sign(b"all ok!");
@@ -698,11 +697,11 @@ mod tests {
#[test]
fn enumerated_trie_root_should_work() {
let mut ext = TestExternalities::<Blake2Hasher, RlpCodec>::default();
let mut ext = TestExternalities::<Blake2Hasher>::default();
let test_code = include_bytes!("../wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm");
assert_eq!(
WasmExecutor::new().call(&mut ext, 8, &test_code[..], "test_enumerated_trie_root", &[]).unwrap(),
ordered_trie_root::<Blake2Hasher, _, _>(vec![b"zero".to_vec(), b"one".to_vec(), b"two".to_vec()]).0.encode()
ordered_trie_root::<Blake2Hasher, _, _>(vec![b"zero".to_vec(), b"one".to_vec(), b"two".to_vec()].iter()).0.encode()
);
}