mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-18 18:51:02 +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:
@@ -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