chore(trie): clean up trie update operation matching (#9202)

This commit is contained in:
Roman Krasiuk
2024-07-01 06:07:23 -07:00
committed by GitHub
parent feb6a37a18
commit db191c82a5
2 changed files with 14 additions and 17 deletions

View File

@@ -1,5 +1,5 @@
use super::{TrieCursor, TrieCursorFactory};
use crate::updates::{TrieKey, TrieOp, TrieUpdatesSorted};
use crate::updates::{TrieKey, TrieUpdatesSorted};
use reth_db::DatabaseError;
use reth_primitives::B256;
use reth_trie_common::{BranchNodeCompact, Nibbles};
@@ -58,10 +58,7 @@ impl<'a, C: TrieCursor> TrieCursor for InMemoryAccountTrieCursor<'a, C> {
) -> Result<Option<(Nibbles, BranchNodeCompact)>, DatabaseError> {
if let Some((trie_key, trie_op)) = self.trie_updates.find_account_node(&key) {
self.last_key = Some(trie_key);
match trie_op {
TrieOp::Update(node) => Ok(Some((key, node))),
TrieOp::Delete => Ok(None),
}
Ok(trie_op.into_update().map(|node| (key, node)))
} else {
let result = self.cursor.seek_exact(key)?;
self.last_key = result.as_ref().map(|(k, _)| TrieKey::AccountNode(k.clone()));
@@ -86,10 +83,7 @@ impl<'a, C: TrieCursor> TrieCursor for InMemoryAccountTrieCursor<'a, C> {
_ => panic!("Invalid trie key"),
};
self.last_key = Some(trie_key);
match trie_op {
TrieOp::Update(node) => return Ok(Some((nibbles, node))),
TrieOp::Delete => return Ok(None),
}
return Ok(trie_op.into_update().map(|node| (nibbles, node)))
}
let result = self.cursor.seek(key)?;
@@ -132,10 +126,7 @@ impl<'a, C: TrieCursor> TrieCursor for InMemoryStorageTrieCursor<'a, C> {
self.trie_updates.find_storage_node(&self.hashed_address, &key)
{
self.last_key = Some(trie_key);
match trie_op {
TrieOp::Update(node) => Ok(Some((key, node))),
TrieOp::Delete => Ok(None),
}
Ok(trie_op.into_update().map(|node| (key, node)))
} else {
let result = self.cursor.seek_exact(key)?;
self.last_key =
@@ -164,10 +155,7 @@ impl<'a, C: TrieCursor> TrieCursor for InMemoryStorageTrieCursor<'a, C> {
_ => panic!("this should not happen!"),
};
self.last_key = Some(trie_key.clone());
match trie_op {
TrieOp::Update(node) => return Ok(Some((nibbles, node.clone()))),
TrieOp::Delete => return Ok(None),
}
return Ok(trie_op.as_update().map(|node| (nibbles, node.clone())))
}
let result = self.cursor.seek(key)?;

View File

@@ -76,6 +76,15 @@ impl TrieOp {
None
}
}
/// Returns owned updated branch node if operation is [`Self::Update`].
pub fn into_update(self) -> Option<BranchNodeCompact> {
if let Self::Update(node) = self {
Some(node)
} else {
None
}
}
}
/// The aggregation of trie updates.