From 50c875b33c089db92c4a9c088e0427c003bcefe2 Mon Sep 17 00:00:00 2001 From: Alexey Shekhirin Date: Tue, 19 Nov 2024 15:39:41 +0000 Subject: [PATCH] feat(trie): short-circuit account/storage reveal in sparse trie (#12663) --- crates/trie/sparse/src/state.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/crates/trie/sparse/src/state.rs b/crates/trie/sparse/src/state.rs index d7557a7a36..0b0db14011 100644 --- a/crates/trie/sparse/src/state.rs +++ b/crates/trie/sparse/src/state.rs @@ -42,6 +42,10 @@ impl SparseStateTrie { account: B256, proof: impl IntoIterator, ) -> SparseStateTrieResult<()> { + if self.revealed.contains_key(&account) { + return Ok(()); + } + let mut proof = proof.into_iter().peekable(); let Some(root_node) = self.validate_proof(&mut proof)? else { return Ok(()) }; @@ -69,6 +73,10 @@ impl SparseStateTrie { slot: B256, proof: impl IntoIterator, ) -> SparseStateTrieResult<()> { + if self.revealed.get(&account).is_some_and(|v| v.contains(&slot)) { + return Ok(()); + } + let mut proof = proof.into_iter().peekable(); let Some(root_node) = self.validate_proof(&mut proof)? else { return Ok(()) };