From c1cfcfadc354be97040fbfad32ea227b12cdc064 Mon Sep 17 00:00:00 2001 From: Blake Date: Thu, 15 Jan 2026 01:44:11 +0800 Subject: [PATCH] fix(execution-witness): preserve storage root when witness lacks storage trie --- crates/mpt/src/lib.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/crates/mpt/src/lib.rs b/crates/mpt/src/lib.rs index 44d0664..3cc9acc 100644 --- a/crates/mpt/src/lib.rs +++ b/crates/mpt/src/lib.rs @@ -88,7 +88,18 @@ impl EthereumState { .get(hashed_address) .cloned() .unwrap_or_else(|| HashedStorage::new(false)); - let storage_root = { + + let storage_root = if state_storage.is_empty() { + // Preserve the existing storage root when witness lacks the storage trie. + self.state_trie + .get_rlp::(hashed_address.as_slice()) + .ok() + .flatten() + .map(|existing| existing.storage_root) + .unwrap_or_else(|| { + self.storage_tries.entry(*hashed_address).or_default().hash() + }) + } else { let storage_trie = self.storage_tries.entry(*hashed_address).or_default(); if state_storage.wiped {