From e6658a2e0b3d48b14faf7325048dccc9f94ea5f4 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Thu, 25 Dec 2025 07:35:39 +0000 Subject: [PATCH 1/7] feat: verify slot-level state transition --- crates/executor/guest/src/error.rs | 5 ++ crates/executor/guest/src/executor.rs | 71 ++++++++++++++++++++++- crates/executor/guest/src/lib.rs | 3 +- crates/executor/host/tests/integration.rs | 2 +- 4 files changed, 76 insertions(+), 5 deletions(-) diff --git a/crates/executor/guest/src/error.rs b/crates/executor/guest/src/error.rs index 557bd8e..8093320 100644 --- a/crates/executor/guest/src/error.rs +++ b/crates/executor/guest/src/error.rs @@ -2,6 +2,7 @@ use alloy_primitives::{Address, FixedBytes}; use mpt::Error as MptError; use reth_consensus::ConsensusError; use reth_evm::execute::BlockExecutionError; +use revm_primitives::U256; #[derive(Debug, thiserror::Error)] pub enum ClientError { @@ -31,4 +32,8 @@ pub enum ClientError { FailedToReadGenesisFile(#[from] std::io::Error), #[error("Failed to deserialize the genesis file: {}", .0)] FailedToDeserializeGenesisFile(#[from] serde_json::Error), + #[error("Failed to check slot and value: {}", .0)] + FailedToCheckSlotAndValue(U256), + #[error("Failed to fetch slot and value: {}", .0)] + FailedToFetchSlotAndValue(U256), } diff --git a/crates/executor/guest/src/executor.rs b/crates/executor/guest/src/executor.rs index d8e9972..9d3a8de 100644 --- a/crates/executor/guest/src/executor.rs +++ b/crates/executor/guest/src/executor.rs @@ -12,9 +12,9 @@ use reth_evm::{ use reth_evm_ethereum::EthEvmConfig; use reth_execution_types::ExecutionOutcome; use reth_primitives_traits::Block; -use reth_trie::KeccakKeyHasher; -use revm::{database::WrapDatabaseRef, install_crypto}; -use revm_primitives::Address; +use reth_trie::{KeccakKeyHasher, TrieAccount, EMPTY_ROOT_HASH}; +use revm::{database::WrapDatabaseRef, install_crypto, DatabaseRef}; +use revm_primitives::{Address, HashMap, U256}; use crate::{ custom::{CustomCrypto, CustomEvmFactory}, @@ -32,6 +32,7 @@ pub const BLOCK_EXECUTION: &str = "block execution"; pub const VALIDATE_HEADER: &str = "validate header"; pub const VALIDATE_EXECUTION: &str = "validate block post-execution"; pub const COMPUTE_STATE_ROOT: &str = "compute state root"; +pub const CHECK_SLOT_AND_VALUE: &str = "check slot and value"; pub type EthClientExecutor = ClientExecutor, ChainSpec>; @@ -54,6 +55,7 @@ where pub fn execute( &self, mut input: ClientExecutorInput, + storage_info: Option>, ) -> Result<(Header, B256), ClientError> { let chain_id: u64 = (&input.genesis).try_into().expect("convert chain id err"); @@ -150,6 +152,69 @@ where requests_hash: input.current_block.header().requests_hash(), }; + if storage_info.is_some() { + let check_result: Result<(), ClientError> = profile_report!(CHECK_SLOT_AND_VALUE, { + let state = input.state(); + let db = { + for (hashed_address, storage_trie) in state.storage_tries.iter() { + let account = state + .state_trie + .get_rlp::(hashed_address.as_slice()) + .unwrap(); + let storage_root = account.map_or(EMPTY_ROOT_HASH, |a| a.storage_root); + if storage_root != storage_trie.hash() { + return Err(ClientError::MismatchedStorageRoot); + } + } + + let bytecodes_by_hash = input + .bytecodes() + .map(|code| (code.hash_slow(), code)) + .collect::>(); + + // Verify and build block hashes + let mut block_hashes: HashMap = + HashMap::with_hasher(Default::default()); + for (child_header, parent_header) in input.sealed_headers().tuple_windows() { + if parent_header.number() != child_header.number() - 1 { + return Err(ClientError::InvalidHeaderBlockNumber( + parent_header.number() + 1, + child_header.number(), + )); + } + + let parent_header_hash = parent_header.hash_slow(); + if parent_header_hash != child_header.parent_hash() { + return Err(ClientError::InvalidHeaderParentHash( + parent_header_hash, + child_header.parent_hash(), + )); + } + + block_hashes.insert(parent_header.number(), child_header.parent_hash()); + } + + TrieDB::new(state, block_hashes, bytecodes_by_hash) + }; + + for (contract_address, slot_id, expected_value) in storage_info.unwrap() { + match db.storage_ref(contract_address, slot_id) { + Ok(actual_value) => { + if actual_value != expected_value { + return Err(ClientError::FailedToCheckSlotAndValue(slot_id)); + } + } + _ => { + return Err(ClientError::FailedToFetchSlotAndValue(slot_id)); + } + } + } + Ok(()) + }); + if check_result.is_err() { + return Err(check_result.err().unwrap()); + } + } Ok((header, parent_state_root)) } } diff --git a/crates/executor/guest/src/lib.rs b/crates/executor/guest/src/lib.rs index bb754b7..85d8dbb 100644 --- a/crates/executor/guest/src/lib.rs +++ b/crates/executor/guest/src/lib.rs @@ -27,7 +27,8 @@ pub fn verify_block(input: &[u8]) -> (B256, B256, B256) { Arc::new((&input.genesis).try_into().unwrap()), input.custom_beneficiary, ); - let (header, prev_state_root) = executor.execute(input).expect("failed to execute client"); + let (header, prev_state_root) = + executor.execute(input, None).expect("failed to execute client"); let block_hash = header.hash_slow(); (block_hash, header.state_root, prev_state_root) } diff --git a/crates/executor/host/tests/integration.rs b/crates/executor/host/tests/integration.rs index b246c31..19bc1c2 100644 --- a/crates/executor/host/tests/integration.rs +++ b/crates/executor/host/tests/integration.rs @@ -123,7 +123,7 @@ async fn run_e2e( .expect("failed to execute host"); // Execute the client. - client_executor.execute(client_input.clone()).expect("failed to execute client"); + client_executor.execute(client_input.clone(), None).expect("failed to execute client"); // Save the client input to a buffer. let buffer = bincode::serialize(&client_input).unwrap(); From 571296b8077cd9a690168f3e8cf3300f28c70ce8 Mon Sep 17 00:00:00 2001 From: eigmax Date: Fri, 9 Jan 2026 10:32:37 +0000 Subject: [PATCH 2/7] chore: polish interface --- crates/executor/guest/src/executor.rs | 6 +++--- crates/executor/guest/src/lib.rs | 2 +- crates/executor/host/tests/integration.rs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/executor/guest/src/executor.rs b/crates/executor/guest/src/executor.rs index 8affb26..910090f 100644 --- a/crates/executor/guest/src/executor.rs +++ b/crates/executor/guest/src/executor.rs @@ -56,7 +56,7 @@ where pub fn execute( &self, mut input: ClientExecutorInput, - storage_info: Option>, + storage_info: Vec<(Address, U256, U256)>, ) -> Result<(Header, B256), ClientError> { let chain_id: u64 = (&input.genesis).try_into().expect("convert chain id err"); @@ -154,7 +154,7 @@ where requests_hash: input.current_block.header().requests_hash(), }; - if storage_info.is_some() { + if !storage_info.is_empty() { let check_result: Result<(), ClientError> = profile_report!(CHECK_SLOT_AND_VALUE, { let state = input.state(); let db = { @@ -199,7 +199,7 @@ where TrieDB::new(state, block_hashes, bytecodes_by_hash) }; - for (contract_address, slot_id, expected_value) in storage_info.unwrap() { + for (contract_address, slot_id, expected_value) in storage_info { match db.storage_ref(contract_address, slot_id) { Ok(actual_value) => { if actual_value != expected_value { diff --git a/crates/executor/guest/src/lib.rs b/crates/executor/guest/src/lib.rs index 85d8dbb..3facb8c 100644 --- a/crates/executor/guest/src/lib.rs +++ b/crates/executor/guest/src/lib.rs @@ -28,7 +28,7 @@ pub fn verify_block(input: &[u8]) -> (B256, B256, B256) { input.custom_beneficiary, ); let (header, prev_state_root) = - executor.execute(input, None).expect("failed to execute client"); + executor.execute(input, vec![]).expect("failed to execute client"); let block_hash = header.hash_slow(); (block_hash, header.state_root, prev_state_root) } diff --git a/crates/executor/host/tests/integration.rs b/crates/executor/host/tests/integration.rs index 19bc1c2..8769933 100644 --- a/crates/executor/host/tests/integration.rs +++ b/crates/executor/host/tests/integration.rs @@ -123,7 +123,7 @@ async fn run_e2e( .expect("failed to execute host"); // Execute the client. - client_executor.execute(client_input.clone(), None).expect("failed to execute client"); + client_executor.execute(client_input.clone(), vec![]).expect("failed to execute client"); // Save the client input to a buffer. let buffer = bincode::serialize(&client_input).unwrap(); From 3acc2f71b15468ff60ff518553f7d94e57da72f5 Mon Sep 17 00:00:00 2001 From: Blake Hau <148928866+blake-pro@users.noreply.github.com> Date: Wed, 14 Jan 2026 16:26:55 +0800 Subject: [PATCH 3/7] feat(execution-witness): add support for goat testnet execution witness (#10) --- Cargo.lock | 1 + crates/executor/host/src/host_executor.rs | 5 +- crates/mpt/src/execution_witness.rs | 7 +-- crates/mpt/src/lib.rs | 11 +--- crates/storage/rpc-db/Cargo.toml | 3 +- .../storage/rpc-db/src/execution_witness.rs | 62 +++++++++++++------ 6 files changed, 57 insertions(+), 32 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index feda82f..65cd62b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7269,6 +7269,7 @@ dependencies = [ "revm-database-interface", "revm-primitives", "revm-state", + "serde", "thiserror 1.0.69", "tokio", "tracing", diff --git a/crates/executor/host/src/host_executor.rs b/crates/executor/host/src/host_executor.rs index a8d7d23..a3db56e 100644 --- a/crates/executor/host/src/host_executor.rs +++ b/crates/executor/host/src/host_executor.rs @@ -76,6 +76,8 @@ impl HostExecutor { let chain_id: u64 = (&genesis).try_into().unwrap(); tracing::debug!("chain id: {}", chain_id); + let is_goat_testnet = is_goat_testnet(chain_id); + // Fetch the current block and the previous block from the provider. tracing::info!("[{}] fetching the current block and the previous block", block_number); let rpc_block = provider @@ -105,6 +107,7 @@ impl HostExecutor { debug_provider, block_number - 1, previous_block.header().state_root(), + is_goat_testnet, ) .await .map_err(HostError::RpcDbError)?; @@ -149,7 +152,7 @@ impl HostExecutor { &block, self.chain_spec.clone(), &execution_output, - is_goat_testnet(chain_id), + is_goat_testnet, )?; // Accumulate the logs bloom. diff --git a/crates/mpt/src/execution_witness.rs b/crates/mpt/src/execution_witness.rs index 48cb0d1..b740c74 100644 --- a/crates/mpt/src/execution_witness.rs +++ b/crates/mpt/src/execution_witness.rs @@ -1,6 +1,5 @@ -use alloy_primitives::{keccak256, map::HashMap, B256}; +use alloy_primitives::{keccak256, map::HashMap, Bytes, B256}; use alloy_rlp::Decodable; -use alloy_rpc_types_debug::ExecutionWitness; use reth_trie::TrieAccount; use crate::mpt::{resolve_nodes, MptNode, MptNodeData, MptNodeReference}; @@ -10,7 +9,7 @@ use crate::mpt::{resolve_nodes, MptNode, MptNodeData, MptNodeReference}; // NOTE: This method should be called outside zkVM! In general you construct tries, then // validate them inside zkVM. pub(crate) fn build_validated_tries( - witness: &ExecutionWitness, + state: &Vec, pre_state_root: B256, ) -> Result<(MptNode, HashMap), String> { // Step 1: Decode all RLP-encoded trie nodes and index by hash @@ -19,7 +18,7 @@ pub(crate) fn build_validated_tries( let mut node_by_hash: HashMap = HashMap::default(); let mut root_node: Option = None; - for encoded in &witness.state { + for encoded in state { let node = MptNode::decode(encoded).expect("Valid MPT node in witness"); let hash = keccak256(encoded); if hash == pre_state_root { diff --git a/crates/mpt/src/lib.rs b/crates/mpt/src/lib.rs index 97642df..44d0664 100644 --- a/crates/mpt/src/lib.rs +++ b/crates/mpt/src/lib.rs @@ -1,6 +1,4 @@ -#![cfg_attr(not(test), warn(unused_crate_dependencies))] - -use alloy_primitives::{keccak256, map::HashMap, Address, B256}; +use alloy_primitives::{keccak256, map::HashMap, Address, Bytes, B256}; use alloy_rpc_types::EIP1186AccountProofResponse; use reth_trie::{AccountProof, HashedPostState, HashedStorage, TrieAccount}; use serde::{Deserialize, Serialize}; @@ -73,12 +71,9 @@ impl EthereumState { } #[cfg(feature = "execution-witness")] - pub fn from_execution_witness( - witness: &alloy_rpc_types_debug::ExecutionWitness, - pre_state_root: B256, - ) -> Self { + pub fn from_execution_witness(state: &Vec, pre_state_root: B256) -> Self { let (state_trie, storage_tries) = - execution_witness::build_validated_tries(witness, pre_state_root).unwrap(); + execution_witness::build_validated_tries(state, pre_state_root).unwrap(); Self { state_trie, storage_tries } } diff --git a/crates/storage/rpc-db/Cargo.toml b/crates/storage/rpc-db/Cargo.toml index 4780e6c..cec1420 100644 --- a/crates/storage/rpc-db/Cargo.toml +++ b/crates/storage/rpc-db/Cargo.toml @@ -9,6 +9,7 @@ async-trait.workspace = true tokio.workspace = true thiserror.workspace = true tracing.workspace = true +serde.workspace = true mpt.workspace = true primitives.workspace = true @@ -33,7 +34,7 @@ alloy-trie = { workspace = true, optional = true, features = ["ethereum"] } [features] default = ["execution-witness"] execution-witness = [ - "dep:alloy-consensus", + "dep:alloy-consensus", "dep:alloy-rlp", "dep:alloy-trie", "alloy-provider/debug-api" diff --git a/crates/storage/rpc-db/src/execution_witness.rs b/crates/storage/rpc-db/src/execution_witness.rs index b7e5105..8b39982 100644 --- a/crates/storage/rpc-db/src/execution_witness.rs +++ b/crates/storage/rpc-db/src/execution_witness.rs @@ -1,7 +1,7 @@ use std::marker::PhantomData; -use alloy_consensus::Header; -use alloy_primitives::{map::HashMap, Address, B256}; +use alloy_consensus::{private::alloy_eips::BlockNumberOrTag, Header}; +use alloy_primitives::{map::HashMap, Address, Bytes, B256}; use alloy_provider::{ext::DebugApi, Network, Provider}; use alloy_rlp::Decodable; use alloy_trie::TrieAccount; @@ -11,9 +11,18 @@ use reth_storage_errors::ProviderError; use revm_database::{BundleState, DatabaseRef}; use revm_primitives::{keccak256, ruint::aliases::U256, StorageKey, StorageValue}; use revm_state::{AccountInfo, Bytecode}; +use serde::{Deserialize, Serialize}; use crate::{RpcDb, RpcDbError}; +#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] +pub struct ExecutionWitnessGoat { + pub state: Vec, + pub codes: Vec, + pub keys: Option>, + pub headers: Vec
, +} + #[derive(Debug)] pub struct ExecutionWitnessRpcDb { /// The provider which fetches data. @@ -30,23 +39,40 @@ pub struct ExecutionWitnessRpcDb { impl + Clone, N: Network> ExecutionWitnessRpcDb { /// Create a new [`ExecutionWitnessRpcDb`]. - pub async fn new(provider: P, block_number: u64, state_root: B256) -> Result { - let execution_witness = provider.debug_execution_witness((block_number + 1).into()).await?; - - let state = EthereumState::from_execution_witness(&execution_witness, state_root); - - let codes = execution_witness - .codes - .iter() - .map(|encoded| (keccak256(encoded), Bytecode::new_raw(encoded.clone()))) - .collect(); - - let ancestor_headers = execution_witness - .headers - .iter() - .map(|encoded| Header::decode(&mut encoded.as_ref()).unwrap()) - .map(|h| (h.number, h)) + pub async fn new( + provider: P, + block_number: u64, + state_root: B256, + is_goat_testnet: bool, + ) -> Result { + let (state, codes, headers) = if is_goat_testnet { + let execution_witness: ExecutionWitnessGoat = provider + .raw_request( + "debug_executionWitness".into(), + (BlockNumberOrTag::Number(block_number + 1),), + ) + .await?; + + (execution_witness.state, execution_witness.codes, execution_witness.headers) + } else { + let execution_witness = + provider.debug_execution_witness((block_number + 1).into()).await?; + let headers = execution_witness + .headers + .iter() + .map(|encoded| Header::decode(&mut encoded.as_ref()).unwrap()) + .collect(); + + (execution_witness.state, execution_witness.codes, headers) + }; + tracing::info!("fetch execution witness for block {}", block_number + 1); + + let state = EthereumState::from_execution_witness(&state, state_root); + let codes = codes + .into_iter() + .map(|encoded| (keccak256(&encoded), Bytecode::new_raw(encoded))) .collect(); + let ancestor_headers = headers.into_iter().map(|h| (h.number, h)).collect(); let db = Self { provider, state, codes, ancestor_headers, phantom: PhantomData }; From ab25a628d31439c24a7e3673c34319c546d2682c Mon Sep 17 00:00:00 2001 From: Blake Hau <148928866+blake-pro@users.noreply.github.com> Date: Thu, 15 Jan 2026 13:57:49 +0800 Subject: [PATCH 4/7] fix(execution-witness): preserve storage root when witness lacks storage trie (#11) --- 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 { From 403401c045c42a8681431ca7009bd57d62e1f1df Mon Sep 17 00:00:00 2001 From: Blake Date: Sat, 17 Jan 2026 00:24:47 +0800 Subject: [PATCH 5/7] fix(io): handle missing storage trie --- crates/executor/guest/src/io.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/crates/executor/guest/src/io.rs b/crates/executor/guest/src/io.rs index 63a4ccc..6fc21bb 100644 --- a/crates/executor/guest/src/io.rs +++ b/crates/executor/guest/src/io.rs @@ -151,16 +151,16 @@ impl DatabaseRef for TrieDB<'_> { let hashed_address = keccak256(address); let hashed_address = hashed_address.as_slice(); - let storage_trie = self - .inner - .storage_tries - .get(hashed_address) - .expect("A storage trie must be provided for each account"); - - Ok(storage_trie - .get_rlp::(keccak256(index.to_be_bytes::<32>()).as_slice()) - .expect("Can get from MPT") - .unwrap_or_default()) + let storage_trie = self.inner.storage_tries.get(hashed_address); + + if let Some(storage_trie) = storage_trie { + Ok(storage_trie + .get_rlp::(keccak256(index.to_be_bytes::<32>()).as_slice()) + .expect("Can get from MPT") + .unwrap_or_default()) + } else { + Ok(U256::ZERO) + } } /// Get block hash by block number. From 0b280a7cc8cd7c12bcf28a06fbdef3cb9a9ae196 Mon Sep 17 00:00:00 2001 From: Blake Date: Sat, 24 Jan 2026 13:17:20 +0800 Subject: [PATCH 6/7] feat: enhance state trie handling for precompile addresses --- Cargo.lock | 1 + bin/guest/Cargo.lock | 1 + crates/executor/guest/src/io.rs | 11 ++++-- crates/primitives/Cargo.toml | 1 + crates/primitives/src/lib.rs | 15 ++++++++ .../storage/rpc-db/src/execution_witness.rs | 38 +++++++++++-------- 6 files changed, 48 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 65cd62b..c8027a2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5925,6 +5925,7 @@ version = "0.1.0" dependencies = [ "alloy-eips", "alloy-genesis", + "alloy-primitives", "alloy-rpc-types", "eyre", "reth-chainspec", diff --git a/bin/guest/Cargo.lock b/bin/guest/Cargo.lock index 4d5f5f8..7c10cfc 100644 --- a/bin/guest/Cargo.lock +++ b/bin/guest/Cargo.lock @@ -2619,6 +2619,7 @@ version = "0.1.0" dependencies = [ "alloy-eips", "alloy-genesis", + "alloy-primitives", "alloy-rpc-types", "eyre", "reth-chainspec", diff --git a/crates/executor/guest/src/io.rs b/crates/executor/guest/src/io.rs index 6fc21bb..59465e8 100644 --- a/crates/executor/guest/src/io.rs +++ b/crates/executor/guest/src/io.rs @@ -1,10 +1,11 @@ use std::iter::once; +use crate::error::ClientError; use alloy_consensus::{Block, BlockHeader, Header}; use alloy_primitives::map::HashMap; use itertools::Itertools; use mpt::EthereumState; -use primitives::genesis::Genesis; +use primitives::{genesis::Genesis, is_precompile}; use reth_errors::ProviderError; use reth_ethereum_primitives::EthPrimitives; use reth_primitives_traits::{NodePrimitives, SealedHeader}; @@ -17,8 +18,6 @@ use revm_primitives::{keccak256, Address, B256, U256}; use serde::{Deserialize, Serialize}; use serde_with::serde_as; -use crate::error::ClientError; - pub type EthClientExecutorInput = ClientExecutorInput; #[cfg(feature = "optimism")] @@ -129,7 +128,11 @@ impl DatabaseRef for TrieDB<'_> { let hashed_address = keccak256(address); let hashed_address = hashed_address.as_slice(); - let account_in_trie = self.inner.state_trie.get_rlp::(hashed_address).unwrap(); + let account_in_trie = match self.inner.state_trie.get_rlp::(hashed_address) { + Ok(res) => res, + Err(mpt::Error::NodeNotResolved(_)) if is_precompile(address) => None, + Err(err) => return Err(ProviderError::TrieWitnessError(err.to_string())), + }; let account = account_in_trie.map(|account_in_trie| AccountInfo { balance: account_in_trie.balance, diff --git a/crates/primitives/Cargo.toml b/crates/primitives/Cargo.toml index b2ae76d..8ec58aa 100644 --- a/crates/primitives/Cargo.toml +++ b/crates/primitives/Cargo.toml @@ -15,6 +15,7 @@ reth-chainspec.workspace = true reth-optimism-chainspec = { workspace = true, optional = true } reth-optimism-forks = { workspace = true, optional = true } reth-trie.workspace = true +alloy-primitives.workspace = true # alloy alloy-eips.workspace = true diff --git a/crates/primitives/src/lib.rs b/crates/primitives/src/lib.rs index f9134c8..ae00da4 100644 --- a/crates/primitives/src/lib.rs +++ b/crates/primitives/src/lib.rs @@ -4,7 +4,22 @@ pub mod account_proof; pub mod chain_spec; pub mod genesis; +use alloy_primitives::Address; + #[inline] pub fn is_goat_testnet(chain_id: u64) -> bool { chain_id == 48816 } + +#[inline] +pub fn is_precompile(address: Address) -> bool { + let bytes = address.as_slice(); + // Check if the first 19 bytes are zero. + if !bytes[..19].iter().all(|&b| b == 0) { + return false; + } + // Check if the last byte is non-zero (so it is not the zero address). + let last = bytes[19]; + + last > 0 +} diff --git a/crates/storage/rpc-db/src/execution_witness.rs b/crates/storage/rpc-db/src/execution_witness.rs index 8b39982..02c2c50 100644 --- a/crates/storage/rpc-db/src/execution_witness.rs +++ b/crates/storage/rpc-db/src/execution_witness.rs @@ -1,5 +1,6 @@ use std::marker::PhantomData; +use crate::{RpcDb, RpcDbError}; use alloy_consensus::{private::alloy_eips::BlockNumberOrTag, Header}; use alloy_primitives::{map::HashMap, Address, Bytes, B256}; use alloy_provider::{ext::DebugApi, Network, Provider}; @@ -7,14 +8,13 @@ use alloy_rlp::Decodable; use alloy_trie::TrieAccount; use async_trait::async_trait; use mpt::EthereumState; +use primitives::is_precompile; use reth_storage_errors::ProviderError; use revm_database::{BundleState, DatabaseRef}; use revm_primitives::{keccak256, ruint::aliases::U256, StorageKey, StorageValue}; use revm_state::{AccountInfo, Bytecode}; use serde::{Deserialize, Serialize}; -use crate::{RpcDb, RpcDbError}; - #[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] pub struct ExecutionWitnessGoat { pub state: Vec, @@ -85,23 +85,31 @@ impl + Clone, N: Network> DatabaseRef for ExecutionWitnessRpcDb

Result, Self::Error> { let hash = keccak256(address); - if let Some(mut bytes) = self + match self .state .state_trie .get(hash.as_ref()) - .map_err(|err| ProviderError::TrieWitnessError(err.to_string()))? + .map_err(|err| ProviderError::TrieWitnessError(err.to_string())) { - let account = TrieAccount::decode(&mut bytes)?; - let account_info = AccountInfo { - balance: account.balance, - nonce: account.nonce, - code_hash: account.code_hash, - code: None, - }; - - Ok(Some(account_info)) - } else { - Ok(None) + Ok(Some(mut bytes)) => { + let account = TrieAccount::decode(&mut bytes)?; + let account_info = AccountInfo { + balance: account.balance, + nonce: account.nonce, + code_hash: account.code_hash, + code: None, + }; + + Ok(Some(account_info)) + } + Ok(None) => Ok(None), + Err(err) => { + // If the account is a precompile, we can assume it's empty. + if is_precompile(address) { + return Ok(None); + } + Err(err) + } } } From 294aa06127be4bfda47a7fd4905b93bb8e664dca Mon Sep 17 00:00:00 2001 From: Blake Hau <148928866+blake-pro@users.noreply.github.com> Date: Mon, 9 Feb 2026 18:15:22 +0800 Subject: [PATCH 7/7] Fix/empty accounts (#12) * fix: enhance fallback mechanism for incomplete witness data * fix: include bytecode retrieval in RPC fallback logic * chore: clean up redundant lines in fallback address proof logic * update Cargo.lock --- Cargo.lock | 744 +++++++++--------- crates/mpt/src/mpt.rs | 4 +- .../storage/rpc-db/src/execution_witness.rs | 155 +++- 3 files changed, 516 insertions(+), 387 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c8027a2..a3102c1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -78,9 +78,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy-chains" -version = "0.2.24" +version = "0.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b163ff4acf0eac29af05a911397cc418a76e153467b859398adc26cb9335a611" +checksum = "90f374d3c6d729268bbe2d0e0ff992bb97898b2df756691a62ee1d5f0506bc39" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -98,7 +98,7 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "alloy-serde", - "alloy-trie 0.9.2", + "alloy-trie 0.9.4", "alloy-tx-macros", "auto_impl", "c-kzg", @@ -111,7 +111,7 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -137,7 +137,7 @@ dependencies = [ "alloy-rlp", "crc", "serde", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -164,7 +164,7 @@ dependencies = [ "k256", "serde", "serde_with", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -185,7 +185,7 @@ dependencies = [ "serde", "serde_with", "sha2", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -205,7 +205,7 @@ dependencies = [ "op-alloy-consensus", "op-revm", "revm", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -216,7 +216,7 @@ dependencies = [ "alloy-eips", "alloy-primitives", "alloy-serde", - "alloy-trie 0.9.2", + "alloy-trie 0.9.4", "serde", "serde_with", ] @@ -256,7 +256,7 @@ dependencies = [ "http 1.4.0", "serde", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", ] @@ -282,7 +282,7 @@ dependencies = [ "futures-utils-wasm", "serde", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -311,7 +311,7 @@ dependencies = [ "op-alloy-consensus", "op-revm", "revm", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -338,7 +338,7 @@ dependencies = [ "derive_more 2.1.1", "foldhash 0.2.0", "hashbrown 0.16.1", - "indexmap 2.12.1", + "indexmap 2.13.0", "itoa", "k256", "keccak-asm", @@ -388,7 +388,7 @@ dependencies = [ "reqwest 0.12.28", "serde", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", "url", @@ -411,16 +411,16 @@ dependencies = [ "serde_json", "tokio", "tokio-stream", - "tower 0.5.2", + "tower 0.5.3", "tracing", "wasmtimer", ] [[package]] name = "alloy-rlp" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f70d83b765fdc080dbcd4f4db70d8d23fe4761f2f02ebfa9146b833900634b4" +checksum = "e93e50f64a77ad9c5470bf2ad0ca02f228da70c792a8f06634801e202579f35e" dependencies = [ "alloy-rlp-derive", "arrayvec", @@ -429,13 +429,13 @@ dependencies = [ [[package]] name = "alloy-rlp-derive" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" +checksum = "ce8849c74c9ca0f5a03da1c865e3eb6f768df816e67dd3721a398a8a7e398011" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -456,7 +456,7 @@ dependencies = [ "serde_json", "tokio", "tokio-stream", - "tower 0.5.2", + "tower 0.5.3", "tracing", "url", "wasmtimer", @@ -524,7 +524,7 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -537,7 +537,7 @@ dependencies = [ "alloy-serde", "serde", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -561,14 +561,14 @@ dependencies = [ "either", "elliptic-curve", "k256", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] name = "alloy-signer" -version = "1.2.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acff6b251740ef473932386d3b71657d3825daebf2217fb41a7ef676229225d4" +checksum = "1bea4c8f30eddb11d7ab56e83e49c814655daa78ca708df26c300c10d0189cbc" dependencies = [ "alloy-primitives", "async-trait", @@ -576,46 +576,46 @@ dependencies = [ "either", "elliptic-curve", "k256", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] name = "alloy-sol-macro" -version = "1.5.2" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09eb18ce0df92b4277291bbaa0ed70545d78b02948df756bbd3d6214bf39a218" +checksum = "f5fa1ca7e617c634d2bd9fa71f9ec8e47c07106e248b9fcbd3eaddc13cabd625" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] name = "alloy-sol-macro-expander" -version = "1.5.2" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95d9fa2daf21f59aa546d549943f10b5cce1ae59986774019fbedae834ffe01b" +checksum = "27c00c0c3a75150a9dc7c8c679ca21853a137888b4e1c5569f92d7e2b15b5102" dependencies = [ "alloy-sol-macro-input", "const-hex", "heck 0.5.0", - "indexmap 2.12.1", + "indexmap 2.13.0", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.112", + "sha3", + "syn 2.0.114", "syn-solidity", - "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "1.5.2" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9396007fe69c26ee118a19f4dee1f5d1d6be186ea75b3881adf16d87f8444686" +checksum = "297db260eb4d67c105f68d6ba11b8874eec681caec5505eab8fbebee97f790bc" dependencies = [ "const-hex", "dunce", @@ -623,15 +623,15 @@ dependencies = [ "macro-string", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", "syn-solidity", ] [[package]] name = "alloy-sol-type-parser" -version = "1.5.2" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af67a0b0dcebe14244fc92002cd8d96ecbf65db4639d479f5fcd5805755a4c27" +checksum = "94b91b13181d3bcd23680fd29d7bc861d1f33fbe90fdd0af67162434aeba902d" dependencies = [ "serde", "winnow", @@ -664,9 +664,9 @@ dependencies = [ "parking_lot 0.12.5", "serde", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", - "tower 0.5.2", + "tower 0.5.3", "tracing", "url", "wasmtimer", @@ -681,7 +681,7 @@ dependencies = [ "alloy-transport", "reqwest 0.12.28", "serde_json", - "tower 0.5.2", + "tower 0.5.3", "tracing", "url", ] @@ -695,7 +695,7 @@ dependencies = [ "alloy-transport", "futures", "http 1.4.0", - "rustls 0.23.35", + "rustls 0.23.36", "serde_json", "tokio", "tokio-tungstenite 0.26.2", @@ -721,17 +721,18 @@ dependencies = [ [[package]] name = "alloy-trie" -version = "0.9.2" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b77b56af09ead281337d06b1d036c88e2dc8a2e45da512a532476dbee94912b" +checksum = "4d7fd448ab0a017de542de1dcca7a58e7019fe0e7a34ed3f9543ebddf6aceffa" dependencies = [ "alloy-primitives", "alloy-rlp", "arrayvec", "derive_more 2.1.1", - "nybbles 0.4.6", + "nybbles 0.4.8", "serde", "smallvec", + "thiserror 2.0.18", "tracing", ] @@ -744,7 +745,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -817,9 +818,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.100" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea" [[package]] name = "ark-bls12-381" @@ -950,7 +951,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -988,7 +989,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -1048,7 +1049,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -1124,7 +1125,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -1135,7 +1136,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -1173,7 +1174,7 @@ checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -1238,7 +1239,7 @@ dependencies = [ "serde_urlencoded", "sync_wrapper 1.0.2", "tokio", - "tower 0.5.2", + "tower 0.5.3", "tower-layer", "tower-service", "tracing", @@ -1324,9 +1325,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.8.1" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e050f626429857a27ddccb31e0aca21356bfa709c04041aefddac081a8f068a" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "bech32" @@ -1366,7 +1367,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -1454,13 +1455,13 @@ dependencies = [ [[package]] name = "blake2b_simd" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" +checksum = "b79834656f71332577234b50bfc009996f7449e0c056884e6a02492ded0ca2f3" dependencies = [ "arrayref", "arrayvec", - "constant_time_eq 0.3.1", + "constant_time_eq 0.4.2", ] [[package]] @@ -1540,7 +1541,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -1567,9 +1568,9 @@ checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" [[package]] name = "bytemuck" -version = "1.24.0" +version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" dependencies = [ "bytemuck_derive", ] @@ -1582,7 +1583,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -1593,9 +1594,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" dependencies = [ "serde", ] @@ -1684,9 +1685,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.51" +version = "1.2.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a0aeaff4ff1a90589618835a598e545176939b97874f7abc7851caa0618f203" +checksum = "47b26a0954ae34af09b50f0de26458fa95369a0d478d8236d3f93082b219bd29" dependencies = [ "find-msvc-tools", "jobserver", @@ -1717,9 +1718,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118" dependencies = [ "iana-time-zone", "num-traits", @@ -1750,9 +1751,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.53" +version = "4.5.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" +checksum = "6899ea499e3fb9305a65d5ebf6e3d2248c5fab291f300ad0a704fbe142eae31a" dependencies = [ "clap_builder", "clap_derive", @@ -1760,9 +1761,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.53" +version = "4.5.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" +checksum = "7b12c8b680195a62a8364d16b8447b01b6c2c8f9aaf68bee653be34d4245e238" dependencies = [ "anstream", "anstyle", @@ -1772,21 +1773,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.49" +version = "4.5.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] name = "clap_lex" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" +checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" [[package]] name = "codepage" @@ -1914,9 +1915,9 @@ checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" [[package]] name = "constant_time_eq" -version = "0.3.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" [[package]] name = "convert_case" @@ -2099,7 +2100,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -2124,7 +2125,7 @@ dependencies = [ "quote", "serde", "strsim 0.11.1", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -2135,7 +2136,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -2232,9 +2233,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" +checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" [[package]] name = "der" @@ -2276,7 +2277,7 @@ checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -2305,7 +2306,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -2318,7 +2319,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.112", + "syn 2.0.114", "unicode-xid", ] @@ -2405,7 +2406,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -2461,7 +2462,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -2552,7 +2553,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -2573,7 +2574,7 @@ checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -2593,7 +2594,7 @@ checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -2780,7 +2781,7 @@ dependencies = [ "reqwest 0.11.27", "serde", "serde_json", - "syn 2.0.112", + "syn 2.0.114", "toml", "walkdir", ] @@ -2798,7 +2799,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -2824,7 +2825,7 @@ dependencies = [ "serde", "serde_json", "strum 0.26.3", - "syn 2.0.112", + "syn 2.0.114", "tempfile", "thiserror 1.0.69", "tiny-keccak", @@ -3047,9 +3048,9 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "find-msvc-tools" -version = "0.1.6" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645cbb3a84e60b7531617d5ae4e57f7e27308f6445f5abf653209ea76dec8dff" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "fixed-hash" @@ -3077,9 +3078,9 @@ checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "flate2" -version = "1.1.5" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ "crc32fast", "miniz_oxide", @@ -3209,7 +3210,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -3297,9 +3298,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "js-sys", @@ -3433,7 +3434,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.12.1", + "indexmap 2.13.0", "slab", "tokio", "tokio-util", @@ -3442,9 +3443,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" dependencies = [ "atomic-waker", "bytes", @@ -3452,7 +3453,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.4.0", - "indexmap 2.12.1", + "indexmap 2.13.0", "slab", "tokio", "tokio-util", @@ -3873,7 +3874,7 @@ dependencies = [ "bytes", "futures-channel", "futures-core", - "h2 0.4.12", + "h2 0.4.13", "http 1.4.0", "http-body 1.0.1", "httparse", @@ -3909,12 +3910,12 @@ dependencies = [ "http 1.4.0", "hyper 1.8.1", "hyper-util", - "rustls 0.23.35", + "rustls 0.23.36", "rustls-pki-types", "tokio", "tokio-rustls 0.26.4", "tower-service", - "webpki-roots 1.0.4", + "webpki-roots 1.0.6", ] [[package]] @@ -3947,14 +3948,13 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ "base64 0.22.1", "bytes", "futures-channel", - "futures-core", "futures-util", "http 1.4.0", "http-body 1.0.1", @@ -3963,8 +3963,8 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.1", - "system-configuration 0.6.1", + "socket2 0.6.2", + "system-configuration 0.7.0", "tokio", "tower-service", "tracing", @@ -3973,9 +3973,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.64" +version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -4138,7 +4138,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -4160,9 +4160,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.12.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", "hashbrown 0.16.1", @@ -4292,9 +4292,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.83" +version = "0.3.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" +checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" dependencies = [ "once_cell", "wasm-bindgen", @@ -4355,9 +4355,9 @@ dependencies = [ [[package]] name = "keccak-asm" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" +checksum = "b646a74e746cd25045aa0fd42f4f7f78aa6d119380182c7e63a5593c4ab8df6f" dependencies = [ "digest 0.10.7", "sha3-asm", @@ -4417,9 +4417,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.178" +version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" [[package]] name = "libgit2-sys" @@ -4445,9 +4445,9 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" @@ -4554,7 +4554,7 @@ checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -4603,9 +4603,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.6" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "memuse" @@ -4811,9 +4811,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" [[package]] name = "num-integer" @@ -4900,7 +4900,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -4945,9 +4945,9 @@ dependencies = [ [[package]] name = "nybbles" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c4b5ecbd0beec843101bffe848217f770e8b8da81d8355b7d6e226f2199b3dc" +checksum = "0d49ff0c0d00d4a502b39df9af3a525e1efeb14b9dabb5bb83335284c1309210" dependencies = [ "alloy-rlp", "cfg-if", @@ -5012,7 +5012,7 @@ dependencies = [ "derive_more 2.1.1", "serde", "serde_with", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -5045,7 +5045,7 @@ dependencies = [ "op-alloy-consensus", "serde", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -5060,7 +5060,7 @@ dependencies = [ "alloy-rpc-types-engine", "derive_more 2.1.1", "op-alloy-consensus", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -5120,7 +5120,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -5516,7 +5516,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -5670,9 +5670,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.4" +version = "2.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbcfd20a6d4eeba40179f05735784ad32bdaef05ce8e8af05f180d45bb3e7e22" +checksum = "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662" dependencies = [ "memchr", "ucd-trie", @@ -5685,7 +5685,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset 0.4.2", - "indexmap 2.12.1", + "indexmap 2.13.0", ] [[package]] @@ -5695,7 +5695,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ "fixedbitset 0.5.7", - "indexmap 2.12.1", + "indexmap 2.13.0", ] [[package]] @@ -5759,7 +5759,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -5772,7 +5772,7 @@ dependencies = [ "phf_shared 0.13.1", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -5810,7 +5810,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -5843,9 +5843,9 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "portable-atomic" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] name = "potential_utf" @@ -5894,7 +5894,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -5965,23 +5965,23 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] name = "proc-macro2" -version = "1.0.104" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9695f8df41bb4f3d222c95a67532365f569318332d03d5f3f67f37b20e6ebdf0" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] [[package]] name = "proptest" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee689443a2bd0a16ab0348b52ee43e3b2d1b1f931c8aa5c9f8de4c86fbe8c40" +checksum = "37566cb3fdacef14c0737f9546df7cfeadbfbc9fef10991038bf5015d0c80532" dependencies = [ "bit-set 0.8.0", "bit-vec 0.8.0", @@ -6054,7 +6054,7 @@ dependencies = [ "prost 0.13.5", "prost-types 0.13.5", "regex", - "syn 2.0.112", + "syn 2.0.114", "tempfile", ] @@ -6081,7 +6081,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -6141,9 +6141,9 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash 2.1.1", - "rustls 0.23.35", - "socket2 0.6.1", - "thiserror 2.0.17", + "rustls 0.23.36", + "socket2 0.6.2", + "thiserror 2.0.18", "tokio", "tracing", "web-time", @@ -6161,10 +6161,10 @@ dependencies = [ "rand 0.9.2", "ring 0.17.14", "rustc-hash 2.1.1", - "rustls 0.23.35", + "rustls 0.23.36", "rustls-pki-types", "slab", - "thiserror 2.0.17", + "thiserror 2.0.18", "tinyvec", "tracing", "web-time", @@ -6179,16 +6179,16 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.1", + "socket2 0.6.2", "tracing", "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.42" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" dependencies = [ "proc-macro2", ] @@ -6224,7 +6224,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", - "rand_core 0.9.3", + "rand_core 0.9.5", "serde", ] @@ -6245,7 +6245,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -6254,14 +6254,14 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] name = "rand_core" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ "getrandom 0.3.4", "serde", @@ -6273,7 +6273,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" dependencies = [ - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -6329,7 +6329,7 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "libredox", "thiserror 1.0.69", ] @@ -6351,14 +6351,14 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] name = "regex" -version = "1.12.2" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", @@ -6368,9 +6368,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", @@ -6379,9 +6379,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" +checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" [[package]] name = "reqwest" @@ -6437,7 +6437,7 @@ dependencies = [ "bytes", "encoding_rs", "futures-core", - "h2 0.4.12", + "h2 0.4.13", "http 1.4.0", "http-body 1.0.1", "http-body-util", @@ -6452,7 +6452,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.35", + "rustls 0.23.36", "rustls-pki-types", "serde", "serde_json", @@ -6461,14 +6461,14 @@ dependencies = [ "tokio", "tokio-native-tls", "tokio-rustls 0.26.4", - "tower 0.5.2", + "tower 0.5.3", "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots 1.0.4", + "webpki-roots 1.0.6", ] [[package]] @@ -6495,7 +6495,7 @@ dependencies = [ "anyhow", "async-trait", "futures", - "getrandom 0.2.16", + "getrandom 0.2.17", "http 1.4.0", "hyper 1.8.1", "parking_lot 0.11.2", @@ -6524,7 +6524,7 @@ dependencies = [ "alloy-evm", "alloy-genesis", "alloy-primitives", - "alloy-trie 0.9.2", + "alloy-trie 0.9.4", "auto_impl", "derive_more 2.1.1", "reth-ethereum-forks", @@ -6542,7 +6542,7 @@ dependencies = [ "alloy-eips", "alloy-genesis", "alloy-primitives", - "alloy-trie 0.9.2", + "alloy-trie 0.9.4", "bytes", "modular-bitfield", "op-alloy-consensus", @@ -6558,7 +6558,7 @@ source = "git+https://github.com/ziren-patches/reth?branch=patch-1.9.3#fb7e5b4b3 dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -6571,7 +6571,7 @@ dependencies = [ "auto_impl", "reth-execution-types", "reth-primitives-traits", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -6604,7 +6604,7 @@ dependencies = [ "reth-consensus", "reth-execution-errors", "reth-storage-errors", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -6703,9 +6703,9 @@ dependencies = [ "alloy-evm", "alloy-primitives", "alloy-rlp", - "nybbles 0.4.6", + "nybbles 0.4.8", "reth-storage-errors", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -6732,7 +6732,7 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "serde_with", - "thiserror 2.0.17", + "thiserror 2.0.18", "url", ] @@ -6767,7 +6767,7 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives", - "alloy-trie 0.9.2", + "alloy-trie 0.9.4", "reth-chainspec", "reth-consensus", "reth-consensus-common", @@ -6780,7 +6780,7 @@ dependencies = [ "reth-storage-errors", "reth-trie-common", "revm", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", ] @@ -6808,7 +6808,7 @@ dependencies = [ "reth-primitives-traits", "reth-storage-errors", "revm", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -6850,7 +6850,7 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "alloy-rpc-types-eth", - "alloy-trie 0.9.2", + "alloy-trie 0.9.4", "auto_impl", "bytes", "derive_more 2.1.1", @@ -6863,7 +6863,7 @@ dependencies = [ "secp256k1", "serde", "serde_with", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -6874,7 +6874,7 @@ dependencies = [ "alloy-primitives", "derive_more 2.1.1", "strum 0.27.2", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -6932,7 +6932,7 @@ dependencies = [ "reth-prune-types", "reth-static-file-types", "revm-database-interface", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -6944,7 +6944,7 @@ dependencies = [ "alloy-eips", "alloy-primitives", "alloy-rlp", - "alloy-trie 0.9.2", + "alloy-trie 0.9.4", "auto_impl", "itertools 0.14.0", "reth-execution-errors", @@ -6965,10 +6965,10 @@ dependencies = [ "alloy-consensus", "alloy-primitives", "alloy-rlp", - "alloy-trie 0.9.2", + "alloy-trie 0.9.4", "derive_more 2.1.1", "itertools 0.14.0", - "nybbles 0.4.6", + "nybbles 0.4.8", "rayon", "reth-primitives-traits", "revm-database", @@ -6981,7 +6981,7 @@ source = "git+https://github.com/ziren-patches/reth?branch=patch-1.9.3#fb7e5b4b3 dependencies = [ "alloy-primitives", "alloy-rlp", - "alloy-trie 0.9.2", + "alloy-trie 0.9.4", "auto_impl", "reth-execution-errors", "reth-primitives-traits", @@ -7215,7 +7215,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.16", + "getrandom 0.2.17", "libc", "untrusted 0.9.0", "windows-sys 0.52.0", @@ -7312,9 +7312,9 @@ checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" [[package]] name = "rustc-demangle" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" +checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" [[package]] name = "rustc-hash" @@ -7404,14 +7404,14 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.35" +version = "0.23.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" +checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" dependencies = [ "once_cell", "ring 0.17.14", "rustls-pki-types", - "rustls-webpki 0.103.8", + "rustls-webpki 0.103.9", "subtle", "zeroize", ] @@ -7439,9 +7439,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.13.2" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e6f2ab2928ca4291b86736a8bd920a277a399bba1589409d72154ff87c1282" +checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" dependencies = [ "web-time", "zeroize", @@ -7459,9 +7459,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.8" +version = "0.103.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" +checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" dependencies = [ "ring 0.17.14", "rustls-pki-types", @@ -7488,9 +7488,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "salsa20" @@ -7531,7 +7531,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -7566,9 +7566,9 @@ dependencies = [ [[package]] name = "schemars" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54e910108742c57a770f492731f99be216a52fadd361b06c8fb59d74ccc267d2" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" dependencies = [ "dyn-clone", "ref-cast", @@ -7754,14 +7754,14 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] name = "serde_json" -version = "1.0.148" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3084b546a1dd6289475996f182a22aba973866ea8e8b02c51d9f46b1336a22da" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", @@ -7812,9 +7812,9 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.12.1", + "indexmap 2.13.0", "schemars 0.9.0", - "schemars 1.2.0", + "schemars 1.2.1", "serde_core", "serde_json", "serde_with_macros", @@ -7830,7 +7830,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -7857,11 +7857,12 @@ dependencies = [ [[package]] name = "serial_test" -version = "3.2.0" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b258109f244e1d6891bf1053a55d63a5cd4f8f4c30cf9a1280989f80e7a1fa9" +checksum = "0d0b343e184fc3b7bb44dff0705fffcf4b3756ba6aff420dddd8b24ca145e555" dependencies = [ - "futures", + "futures-executor", + "futures-util", "log", "once_cell", "parking_lot 0.12.5", @@ -7871,13 +7872,13 @@ dependencies = [ [[package]] name = "serial_test_derive" -version = "3.2.0" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" +checksum = "6f50427f258fb77356e4cd4aa0e87e2bd2c66dbcee41dc405282cae2bfc26c83" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -7913,9 +7914,9 @@ dependencies = [ [[package]] name = "sha3-asm" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" +checksum = "b31139435f327c93c6038ed350ae4588e2c70a13d50599509fee6349967ba35a" dependencies = [ "cc", "cfg-if", @@ -7970,15 +7971,15 @@ checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" dependencies = [ "num-bigint 0.4.6", "num-traits", - "thiserror 2.0.17", + "thiserror 2.0.18", "time", ] [[package]] name = "siphasher" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" +checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" [[package]] name = "size" @@ -7988,9 +7989,9 @@ checksum = "9fed904c7fb2856d868b92464fc8fa597fce366edea1a9cbfaa8cb5fe080bd6d" [[package]] name = "slab" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" @@ -8023,9 +8024,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" dependencies = [ "libc", "windows-sys 0.60.2", @@ -8137,7 +8138,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -8149,7 +8150,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -8207,9 +8208,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.112" +version = "2.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21f182278bf2d2bcb3c88b1b08a37df029d71ce3d3ae26168e3c653b213b99d4" +checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" dependencies = [ "proc-macro2", "quote", @@ -8218,14 +8219,14 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "1.5.2" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f92d01b5de07eaf324f7fca61cc6bd3d82bbc1de5b6c963e6fe79e86f36580d" +checksum = "2379beea9476b89d0237078be761cf8e012d92d5ae4ae0c9a329f974838870fc" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -8251,7 +8252,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -8282,9 +8283,9 @@ dependencies = [ [[package]] name = "system-configuration" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ "bitflags 2.10.0", "core-foundation", @@ -8352,11 +8353,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.17", + "thiserror-impl 2.0.18", ] [[package]] @@ -8367,18 +8368,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] name = "thiserror-impl" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -8407,9 +8408,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.44" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", "itoa", @@ -8417,22 +8418,22 @@ dependencies = [ "num-conv", "num_threads", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "time-macros" -version = "0.2.24" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" dependencies = [ "num-conv", "time-core", @@ -8474,9 +8475,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.48.0" +version = "1.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" dependencies = [ "bytes", "libc", @@ -8484,7 +8485,7 @@ dependencies = [ "parking_lot 0.12.5", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.1", + "socket2 0.6.2", "tokio-macros", "windows-sys 0.61.2", ] @@ -8507,7 +8508,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -8547,15 +8548,15 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.35", + "rustls 0.23.36", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" dependencies = [ "futures-core", "pin-project-lite", @@ -8586,7 +8587,7 @@ checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" dependencies = [ "futures-util", "log", - "rustls 0.23.35", + "rustls 0.23.36", "rustls-pki-types", "tokio", "tokio-rustls 0.26.4", @@ -8596,9 +8597,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.17" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", @@ -8643,7 +8644,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.12.1", + "indexmap 2.13.0", "serde", "serde_spanned", "toml_datetime 0.6.11", @@ -8657,7 +8658,7 @@ version = "0.23.10+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" dependencies = [ - "indexmap 2.12.1", + "indexmap 2.13.0", "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "winnow", @@ -8748,9 +8749,9 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", @@ -8775,7 +8776,7 @@ dependencies = [ "http-body 1.0.1", "iri-string", "pin-project-lite", - "tower 0.5.2", + "tower 0.5.3", "tower-layer", "tower-service", ] @@ -8812,7 +8813,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -8925,10 +8926,10 @@ dependencies = [ "httparse", "log", "rand 0.9.2", - "rustls 0.23.35", + "rustls 0.23.36", "rustls-pki-types", "sha1", - "thiserror 2.0.17", + "thiserror 2.0.18", "utf-8", ] @@ -8959,7 +8960,7 @@ dependencies = [ "serde_json", "thiserror 1.0.69", "tokio", - "tower 0.5.2", + "tower 0.5.3", "url", ] @@ -8995,9 +8996,9 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unicode-ident" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +checksum = "537dd038a89878be9b64dd4bd1b260315c1bb94f4d784956b81e27a088d9a09e" [[package]] name = "unicode-segmentation" @@ -9041,9 +9042,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.7" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", @@ -9075,34 +9076,22 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "serde", ] [[package]] name = "uuid" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" +checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f" dependencies = [ "getrandom 0.3.4", "js-sys", "rand 0.9.2", - "uuid-macro-internal", "wasm-bindgen", ] -[[package]] -name = "uuid-macro-internal" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39d11901c36b3650df7acb0f9ebe624f35b5ac4e1922ecd3c57f444648429594" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.112", -] - [[package]] name = "valuable" version = "0.1.1" @@ -9179,18 +9168,18 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.1+wasi-0.2.4" +version = "1.0.2+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" dependencies = [ "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.106" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" +checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" dependencies = [ "cfg-if", "once_cell", @@ -9201,11 +9190,12 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.56" +version = "0.4.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" +checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f" dependencies = [ "cfg-if", + "futures-util", "js-sys", "once_cell", "wasm-bindgen", @@ -9214,9 +9204,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.106" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" +checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -9224,22 +9214,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.106" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" +checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.106" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" +checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" dependencies = [ "unicode-ident", ] @@ -9288,9 +9278,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.83" +version = "0.3.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" +checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" dependencies = [ "js-sys", "wasm-bindgen", @@ -9328,14 +9318,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.4", + "webpki-roots 1.0.6", ] [[package]] name = "webpki-roots" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e" +checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" dependencies = [ "rustls-pki-types", ] @@ -9429,7 +9419,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -9440,7 +9430,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -9730,9 +9720,9 @@ dependencies = [ [[package]] name = "wit-bindgen" -version = "0.46.0" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" [[package]] name = "witness-db" @@ -9765,7 +9755,7 @@ dependencies = [ "pharos", "rustc_version 0.4.1", "send_wrapper 0.6.0", - "thiserror 2.0.17", + "thiserror 2.0.18", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -9814,28 +9804,28 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.31" +version = "0.8.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" +checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.31" +version = "0.8.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" +checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -9855,7 +9845,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", "synstructure", ] @@ -9876,7 +9866,7 @@ checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -9909,7 +9899,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.114", ] [[package]] @@ -9961,8 +9951,8 @@ dependencies = [ [[package]] name = "zkm-build" -version = "1.2.3" -source = "git+https://github.com/ProjectZKM/Ziren#44c893854e3ff79afdfb561cd22e0bd6a5d3a385" +version = "1.2.4" +source = "git+https://github.com/ProjectZKM/Ziren#2551aa251e34266a9e60bca0e440081b8b04f1e9" dependencies = [ "anyhow", "cargo_metadata", @@ -9972,8 +9962,8 @@ dependencies = [ [[package]] name = "zkm-core-executor" -version = "1.2.3" -source = "git+https://github.com/ProjectZKM/Ziren#44c893854e3ff79afdfb561cd22e0bd6a5d3a385" +version = "1.2.4" +source = "git+https://github.com/ProjectZKM/Ziren#2551aa251e34266a9e60bca0e440081b8b04f1e9" dependencies = [ "anyhow", "bincode", @@ -10010,8 +10000,8 @@ dependencies = [ [[package]] name = "zkm-core-machine" -version = "1.2.3" -source = "git+https://github.com/ProjectZKM/Ziren#44c893854e3ff79afdfb561cd22e0bd6a5d3a385" +version = "1.2.4" +source = "git+https://github.com/ProjectZKM/Ziren#2551aa251e34266a9e60bca0e440081b8b04f1e9" dependencies = [ "bincode", "cfg-if", @@ -10062,8 +10052,8 @@ dependencies = [ [[package]] name = "zkm-cuda" -version = "1.2.3" -source = "git+https://github.com/ProjectZKM/Ziren#44c893854e3ff79afdfb561cd22e0bd6a5d3a385" +version = "1.2.4" +source = "git+https://github.com/ProjectZKM/Ziren#2551aa251e34266a9e60bca0e440081b8b04f1e9" dependencies = [ "bincode", "ctrlc", @@ -10080,8 +10070,8 @@ dependencies = [ [[package]] name = "zkm-curves" -version = "1.2.3" -source = "git+https://github.com/ProjectZKM/Ziren#44c893854e3ff79afdfb561cd22e0bd6a5d3a385" +version = "1.2.4" +source = "git+https://github.com/ProjectZKM/Ziren#2551aa251e34266a9e60bca0e440081b8b04f1e9" dependencies = [ "cfg-if", "curve25519-dalek", @@ -10104,8 +10094,8 @@ dependencies = [ [[package]] name = "zkm-derive" -version = "1.2.3" -source = "git+https://github.com/ProjectZKM/Ziren#44c893854e3ff79afdfb561cd22e0bd6a5d3a385" +version = "1.2.4" +source = "git+https://github.com/ProjectZKM/Ziren#2551aa251e34266a9e60bca0e440081b8b04f1e9" dependencies = [ "quote", "syn 1.0.109", @@ -10113,8 +10103,8 @@ dependencies = [ [[package]] name = "zkm-lib" -version = "1.2.3" -source = "git+https://github.com/ProjectZKM/Ziren#44c893854e3ff79afdfb561cd22e0bd6a5d3a385" +version = "1.2.4" +source = "git+https://github.com/ProjectZKM/Ziren#2551aa251e34266a9e60bca0e440081b8b04f1e9" dependencies = [ "bincode", "cfg-if", @@ -10126,8 +10116,8 @@ dependencies = [ [[package]] name = "zkm-primitives" -version = "1.2.3" -source = "git+https://github.com/ProjectZKM/Ziren#44c893854e3ff79afdfb561cd22e0bd6a5d3a385" +version = "1.2.4" +source = "git+https://github.com/ProjectZKM/Ziren#2551aa251e34266a9e60bca0e440081b8b04f1e9" dependencies = [ "bincode", "hex", @@ -10144,8 +10134,8 @@ dependencies = [ [[package]] name = "zkm-prover" -version = "1.2.3" -source = "git+https://github.com/ProjectZKM/Ziren#44c893854e3ff79afdfb561cd22e0bd6a5d3a385" +version = "1.2.4" +source = "git+https://github.com/ProjectZKM/Ziren#2551aa251e34266a9e60bca0e440081b8b04f1e9" dependencies = [ "anyhow", "bincode", @@ -10182,8 +10172,8 @@ dependencies = [ [[package]] name = "zkm-recursion-circuit" -version = "1.2.3" -source = "git+https://github.com/ProjectZKM/Ziren#44c893854e3ff79afdfb561cd22e0bd6a5d3a385" +version = "1.2.4" +source = "git+https://github.com/ProjectZKM/Ziren#2551aa251e34266a9e60bca0e440081b8b04f1e9" dependencies = [ "hashbrown 0.14.5", "itertools 0.13.0", @@ -10215,8 +10205,8 @@ dependencies = [ [[package]] name = "zkm-recursion-compiler" -version = "1.2.3" -source = "git+https://github.com/ProjectZKM/Ziren#44c893854e3ff79afdfb561cd22e0bd6a5d3a385" +version = "1.2.4" +source = "git+https://github.com/ProjectZKM/Ziren#2551aa251e34266a9e60bca0e440081b8b04f1e9" dependencies = [ "backtrace", "itertools 0.13.0", @@ -10236,8 +10226,8 @@ dependencies = [ [[package]] name = "zkm-recursion-core" -version = "1.2.3" -source = "git+https://github.com/ProjectZKM/Ziren#44c893854e3ff79afdfb561cd22e0bd6a5d3a385" +version = "1.2.4" +source = "git+https://github.com/ProjectZKM/Ziren#2551aa251e34266a9e60bca0e440081b8b04f1e9" dependencies = [ "backtrace", "ff 0.13.1", @@ -10273,8 +10263,8 @@ dependencies = [ [[package]] name = "zkm-recursion-derive" -version = "1.2.3" -source = "git+https://github.com/ProjectZKM/Ziren#44c893854e3ff79afdfb561cd22e0bd6a5d3a385" +version = "1.2.4" +source = "git+https://github.com/ProjectZKM/Ziren#2551aa251e34266a9e60bca0e440081b8b04f1e9" dependencies = [ "quote", "syn 1.0.109", @@ -10282,8 +10272,8 @@ dependencies = [ [[package]] name = "zkm-recursion-gnark-ffi" -version = "1.2.3" -source = "git+https://github.com/ProjectZKM/Ziren#44c893854e3ff79afdfb561cd22e0bd6a5d3a385" +version = "1.2.4" +source = "git+https://github.com/ProjectZKM/Ziren#2551aa251e34266a9e60bca0e440081b8b04f1e9" dependencies = [ "anyhow", "bincode", @@ -10306,11 +10296,11 @@ dependencies = [ [[package]] name = "zkm-sdk" -version = "1.2.3" -source = "git+https://github.com/ProjectZKM/Ziren#44c893854e3ff79afdfb561cd22e0bd6a5d3a385" +version = "1.2.4" +source = "git+https://github.com/ProjectZKM/Ziren#2551aa251e34266a9e60bca0e440081b8b04f1e9" dependencies = [ "alloy-primitives", - "alloy-signer 1.2.1", + "alloy-signer 1.6.1", "anyhow", "async-trait", "bincode", @@ -10340,7 +10330,7 @@ dependencies = [ "tonic-build", "tracing", "twirp-rs", - "uuid 1.19.0", + "uuid 1.20.0", "vergen", "zkm-build", "zkm-core-executor", @@ -10353,8 +10343,8 @@ dependencies = [ [[package]] name = "zkm-stark" -version = "1.2.3" -source = "git+https://github.com/ProjectZKM/Ziren#44c893854e3ff79afdfb561cd22e0bd6a5d3a385" +version = "1.2.4" +source = "git+https://github.com/ProjectZKM/Ziren#2551aa251e34266a9e60bca0e440081b8b04f1e9" dependencies = [ "arrayref", "hashbrown 0.14.5", @@ -10395,12 +10385,12 @@ dependencies = [ [[package]] name = "zkm-zkvm" -version = "1.2.3" -source = "git+https://github.com/ProjectZKM/Ziren#44c893854e3ff79afdfb561cd22e0bd6a5d3a385" +version = "1.2.4" +source = "git+https://github.com/ProjectZKM/Ziren#2551aa251e34266a9e60bca0e440081b8b04f1e9" dependencies = [ "bincode", "cfg-if", - "getrandom 0.2.16", + "getrandom 0.2.17", "lazy_static", "libm", "rand 0.8.5", @@ -10412,9 +10402,9 @@ dependencies = [ [[package]] name = "zmij" -version = "1.0.5" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3280a1b827474fcd5dbef4b35a674deb52ba5c312363aef9135317df179d81b" +checksum = "4de98dfa5d5b7fef4ee834d0073d560c9ca7b6c46a71d058c48db7960f8cfaf7" [[package]] name = "zstd" diff --git a/crates/mpt/src/mpt.rs b/crates/mpt/src/mpt.rs index 9fb7b35..5b6a169 100644 --- a/crates/mpt/src/mpt.rs +++ b/crates/mpt/src/mpt.rs @@ -926,7 +926,7 @@ pub fn to_nibs(slice: &[u8]) -> Vec { /// bytes. pub fn to_encoded_path(mut nibs: &[u8], is_leaf: bool) -> Vec { let mut prefix = (is_leaf as u8) * 0x20; - if nibs.len() % 2 != 0 { + if !nibs.len().is_multiple_of(2) { prefix += 0x10 + nibs[0]; nibs = &nibs[1..]; } @@ -986,7 +986,7 @@ pub fn mpt_from_proof(proof_nodes: &[MptNode]) -> Result, } -#[derive(Debug)] pub struct ExecutionWitnessRpcDb { /// The provider which fetches data. pub provider: P, - /// The cached state. + /// The cached state (may be incomplete for fallback accounts). pub state: EthereumState, /// The cached bytecodes. pub codes: HashMap, - + /// Ancestor headers for BLOCKHASH opcode. pub ancestor_headers: HashMap, + /// The parent block number (for RPC fallback queries). + parent_block_number: u64, + /// The state root used to build the EthereumState. + state_root: B256, + /// The original witness state nodes (for rebuilding with additional proofs). + raw_state_nodes: Vec, + /// Addresses that needed RPC fallback due to incomplete witness. + fallback_addresses: RwLock>, phantom: PhantomData, } +impl std::fmt::Debug for ExecutionWitnessRpcDb { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("ExecutionWitnessRpcDb") + .field("provider", &self.provider) + .field("state", &self.state) + .field("codes", &self.codes) + .field("ancestor_headers", &self.ancestor_headers) + .field("parent_block_number", &self.parent_block_number) + .field("state_root", &self.state_root) + .field("raw_state_nodes_len", &self.raw_state_nodes.len()) + .field("fallback_addresses", &*self.fallback_addresses.read().unwrap()) + .finish() + } +} + impl + Clone, N: Network> ExecutionWitnessRpcDb { /// Create a new [`ExecutionWitnessRpcDb`]. pub async fn new( @@ -45,7 +67,7 @@ impl + Clone, N: Network> ExecutionWitnessRpcDb { state_root: B256, is_goat_testnet: bool, ) -> Result { - let (state, codes, headers) = if is_goat_testnet { + let (state_nodes, codes, headers) = if is_goat_testnet { let execution_witness: ExecutionWitnessGoat = provider .raw_request( "debug_executionWitness".into(), @@ -67,17 +89,117 @@ impl + Clone, N: Network> ExecutionWitnessRpcDb { }; tracing::info!("fetch execution witness for block {}", block_number + 1); - let state = EthereumState::from_execution_witness(&state, state_root); + let state = EthereumState::from_execution_witness(&state_nodes, state_root); let codes = codes .into_iter() .map(|encoded| (keccak256(&encoded), Bytecode::new_raw(encoded))) .collect(); let ancestor_headers = headers.into_iter().map(|h| (h.number, h)).collect(); - let db = Self { provider, state, codes, ancestor_headers, phantom: PhantomData }; + let db = Self { + provider, + state, + codes, + ancestor_headers, + parent_block_number: block_number, + state_root, + raw_state_nodes: state_nodes, + fallback_addresses: RwLock::new(Vec::new()), + phantom: PhantomData, + }; Ok(db) } + + /// Fetch account info via RPC when witness data is incomplete. + /// Records the address for later proof fetching. + fn fetch_account_via_rpc(&self, address: Address) -> Result, ProviderError> + where + P: Clone, + { + // Use tokio runtime to execute async RPC calls from sync context + let handle = tokio::runtime::Handle::current(); + let provider = self.provider.clone(); + let block_tag = BlockNumberOrTag::Number(self.parent_block_number); + + let result: Result<(U256, u64, Bytecode), Box> = + tokio::task::block_in_place(|| { + handle.block_on(async { + // Fetch balance, nonce and code in parallel + let balance_fut = provider.get_balance(address).block_id(block_tag.into()); + let nonce_fut = + provider.get_transaction_count(address).block_id(block_tag.into()); + let code_fut = provider.get_code_at(address).block_id(block_tag.into()); + + let (balance, nonce, code) = + tokio::try_join!(balance_fut, nonce_fut, code_fut)?; + let bytecode = Bytecode::new_raw(code); + + Ok((balance, nonce, bytecode)) + }) + }); + + match result { + Ok((balance, nonce, bytecode)) => { + // Record this address for proof fetching in state() + self.fallback_addresses.write().unwrap().push(address); + + // If balance, nonce and code are all zero/empty, treat as non-existent + if balance.is_zero() && nonce == 0 && bytecode.is_empty() { + tracing::debug!( + "RPC fallback: address {:?} has zero balance, nonce and empty code, treating as non-existent", + address + ); + Ok(None) + } else { + let code_hash = bytecode.hash_slow(); + tracing::debug!( + "RPC fallback: address {:?} has balance={}, nonce={}, code_hash={}", + address, + balance, + nonce, + code_hash + ); + Ok(Some(AccountInfo { balance, nonce, code_hash, code: Some(bytecode) })) + } + } + Err(err) => { + tracing::error!("RPC fallback failed for address {:?}: {}", address, err); + Err(ProviderError::TrieWitnessError(format!("RPC fallback failed: {}", err))) + } + } + } + + /// Fetches proofs for fallback addresses and returns merged state nodes. + async fn get_merged_state_nodes(&self) -> Result, RpcDbError> + where + P: Clone, + { + let fallback_addrs: Vec

= self.fallback_addresses.read().unwrap().clone(); + if fallback_addrs.is_empty() { + return Ok(self.raw_state_nodes.clone()); + } + tracing::info!( + "Fetching proofs for {} fallback addresses to complete witness", + fallback_addrs.len() + ); + + let block_tag = BlockNumberOrTag::Number(self.parent_block_number); + let mut merged_nodes = self.raw_state_nodes.clone(); + for address in fallback_addrs { + // Fetch the account proof via eth_getProof + let proof = self.provider.get_proof(address, vec![]).block_id(block_tag.into()).await?; + let node_count = proof.account_proof.len(); + // Add proof nodes to the merged list + for node in proof.account_proof { + merged_nodes.push(node); + } + + tracing::debug!("Added {} proof nodes for address {:?}", node_count, address); + } + + Ok(merged_nodes) + } } impl + Clone, N: Network> DatabaseRef for ExecutionWitnessRpcDb { @@ -108,6 +230,17 @@ impl + Clone, N: Network> DatabaseRef for ExecutionWitnessRpcDb

Result { - Ok(self.state.clone()) + // Merge original witness nodes with proofs for fallback addresses + let merged_nodes = self.get_merged_state_nodes().await?; + + // Rebuild EthereumState with complete witness data + let state = EthereumState::from_execution_witness(&merged_nodes, self.state_root); + + Ok(state) } fn bytecodes(&self) -> Vec {