diff --git a/substrate/node/runtime/src/lib.rs b/substrate/node/runtime/src/lib.rs index 427ee8d1fc..1c9c0ca4fd 100644 --- a/substrate/node/runtime/src/lib.rs +++ b/substrate/node/runtime/src/lib.rs @@ -59,7 +59,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { impl_name: create_runtime_str!("substrate-node"), authoring_version: 10, spec_version: 92, - impl_version: 93, + impl_version: 94, apis: RUNTIME_API_VERSIONS, }; diff --git a/substrate/srml/metadata/src/lib.rs b/substrate/srml/metadata/src/lib.rs index 28a513cc07..b1ab57b506 100644 --- a/substrate/srml/metadata/src/lib.rs +++ b/substrate/srml/metadata/src/lib.rs @@ -280,7 +280,7 @@ pub enum StorageFunctionType { key1: DecodeDifferentStr, key2: DecodeDifferentStr, value: DecodeDifferentStr, - key2_hasher: DecodeDifferentStr, + key2_hasher: StorageHasher, }, } @@ -311,8 +311,10 @@ pub enum RuntimeMetadata { V2(RuntimeMetadataDeprecated), /// Version 3 for runtime metadata. No longer used. V3(RuntimeMetadataDeprecated), - /// Version 4 for runtime metadata. - V4(RuntimeMetadataV4), + /// Version 4 for runtime metadata. No longer used. + V4(RuntimeMetadataDeprecated), + /// Version 5 for runtime metadata. + V5(RuntimeMetadataV5), } /// Enum that should fail. @@ -335,7 +337,7 @@ impl Decode for RuntimeMetadataDeprecated { /// The metadata of a runtime. #[derive(Eq, Encode, PartialEq)] #[cfg_attr(feature = "std", derive(Decode, Debug, Serialize))] -pub struct RuntimeMetadataV4 { +pub struct RuntimeMetadataV5 { pub modules: DecodeDifferentArray, } diff --git a/substrate/srml/support/procedural/src/storage/impls.rs b/substrate/srml/support/procedural/src/storage/impls.rs index 0e9e30e2a4..ee2275de7c 100644 --- a/substrate/srml/support/procedural/src/storage/impls.rs +++ b/substrate/srml/support/procedural/src/storage/impls.rs @@ -636,8 +636,10 @@ impl<'a, I: Iterator> Impls<'a, I> { } fn key_for(k1: &#k1ty, k2: &#k2ty) -> Vec { + use #scrate::storage::hashed::generator::StorageHasher; + let mut key = #as_double_map::prefix_for(k1); - key.extend(&#scrate::Hashable::#k2_hasher(k2)); + #scrate::codec::Encode::using_encoded(k2, |e| key.extend(&#scrate::#k2_hasher::hash(e))); key } diff --git a/substrate/srml/support/procedural/src/storage/mod.rs b/substrate/srml/support/procedural/src/storage/mod.rs index ce81dd95c5..742c47d259 100644 --- a/substrate/srml/support/procedural/src/storage/mod.rs +++ b/substrate/srml/support/procedural/src/storage/mod.rs @@ -214,7 +214,13 @@ enum HasherKind { impl From<&SetHasher> for HasherKind { fn from(set_hasher: &SetHasher) -> Self { - match set_hasher.inner.content { + (&set_hasher.inner.content).into() + } +} + +impl From<&Hasher> for HasherKind { + fn from(hasher: &Hasher) -> Self { + match hasher { Hasher::Blake2_256(_) => HasherKind::Blake2_256, Hasher::Blake2_128(_) => HasherKind::Blake2_128, Hasher::Twox256(_) => HasherKind::Twox256, @@ -223,6 +229,7 @@ impl From<&SetHasher> for HasherKind { } } } + impl HasherKind { fn into_storage_hasher_struct(&self) -> TokenStream2 { match self { diff --git a/substrate/srml/support/procedural/src/storage/transformation.rs b/substrate/srml/support/procedural/src/storage/transformation.rs index 933faa6ff9..1da6ae2108 100644 --- a/substrate/srml/support/procedural/src/storage/transformation.rs +++ b/substrate/srml/support/procedural/src/storage/transformation.rs @@ -606,7 +606,7 @@ fn decl_storage_items( i.linked_map(hasher.into_storage_hasher_struct(), key_type) }, DeclStorageTypeInfosKind::DoubleMap { key1_type, key2_type, key2_hasher, hasher } => { - i.double_map(hasher.into_storage_hasher_struct(), key1_type, key2_type, key2_hasher) + i.double_map(hasher.into_storage_hasher_struct(), key1_type, key2_type, key2_hasher.into_storage_hasher_struct()) }, }; impls.extend(implementation) @@ -758,14 +758,14 @@ fn store_functions_to_metadata ( let hasher = hasher.into_metadata(); let k1ty = clean_type_string("e!(#key1_type).to_string()); let k2ty = clean_type_string("e!(#key2_type).to_string()); - let k2_hasher = clean_type_string(&key2_hasher.to_string()); + let k2_hasher = key2_hasher.into_metadata(); quote!{ #scrate::metadata::StorageFunctionType::DoubleMap { hasher: #scrate::metadata::#hasher, key1: #scrate::metadata::DecodeDifferent::Encode(#k1ty), key2: #scrate::metadata::DecodeDifferent::Encode(#k2ty), value: #scrate::metadata::DecodeDifferent::Encode(#styp), - key2_hasher: #scrate::metadata::DecodeDifferent::Encode(#k2_hasher), + key2_hasher: #scrate::metadata::#k2_hasher, } } }, @@ -870,7 +870,7 @@ enum DeclStorageTypeInfosKind<'a> { hasher: HasherKind, key1_type: &'a syn::Type, key2_type: &'a syn::Type, - key2_hasher: TokenStream2, + key2_hasher: HasherKind, } } @@ -900,7 +900,7 @@ fn get_type_infos(storage_type: &DeclStorageType) -> DeclStorageTypeInfos { hasher: map.hasher.inner.as_ref().map(|h| h.into()).unwrap_or(HasherKind::Blake2_256), key1_type: &map.key1, key2_type: &map.key2.content, - key2_hasher: { let h = &map.key2_hasher; quote! { #h } }, + key2_hasher: (&map.key2_hasher).into(), }), }; diff --git a/substrate/srml/support/src/double_map.rs b/substrate/srml/support/src/double_map.rs index 80d974064d..d35570ae4f 100644 --- a/substrate/srml/support/src/double_map.rs +++ b/substrate/srml/support/src/double_map.rs @@ -64,7 +64,7 @@ pub trait StorageDoubleMapWithHasher { /// Get an entry from this map. /// - /// If there is entry stored under the given keys, returns `None`. + /// If there is no entry stored under the given keys, returns `None`. fn get(k1: &Q, k2: &R) -> Option where Self::Key1: Borrow, diff --git a/substrate/srml/support/src/lib.rs b/substrate/srml/support/src/lib.rs index 64256d876d..fec7249c23 100644 --- a/substrate/srml/support/src/lib.rs +++ b/substrate/srml/support/src/lib.rs @@ -467,7 +467,7 @@ mod tests { key1: DecodeDifferent::Encode("u32"), key2: DecodeDifferent::Encode("u32"), value: DecodeDifferent::Encode("u64"), - key2_hasher: DecodeDifferent::Encode("blake2_256"), + key2_hasher: StorageHasher::Blake2_256, }, default: DecodeDifferent::Encode( DefaultByteGetter(&__GetByteStructDataDM(PhantomData::)) @@ -482,7 +482,7 @@ mod tests { key1: DecodeDifferent::Encode("T::BlockNumber"), key2: DecodeDifferent::Encode("T::BlockNumber"), value: DecodeDifferent::Encode("T::BlockNumber"), - key2_hasher: DecodeDifferent::Encode("twox_128"), + key2_hasher: StorageHasher::Twox128, }, default: DecodeDifferent::Encode( DefaultByteGetter(&__GetByteStructGenericDataDM(PhantomData::)) @@ -497,7 +497,7 @@ mod tests { key1: DecodeDifferent::Encode("T::BlockNumber"), key2: DecodeDifferent::Encode("T::BlockNumber"), value: DecodeDifferent::Encode("T::BlockNumber"), - key2_hasher: DecodeDifferent::Encode("twox_256"), + key2_hasher: StorageHasher::Twox256, }, default: DecodeDifferent::Encode( DefaultByteGetter(&__GetByteStructGenericData2DM(PhantomData::)) @@ -512,7 +512,7 @@ mod tests { key1: DecodeDifferent::Encode("u32"), key2: DecodeDifferent::Encode("T::BlockNumber"), value: DecodeDifferent::Encode("Vec"), - key2_hasher: DecodeDifferent::Encode("blake2_256"), + key2_hasher: StorageHasher::Blake2_256, }, default: DecodeDifferent::Encode( DefaultByteGetter(&__GetByteStructGenericData2DM(PhantomData::)) diff --git a/substrate/srml/support/src/metadata.rs b/substrate/srml/support/src/metadata.rs index ed3e443afd..0e33d77272 100644 --- a/substrate/srml/support/src/metadata.rs +++ b/substrate/srml/support/src/metadata.rs @@ -16,7 +16,7 @@ pub use srml_metadata::{ DecodeDifferent, FnEncode, RuntimeMetadata, - ModuleMetadata, RuntimeMetadataV4, + ModuleMetadata, RuntimeMetadataV5, DefaultByteGetter, RuntimeMetadataPrefixed, StorageMetadata, StorageFunctionMetadata, StorageFunctionType, StorageFunctionModifier, @@ -40,8 +40,8 @@ macro_rules! impl_runtime_metadata { ) => { impl $runtime { pub fn metadata() -> $crate::metadata::RuntimeMetadataPrefixed { - $crate::metadata::RuntimeMetadata::V4 ( - $crate::metadata::RuntimeMetadataV4 { + $crate::metadata::RuntimeMetadata::V5 ( + $crate::metadata::RuntimeMetadataV5 { modules: $crate::__runtime_modules_to_metadata!($runtime;; $( $rest )*), } ).into() @@ -382,8 +382,8 @@ mod tests { event_module2::Module with Event Storage Call, ); - const EXPECTED_METADATA: RuntimeMetadata = RuntimeMetadata::V4( - RuntimeMetadataV4 { + const EXPECTED_METADATA: RuntimeMetadata = RuntimeMetadata::V5( + RuntimeMetadataV5 { modules: DecodeDifferent::Encode(&[ ModuleMetadata { name: DecodeDifferent::Encode("system"),