mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 03:01:07 +00:00
Make use of StorageHasher and HasherKind (#2836)
* Make use of StorageHasher and HasherKind. * Use Storagehasher hasher function for key2 of double map. * Refactor to reuse hasher from implementation. * Bump up since there is srml changes. * Update metadata version.
This commit is contained in:
@@ -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,
|
||||
};
|
||||
|
||||
|
||||
@@ -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<ModuleMetadata>,
|
||||
}
|
||||
|
||||
|
||||
@@ -636,8 +636,10 @@ impl<'a, I: Iterator<Item=syn::Meta>> Impls<'a, I> {
|
||||
}
|
||||
|
||||
fn key_for(k1: &#k1ty, k2: &#k2ty) -> Vec<u8> {
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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(),
|
||||
}),
|
||||
};
|
||||
|
||||
|
||||
@@ -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<Q, R>(k1: &Q, k2: &R) -> Option<Self::Value>
|
||||
where
|
||||
Self::Key1: Borrow<Q>,
|
||||
|
||||
@@ -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::<Test>))
|
||||
@@ -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::<Test>))
|
||||
@@ -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::<Test>))
|
||||
@@ -512,7 +512,7 @@ mod tests {
|
||||
key1: DecodeDifferent::Encode("u32"),
|
||||
key2: DecodeDifferent::Encode("T::BlockNumber"),
|
||||
value: DecodeDifferent::Encode("Vec<u32>"),
|
||||
key2_hasher: DecodeDifferent::Encode("blake2_256"),
|
||||
key2_hasher: StorageHasher::Blake2_256,
|
||||
},
|
||||
default: DecodeDifferent::Encode(
|
||||
DefaultByteGetter(&__GetByteStructGenericData2DM(PhantomData::<Test>))
|
||||
|
||||
@@ -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"),
|
||||
|
||||
Reference in New Issue
Block a user