mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-10 17:11:03 +00:00
Enhance decl storage (#777)
* enhance macro decl_storage() * update the state root hash * fix one comment
This commit is contained in:
@@ -179,19 +179,35 @@ impl From<RawLog<substrate_primitives::H256>> for primitives::testing::DigestIte
|
||||
decl_storage! {
|
||||
trait Store for Module<T: Trait> as System {
|
||||
|
||||
pub AccountNonce get(account_nonce): default map [ T::AccountId => T::Index ];
|
||||
pub AccountNonce get(account_nonce): map T::AccountId => T::Index;
|
||||
|
||||
ExtrinsicCount: u32;
|
||||
pub BlockHash get(block_hash): required map [ T::BlockNumber => T::Hash ];
|
||||
ExtrinsicData get(extrinsic_data): required map [ u32 => Vec<u8> ];
|
||||
RandomSeed get(random_seed): required T::Hash;
|
||||
ExtrinsicCount: Option<u32>;
|
||||
pub BlockHash get(block_hash) build(|_| vec![(T::BlockNumber::zero(), [69u8; 32])]): map T::BlockNumber => T::Hash;
|
||||
ExtrinsicData get(extrinsic_data): map u32 => Vec<u8>;
|
||||
RandomSeed get(random_seed) build(|_| [0u8; 32]): T::Hash;
|
||||
/// The current block number being processed. Set by `execute_block`.
|
||||
Number get(block_number): required T::BlockNumber;
|
||||
ParentHash get(parent_hash): required T::Hash;
|
||||
ExtrinsicsRoot get(extrinsics_root): required T::Hash;
|
||||
Digest get(digest): default T::Digest;
|
||||
Number get(block_number) build(|_| 1u64): T::BlockNumber;
|
||||
ParentHash get(parent_hash) build(|_| [69u8; 32]): T::Hash;
|
||||
ExtrinsicsRoot get(extrinsics_root): T::Hash;
|
||||
Digest get(digest): T::Digest;
|
||||
|
||||
Events get(events): default Vec<EventRecord<T::Event>>;
|
||||
Events get(events): Vec<EventRecord<T::Event>>;
|
||||
}
|
||||
add_extra_genesis {
|
||||
config(changes_trie_config): Option<ChangesTrieConfiguration>;
|
||||
config(_phantom): ::std::marker::PhantomData<T>;
|
||||
|
||||
build(|storage: &mut primitives::StorageMap, config: &GenesisConfig<T>| {
|
||||
use codec::Encode;
|
||||
|
||||
storage.insert(well_known_keys::EXTRINSIC_INDEX.to_vec(), 0u32.encode());
|
||||
|
||||
if let Some(ref changes_trie_config) = config.changes_trie_config {
|
||||
storage.insert(
|
||||
well_known_keys::CHANGES_TRIE_CONFIG.to_vec(),
|
||||
changes_trie_config.encode());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -396,52 +412,6 @@ impl<T: Trait> BlockNumberToHash for Module<T> {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "std", test))]
|
||||
#[derive(Serialize, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
#[serde(deny_unknown_fields)]
|
||||
pub struct GenesisConfig<T: Trait> {
|
||||
/// Changes trie configuration.
|
||||
pub changes_trie_config: Option<ChangesTrieConfiguration>,
|
||||
/// Marker for 'storing' T.
|
||||
pub _phantom: ::std::marker::PhantomData<T>,
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "std", test))]
|
||||
impl<T: Trait> Default for GenesisConfig<T> {
|
||||
fn default() -> Self {
|
||||
GenesisConfig {
|
||||
changes_trie_config: Default::default(),
|
||||
_phantom: Default::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "std", test))]
|
||||
impl<T: Trait> primitives::BuildStorage for GenesisConfig<T>
|
||||
{
|
||||
fn build_storage(self) -> Result<primitives::StorageMap, String> {
|
||||
use codec::Encode;
|
||||
|
||||
let mut storage: primitives::StorageMap = map![
|
||||
Self::hash(&<BlockHash<T>>::key_for(T::BlockNumber::zero())).to_vec() => [69u8; 32].encode(),
|
||||
Self::hash(<Number<T>>::key()).to_vec() => 1u64.encode(),
|
||||
Self::hash(<ParentHash<T>>::key()).to_vec() => [69u8; 32].encode(),
|
||||
Self::hash(<RandomSeed<T>>::key()).to_vec() => [0u8; 32].encode()
|
||||
];
|
||||
|
||||
storage.insert(well_known_keys::EXTRINSIC_INDEX.to_vec(), 0u32.encode());
|
||||
|
||||
if let Some(changes_trie_config) = self.changes_trie_config {
|
||||
storage.insert(
|
||||
well_known_keys::CHANGES_TRIE_CONFIG.to_vec(),
|
||||
changes_trie_config.encode());
|
||||
}
|
||||
|
||||
Ok(storage)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
Reference in New Issue
Block a user