mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 08:11:03 +00:00
Extract search of digest item into Digest::log() function (#874)
* Digest::log fn * change DigestItem::log impl
This commit is contained in:
committed by
Gav Wood
parent
187c232629
commit
200a716a1a
@@ -374,9 +374,7 @@ impl<Block: BlockT> state_machine::ChangesTrieRootsStorage<Blake2Hasher> for DbC
|
|||||||
.map(Some),
|
.map(Some),
|
||||||
None => Ok(None)
|
None => Ok(None)
|
||||||
})?
|
})?
|
||||||
.and_then(|header| header.digest().logs().iter()
|
.and_then(|header| header.digest().log(DigestItem::as_changes_trie_root)
|
||||||
.find(|log| log.as_changes_trie_root().is_some())
|
|
||||||
.and_then(DigestItem::as_changes_trie_root)
|
|
||||||
.map(|root| H256::from_slice(root.as_ref()))))
|
.map(|root| H256::from_slice(root.as_ref()))))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1091,9 +1091,7 @@ pub(crate) mod tests {
|
|||||||
remote_client.justify_and_import(BlockOrigin::Own, builder.bake().unwrap()).unwrap();
|
remote_client.justify_and_import(BlockOrigin::Own, builder.bake().unwrap()).unwrap();
|
||||||
|
|
||||||
let header = remote_client.header(&BlockId::Number(i as u64 + 1)).unwrap().unwrap();
|
let header = remote_client.header(&BlockId::Number(i as u64 + 1)).unwrap().unwrap();
|
||||||
let trie_root = header.digest().logs().iter()
|
let trie_root = header.digest().log(DigestItem::as_changes_trie_root)
|
||||||
.find(|l| l.as_changes_trie_root().is_some())
|
|
||||||
.and_then(DigestItem::as_changes_trie_root)
|
|
||||||
.map(|root| H256::from_slice(root.as_ref()))
|
.map(|root| H256::from_slice(root.as_ref()))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
local_roots.push(trie_root);
|
local_roots.push(trie_root);
|
||||||
|
|||||||
@@ -474,10 +474,7 @@ where
|
|||||||
|
|
||||||
self.states.write().insert(hash, operation.new_state.unwrap_or_else(|| old_state.clone()));
|
self.states.write().insert(hash, operation.new_state.unwrap_or_else(|| old_state.clone()));
|
||||||
|
|
||||||
let changes_trie_root = header.digest().logs().iter()
|
let changes_trie_root = header.digest().log(DigestItem::as_changes_trie_root).cloned();
|
||||||
.find(|log| log.as_changes_trie_root().is_some())
|
|
||||||
.and_then(DigestItem::as_changes_trie_root)
|
|
||||||
.cloned();
|
|
||||||
if let Some(changes_trie_root) = changes_trie_root {
|
if let Some(changes_trie_root) = changes_trie_root {
|
||||||
if let Some(changes_trie_update) = operation.changes_trie_update {
|
if let Some(changes_trie_update) = operation.changes_trie_update {
|
||||||
let changes_trie_root: H::Out = changes_trie_root.into();
|
let changes_trie_root: H::Out = changes_trie_root.into();
|
||||||
|
|||||||
@@ -503,6 +503,13 @@ pub trait Digest: Member + Default {
|
|||||||
fn logs(&self) -> &[Self::Item];
|
fn logs(&self) -> &[Self::Item];
|
||||||
/// Push new digest item.
|
/// Push new digest item.
|
||||||
fn push(&mut self, item: Self::Item);
|
fn push(&mut self, item: Self::Item);
|
||||||
|
|
||||||
|
/// Get reference to the first digest item that matches the passed predicate.
|
||||||
|
fn log<T, F: Fn(&Self::Item) -> Option<&T>>(&self, predicate: F) -> Option<&T> {
|
||||||
|
self.logs().iter()
|
||||||
|
.filter_map(predicate)
|
||||||
|
.next()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Single digest item. Could be any type that implements `Member` and provides methods
|
/// Single digest item. Could be any type that implements `Member` and provides methods
|
||||||
|
|||||||
Reference in New Issue
Block a user