Enhance decl storage (#777)

* enhance macro decl_storage()

* update the state root hash

* fix one comment
This commit is contained in:
guanqun
2018-10-05 20:20:32 +08:00
committed by Gav Wood
parent 200a716a1a
commit 1cc0e3b6ea
28 changed files with 2031 additions and 1459 deletions
+26 -56
View File
@@ -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::*;