Implement all storage after prefix (#4227)

* Implement all storage after prefix

* fix test, bump version and fix doc

* bump metadata version

* Update frame/support/procedural/src/storage/storage_struct.rs
This commit is contained in:
thiolliere
2019-11-27 19:23:20 +01:00
committed by Gavin Wood
parent dcaabbaacf
commit f4035cd5ac
15 changed files with 310 additions and 325 deletions
@@ -17,7 +17,7 @@
use support::storage::unhashed;
use codec::Encode;
use support::{StorageDoubleMap, StorageLinkedMap, StorageMap, StorageValue};
use runtime_io::{TestExternalities, hashing};
use runtime_io::{TestExternalities, hashing::{twox_128, blake2_128, blake2_256}};
mod no_instance {
use codec::{Encode, Decode, EncodeLike};
@@ -89,44 +89,43 @@ mod instance {
fn final_keys_no_instance() {
TestExternalities::default().execute_with(|| {
no_instance::Value::put(1);
assert_eq!(unhashed::get::<u32>(&hashing::twox_128(b"FinalKeysNone Value")), Some(1u32));
let k = [twox_128(b"FinalKeysNone"), twox_128(b"Value")].concat();
assert_eq!(unhashed::get::<u32>(&k), Some(1u32));
no_instance::Map::insert(1, 2);
let mut k = b"FinalKeysNone Map".to_vec();
k.extend(1u32.encode());
assert_eq!(unhashed::get::<u32>(&hashing::blake2_256(&k)), Some(2u32));
let mut k = [twox_128(b"FinalKeysNone"), twox_128(b"Map")].concat();
k.extend(1u32.using_encoded(blake2_256).to_vec());
assert_eq!(unhashed::get::<u32>(&k), Some(2u32));
no_instance::Map2::insert(1, 2);
let mut k = b"FinalKeysNone Map2".to_vec();
k.extend(1u32.encode());
assert_eq!(unhashed::get::<u32>(&hashing::twox_128(&k)), Some(2u32));
let mut k = [twox_128(b"FinalKeysNone"), twox_128(b"Map2")].concat();
k.extend(1u32.using_encoded(twox_128).to_vec());
assert_eq!(unhashed::get::<u32>(&k), Some(2u32));
let head = b"head of FinalKeysNone LinkedMap".to_vec();
assert_eq!(unhashed::get::<u32>(&hashing::blake2_256(&head)), None);
let head = [twox_128(b"FinalKeysNone"), twox_128(b"HeadOfLinkedMap")].concat();
assert_eq!(unhashed::get::<u32>(&head), None);
no_instance::LinkedMap::insert(1, 2);
let mut k = b"FinalKeysNone LinkedMap".to_vec();
k.extend(1u32.encode());
assert_eq!(unhashed::get::<u32>(&hashing::blake2_256(&k)), Some(2u32));
assert_eq!(unhashed::get::<u32>(&hashing::blake2_256(&head)), Some(1u32));
let mut k = [twox_128(b"FinalKeysNone"), twox_128(b"LinkedMap")].concat();
k.extend(1u32.using_encoded(blake2_256).to_vec());
assert_eq!(unhashed::get::<u32>(&k), Some(2u32));
assert_eq!(unhashed::get::<u32>(&head), Some(1u32));
no_instance::LinkedMap2::insert(1, 2);
let mut k = b"FinalKeysNone LinkedMap2".to_vec();
k.extend(1u32.encode());
assert_eq!(unhashed::get::<u32>(&hashing::twox_128(&k)), Some(2u32));
let mut k = [twox_128(b"FinalKeysNone"), twox_128(b"LinkedMap2")].concat();
k.extend(1u32.using_encoded(twox_128).to_vec());
assert_eq!(unhashed::get::<u32>(&k), Some(2u32));
no_instance::DoubleMap::insert(&1, &2, &3);
let mut k = b"FinalKeysNone DoubleMap".to_vec();
k.extend(1u32.encode());
let mut k = hashing::blake2_256(&k).to_vec();
k.extend(&hashing::blake2_256(&2u32.encode()));
let mut k = [twox_128(b"FinalKeysNone"), twox_128(b"DoubleMap")].concat();
k.extend(1u32.using_encoded(blake2_256).to_vec());
k.extend(2u32.using_encoded(blake2_256).to_vec());
assert_eq!(unhashed::get::<u32>(&k), Some(3u32));
no_instance::DoubleMap2::insert(&1, &2, &3);
let mut k = b"FinalKeysNone DoubleMap2".to_vec();
k.extend(1u32.encode());
let mut k = hashing::twox_128(&k).to_vec();
k.extend(&hashing::blake2_128(&2u32.encode()));
let mut k = [twox_128(b"FinalKeysNone"), twox_128(b"DoubleMap2")].concat();
k.extend(1u32.using_encoded(twox_128).to_vec());
k.extend(2u32.using_encoded(blake2_128).to_vec());
assert_eq!(unhashed::get::<u32>(&k), Some(3u32));
});
}
@@ -135,44 +134,43 @@ fn final_keys_no_instance() {
fn final_keys_default_instance() {
TestExternalities::default().execute_with(|| {
<instance::Value<instance::DefaultInstance>>::put(1);
assert_eq!(unhashed::get::<u32>(&hashing::twox_128(b"FinalKeysSome Value")), Some(1u32));
let k = [twox_128(b"FinalKeysSome"), twox_128(b"Value")].concat();
assert_eq!(unhashed::get::<u32>(&k), Some(1u32));
<instance::Map<instance::DefaultInstance>>::insert(1, 2);
let mut k = b"FinalKeysSome Map".to_vec();
k.extend(1u32.encode());
assert_eq!(unhashed::get::<u32>(&hashing::blake2_256(&k)), Some(2u32));
let mut k = [twox_128(b"FinalKeysSome"), twox_128(b"Map")].concat();
k.extend(1u32.using_encoded(blake2_256).to_vec());
assert_eq!(unhashed::get::<u32>(&k), Some(2u32));
<instance::Map2<instance::DefaultInstance>>::insert(1, 2);
let mut k = b"FinalKeysSome Map2".to_vec();
k.extend(1u32.encode());
assert_eq!(unhashed::get::<u32>(&hashing::twox_128(&k)), Some(2u32));
let mut k = [twox_128(b"FinalKeysSome"), twox_128(b"Map2")].concat();
k.extend(1u32.using_encoded(twox_128).to_vec());
assert_eq!(unhashed::get::<u32>(&k), Some(2u32));
let head = b"head of FinalKeysSome LinkedMap".to_vec();
assert_eq!(unhashed::get::<u32>(&hashing::blake2_256(&head)), None);
let head = [twox_128(b"FinalKeysSome"), twox_128(b"HeadOfLinkedMap")].concat();
assert_eq!(unhashed::get::<u32>(&head), None);
<instance::LinkedMap<instance::DefaultInstance>>::insert(1, 2);
let mut k = b"FinalKeysSome LinkedMap".to_vec();
k.extend(1u32.encode());
assert_eq!(unhashed::get::<u32>(&hashing::blake2_256(&k)), Some(2u32));
assert_eq!(unhashed::get::<u32>(&hashing::blake2_256(&head)), Some(1u32));
let mut k = [twox_128(b"FinalKeysSome"), twox_128(b"LinkedMap")].concat();
k.extend(1u32.using_encoded(blake2_256).to_vec());
assert_eq!(unhashed::get::<u32>(&k), Some(2u32));
assert_eq!(unhashed::get::<u32>(&head), Some(1u32));
<instance::LinkedMap2<instance::DefaultInstance>>::insert(1, 2);
let mut k = b"FinalKeysSome LinkedMap2".to_vec();
k.extend(1u32.encode());
assert_eq!(unhashed::get::<u32>(&hashing::twox_128(&k)), Some(2u32));
let mut k = [twox_128(b"FinalKeysSome"), twox_128(b"LinkedMap2")].concat();
k.extend(1u32.using_encoded(twox_128).to_vec());
assert_eq!(unhashed::get::<u32>(&k), Some(2u32));
<instance::DoubleMap<instance::DefaultInstance>>::insert(&1, &2, &3);
let mut k = b"FinalKeysSome DoubleMap".to_vec();
k.extend(1u32.encode());
let mut k = hashing::blake2_256(&k).to_vec();
k.extend(&hashing::blake2_256(&2u32.encode()));
let mut k = [twox_128(b"FinalKeysSome"), twox_128(b"DoubleMap")].concat();
k.extend(1u32.using_encoded(blake2_256).to_vec());
k.extend(2u32.using_encoded(blake2_256).to_vec());
assert_eq!(unhashed::get::<u32>(&k), Some(3u32));
<instance::DoubleMap2<instance::DefaultInstance>>::insert(&1, &2, &3);
let mut k = b"FinalKeysSome DoubleMap2".to_vec();
k.extend(1u32.encode());
let mut k = hashing::twox_128(&k).to_vec();
k.extend(&hashing::blake2_128(&2u32.encode()));
let mut k = [twox_128(b"FinalKeysSome"), twox_128(b"DoubleMap2")].concat();
k.extend(1u32.using_encoded(twox_128).to_vec());
k.extend(2u32.using_encoded(blake2_128).to_vec());
assert_eq!(unhashed::get::<u32>(&k), Some(3u32));
});
}
@@ -181,47 +179,43 @@ fn final_keys_default_instance() {
fn final_keys_instance_2() {
TestExternalities::default().execute_with(|| {
<instance::Value<instance::Instance2>>::put(1);
assert_eq!(
unhashed::get::<u32>(&hashing::twox_128(b"Instance2FinalKeysSome Value")),
Some(1u32)
);
let k = [twox_128(b"Instance2FinalKeysSome"), twox_128(b"Value")].concat();
assert_eq!(unhashed::get::<u32>(&k), Some(1u32));
<instance::Map<instance::Instance2>>::insert(1, 2);
let mut k = b"Instance2FinalKeysSome Map".to_vec();
k.extend(1u32.encode());
assert_eq!(unhashed::get::<u32>(&hashing::blake2_256(&k)), Some(2u32));
let mut k = [twox_128(b"Instance2FinalKeysSome"), twox_128(b"Map")].concat();
k.extend(1u32.using_encoded(blake2_256).to_vec());
assert_eq!(unhashed::get::<u32>(&k), Some(2u32));
<instance::Map2<instance::Instance2>>::insert(1, 2);
let mut k = b"Instance2FinalKeysSome Map2".to_vec();
k.extend(1u32.encode());
assert_eq!(unhashed::get::<u32>(&hashing::twox_128(&k)), Some(2u32));
let mut k = [twox_128(b"Instance2FinalKeysSome"), twox_128(b"Map2")].concat();
k.extend(1u32.using_encoded(twox_128).to_vec());
assert_eq!(unhashed::get::<u32>(&k), Some(2u32));
let head = b"head of Instance2FinalKeysSome LinkedMap".to_vec();
assert_eq!(unhashed::get::<u32>(&hashing::blake2_256(&head)), None);
let head = [twox_128(b"Instance2FinalKeysSome"), twox_128(b"HeadOfLinkedMap")].concat();
assert_eq!(unhashed::get::<u32>(&head), None);
<instance::LinkedMap<instance::Instance2>>::insert(1, 2);
let mut k = b"Instance2FinalKeysSome LinkedMap".to_vec();
k.extend(1u32.encode());
assert_eq!(unhashed::get::<u32>(&hashing::blake2_256(&k)), Some(2u32));
assert_eq!(unhashed::get::<u32>(&hashing::blake2_256(&head)), Some(1u32));
let mut k = [twox_128(b"Instance2FinalKeysSome"), twox_128(b"LinkedMap")].concat();
k.extend(1u32.using_encoded(blake2_256).to_vec());
assert_eq!(unhashed::get::<u32>(&k), Some(2u32));
assert_eq!(unhashed::get::<u32>(&head), Some(1u32));
<instance::LinkedMap2<instance::Instance2>>::insert(1, 2);
let mut k = b"Instance2FinalKeysSome LinkedMap2".to_vec();
k.extend(1u32.encode());
assert_eq!(unhashed::get::<u32>(&hashing::twox_128(&k)), Some(2u32));
let mut k = [twox_128(b"Instance2FinalKeysSome"), twox_128(b"LinkedMap2")].concat();
k.extend(1u32.using_encoded(twox_128).to_vec());
assert_eq!(unhashed::get::<u32>(&k), Some(2u32));
<instance::DoubleMap<instance::Instance2>>::insert(&1, &2, &3);
let mut k = b"Instance2FinalKeysSome DoubleMap".to_vec();
k.extend(1u32.encode());
let mut k = hashing::blake2_256(&k).to_vec();
k.extend(&hashing::blake2_256(&2u32.encode()));
let mut k = [twox_128(b"Instance2FinalKeysSome"), twox_128(b"DoubleMap")].concat();
k.extend(1u32.using_encoded(blake2_256).to_vec());
k.extend(2u32.using_encoded(blake2_256).to_vec());
assert_eq!(unhashed::get::<u32>(&k), Some(3u32));
<instance::DoubleMap2<instance::Instance2>>::insert(&1, &2, &3);
let mut k = b"Instance2FinalKeysSome DoubleMap2".to_vec();
k.extend(1u32.encode());
let mut k = hashing::twox_128(&k).to_vec();
k.extend(&hashing::blake2_128(&2u32.encode()));
let mut k = [twox_128(b"Instance2FinalKeysSome"), twox_128(b"DoubleMap2")].concat();
k.extend(1u32.using_encoded(twox_128).to_vec());
k.extend(2u32.using_encoded(blake2_128).to_vec());
assert_eq!(unhashed::get::<u32>(&k), Some(3u32));
});
}
@@ -472,14 +472,3 @@ fn test_instance_storage_metadata() {
let metadata = Module2_2::storage_metadata();
pretty_assertions::assert_eq!(EXPECTED_METADATA, metadata);
}
#[test]
fn instance_prefix_is_prefix_of_entries() {
use module2::Instance;
let prefix = module2::Instance2::PREFIX;
assert!(module2::Instance2::PREFIX_FOR_Value.starts_with(prefix));
assert!(module2::Instance2::PREFIX_FOR_Map.starts_with(prefix));
assert!(module2::Instance2::PREFIX_FOR_LinkedMap.starts_with(prefix));
assert!(module2::Instance2::PREFIX_FOR_DoubleMap.starts_with(prefix));
}