From f529984c368c508d47611aaffb061050c62e6f03 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Tue, 13 Jan 2026 15:45:54 -0300 Subject: [PATCH 01/46] change output structure --- .../stateless-validator-common/src/guest.rs | 25 ++++++++----------- crates/stateless-validator-common/src/host.rs | 13 ---------- crates/stateless-validator-common/src/lib.rs | 3 +++ 3 files changed, 13 insertions(+), 28 deletions(-) diff --git a/crates/stateless-validator-common/src/guest.rs b/crates/stateless-validator-common/src/guest.rs index 99966ae1..0a826a29 100644 --- a/crates/stateless-validator-common/src/guest.rs +++ b/crates/stateless-validator-common/src/guest.rs @@ -1,34 +1,30 @@ //! Stateless validator common types and utilities for guest. +use crate::execution_payload::NewPayloadRequest; + /// Static size of [`StatelessValidatorOutput`]. pub const STATELESS_VALIDATOR_OUTPUT_SIZE: usize = size_of::(); /// Output of stateless validator guest program. -#[derive(Clone, Copy, Debug, PartialEq, Eq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] #[cfg_attr( feature = "rkyv", derive(rkyv::Serialize, rkyv::Deserialize, rkyv::Archive) )] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] pub struct StatelessValidatorOutput { - /// Block hash - pub block_hash: [u8; 32], - /// Parent hash - pub parent_hash: [u8; 32], + /// New execution payload request root. + pub new_payload_request_root: [u8; 32], /// Stateless validation is successful or not. pub successful_block_validation: bool, } impl StatelessValidatorOutput { /// Constructs a new [`StatelessValidatorOutput`]. - pub fn new( - block_hash: impl Into<[u8; 32]>, - parent_hash: impl Into<[u8; 32]>, - successful_block_validation: bool, - ) -> Self { + pub fn new(new_payload_request: &NewPayloadRequest, successful_block_validation: bool) -> Self { + let new_payload_request_root = new_payload_request.tree_hash_root(); Self { - block_hash: block_hash.into(), - parent_hash: parent_hash.into(), + new_payload_request_root, successful_block_validation, } } @@ -36,9 +32,8 @@ impl StatelessValidatorOutput { /// Returns serialized output. pub fn serialize(&self) -> [u8; STATELESS_VALIDATOR_OUTPUT_SIZE] { let mut buf = [0; STATELESS_VALIDATOR_OUTPUT_SIZE]; - buf[0..32].copy_from_slice(&self.block_hash); - buf[32..64].copy_from_slice(&self.parent_hash); - buf[64] = self.successful_block_validation as u8; + buf[0..32].copy_from_slice(&self.new_payload_request_root); + buf[32] = self.successful_block_validation as u8; buf } } diff --git a/crates/stateless-validator-common/src/host.rs b/crates/stateless-validator-common/src/host.rs index 8de6b05b..21ba28ce 100644 --- a/crates/stateless-validator-common/src/host.rs +++ b/crates/stateless-validator-common/src/host.rs @@ -4,20 +4,7 @@ use sha2::{Digest, Sha256}; use crate::guest::StatelessValidatorOutput; -#[rustfmt::skip] -pub use reth_stateless::StatelessInput; - impl StatelessValidatorOutput { - /// Constructs a output from [`StatelessInput`] and an bool indicating - /// whehter the stateless validation is successful or not. - pub fn from_stateless_input(stateless_input: &StatelessInput, success: bool) -> Self { - Self::new( - stateless_input.block.hash_slow(), - stateless_input.block.parent_hash, - success, - ) - } - /// Returns sha256 digest of serialized output. pub fn sha256(&self) -> [u8; 32] { Sha256::digest(self.serialize()).into() diff --git a/crates/stateless-validator-common/src/lib.rs b/crates/stateless-validator-common/src/lib.rs index 95fde180..46a8b6d0 100644 --- a/crates/stateless-validator-common/src/lib.rs +++ b/crates/stateless-validator-common/src/lib.rs @@ -2,6 +2,9 @@ #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; + +pub mod execution_payload; pub mod guest; #[cfg(feature = "host")] From c857648891f55b8dcb43d3a0c9bb6cf6a8cd5807 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Tue, 13 Jan 2026 15:47:02 -0300 Subject: [PATCH 02/46] add execution payload definitions and utilities --- .../src/execution_payload.rs | 590 ++++++++++++++++++ 1 file changed, 590 insertions(+) create mode 100644 crates/stateless-validator-common/src/execution_payload.rs diff --git a/crates/stateless-validator-common/src/execution_payload.rs b/crates/stateless-validator-common/src/execution_payload.rs new file mode 100644 index 00000000..b4ca11c1 --- /dev/null +++ b/crates/stateless-validator-common/src/execution_payload.rs @@ -0,0 +1,590 @@ +//! Execution payload types for zkVM guest programs. + +#![allow(missing_docs)] + +use alloc::vec::Vec; + +use anyhow::{Context, Result}; +use serde::{Deserialize, Serialize}; +use serde_with::{Bytes, serde_as}; +use ssz::{Decode, Encode}; +use ssz_types::{FixedVector, VariableList}; +use tree_hash::{Hash256, TreeHash, TreeHashType, merkle_root, mix_in_length}; +use tree_hash_derive::TreeHash; + +pub type Hash32 = [u8; 32]; +pub type Address20 = [u8; 20]; +pub type LogsBloom = FixedVector; +pub type ExtraData = VariableList; +pub type Uint256Bytes = [u8; 32]; + +pub type MaxWithdrawalsPerPayload = typenum::U16; +pub type MaxBlobCommitmentsPerBlock = typenum::U4096; + +pub type MaxDepositRequestsPerPayload = typenum::U8192; // 2^13 +pub type MaxWithdrawalRequestsPerPayload = typenum::U16; // 2^4 +pub type MaxConsolidationRequestsPerPayload = typenum::U2; // 2^1 + +pub type Bytes48 = [u8; 48]; +pub type Bytes96 = [u8; 96]; + +pub const MAX_BYTES_PER_TRANSACTION: usize = 1 << 30; // 2^30 +pub const MAX_TRANSACTIONS_PER_PAYLOAD: usize = 1 << 20; // 2^20 +const BYTES_PER_CHUNK: usize = 32; + +#[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +pub struct Withdrawal { + pub index: u64, + pub validator_index: u64, + pub address: Address20, + pub amount: u64, +} + +#[serde_as] +#[derive( + Debug, Clone, Serialize, Deserialize, TreeHash, ssz_derive::Encode, ssz_derive::Decode, +)] +pub struct DepositRequest { + #[serde_as(as = "Bytes")] + pub pubkey: Bytes48, + pub withdrawal_credentials: Hash32, + pub amount: u64, + #[serde_as(as = "Bytes")] + pub signature: Bytes96, + pub index: u64, +} + +#[serde_as] +#[derive( + Debug, Clone, TreeHash, Serialize, Deserialize, ssz_derive::Encode, ssz_derive::Decode, +)] +pub struct WithdrawalRequest { + pub source_address: Address20, + #[serde_as(as = "Bytes")] + pub validator_pubkey: Bytes48, + pub amount: u64, +} + +#[serde_as] +#[derive( + Debug, Clone, TreeHash, Serialize, Deserialize, ssz_derive::Encode, ssz_derive::Decode, +)] +pub struct ConsolidationRequest { + pub source_address: Address20, + #[serde_as(as = "Bytes")] + pub source_pubkey: Bytes48, + #[serde_as(as = "Bytes")] + pub target_pubkey: Bytes48, +} + +#[derive(Debug, Clone, Default, Serialize, Deserialize, TreeHash)] +pub struct ExecutionRequests { + pub deposits: VariableList, + pub withdrawals: VariableList, + pub consolidations: VariableList, +} + +#[derive(Debug, Clone, Copy)] +pub enum ForkName { + Bellatrix, + Capella, + Deneb, + Electra, +} + +/// ExecutionPayloadV1 (Bellatrix) +#[serde_as] +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ExecutionPayloadV1 { + pub parent_hash: Hash32, + pub fee_recipient: Address20, + pub state_root: Hash32, + pub receipts_root: Hash32, + pub logs_bloom: LogsBloom, + pub prev_randao: Hash32, + pub block_number: u64, + pub gas_limit: u64, + pub gas_used: u64, + pub timestamp: u64, + pub extra_data: ExtraData, + pub base_fee_per_gas: Uint256Bytes, + pub block_hash: Hash32, + #[serde_as(as = "Vec")] + pub transactions: Vec>, +} + +/// ExecutionPayloadV2 (Capella) +#[serde_as] +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ExecutionPayloadV2 { + pub parent_hash: Hash32, + pub fee_recipient: Address20, + pub state_root: Hash32, + pub receipts_root: Hash32, + pub logs_bloom: LogsBloom, + pub prev_randao: Hash32, + pub block_number: u64, + pub gas_limit: u64, + pub gas_used: u64, + pub timestamp: u64, + pub extra_data: ExtraData, + pub base_fee_per_gas: Uint256Bytes, + pub block_hash: Hash32, + #[serde_as(as = "Vec")] + pub transactions: Vec>, + pub withdrawals: Vec, +} + +/// ExecutionPayloadV3 (Deneb/Electra) +#[serde_as] +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ExecutionPayloadV3 { + pub parent_hash: Hash32, + pub fee_recipient: Address20, + pub state_root: Hash32, + pub receipts_root: Hash32, + pub logs_bloom: LogsBloom, + pub prev_randao: Hash32, + pub block_number: u64, + pub gas_limit: u64, + pub gas_used: u64, + pub timestamp: u64, + pub extra_data: ExtraData, + pub base_fee_per_gas: Uint256Bytes, + pub block_hash: Hash32, + #[serde_as(as = "Vec")] + pub transactions: Vec>, + pub withdrawals: Vec, + pub blob_gas_used: u64, + pub excess_blob_gas: u64, +} + +/// Computes the SSZ tree hash root of the transactions list. +fn compute_transactions_root(transactions: &[Vec]) -> Hash32 { + let tx_leaf_limit = MAX_BYTES_PER_TRANSACTION / BYTES_PER_CHUNK; + + let tx_roots: Vec = transactions + .iter() + .map(|tx| { + let root = merkle_root(tx.as_ref(), tx_leaf_limit); + mix_in_length(&root, tx.len()) + }) + .collect(); + + let roots_bytes: Vec = tx_roots.iter().flat_map(|h| h.0).collect(); + let list_root = merkle_root(&roots_bytes, MAX_TRANSACTIONS_PER_PAYLOAD); + mix_in_length(&list_root, transactions.len()).0 +} + +/// Computes the SSZ tree hash root of the withdrawals list. +fn compute_withdrawals_root(withdrawals: &[Withdrawal]) -> Hash32 { + type Withdrawals = VariableList; + Withdrawals::from(withdrawals.to_vec()).tree_hash_root().0 +} + +impl TreeHash for ExecutionPayloadV1 { + fn tree_hash_type() -> TreeHashType { + TreeHashType::Container + } + + fn tree_hash_packed_encoding(&self) -> tree_hash::PackedEncoding { + unreachable!("Container types should not be packed") + } + + fn tree_hash_packing_factor() -> usize { + unreachable!("Container types should not be packed") + } + + fn tree_hash_root(&self) -> Hash256 { + // Compute transactions root from actual data + let transactions_root = compute_transactions_root(&self.transactions); + + // Build header struct for tree hashing + #[derive(TreeHash)] + struct HeaderV1 { + parent_hash: Hash32, + fee_recipient: Address20, + state_root: Hash32, + receipts_root: Hash32, + logs_bloom: LogsBloom, + prev_randao: Hash32, + block_number: u64, + gas_limit: u64, + gas_used: u64, + timestamp: u64, + extra_data: ExtraData, + base_fee_per_gas: Uint256Bytes, + block_hash: Hash32, + transactions_root: Hash32, + } + + let header = HeaderV1 { + parent_hash: self.parent_hash, + fee_recipient: self.fee_recipient, + state_root: self.state_root, + receipts_root: self.receipts_root, + logs_bloom: self.logs_bloom.clone(), + prev_randao: self.prev_randao, + block_number: self.block_number, + gas_limit: self.gas_limit, + gas_used: self.gas_used, + timestamp: self.timestamp, + extra_data: self.extra_data.clone(), + base_fee_per_gas: self.base_fee_per_gas, + block_hash: self.block_hash, + transactions_root, + }; + + header.tree_hash_root() + } +} + +impl TreeHash for ExecutionPayloadV2 { + fn tree_hash_type() -> TreeHashType { + TreeHashType::Container + } + + fn tree_hash_packed_encoding(&self) -> tree_hash::PackedEncoding { + unreachable!("Container types should not be packed") + } + + fn tree_hash_packing_factor() -> usize { + unreachable!("Container types should not be packed") + } + + fn tree_hash_root(&self) -> Hash256 { + let transactions_root = compute_transactions_root(&self.transactions); + let withdrawals_root = compute_withdrawals_root(&self.withdrawals); + + #[derive(TreeHash)] + struct HeaderV2 { + parent_hash: Hash32, + fee_recipient: Address20, + state_root: Hash32, + receipts_root: Hash32, + logs_bloom: LogsBloom, + prev_randao: Hash32, + block_number: u64, + gas_limit: u64, + gas_used: u64, + timestamp: u64, + extra_data: ExtraData, + base_fee_per_gas: Uint256Bytes, + block_hash: Hash32, + transactions_root: Hash32, + withdrawals_root: Hash32, + } + + let header = HeaderV2 { + parent_hash: self.parent_hash, + fee_recipient: self.fee_recipient, + state_root: self.state_root, + receipts_root: self.receipts_root, + logs_bloom: self.logs_bloom.clone(), + prev_randao: self.prev_randao, + block_number: self.block_number, + gas_limit: self.gas_limit, + gas_used: self.gas_used, + timestamp: self.timestamp, + extra_data: self.extra_data.clone(), + base_fee_per_gas: self.base_fee_per_gas, + block_hash: self.block_hash, + transactions_root, + withdrawals_root, + }; + + header.tree_hash_root() + } +} + +impl TreeHash for ExecutionPayloadV3 { + fn tree_hash_type() -> TreeHashType { + TreeHashType::Container + } + + fn tree_hash_packed_encoding(&self) -> tree_hash::PackedEncoding { + unreachable!("Container types should not be packed") + } + + fn tree_hash_packing_factor() -> usize { + unreachable!("Container types should not be packed") + } + + fn tree_hash_root(&self) -> Hash256 { + let transactions_root = compute_transactions_root(&self.transactions); + let withdrawals_root = compute_withdrawals_root(&self.withdrawals); + + #[derive(TreeHash)] + struct HeaderV3 { + parent_hash: Hash32, + fee_recipient: Address20, + state_root: Hash32, + receipts_root: Hash32, + logs_bloom: LogsBloom, + prev_randao: Hash32, + block_number: u64, + gas_limit: u64, + gas_used: u64, + timestamp: u64, + extra_data: ExtraData, + base_fee_per_gas: Uint256Bytes, + block_hash: Hash32, + transactions_root: Hash32, + withdrawals_root: Hash32, + blob_gas_used: u64, + excess_blob_gas: u64, + } + + let header = HeaderV3 { + parent_hash: self.parent_hash, + fee_recipient: self.fee_recipient, + state_root: self.state_root, + receipts_root: self.receipts_root, + logs_bloom: self.logs_bloom.clone(), + prev_randao: self.prev_randao, + block_number: self.block_number, + gas_limit: self.gas_limit, + gas_used: self.gas_used, + timestamp: self.timestamp, + extra_data: self.extra_data.clone(), + base_fee_per_gas: self.base_fee_per_gas, + block_hash: self.block_hash, + transactions_root, + withdrawals_root, + blob_gas_used: self.blob_gas_used, + excess_blob_gas: self.excess_blob_gas, + }; + + header.tree_hash_root() + } +} + +// ============================================================================ +// NewPayloadRequest types +// ============================================================================ + +#[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +pub struct NewPayloadRequestBellatrix { + pub execution_payload: ExecutionPayloadV1, +} + +#[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +pub struct NewPayloadRequestCapella { + pub execution_payload: ExecutionPayloadV2, +} + +#[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +pub struct NewPayloadRequestDeneb { + pub execution_payload: ExecutionPayloadV3, + pub versioned_hashes: VariableList, + pub parent_beacon_block_root: Hash32, +} + +#[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +pub struct NewPayloadRequestElectra { + pub execution_payload: ExecutionPayloadV3, + pub versioned_hashes: VariableList, + pub parent_beacon_block_root: Hash32, + pub execution_requests: ExecutionRequests, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum NewPayloadRequest { + Bellatrix(NewPayloadRequestBellatrix), + Capella(NewPayloadRequestCapella), + Deneb(NewPayloadRequestDeneb), + Electra(NewPayloadRequestElectra), +} + +impl NewPayloadRequest { + pub fn new_bellatrix(execution_payload: ExecutionPayloadV1) -> Self { + NewPayloadRequest::Bellatrix(NewPayloadRequestBellatrix { execution_payload }) + } + + pub fn new_capella(execution_payload: ExecutionPayloadV2) -> Self { + NewPayloadRequest::Capella(NewPayloadRequestCapella { execution_payload }) + } + + pub fn new_deneb( + execution_payload: ExecutionPayloadV3, + versioned_hashes: Vec, + parent_beacon_block_root: Hash32, + ) -> Result { + let versioned_hashes = + VariableList::::new(versioned_hashes).map_err( + |err| { + anyhow::anyhow!( + "Versioned hashes length should be within bounds for MaxBlobCommitmentsPerBlock: {:?}", + err + ) + }, + )?; + Ok(NewPayloadRequest::Deneb(NewPayloadRequestDeneb { + execution_payload, + versioned_hashes, + parent_beacon_block_root, + })) + } + + pub fn new_electra( + execution_payload: ExecutionPayloadV3, + versioned_hashes: Vec, + parent_beacon_block_root: Hash32, + execution_requests: &[impl AsRef<[u8]>], + ) -> Result { + let versioned_hashes = + VariableList::::new(versioned_hashes).map_err( + |err| { + anyhow::anyhow!( + "Versioned hashes length should be within bounds for MaxBlobCommitmentsPerBlock: {:?}", + err + ) + }, + )?; + let execution_requests = decode_execution_requests(execution_requests) + .context("Decoding execution requests failed")?; + Ok(NewPayloadRequest::Electra(NewPayloadRequestElectra { + execution_payload, + versioned_hashes, + parent_beacon_block_root, + execution_requests, + })) + } + + /// Returns the tree hash root of this request. + pub fn tree_hash_root(&self) -> [u8; 32] { + match self { + NewPayloadRequest::Bellatrix(req) => req.tree_hash_root().0, + NewPayloadRequest::Capella(req) => req.tree_hash_root().0, + NewPayloadRequest::Deneb(req) => req.tree_hash_root().0, + NewPayloadRequest::Electra(req) => req.tree_hash_root().0, + } + } + + /// Returns the versioned hashes if this is a Deneb or Electra request. + pub fn versioned_hashes(&self) -> Option<&VariableList> { + match self { + NewPayloadRequest::Bellatrix(_) | NewPayloadRequest::Capella(_) => None, + NewPayloadRequest::Deneb(req) => Some(&req.versioned_hashes), + NewPayloadRequest::Electra(req) => Some(&req.versioned_hashes), + } + } + + /// Returns the parent beacon block root if this is a Deneb or Electra request. + pub fn parent_beacon_block_root(&self) -> Option { + match self { + NewPayloadRequest::Bellatrix(_) | NewPayloadRequest::Capella(_) => None, + NewPayloadRequest::Deneb(req) => Some(req.parent_beacon_block_root), + NewPayloadRequest::Electra(req) => Some(req.parent_beacon_block_root), + } + } + + /// Returns the execution requests if this is an Electra request. + pub fn execution_requests(&self) -> Option<&ExecutionRequests> { + match self { + NewPayloadRequest::Electra(req) => Some(&req.execution_requests), + _ => None, + } + } +} + +fn decode_execution_requests(requests_list: &[impl AsRef<[u8]>]) -> Result { + // EIP-7685: requests are encoded as request_type (1 byte) ++ request_data + // Request types for Electra (Prague): + // - 0x00: Deposit requests (EIP-6110) + // - 0x01: Withdrawal requests (EIP-7002) + // - 0x02: Consolidation requests (EIP-7251) + + const DEPOSIT_REQUEST_TYPE: u8 = 0x00; + const WITHDRAWAL_REQUEST_TYPE: u8 = 0x01; + const CONSOLIDATION_REQUEST_TYPE: u8 = 0x02; + + // Fixed SSZ sizes for each request type (excluding the type byte) + let deposit_request_size = ::ssz_fixed_len(); + let withdrawal_request_size = ::ssz_fixed_len(); + let consolidation_request_size = ::ssz_fixed_len(); + + let mut deposits = Vec::new(); + let mut withdrawals = Vec::new(); + let mut consolidations = Vec::new(); + + for (idx, request) in requests_list.iter().enumerate() { + let request_bytes = request.as_ref(); + + anyhow::ensure!(!request_bytes.is_empty(), "Empty request at index {}", idx); + + // Read request type (first byte) + let request_type = request_bytes[0]; + let data = &request_bytes[1..]; + + match request_type { + DEPOSIT_REQUEST_TYPE => { + anyhow::ensure!( + data.len() == deposit_request_size, + "Invalid deposit request size at index {}: expected {}, got {}", + idx, + deposit_request_size, + data.len() + ); + + let deposit = DepositRequest::from_ssz_bytes(data).map_err(|e| { + anyhow::anyhow!( + "Failed to SSZ decode deposit request at index {}: {:?}", + idx, + e + ) + })?; + deposits.push(deposit); + } + WITHDRAWAL_REQUEST_TYPE => { + anyhow::ensure!( + data.len() == withdrawal_request_size, + "Invalid withdrawal request size at index {}: expected {}, got {}", + idx, + withdrawal_request_size, + data.len() + ); + + let withdrawal = WithdrawalRequest::from_ssz_bytes(data).map_err(|e| { + anyhow::anyhow!( + "Failed to SSZ decode withdrawal request at index {}: {:?}", + idx, + e + ) + })?; + withdrawals.push(withdrawal); + } + CONSOLIDATION_REQUEST_TYPE => { + anyhow::ensure!( + data.len() == consolidation_request_size, + "Invalid consolidation request size at index {}: expected {}, got {}", + idx, + consolidation_request_size, + data.len() + ); + + let consolidation = ConsolidationRequest::from_ssz_bytes(data).map_err(|e| { + anyhow::anyhow!( + "Failed to SSZ decode consolidation request at index {}: {:?}", + idx, + e + ) + })?; + consolidations.push(consolidation); + } + _ => { + anyhow::bail!("Unknown request type at index {}: {:#x}", idx, request_type); + } + } + } + + Ok(ExecutionRequests { + deposits: VariableList::new(deposits) + .map_err(|e| anyhow::anyhow!("Failed to create deposits VariableList: {:?}", e))?, + withdrawals: VariableList::new(withdrawals) + .map_err(|e| anyhow::anyhow!("Failed to create withdrawals VariableList: {:?}", e))?, + consolidations: VariableList::new(consolidations).map_err(|e| { + anyhow::anyhow!("Failed to create consolidations VariableList: {:?}", e) + })?, + }) +} From fe0f01a167c8165e7b8c443c6237940f0c33ae6f Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Tue, 13 Jan 2026 15:47:12 -0300 Subject: [PATCH 03/46] add missing cargo toml changes --- crates/stateless-validator-common/Cargo.toml | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/crates/stateless-validator-common/Cargo.toml b/crates/stateless-validator-common/Cargo.toml index e89de35e..5d267635 100644 --- a/crates/stateless-validator-common/Cargo.toml +++ b/crates/stateless-validator-common/Cargo.toml @@ -12,9 +12,21 @@ workspace = true rkyv = { workspace = true, optional = true } serde = { workspace = true, features = ["derive"], optional = true } sha2 = { workspace = true, optional = true } +anyhow.workspace = true +serde_with.workspace = true -# reth -reth-stateless = { workspace = true, optional = true } +# lighthouse +tree_hash.workspace = true +tree_hash_derive.workspace = true +ssz_types.workspace = true +typenum.workspace = true + +# ssz +ethereum_ssz.workspace = true +ethereum_ssz_derive.workspace = true + +alloy-primitives.workspace = true +alloy-eips.workspace = true [features] # guest @@ -24,4 +36,4 @@ serde = ["dep:serde"] rkyv = ["dep:rkyv"] # host -host = ["std", "dep:sha2", "dep:reth-stateless"] +host = ["std", "dep:sha2"] From 7d357211816fe5453735a58011e5904477ebef53 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Tue, 13 Jan 2026 15:47:37 -0300 Subject: [PATCH 04/46] add reth adjustments --- crates/stateless-validator-reth/Cargo.toml | 28 +- .../src/execution_payload.rs | 442 ++++++++++++++++++ crates/stateless-validator-reth/src/guest.rs | 64 ++- crates/stateless-validator-reth/src/host.rs | 222 ++++++++- crates/stateless-validator-reth/src/lib.rs | 4 + .../src/serde_bincode_compat.rs | 346 ++++++++++++++ 6 files changed, 1075 insertions(+), 31 deletions(-) create mode 100644 crates/stateless-validator-reth/src/execution_payload.rs create mode 100644 crates/stateless-validator-reth/src/serde_bincode_compat.rs diff --git a/crates/stateless-validator-reth/Cargo.toml b/crates/stateless-validator-reth/Cargo.toml index afce3bff..e5236742 100644 --- a/crates/stateless-validator-reth/Cargo.toml +++ b/crates/stateless-validator-reth/Cargo.toml @@ -9,17 +9,38 @@ license.workspace = true workspace = true [dependencies] -anyhow = { workspace = true, optional = true } +anyhow = { workspace = true } once_cell.workspace = true serde.workspace = true +serde_with.workspace = true + +# alloy +alloy-consensus = { workspace = true } +alloy-eips = { workspace = true } +alloy-genesis = { workspace = true } +alloy-primitives = { workspace = true } +alloy-rlp = { workspace = true } +alloy-rpc-types-engine = { workspace = true, default-features = false, features = [ + "serde", +] } # reth reth-chainspec.workspace = true +# reth-ethereum-payload-builder = { workspace = true, default-features = false } +reth-payload-validator = { workspace = true, default-features = false } reth-ethereum-primitives.workspace = true reth-evm-ethereum.workspace = true reth-primitives-traits.workspace = true reth-stateless.workspace = true +# lighthouse +tree_hash = { workspace = true } +tree_hash_derive.workspace = true + +# ssz +ssz_types.workspace = true +ethereum_ssz.workspace = true + # mpt sparsestate.workspace = true @@ -27,6 +48,9 @@ sparsestate.workspace = true ere-io = { workspace = true, features = ["bincode"] } ere-zkvm-interface = { workspace = true, optional = true } +# crypto +sha2.workspace = true + # local guest.workspace = true stateless-validator-common = { workspace = true, features = ["serde"] } @@ -39,4 +63,4 @@ k256 = ["reth-stateless/k256"] secp256k1 = ["reth-stateless/secp256k1"] # host -host = ["std", "stateless-validator-common/host", "dep:anyhow", "dep:ere-zkvm-interface"] +host = ["std", "stateless-validator-common/host", "dep:ere-zkvm-interface"] diff --git a/crates/stateless-validator-reth/src/execution_payload.rs b/crates/stateless-validator-reth/src/execution_payload.rs new file mode 100644 index 00000000..4c167491 --- /dev/null +++ b/crates/stateless-validator-reth/src/execution_payload.rs @@ -0,0 +1,442 @@ +//! Execution payload conversion between NewPayloadRequest and alloy types. + +use alloc::{sync::Arc, vec::Vec}; + +use alloy_consensus::Block; +use alloy_eips::eip4895::Withdrawal as AlloyWithdrawal; +use alloy_genesis::ChainConfig; +use alloy_primitives::{Address, B256, Bloom, Bytes, U256}; +use alloy_rpc_types_engine::{ + CancunPayloadFields, ExecutionData, ExecutionPayload as AlloyExecutionPayload, + ExecutionPayloadSidecar, ExecutionPayloadV1 as AlloyExecutionPayloadV1, + ExecutionPayloadV2 as AlloyExecutionPayloadV2, ExecutionPayloadV3 as AlloyExecutionPayloadV3, + PayloadError, +}; +use anyhow::{Context, Result}; +use reth_chainspec::{ChainSpec, EthereumHardforks}; +use reth_payload_validator::{cancun, prague, shanghai}; +use reth_primitives_traits::{Block as _, SealedBlock, SignedTransaction}; +use ssz_types::{FixedVector, VariableList}; +use stateless_validator_common::execution_payload::{ + ExecutionPayloadV1, ExecutionPayloadV2, ExecutionPayloadV3, ForkName, NewPayloadRequest, + Withdrawal, +}; + +/// Determines the fork name based on alloy chain config and block timestamp. +pub fn determine_fork_name(chain_config: &ChainConfig, timestamp: u64) -> ForkName { + // Check forks in reverse chronological order + if chain_config + .prague_time + .is_some_and(|prague_time| timestamp >= prague_time) + { + return ForkName::Electra; + } + if chain_config + .cancun_time + .is_some_and(|cancun_time| timestamp >= cancun_time) + { + return ForkName::Deneb; + } + if chain_config + .shanghai_time + .is_some_and(|shanghai_time| timestamp >= shanghai_time) + { + return ForkName::Capella; + } + // Default to Bellatrix for post-merge blocks + ForkName::Bellatrix +} + +/// Converts a [`NewPayloadRequest`] into a validated reth [`SealedBlock`]. +/// +/// This converts the request to `ExecutionData`, then uses +/// `EthereumExecutionPayloadValidator` to validate the payload and return a sealed block. +pub fn new_payload_request_to_block( + new_payload_request: NewPayloadRequest, + chain_spec: Arc, +) -> Result> { + let execution_data = new_payload_request_to_execution_data(new_payload_request); + let sealed_block: SealedBlock< + Block>, + > = ensure_well_formed_payload(chain_spec, execution_data) + .context("Payload validation failed")?; + Ok(sealed_block.into_block()) +} + +pub fn ensure_well_formed_payload( + chain_spec: ChainSpec, + payload: ExecutionData, +) -> Result>, PayloadError> +where + ChainSpec: EthereumHardforks, + T: SignedTransaction, +{ + let ExecutionData { payload, sidecar } = payload; + + let expected_hash = payload.block_hash(); + + // First parse the block + let sealed_block = payload.try_into_block_with_sidecar(&sidecar)?.seal_slow(); + + // Ensure the hash included in the payload matches the block hash + if expected_hash != sealed_block.hash() { + return Err(PayloadError::BlockHash { + execution: sealed_block.hash(), + consensus: expected_hash, + }); + } + + shanghai::ensure_well_formed_fields( + sealed_block.body(), + chain_spec.is_shanghai_active_at_timestamp(sealed_block.timestamp), + )?; + + cancun::ensure_well_formed_fields( + &sealed_block, + sidecar.cancun(), + chain_spec.is_cancun_active_at_timestamp(sealed_block.timestamp), + )?; + + prague::ensure_well_formed_fields( + sealed_block.body(), + sidecar.prague(), + chain_spec.is_prague_active_at_timestamp(sealed_block.timestamp), + )?; + + Ok(sealed_block) +} + +// ============================================================================ +// Conversion: NewPayloadRequest -> ExecutionData +// ============================================================================ + +/// Converts a [`NewPayloadRequest`] into an alloy [`ExecutionData`]. +pub fn new_payload_request_to_execution_data(req: NewPayloadRequest) -> ExecutionData { + match req { + NewPayloadRequest::Bellatrix(b) => { + let v1 = convert_v1_to_alloy(b.execution_payload); + ExecutionData::new( + AlloyExecutionPayload::V1(v1), + ExecutionPayloadSidecar::none(), + ) + } + NewPayloadRequest::Capella(c) => { + let (v1, withdrawals) = convert_v2_to_alloy(c.execution_payload); + let v2 = AlloyExecutionPayloadV2 { + payload_inner: v1, + withdrawals, + }; + ExecutionData::new( + AlloyExecutionPayload::V2(v2), + ExecutionPayloadSidecar::none(), + ) + } + NewPayloadRequest::Deneb(d) => { + let (v1, withdrawals) = convert_v2_to_alloy_from_v3(&d.execution_payload); + let v3 = AlloyExecutionPayloadV3 { + payload_inner: AlloyExecutionPayloadV2 { + payload_inner: v1, + withdrawals, + }, + blob_gas_used: d.execution_payload.blob_gas_used, + excess_blob_gas: d.execution_payload.excess_blob_gas, + }; + + let versioned_hashes: Vec = d + .versioned_hashes + .into_iter() + .map(|h| B256::from(h)) + .collect(); + let parent_beacon_block_root = B256::from(d.parent_beacon_block_root); + let cancun_fields = + CancunPayloadFields::new(parent_beacon_block_root, versioned_hashes); + let sidecar = ExecutionPayloadSidecar::v3(cancun_fields); + + ExecutionData::new(AlloyExecutionPayload::V3(v3), sidecar) + } + NewPayloadRequest::Electra(e) => { + let (v1, withdrawals) = convert_v2_to_alloy_from_v3(&e.execution_payload); + let v3 = AlloyExecutionPayloadV3 { + payload_inner: AlloyExecutionPayloadV2 { + payload_inner: v1, + withdrawals, + }, + blob_gas_used: e.execution_payload.blob_gas_used, + excess_blob_gas: e.execution_payload.excess_blob_gas, + }; + + let versioned_hashes: Vec = e + .versioned_hashes + .into_iter() + .map(|h| B256::from(h)) + .collect(); + let parent_beacon_block_root = B256::from(e.parent_beacon_block_root); + let cancun_fields = + CancunPayloadFields::new(parent_beacon_block_root, versioned_hashes); + + // For Electra, compute requests_hash from execution_requests + // The requests_hash is stored in the sidecar + let requests_hash = compute_requests_hash(&e.execution_requests); + let prague_fields = alloy_rpc_types_engine::PraguePayloadFields::new(requests_hash); + let sidecar = ExecutionPayloadSidecar::v4(cancun_fields, prague_fields); + + ExecutionData::new(AlloyExecutionPayload::V3(v3), sidecar) + } + } +} + +/// Converts ExecutionPayloadV1 to alloy's ExecutionPayloadV1 +fn convert_v1_to_alloy(payload: ExecutionPayloadV1) -> AlloyExecutionPayloadV1 { + AlloyExecutionPayloadV1 { + parent_hash: B256::from(payload.parent_hash), + fee_recipient: Address::from(payload.fee_recipient), + state_root: B256::from(payload.state_root), + receipts_root: B256::from(payload.receipts_root), + logs_bloom: Bloom::from_slice(&payload.logs_bloom[..]), + prev_randao: B256::from(payload.prev_randao), + block_number: payload.block_number, + gas_limit: payload.gas_limit, + gas_used: payload.gas_used, + timestamp: payload.timestamp, + extra_data: Bytes::from(payload.extra_data.to_vec()), + base_fee_per_gas: U256::from_le_bytes(payload.base_fee_per_gas), + block_hash: B256::from(payload.block_hash), + transactions: payload.transactions.into_iter().map(Bytes::from).collect(), + } +} + +/// Converts ExecutionPayloadV2 to alloy's (V1, withdrawals) +fn convert_v2_to_alloy( + payload: ExecutionPayloadV2, +) -> (AlloyExecutionPayloadV1, Vec) { + let v1 = AlloyExecutionPayloadV1 { + parent_hash: B256::from(payload.parent_hash), + fee_recipient: Address::from(payload.fee_recipient), + state_root: B256::from(payload.state_root), + receipts_root: B256::from(payload.receipts_root), + logs_bloom: Bloom::from_slice(&payload.logs_bloom[..]), + prev_randao: B256::from(payload.prev_randao), + block_number: payload.block_number, + gas_limit: payload.gas_limit, + gas_used: payload.gas_used, + timestamp: payload.timestamp, + extra_data: Bytes::from(payload.extra_data.to_vec()), + base_fee_per_gas: U256::from_le_bytes(payload.base_fee_per_gas), + block_hash: B256::from(payload.block_hash), + transactions: payload.transactions.into_iter().map(Bytes::from).collect(), + }; + + let withdrawals = payload + .withdrawals + .into_iter() + .map(convert_withdrawal) + .collect(); + + (v1, withdrawals) +} + +/// Converts ExecutionPayloadV3 to alloy's (V1, withdrawals) - used for Deneb/Electra +fn convert_v2_to_alloy_from_v3( + payload: &ExecutionPayloadV3, +) -> (AlloyExecutionPayloadV1, Vec) { + let v1 = AlloyExecutionPayloadV1 { + parent_hash: B256::from(payload.parent_hash), + fee_recipient: Address::from(payload.fee_recipient), + state_root: B256::from(payload.state_root), + receipts_root: B256::from(payload.receipts_root), + logs_bloom: Bloom::from_slice(&payload.logs_bloom[..]), + prev_randao: B256::from(payload.prev_randao), + block_number: payload.block_number, + gas_limit: payload.gas_limit, + gas_used: payload.gas_used, + timestamp: payload.timestamp, + extra_data: Bytes::from(payload.extra_data.to_vec()), + base_fee_per_gas: U256::from_le_bytes(payload.base_fee_per_gas), + block_hash: B256::from(payload.block_hash), + transactions: payload + .transactions + .iter() + .map(|tx| Bytes::from(tx.clone())) + .collect(), + }; + + let withdrawals = payload + .withdrawals + .iter() + .map(|w| convert_withdrawal(w.clone())) + .collect(); + + (v1, withdrawals) +} + +/// Converts our Withdrawal to alloy's Withdrawal +fn convert_withdrawal(w: Withdrawal) -> AlloyWithdrawal { + AlloyWithdrawal { + index: w.index, + validator_index: w.validator_index, + address: Address::from(w.address), + amount: w.amount, + } +} + +/// Computes the requests hash for Electra from ExecutionRequests per EIP-7685. +fn compute_requests_hash( + requests: &stateless_validator_common::execution_payload::ExecutionRequests, +) -> B256 { + use sha2::{Digest, Sha256}; + use ssz::Encode; + + let mut outer_hasher = Sha256::new(); + + // Deposit requests (type 0x00) + let mut deposits_bytes = vec![0x00u8]; + for deposit in requests.deposits.iter() { + deposits_bytes.extend(deposit.as_ssz_bytes()); + } + if deposits_bytes.len() > 1 { + outer_hasher.update(Sha256::digest(&deposits_bytes)); + } + + // Withdrawal requests (type 0x01) + let mut withdrawals_bytes = vec![0x01u8]; + for withdrawal in requests.withdrawals.iter() { + withdrawals_bytes.extend(withdrawal.as_ssz_bytes()); + } + if withdrawals_bytes.len() > 1 { + outer_hasher.update(Sha256::digest(&withdrawals_bytes)); + } + + // Consolidation requests (type 0x02) + let mut consolidations_bytes = vec![0x02u8]; + for consolidation in requests.consolidations.iter() { + consolidations_bytes.extend(consolidation.as_ssz_bytes()); + } + if consolidations_bytes.len() > 1 { + outer_hasher.update(Sha256::digest(&consolidations_bytes)); + } + + B256::from_slice(&outer_hasher.finalize()) +} + +// ============================================================================ +// Conversion: ExecutionData -> NewPayloadRequest (for creating requests from blocks) +// ============================================================================ + +/// Creates a new execution payload request from ExecutionData. +/// +/// This extracts the transaction and withdrawal data from the ExecutionData +/// and creates the appropriate NewPayloadRequest variant. +pub fn create_new_payload_request( + execution_data: &ExecutionData, + requests: &alloy_eips::eip7685::Requests, +) -> anyhow::Result { + match &execution_data.payload { + AlloyExecutionPayload::V1(v1) => { + let payload = ExecutionPayloadV1 { + parent_hash: v1.parent_hash.0, + fee_recipient: v1.fee_recipient.0.0, + state_root: v1.state_root.0, + receipts_root: v1.receipts_root.0, + logs_bloom: FixedVector::from(v1.logs_bloom.0.to_vec()), + prev_randao: v1.prev_randao.0, + block_number: v1.block_number, + gas_limit: v1.gas_limit, + gas_used: v1.gas_used, + timestamp: v1.timestamp, + extra_data: VariableList::from(v1.extra_data.to_vec()), + base_fee_per_gas: v1.base_fee_per_gas.to_le_bytes(), + block_hash: v1.block_hash.0, + transactions: v1.transactions.iter().map(|tx| tx.to_vec()).collect(), + }; + Ok(NewPayloadRequest::new_bellatrix(payload)) + } + AlloyExecutionPayload::V2(v2) => { + let v1 = &v2.payload_inner; + let payload = ExecutionPayloadV2 { + parent_hash: v1.parent_hash.0, + fee_recipient: v1.fee_recipient.0.0, + state_root: v1.state_root.0, + receipts_root: v1.receipts_root.0, + logs_bloom: FixedVector::from(v1.logs_bloom.0.to_vec()), + prev_randao: v1.prev_randao.0, + block_number: v1.block_number, + gas_limit: v1.gas_limit, + gas_used: v1.gas_used, + timestamp: v1.timestamp, + extra_data: VariableList::from(v1.extra_data.to_vec()), + base_fee_per_gas: v1.base_fee_per_gas.to_le_bytes(), + block_hash: v1.block_hash.0, + transactions: v1.transactions.iter().map(|tx| tx.to_vec()).collect(), + withdrawals: v2 + .withdrawals + .iter() + .map(convert_alloy_withdrawal) + .collect(), + }; + Ok(NewPayloadRequest::new_capella(payload)) + } + AlloyExecutionPayload::V3(v3) => { + let v2 = &v3.payload_inner; + let v1 = &v2.payload_inner; + let payload = ExecutionPayloadV3 { + parent_hash: v1.parent_hash.0, + fee_recipient: v1.fee_recipient.0.0, + state_root: v1.state_root.0, + receipts_root: v1.receipts_root.0, + logs_bloom: FixedVector::from(v1.logs_bloom.0.to_vec()), + prev_randao: v1.prev_randao.0, + block_number: v1.block_number, + gas_limit: v1.gas_limit, + gas_used: v1.gas_used, + timestamp: v1.timestamp, + extra_data: VariableList::from(v1.extra_data.to_vec()), + base_fee_per_gas: v1.base_fee_per_gas.to_le_bytes(), + block_hash: v1.block_hash.0, + transactions: v1.transactions.iter().map(|tx| tx.to_vec()).collect(), + withdrawals: v2 + .withdrawals + .iter() + .map(convert_alloy_withdrawal) + .collect(), + blob_gas_used: v3.blob_gas_used, + excess_blob_gas: v3.excess_blob_gas, + }; + + let sidecar = &execution_data.sidecar; + match (sidecar.cancun(), sidecar.prague()) { + // Deneb + (Some(c), None) => { + let versioned_hashes = c.versioned_hashes.iter().map(|h| h.0).collect(); + let parent_beacon_block_root = c.parent_beacon_block_root.0; + NewPayloadRequest::new_deneb( + payload, + versioned_hashes, + parent_beacon_block_root, + ) + } + // Electra + (Some(c), Some(_)) => { + let versioned_hashes = c.versioned_hashes.iter().map(|h| h.0).collect(); + let parent_beacon_block_root = c.parent_beacon_block_root.0; + NewPayloadRequest::new_electra( + payload, + versioned_hashes, + parent_beacon_block_root, + requests, + ) + } + _ => anyhow::bail!("Missing sidecar for Deneb execution payload"), + } + } + } +} + +/// Converts alloy's Withdrawal to our Withdrawal +fn convert_alloy_withdrawal(w: &AlloyWithdrawal) -> Withdrawal { + Withdrawal { + index: w.index, + validator_index: w.validator_index, + address: w.address.0.0, + amount: w.amount, + } +} diff --git a/crates/stateless-validator-reth/src/guest.rs b/crates/stateless-validator-reth/src/guest.rs index 8f1198e9..53ee7573 100644 --- a/crates/stateless-validator-reth/src/guest.rs +++ b/crates/stateless-validator-reth/src/guest.rs @@ -2,15 +2,19 @@ use alloc::{format, sync::Arc, vec::Vec}; +use alloy_genesis::ChainConfig; use ere_io::serde::{IoSerde, bincode::BincodeLegacy}; use reth_chainspec::ChainSpec; use reth_evm_ethereum::EthEvmConfig; -use reth_primitives_traits::Block; use reth_stateless::{ - Genesis, StatelessInput, UncompressedPublicKey, stateless_validation_with_trie, + ExecutionWitness, Genesis, UncompressedPublicKey, stateless_validation_with_trie, }; use serde::{Deserialize, Serialize}; +use serde_with::serde_as; use sparsestate::SparseState; +use stateless_validator_common::execution_payload::NewPayloadRequest; + +use crate::execution_payload::new_payload_request_to_block; #[rustfmt::skip] pub use { @@ -19,10 +23,16 @@ pub use { }; /// Input for the stateless validator guest program. +#[serde_as] #[derive(Debug, Clone, Serialize, Deserialize)] pub struct StatelessValidatorRethInput { - /// The stateless input for the stateless validation function. - pub stateless_input: StatelessInput, + /// New payload request data. + pub new_payload_request: NewPayloadRequest, + /// Execution witness for the EL block. + pub witness: ExecutionWitness, + /// Chain configuration for the stateless validation function + #[serde_as(as = "alloy_genesis::serde_bincode_compat::ChainConfig<'_>")] + pub chain_config: ChainConfig, /// The recovered signers for the transactions in the block. pub public_keys: Vec, } @@ -39,36 +49,48 @@ impl Guest for StatelessValidatorRethGuest { type Io = StatelessValidatorRethIo; fn compute(input: GuestInput) -> GuestOutput { - let genesis = Genesis { - config: input.stateless_input.chain_config.clone(), - ..Default::default() - }; - let chain_spec: Arc = Arc::new(genesis.into()); - let evm_config = EthEvmConfig::new(chain_spec.clone()); + let new_payload_request_root = input.new_payload_request.tree_hash_root(); - let (header, parent_hash) = P::cycle_scope("public_inputs_preparation", || { - ( - input.stateless_input.block.header().clone(), - input.stateless_input.block.parent_hash, - ) - }); + let (chain_spec, evm_config, block_result) = + P::cycle_scope("validation_inputs_preparation", || { + let genesis = Genesis { + config: input.chain_config.clone(), + ..Default::default() + }; + let chain_spec: Arc = Arc::new(genesis.into()); + let evm_config = EthEvmConfig::new(chain_spec.clone()); + let block_result = + new_payload_request_to_block(input.new_payload_request, chain_spec.clone()); + (chain_spec, evm_config, block_result) + }); + + let block = match block_result { + Ok(block) => block, + Err(err) => { + P::print(&format!("Failed to convert to reth block: {err}\n")); + return StatelessValidatorOutput::default(); // TODO + } + }; let res = P::cycle_scope("validation", || { stateless_validation_with_trie::( - input.stateless_input.block, + block, input.public_keys, - input.stateless_input.witness, + input.witness, chain_spec, evm_config, ) - .map(|(block_hash, _)| block_hash) }); match res { - Ok(block_hash) => StatelessValidatorOutput::new(block_hash, parent_hash, true), + Ok(_) => StatelessValidatorOutput { + // TODO: change to use constructor + new_payload_request_root, + successful_block_validation: true, + }, Err(err) => { P::print(&format!("Block validation failed: {err}\n")); - StatelessValidatorOutput::new(header.hash_slow(), parent_hash, false) + StatelessValidatorOutput::default() // TODO } } } diff --git a/crates/stateless-validator-reth/src/host.rs b/crates/stateless-validator-reth/src/host.rs index dfd6138a..94bd6894 100644 --- a/crates/stateless-validator-reth/src/host.rs +++ b/crates/stateless-validator-reth/src/host.rs @@ -2,24 +2,37 @@ use alloc::{format, vec::Vec}; +use alloy_eips::{Encodable2718, eip7685::Requests}; +use alloy_primitives::U256; use anyhow::Context; use ere_zkvm_interface::Input; use guest::{GuestIo, Io}; use reth_ethereum_primitives::TransactionSigned; +use reth_primitives_traits::Block; +pub use reth_stateless::StatelessInput; use reth_stateless::UncompressedPublicKey; +use ssz_types::{FixedVector, VariableList}; +use stateless_validator_common::execution_payload::{ + ExecutionPayloadV1, ExecutionPayloadV2, ExecutionPayloadV3, ForkName, NewPayloadRequest, + Withdrawal, +}; +pub use stateless_validator_common::guest::StatelessValidatorOutput; -use crate::guest::{StatelessValidatorRethGuest, StatelessValidatorRethInput}; - -#[rustfmt::skip] -pub use stateless_validator_common::host::StatelessInput; +use crate::{ + execution_payload::determine_fork_name, + guest::{StatelessValidatorRethGuest, StatelessValidatorRethInput}, +}; impl StatelessValidatorRethInput { /// Construct [`StatelessValidatorRethInput`] given [`StatelessInput`]. - pub fn new(stateless_input: &StatelessInput) -> anyhow::Result { + pub fn new(stateless_input: &StatelessInput, requests: Requests) -> anyhow::Result { + let new_payload_request = to_new_payload_request(stateless_input, requests)?; let signers = recover_signers(&stateless_input.block.body.transactions)?; Ok(Self { - stateless_input: stateless_input.clone(), + new_payload_request, + witness: stateless_input.witness.clone(), + chain_config: stateless_input.chain_config.clone(), public_keys: signers, }) } @@ -50,15 +63,208 @@ where .collect() } +/// Converts a [`StatelessInput`] to a [`NewPayloadRequest`]. +/// +/// This creates the appropriate NewPayloadRequest variant based on the fork. +pub fn to_new_payload_request( + stateless_input: &StatelessInput, + requests: Requests, +) -> anyhow::Result { + use alloy_consensus::transaction::Transaction; + + let header = stateless_input.block.header(); + let body = stateless_input.block.body(); + let fork = determine_fork_name(&stateless_input.chain_config, header.timestamp); + + // Convert transactions to RLP-encoded bytes + let transactions: Vec> = body + .transactions() + .map(|tx| { + let mut buf = Vec::new(); + tx.encode_2718(&mut buf); + buf + }) + .collect(); + + // Helper to convert alloy withdrawal to our neutral type + let convert_withdrawal = |w: &alloy_eips::eip4895::Withdrawal| Withdrawal { + index: w.index, + validator_index: w.validator_index, + address: w.address.0.0, + amount: w.amount, + }; + + match fork { + ForkName::Bellatrix => { + let payload = ExecutionPayloadV1 { + parent_hash: header.parent_hash.0, + fee_recipient: header.beneficiary.0.0, + state_root: header.state_root.0, + receipts_root: header.receipts_root.0, + logs_bloom: FixedVector::from(header.logs_bloom.0.to_vec()), + prev_randao: header.mix_hash.0, + block_number: header.number, + gas_limit: header.gas_limit, + gas_used: header.gas_used, + timestamp: header.timestamp, + extra_data: VariableList::from(header.extra_data.to_vec()), + base_fee_per_gas: U256::from(header.base_fee_per_gas.unwrap_or_default()) + .to_le_bytes(), + block_hash: stateless_input.block.hash_slow().0, + transactions, + }; + Ok(NewPayloadRequest::new_bellatrix(payload)) + } + ForkName::Capella => { + let withdrawals: Vec = body + .withdrawals + .as_ref() + .map(|ws| ws.iter().map(convert_withdrawal).collect()) + .unwrap_or_default(); + + let payload = ExecutionPayloadV2 { + parent_hash: header.parent_hash.0, + fee_recipient: header.beneficiary.0.0, + state_root: header.state_root.0, + receipts_root: header.receipts_root.0, + logs_bloom: FixedVector::from(header.logs_bloom.0.to_vec()), + prev_randao: header.mix_hash.0, + block_number: header.number, + gas_limit: header.gas_limit, + gas_used: header.gas_used, + timestamp: header.timestamp, + extra_data: VariableList::from(header.extra_data.to_vec()), + base_fee_per_gas: U256::from(header.base_fee_per_gas.unwrap_or_default()) + .to_le_bytes(), + block_hash: stateless_input.block.hash_slow().0, + transactions, + withdrawals, + }; + Ok(NewPayloadRequest::new_capella(payload)) + } + ForkName::Deneb => { + let withdrawals: Vec = body + .withdrawals + .as_ref() + .map(|ws| ws.iter().map(convert_withdrawal).collect()) + .unwrap_or_default(); + + let payload = ExecutionPayloadV3 { + parent_hash: header.parent_hash.0, + fee_recipient: header.beneficiary.0.0, + state_root: header.state_root.0, + receipts_root: header.receipts_root.0, + logs_bloom: FixedVector::from(header.logs_bloom.0.to_vec()), + prev_randao: header.mix_hash.0, + block_number: header.number, + gas_limit: header.gas_limit, + gas_used: header.gas_used, + timestamp: header.timestamp, + extra_data: VariableList::from(header.extra_data.to_vec()), + base_fee_per_gas: U256::from(header.base_fee_per_gas.unwrap_or_default()) + .to_le_bytes(), + block_hash: stateless_input.block.hash_slow().0, + transactions, + withdrawals, + blob_gas_used: header.blob_gas_used.unwrap_or_default(), + excess_blob_gas: header.excess_blob_gas.unwrap_or_default(), + }; + + // Collect blob versioned hashes from all blob transactions + let versioned_hashes: Vec<[u8; 32]> = body + .transactions() + .filter_map(|tx| tx.blob_versioned_hashes()) + .flatten() + .map(|h| h.0) + .collect(); + + let parent_beacon_block_root = stateless_input + .block + .parent_beacon_block_root + .unwrap_or_default() + .0; + + NewPayloadRequest::new_deneb(payload, versioned_hashes, parent_beacon_block_root) + } + ForkName::Electra => { + let withdrawals: Vec = body + .withdrawals + .as_ref() + .map(|ws| ws.iter().map(convert_withdrawal).collect()) + .unwrap_or_default(); + + let payload = ExecutionPayloadV3 { + parent_hash: header.parent_hash.0, + fee_recipient: header.beneficiary.0.0, + state_root: header.state_root.0, + receipts_root: header.receipts_root.0, + logs_bloom: FixedVector::from(header.logs_bloom.0.to_vec()), + prev_randao: header.mix_hash.0, + block_number: header.number, + gas_limit: header.gas_limit, + gas_used: header.gas_used, + timestamp: header.timestamp, + extra_data: VariableList::from(header.extra_data.to_vec()), + base_fee_per_gas: U256::from(header.base_fee_per_gas.unwrap_or_default()) + .to_le_bytes(), + block_hash: stateless_input.block.hash_slow().0, + transactions, + withdrawals, + blob_gas_used: header.blob_gas_used.unwrap_or_default(), + excess_blob_gas: header.excess_blob_gas.unwrap_or_default(), + }; + + // Collect blob versioned hashes from all blob transactions + let versioned_hashes: Vec<[u8; 32]> = body + .transactions() + .filter_map(|tx| tx.blob_versioned_hashes()) + .flatten() + .map(|h| h.0) + .collect(); + + let parent_beacon_block_root = stateless_input + .block + .parent_beacon_block_root + .unwrap_or_default() + .0; + + NewPayloadRequest::new_electra( + payload, + versioned_hashes, + parent_beacon_block_root, + &requests, + ) + } + } +} + #[cfg(test)] mod test { + use stateless_validator_common::execution_payload::{ExecutionPayloadV1, NewPayloadRequest}; + use crate::guest::{Io, StatelessValidatorOutput, StatelessValidatorRethIo}; #[test] fn serialize_output() { + let dummy_new_payload_request = NewPayloadRequest::new_bellatrix(ExecutionPayloadV1 { + parent_hash: [1; 32], + fee_recipient: [2; 20], + state_root: [3; 32], + receipts_root: [4; 32], + logs_bloom: Default::default(), + prev_randao: [5; 32], + block_number: 1, + gas_limit: 2, + gas_used: 3, + timestamp: 4, + extra_data: Default::default(), + base_fee_per_gas: [6; 32], + block_hash: [7; 32], + transactions: vec![], + }); for output in [ - StatelessValidatorOutput::new([0x00; 32], [0x00; 32], false), - StatelessValidatorOutput::new([0xff; 32], [0xff; 32], true), + StatelessValidatorOutput::new(&dummy_new_payload_request, false), + StatelessValidatorOutput::new(&dummy_new_payload_request, true), ] { assert_eq!( StatelessValidatorRethIo::serialize_output(&output).unwrap(), diff --git a/crates/stateless-validator-reth/src/lib.rs b/crates/stateless-validator-reth/src/lib.rs index 3e8b68fb..225d5a2f 100644 --- a/crates/stateless-validator-reth/src/lib.rs +++ b/crates/stateless-validator-reth/src/lib.rs @@ -6,5 +6,9 @@ extern crate alloc; pub mod guest; +pub mod execution_payload; + +pub mod serde_bincode_compat; + #[cfg(feature = "host")] pub mod host; diff --git a/crates/stateless-validator-reth/src/serde_bincode_compat.rs b/crates/stateless-validator-reth/src/serde_bincode_compat.rs new file mode 100644 index 00000000..63785b91 --- /dev/null +++ b/crates/stateless-validator-reth/src/serde_bincode_compat.rs @@ -0,0 +1,346 @@ +//! Bincode-compatible serde implementations for `alloy-rpc-types-engine` types. +//! +//! The standard serde implementations for some types use `#[serde(flatten)]` and +//! `#[serde(untagged)]` which are incompatible with bincode serialization. +//! This module provides wrapper types only for the problematic types. +//! +//! Types that need wrappers: +//! - `ExecutionPayload` - uses `#[serde(untagged)]` +//! - `ExecutionPayloadV2` - uses `#[serde(flatten)]` on `payload_inner` +//! - `ExecutionPayloadV3` - uses `#[serde(flatten)]` on `payload_inner` +//! - `RequestsOrHash` - uses `#[serde(untagged)]` +//! +//! Types that don't need wrappers but contain problematic nested types: +//! - `ExecutionPayloadSidecar` - contains `PraguePayloadFields` → `RequestsOrHash` +//! - `PraguePayloadFields` - contains `RequestsOrHash` + +use alloc::vec::Vec; + +use alloy_eips::{ + eip4895::Withdrawal, + eip7685::{Requests, RequestsOrHash}, +}; +use alloy_primitives::{Address, B256, Bloom, Bytes, U256}; +pub use alloy_rpc_types_engine::ExecutionData; +use alloy_rpc_types_engine::{ + CancunPayloadFields, ExecutionPayloadSidecar, ExecutionPayloadV1, ExecutionPayloadV2, + ExecutionPayloadV3, PraguePayloadFields, +}; +use serde::{Deserialize, Deserializer, Serialize, Serializer}; +use serde_with::{DeserializeAs, SerializeAs}; + +/// Bincode-compatible [`ExecutionData`] serde implementation. +#[derive(Debug, Serialize, Deserialize)] +pub struct ExecutionDataCompat { + payload: ExecutionPayloadCompat, + sidecar: ExecutionPayloadSidecarCompat, +} + +impl SerializeAs for ExecutionDataCompat { + fn serialize_as(value: &ExecutionData, serializer: S) -> Result + where + S: Serializer, + { + ExecutionDataCompat::from(value).serialize(serializer) + } +} + +impl<'de> DeserializeAs<'de, ExecutionData> for ExecutionDataCompat { + fn deserialize_as(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + ExecutionDataCompat::deserialize(deserializer).map(Into::into) + } +} + +impl From<&ExecutionData> for ExecutionDataCompat { + fn from(value: &ExecutionData) -> Self { + Self { + payload: ExecutionPayloadCompat::from(&value.payload), + sidecar: ExecutionPayloadSidecarCompat::from(&value.sidecar), + } + } +} + +impl From for ExecutionData { + fn from(value: ExecutionDataCompat) -> Self { + Self::new(value.payload.into(), value.sidecar.into()) + } +} + +/// Bincode-compatible [`ExecutionPayload`] serde implementation. +/// +/// The original uses `#[serde(untagged)]` which is incompatible with bincode. +/// This version uses explicit enum discriminants. +#[derive(Debug, Serialize, Deserialize)] +pub enum ExecutionPayloadCompat { + /// V1 payload (no flatten issues, use original type directly) + V1(ExecutionPayloadV1), + /// V2 payload (has flatten, needs compat wrapper) + V2(ExecutionPayloadV2Compat), + /// V3 payload (has flatten, needs compat wrapper) + V3(ExecutionPayloadV3Compat), +} + +impl From<&alloy_rpc_types_engine::ExecutionPayload> for ExecutionPayloadCompat { + fn from(value: &alloy_rpc_types_engine::ExecutionPayload) -> Self { + match value { + alloy_rpc_types_engine::ExecutionPayload::V1(v1) => Self::V1(v1.clone()), + alloy_rpc_types_engine::ExecutionPayload::V2(v2) => { + Self::V2(ExecutionPayloadV2Compat::from(v2)) + } + alloy_rpc_types_engine::ExecutionPayload::V3(v3) => { + Self::V3(ExecutionPayloadV3Compat::from(v3)) + } + } + } +} + +impl From for alloy_rpc_types_engine::ExecutionPayload { + fn from(value: ExecutionPayloadCompat) -> Self { + match value { + ExecutionPayloadCompat::V1(v1) => Self::V1(v1), + ExecutionPayloadCompat::V2(v2) => Self::V2(v2.into()), + ExecutionPayloadCompat::V3(v3) => Self::V3(v3.into()), + } + } +} + +/// Bincode-compatible [`ExecutionPayloadV2`] serde implementation. +/// +/// The original uses `#[serde(flatten)]` on `payload_inner` which is incompatible with bincode. +/// This version inlines all V1 fields. +#[derive(Debug, Serialize, Deserialize)] +pub struct ExecutionPayloadV2Compat { + // V1 fields (inlined instead of flattened) + parent_hash: B256, + fee_recipient: Address, + state_root: B256, + receipts_root: B256, + logs_bloom: Bloom, + prev_randao: B256, + block_number: u64, + gas_limit: u64, + gas_used: u64, + timestamp: u64, + extra_data: Bytes, + base_fee_per_gas: U256, + block_hash: B256, + transactions: Vec, + // V2 fields + withdrawals: Vec, +} + +impl From<&ExecutionPayloadV2> for ExecutionPayloadV2Compat { + fn from(value: &ExecutionPayloadV2) -> Self { + let v1 = &value.payload_inner; + Self { + parent_hash: v1.parent_hash, + fee_recipient: v1.fee_recipient, + state_root: v1.state_root, + receipts_root: v1.receipts_root, + logs_bloom: v1.logs_bloom, + prev_randao: v1.prev_randao, + block_number: v1.block_number, + gas_limit: v1.gas_limit, + gas_used: v1.gas_used, + timestamp: v1.timestamp, + extra_data: v1.extra_data.clone(), + base_fee_per_gas: v1.base_fee_per_gas, + block_hash: v1.block_hash, + transactions: v1.transactions.clone(), + withdrawals: value.withdrawals.clone(), + } + } +} + +impl From for ExecutionPayloadV2 { + fn from(value: ExecutionPayloadV2Compat) -> Self { + Self { + payload_inner: ExecutionPayloadV1 { + parent_hash: value.parent_hash, + fee_recipient: value.fee_recipient, + state_root: value.state_root, + receipts_root: value.receipts_root, + logs_bloom: value.logs_bloom, + prev_randao: value.prev_randao, + block_number: value.block_number, + gas_limit: value.gas_limit, + gas_used: value.gas_used, + timestamp: value.timestamp, + extra_data: value.extra_data, + base_fee_per_gas: value.base_fee_per_gas, + block_hash: value.block_hash, + transactions: value.transactions, + }, + withdrawals: value.withdrawals, + } + } +} + +/// Bincode-compatible [`ExecutionPayloadV3`] serde implementation. +/// +/// The original uses `#[serde(flatten)]` on `payload_inner` which is incompatible with bincode. +/// This version inlines all V1 and V2 fields. +#[derive(Debug, Serialize, Deserialize)] +pub struct ExecutionPayloadV3Compat { + // V1 fields (inlined) + parent_hash: B256, + fee_recipient: Address, + state_root: B256, + receipts_root: B256, + logs_bloom: Bloom, + prev_randao: B256, + block_number: u64, + gas_limit: u64, + gas_used: u64, + timestamp: u64, + extra_data: Bytes, + base_fee_per_gas: U256, + block_hash: B256, + transactions: Vec, + // V2 fields (inlined) + withdrawals: Vec, + // V3 fields + blob_gas_used: u64, + excess_blob_gas: u64, +} + +impl From<&ExecutionPayloadV3> for ExecutionPayloadV3Compat { + fn from(value: &ExecutionPayloadV3) -> Self { + let v2 = &value.payload_inner; + let v1 = &v2.payload_inner; + Self { + parent_hash: v1.parent_hash, + fee_recipient: v1.fee_recipient, + state_root: v1.state_root, + receipts_root: v1.receipts_root, + logs_bloom: v1.logs_bloom, + prev_randao: v1.prev_randao, + block_number: v1.block_number, + gas_limit: v1.gas_limit, + gas_used: v1.gas_used, + timestamp: v1.timestamp, + extra_data: v1.extra_data.clone(), + base_fee_per_gas: v1.base_fee_per_gas, + block_hash: v1.block_hash, + transactions: v1.transactions.clone(), + withdrawals: v2.withdrawals.clone(), + blob_gas_used: value.blob_gas_used, + excess_blob_gas: value.excess_blob_gas, + } + } +} + +impl From for ExecutionPayloadV3 { + fn from(value: ExecutionPayloadV3Compat) -> Self { + Self { + payload_inner: ExecutionPayloadV2 { + payload_inner: ExecutionPayloadV1 { + parent_hash: value.parent_hash, + fee_recipient: value.fee_recipient, + state_root: value.state_root, + receipts_root: value.receipts_root, + logs_bloom: value.logs_bloom, + prev_randao: value.prev_randao, + block_number: value.block_number, + gas_limit: value.gas_limit, + gas_used: value.gas_used, + timestamp: value.timestamp, + extra_data: value.extra_data, + base_fee_per_gas: value.base_fee_per_gas, + block_hash: value.block_hash, + transactions: value.transactions, + }, + withdrawals: value.withdrawals, + }, + blob_gas_used: value.blob_gas_used, + excess_blob_gas: value.excess_blob_gas, + } + } +} + +/// Bincode-compatible [`ExecutionPayloadSidecar`] serde implementation. +/// +/// The sidecar itself doesn't use flatten/untagged, but it contains +/// `PraguePayloadFields` which contains `RequestsOrHash` (untagged). +#[derive(Debug, Serialize, Deserialize)] +pub struct ExecutionPayloadSidecarCompat { + // CancunPayloadFields doesn't have any problematic attributes, use directly + cancun: Option, + // PraguePayloadFields contains RequestsOrHash which uses untagged + prague: Option, +} + +impl From<&ExecutionPayloadSidecar> for ExecutionPayloadSidecarCompat { + fn from(value: &ExecutionPayloadSidecar) -> Self { + Self { + cancun: value.cancun().cloned(), + prague: value.prague().map(PraguePayloadFieldsCompat::from), + } + } +} + +impl From for ExecutionPayloadSidecar { + fn from(value: ExecutionPayloadSidecarCompat) -> Self { + let prague: Option = value.prague.map(Into::into); + match (value.cancun, prague) { + (Some(c), Some(p)) => Self::v4(c, p), + (Some(c), None) => Self::v3(c), + _ => Self::none(), + } + } +} + +/// Bincode-compatible [`PraguePayloadFields`] serde implementation. +/// +/// Contains `RequestsOrHash` which uses `#[serde(untagged)]`. +#[derive(Debug, Serialize, Deserialize)] +pub struct PraguePayloadFieldsCompat { + requests: RequestsOrHashCompat, +} + +impl From<&PraguePayloadFields> for PraguePayloadFieldsCompat { + fn from(value: &PraguePayloadFields) -> Self { + Self { + requests: RequestsOrHashCompat::from(&value.requests), + } + } +} + +impl From for PraguePayloadFields { + fn from(value: PraguePayloadFieldsCompat) -> Self { + Self::new(value.requests) + } +} + +/// Bincode-compatible [`RequestsOrHash`] serde implementation. +/// +/// The original uses `#[serde(untagged)]` which is incompatible with bincode. +/// This version uses explicit enum discriminants. +#[derive(Debug, Serialize, Deserialize)] +pub enum RequestsOrHashCompat { + /// List of requests + Requests(Requests), + /// Precomputed hash + Hash(B256), +} + +impl From<&RequestsOrHash> for RequestsOrHashCompat { + fn from(value: &RequestsOrHash) -> Self { + match value { + RequestsOrHash::Requests(r) => Self::Requests(r.clone()), + RequestsOrHash::Hash(h) => Self::Hash(*h), + } + } +} + +impl From for RequestsOrHash { + fn from(value: RequestsOrHashCompat) -> Self { + match value { + RequestsOrHashCompat::Requests(r) => Self::Requests(r), + RequestsOrHashCompat::Hash(h) => Self::Hash(h), + } + } +} From 472fb6ead03d16355335acb2fc9bee271531ab12 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Tue, 13 Jan 2026 15:47:51 -0300 Subject: [PATCH 05/46] add ethrex temporary changes --- crates/stateless-validator-ethrex/Cargo.toml | 7 +- .../stateless-validator-ethrex/src/guest.rs | 64 ++++++++++++++----- crates/stateless-validator-ethrex/src/host.rs | 2 +- 3 files changed, 54 insertions(+), 19 deletions(-) diff --git a/crates/stateless-validator-ethrex/Cargo.toml b/crates/stateless-validator-ethrex/Cargo.toml index 7afc8dfd..438e5631 100644 --- a/crates/stateless-validator-ethrex/Cargo.toml +++ b/crates/stateless-validator-ethrex/Cargo.toml @@ -21,10 +21,13 @@ alloy-rlp = { workspace = true, optional = true } # ethrex ethrex-common.workspace = true ethrex-guest-program.workspace = true -ethrex-rlp = { workspace = true, optional = true } +ethrex-rlp = { workspace = true } ethrex-rpc = { workspace = true, optional = true } ethrex-vm.workspace = true +# reth +reth-stateless = { workspace = true, optional = true } + # ere ere-io = { workspace = true, features = ["rkyv"] } ere-zkvm-interface = { workspace = true, optional = true } @@ -51,7 +54,7 @@ host = [ "dep:alloy-eips", "dep:alloy-rlp", "dep:alloy-genesis", - "dep:ethrex-rlp", "dep:ethrex-rpc", "dep:ere-zkvm-interface", + "dep:reth-stateless", ] diff --git a/crates/stateless-validator-ethrex/src/guest.rs b/crates/stateless-validator-ethrex/src/guest.rs index 3f1519ed..b11f1a30 100644 --- a/crates/stateless-validator-ethrex/src/guest.rs +++ b/crates/stateless-validator-ethrex/src/guest.rs @@ -79,27 +79,38 @@ impl Guest for StatelessValidatorEthrexGuest { fn compute( StatelessValidatorEthrexInput(input): GuestInput, ) -> GuestOutput { - let (header, parent_hash) = P::cycle_scope("public_inputs_preparation", || { - ( - input.blocks[0].header.clone(), - input.blocks[0].header.parent_hash, - ) - }); - if input.blocks.len() != 1 { - return StatelessValidatorOutput::new(header.compute_block_hash(), parent_hash, false); + return StatelessValidatorOutput::default(); // TODO } + let (execution_payload_header_hash, beacon_root) = + P::cycle_scope("public_inputs_preparation", || { + // let execution_payload = to_execution_payload_ethrex( + // &input.blocks[0], + // &input.execution_witness.chain_config, + // ); + // TODO + // let execution_payload_header_hash = + // execution_payload_to_header_hash(&execution_payload); + let execution_payload_header_hash = [0u8; 32]; + let beacon_root = input.blocks[0] + .header + .parent_beacon_block_root + .unwrap_or_default(); + + (execution_payload_header_hash, beacon_root) + }); + + let block_num = input.blocks[0].header.number; let res = P::cycle_scope("validation", || execution_program(input)); match res { - Ok(out) => StatelessValidatorOutput::new(out.last_block_hash, parent_hash, true), + Ok(_) => { + StatelessValidatorOutput::default() // TODO -- Implement. + } Err(err) => { - P::print(&format!( - "Block {} validation failed: {err}\n", - header.number - )); - StatelessValidatorOutput::new(header.compute_block_hash(), parent_hash, false) + P::print(&format!("Block {} validation failed: {err}\n", block_num)); + StatelessValidatorOutput::default() // TODO } } } @@ -107,13 +118,34 @@ impl Guest for StatelessValidatorEthrexGuest { #[cfg(test)] mod test { + use stateless_validator_common::execution_payload::{ + ExecutionPayloadHeaderV1, NewPayloadRequest, + }; + use crate::guest::{Io, StatelessValidatorEthrexIo, StatelessValidatorOutput}; #[test] fn serialize_output() { + let dummy_new_payload_request = + NewPayloadRequest::new_bellatrix(ExecutionPayloadHeaderV1 { + parent_hash: [1; 32], + fee_recipient: [2; 20], + state_root: [3; 32], + receipts_root: [4; 32], + logs_bloom: Default::default(), + prev_randao: [5; 32], + block_number: 1, + gas_limit: 2, + gas_used: 3, + timestamp: 4, + extra_data: Default::default(), + base_fee_per_gas: [6; 32], + block_hash: [7; 32], + transactions_root: [8; 32], + }); for output in [ - StatelessValidatorOutput::new([0x00; 32], [0x00; 32], false), - StatelessValidatorOutput::new([0xff; 32], [0xff; 32], true), + StatelessValidatorOutput::new(dummy_new_payload_request.clone(), false), + StatelessValidatorOutput::new(dummy_new_payload_request.clone(), true), ] { assert_eq!( StatelessValidatorEthrexIo::serialize_output(&output).unwrap(), diff --git a/crates/stateless-validator-ethrex/src/host.rs b/crates/stateless-validator-ethrex/src/host.rs index 1a04c3dd..774befdd 100644 --- a/crates/stateless-validator-ethrex/src/host.rs +++ b/crates/stateless-validator-ethrex/src/host.rs @@ -20,7 +20,7 @@ use crate::guest::{StatelessValidatorEthrexGuest, StatelessValidatorEthrexInput} #[rustfmt::skip] pub use { ethrex_guest_program::input::ProgramInput, - stateless_validator_common::host::StatelessInput, + reth_stateless::StatelessInput, }; impl StatelessValidatorEthrexInput { From f1e0dff95c9e0ad1a7ccbcdc645fda884a7a2f76 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Tue, 13 Jan 2026 15:48:10 -0300 Subject: [PATCH 06/46] fix integration tests --- .../tests/block-encoding-length.rs | 15 +- .../tests/execution_payload.rs | 181 ++++++++++++++++++ .../tests/stateless-validator-ethrex.rs | 32 ++-- .../tests/stateless-validator-reth.rs | 59 +++--- 4 files changed, 235 insertions(+), 52 deletions(-) create mode 100644 crates/integration-tests/tests/execution_payload.rs diff --git a/crates/integration-tests/tests/block-encoding-length.rs b/crates/integration-tests/tests/block-encoding-length.rs index 754197bc..54ef4e18 100644 --- a/crates/integration-tests/tests/block-encoding-length.rs +++ b/crates/integration-tests/tests/block-encoding-length.rs @@ -1,20 +1,17 @@ //! Execution tests for `block-encoding-length` guest program -use std::fs; - use block_encoding_length::guest::{ BlockEncodingFormat, BlockEncodingLengthGuest, BlockEncodingLengthInput, }; use ere_dockerized::zkVMKind; -use integration_tests::{ - TestCase, fixtures_dir, stateless_validator::StatelessValidatorFixture, untar_fixtures, -}; +use integration_tests::{TestCase, get_fixtures}; fn test_execution(zkvm_kind: zkVMKind) { - untar_fixtures().unwrap(); - let path = fixtures_dir().join("block/rpc_block_22974575.json"); - let fixture: StatelessValidatorFixture = - serde_json::from_slice(&fs::read(path).unwrap()).unwrap(); + let fixtures = get_fixtures(); + let fixture = fixtures + .into_iter() + .find(|f| f.name == "rpc_block_22974575.json") + .expect("Fixture rpc_block_22974575.json not found"); let block = fixture.stateless_input.block; let loop_count = 10; let test_cases = [BlockEncodingFormat::Rlp, BlockEncodingFormat::Ssz].map(|format| { diff --git a/crates/integration-tests/tests/execution_payload.rs b/crates/integration-tests/tests/execution_payload.rs new file mode 100644 index 00000000..4e59fa54 --- /dev/null +++ b/crates/integration-tests/tests/execution_payload.rs @@ -0,0 +1,181 @@ +//! Test for StatelessInput <-> ExecutionPayload conversion +//! +//! The prover input data is StatelessInput constructed from debug_executionWitness. +/// The guest program input is NewPayloadRequest. +/// +/// The following tests check proper conversion between these types. +use std::{collections::HashMap, sync::Arc}; + +use alloy_primitives::{B256, b256}; +use guest::Guest; +use integration_tests::{NoopPlatform, get_fixtures}; +use reth_chainspec::ChainSpec; +use reth_evm_ethereum::EthEvmConfig; +use reth_stateless::{Genesis, stateless_validation, stateless_validation_with_trie}; +use stateless_validator_reth::{ + execution_payload::new_payload_request_to_block, + guest::{StatelessValidatorRethGuest, StatelessValidatorRethInput}, + host::to_new_payload_request, +}; + +/// Verify that StatelessInput is converted to ExecutionPayload correctly against precomputed roots. +/// This verifies that StatelessInput -> NewPayloadRequest is correct. +#[test] +fn test_stateless_input_to_execution_payload() { + // TODO: move this kind of tests to have independent assertion in stateless-validator-*.rs integration tests. + let expected_roots = expected_execution_payload_tree_roots(); + for fixture in get_fixtures() { + if !fixture.success { + continue; + } + let genesis = Genesis { + config: fixture.stateless_input.chain_config.clone(), + ..Default::default() + }; + let chain_spec: Arc = Arc::new(genesis.into()); + let evm_config = EthEvmConfig::new(chain_spec.clone()); + let signers = stateless_validator_reth::host::recover_signers( + &fixture.stateless_input.block.body.transactions, + ) + .unwrap(); + let (_, out) = stateless_validation( + fixture.stateless_input.block.clone(), + signers, + fixture.stateless_input.witness.clone(), + chain_spec, + evm_config, + ) + .unwrap(); + + let block_hash = fixture.stateless_input.block.hash_slow(); + let expected_root = *expected_roots.get(&block_hash).unwrap(); + + let input = + StatelessValidatorRethInput::new(&fixture.stateless_input, out.requests.clone()) + .unwrap(); + let output = StatelessValidatorRethGuest::compute::(input); + + assert_eq!( + output.new_payload_request_root, expected_root, + "ExecutionPayload tree root mismatch for block hash: {block_hash}" + ); + } +} + +// The guest program input is NewPayloadRequest, but the prover input is StatelessInput. +// This test verifies that the guest program reconstructs the same block as the original StatelessInput. +#[test] +fn test_block_roundtrip() { + for fixture in get_fixtures() { + if !fixture.success { + continue; + } + let genesis = Genesis { + config: fixture.stateless_input.chain_config.clone(), + ..Default::default() + }; + let chain_spec: Arc = Arc::new(genesis.into()); + let evm_config = EthEvmConfig::new(chain_spec.clone()); + let signers = stateless_validator_reth::host::recover_signers( + &fixture.stateless_input.block.body.transactions, + ) + .unwrap(); + let (_, out) = stateless_validation( + fixture.stateless_input.block.clone(), + signers, + fixture.stateless_input.witness.clone(), + chain_spec.clone(), + evm_config, + ) + .unwrap(); + + // Simulate the preparation the prover does to send input to the guest. + let new_payload_request = + to_new_payload_request(&fixture.stateless_input, out.requests.clone()).unwrap(); + + // In the guest, reconstruct the block from NewPayloadRequest. + let block = new_payload_request_to_block(new_payload_request, chain_spec).unwrap(); + + // Assert that the reconstructed block matches the original block in StatelessInput. + let guest_block_hash = block.hash_slow(); + let stateless_input_block_hash = fixture.stateless_input.block.hash_slow(); + assert_eq!( + stateless_input_block_hash, guest_block_hash, + "Block hash mismatch for fixture: {}", + fixture.name + ); + } +} + +fn expected_execution_payload_tree_roots() -> HashMap { + HashMap::from([ + ( + b256!("e6e4c256069674f7939f82fc808d0cd104210533c83add12d2c33d274fc3c027"), + b256!("043b1e44af00a6ff2b3c0570404d8b6701fe6221ed6aa3a39856c835f1ccdec4"), + ), + ( + b256!("74356579507633dcd34faa38c64f8ec46bc23ab5c13bbb1f2ce46786147baf54"), + b256!("03a7ab28fe855a1ba21024171c3b235e7a2e0206d2f0deefa50e186daf02fcf9"), + ), + ( + b256!("f72d095aaf5db3e99dbb76ec7f1dee9e6a3fe4cda536c073c7403ff160be356c"), + b256!("9acbdd5767796bc24c3afbfa52f56fec54636d0e78db03032abdfa8e6f81c9dd"), + ), + ( + b256!("eca0cdd3433d05468326534f1fd7b64a23b7d01c3cec0791f4c5e16e0caa4228"), + b256!("693e63f3b1db57e43f00161ef24ce591980dfc97cc0fa15fd6c1502f4dc97cec"), + ), + ( + b256!("bdee559b347d195bd65a82cac27533e2b9f94a5ba9dfb662e05033d12fb0ca4d"), + b256!("ae730c3c051710c9b18e48c7a6cbf011aa967e93d32cd969e548030c8fc1216a"), + ), + ( + b256!("8466849d8c0855c92e9732b70f58e0d228a03d7741f7f0344ad9457eda4dab99"), + b256!("3d1e280f1df9e380aefee8d6ff2cf10cd508e29812957ea53be7585b995781a0"), + ), + ( + b256!("b19d0861de72dbc6f40d6a118b05a975c3b7a525ad19db37b2bd975d60f0648f"), + b256!("fe081fe4f17e96ff956517e23e204245cce07a68e18a40489f19fc2223403d48"), + ), + ( + b256!("7c6cf5941884a4c9a3183bf4d8c0025e771838929ea3651353f9a09ddb0f56de"), + b256!("0000000000000000000000000000000000000000000000000000000000000000"), + ), + ( + b256!("2c041b9467dcf0899f85681d164d7edb08b992a552e796761c50d88dbffb6598"), + b256!("8d129e566ca042f959abf3e1bc5d0e21c2a6a52d381f1d906e0a8665aeff14fe"), + ), + ( + b256!("c8e14160123e5e2f8037857b7fdc414bc1687b7c9173218c7ba25320e9448f24"), + b256!("befe3b02a08353c0c07511f009590d01503ad076d34db02447ded858b02389d6"), + ), + ( + b256!("a6ee6b71a5c245a00e2724f3e92cf1b25e12fcc8844a343c241e00020d48500e"), + b256!("957785c5a0d6008eb28e2d01a8a19c708cb07e69a3d8ac3c5e7c0b8557e046ab"), + ), + ( + b256!("cdaf26ec02a13a84ca0a3fc0047584290e57eb972dff3d19ebf2978733f1735f"), + b256!("89134081d1d828eeba109aa97ff5714af6d9d2f44efaa48da62e81916f49c9ad"), + ), + ( + b256!("c8ac491bec27d1fbf6fa9e894b4f1ba593491e84bb593b9a81dfb89f29027149"), + b256!("5743a40b8ffd635ec3e50c4f1833fd6734af834ac43189c4bf50c9df3b18c2b9"), + ), + ( + b256!("e4bd1c4dc22a58a0a9a8e789e2c54b4ace2d1ebc16a605c3976723b52fc011f1"), + b256!("45328434f812b65daa21b4e8a3d6440d0da95fbd95a6c10b0a28f081cab53bd5"), + ), + ( + b256!("ba11cc5f2a0d42cc2d1c6ecee10b0c2c3c17dc685b17584be3474d6cafb14140"), + b256!("4e5881a6977b69b39787accd970dafb9138bc8580046be01b7b073a91cd3eaec"), + ), + ( + b256!("444460fa6bf40df3a2b419d55450fb68424c3b5dff248581afb87741be7f92b9"), + b256!("0cb48a874df4018608d53f09a025cad2977ffb06881cc6d2d07382c8280a2ce3"), + ), + ( + b256!("cec65cbf796165f17dc68b583aff9bb8e2f5ccd0fb41c03ac53d57b4740b6534"), + b256!("895c7d51f58aeab5ec891651de307043efd42300338db3dbaf0d1e36dc13138c"), + ), + ]) +} diff --git a/crates/integration-tests/tests/stateless-validator-ethrex.rs b/crates/integration-tests/tests/stateless-validator-ethrex.rs index 6c35a4d5..fdd0e0cd 100644 --- a/crates/integration-tests/tests/stateless-validator-ethrex.rs +++ b/crates/integration-tests/tests/stateless-validator-ethrex.rs @@ -1,31 +1,21 @@ //! Execution tests for `stateless-validator-ethrex` guest program -use std::fs; - use ere_dockerized::zkVMKind; -use integration_tests::{ - TestCase, fixtures_dir, stateless_validator::StatelessValidatorFixture, untar_fixtures, -}; +use guest::Guest; +use integration_tests::{NoopPlatform, TestCase, get_fixtures}; use stateless_validator_ethrex::guest::{ - StatelessValidatorEthrexGuest, StatelessValidatorEthrexInput, StatelessValidatorOutput, + StatelessValidatorEthrexGuest, StatelessValidatorEthrexInput, }; fn test_execution(zkvm_kind: zkVMKind) { - untar_fixtures().unwrap(); - let inputs = fs::read_dir(fixtures_dir().join("block")) - .unwrap() - .map(|file| { - let bytes = fs::read(file.unwrap().path()).unwrap(); - let fixture: StatelessValidatorFixture = serde_json::from_slice(&bytes).unwrap(); - let input = StatelessValidatorEthrexInput::new(&fixture.stateless_input).unwrap(); - let output = StatelessValidatorOutput::new( - fixture.stateless_input.block.hash_slow(), - fixture.stateless_input.block.parent_hash, - fixture.success, - ); - TestCase::new::(fixture.name, input, output) - .output_sha256() - }); + let fixtures = get_fixtures(); + let inputs = fixtures.into_iter().map(|fixture| { + let input = StatelessValidatorEthrexInput::new(&fixture.stateless_input).unwrap(); + let output = StatelessValidatorEthrexGuest::compute::(input.clone()); + assert_eq!(output.successful_block_validation, fixture.success); + + TestCase::new::(fixture.name, input, output).output_sha256() + }); integration_tests::test_execution("stateless-validator-ethrex", zkvm_kind, inputs); } diff --git a/crates/integration-tests/tests/stateless-validator-reth.rs b/crates/integration-tests/tests/stateless-validator-reth.rs index 4f73dd7c..933b42f0 100644 --- a/crates/integration-tests/tests/stateless-validator-reth.rs +++ b/crates/integration-tests/tests/stateless-validator-reth.rs @@ -1,31 +1,46 @@ //! Execution tests for `stateless-validator-reth` guest program -use std::fs; +use std::sync::Arc; use ere_dockerized::zkVMKind; -use integration_tests::{ - TestCase, fixtures_dir, stateless_validator::StatelessValidatorFixture, untar_fixtures, -}; -use stateless_validator_reth::guest::{ - StatelessValidatorOutput, StatelessValidatorRethGuest, StatelessValidatorRethInput, -}; +use guest::Guest; +use integration_tests::{NoopPlatform, TestCase, get_fixtures}; +use reth_chainspec::ChainSpec; +use reth_evm_ethereum::EthEvmConfig; +use reth_stateless::{Genesis, stateless_validation}; +use stateless_validator_reth::guest::{StatelessValidatorRethGuest, StatelessValidatorRethInput}; fn test_execution(zkvm_kind: zkVMKind) { - untar_fixtures().unwrap(); - let inputs = fs::read_dir(fixtures_dir().join("block")) - .unwrap() - .map(|file| { - let bytes = fs::read(file.unwrap().path()).unwrap(); - let fixture: StatelessValidatorFixture = serde_json::from_slice(&bytes).unwrap(); - let input = StatelessValidatorRethInput::new(&fixture.stateless_input).unwrap(); - let output = StatelessValidatorOutput::new( - fixture.stateless_input.block.hash_slow(), - fixture.stateless_input.block.parent_hash, - fixture.success, - ); - TestCase::new::(fixture.name, input, output) - .output_sha256() - }); + let fixtures = get_fixtures(); + let inputs = fixtures.into_iter().filter(|a| a.success).map(|fixture| { + // TODO: remove .filter above + // TODO: move inside StatelessValidatorRethInput::new? + let genesis = Genesis { + config: fixture.stateless_input.chain_config.clone(), + ..Default::default() + }; + let chain_spec: Arc = Arc::new(genesis.into()); + let evm_config = EthEvmConfig::new(chain_spec.clone()); + let signers = stateless_validator_reth::host::recover_signers( + &fixture.stateless_input.block.body.transactions, + ) + .unwrap(); + let (_, out) = stateless_validation( + fixture.stateless_input.block.clone(), + signers, + fixture.stateless_input.witness.clone(), + chain_spec.clone(), + evm_config, + ) + .unwrap(); + let input = + StatelessValidatorRethInput::new(&fixture.stateless_input, out.requests.clone()) + .unwrap(); + let output = StatelessValidatorRethGuest::compute::(input.clone()); + assert_eq!(output.successful_block_validation, fixture.success); + + TestCase::new::(fixture.name, input, output).output_sha256() + }); integration_tests::test_execution("stateless-validator-reth", zkvm_kind, inputs); } From fdbbfaa19327c7142eb81f61364fb6290a9f5d22 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Tue, 13 Jan 2026 15:48:34 -0300 Subject: [PATCH 07/46] more integration test changes --- Cargo.lock | 108 ++++++++++++++++-- Cargo.toml | 13 +++ crates/integration-tests/Cargo.toml | 22 +++- crates/integration-tests/src/lib.rs | 44 ++++++- .../src/stateless_validator.rs | 1 + 5 files changed, 171 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 292d694f..43bd2449 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -304,7 +304,10 @@ dependencies = [ "alloy-eips", "alloy-primitives", "alloy-rlp", + "alloy-serde", "derive_more 2.1.1", + "rand 0.8.5", + "serde", "strum", ] @@ -486,7 +489,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -497,7 +500,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -1997,7 +2000,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -2033,6 +2036,14 @@ dependencies = [ "uint 0.10.0", ] +[[package]] +name = "ethereum_hashing" +version = "0.7.0" +source = "git+https://github.com/jsign/ethereum_hashing?rev=181896944365e4b76dd6407c2d679fb844165dd6#181896944365e4b76dd6407c2d679fb844165dd6" +dependencies = [ + "sha2", +] + [[package]] name = "ethereum_serde_utils" version = "0.8.0" @@ -3174,6 +3185,7 @@ dependencies = [ name = "integration-tests" version = "0.1.0" dependencies = [ + "alloy-primitives", "block-encoding-length", "ere-dockerized", "ere-io", @@ -3181,13 +3193,17 @@ dependencies = [ "flate2", "guest", "rayon", + "reth-chainspec", + "reth-evm-ethereum", "reth-stateless", "serde", "serde_json", "sha2", + "stateless-validator-common", "stateless-validator-ethrex", "stateless-validator-reth", "tar", + "tempfile", "tracing", "tracing-subscriber", ] @@ -3654,7 +3670,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -4370,7 +4386,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" dependencies = [ "anyhow", - "itertools 0.14.0", + "itertools 0.12.1", "proc-macro2", "quote", "syn 2.0.112", @@ -4892,6 +4908,16 @@ dependencies = [ "url", ] +[[package]] +name = "reth-payload-validator" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +dependencies = [ + "alloy-consensus", + "alloy-rpc-types-engine", + "reth-primitives-traits", +] + [[package]] name = "reth-primitives-traits" version = "1.9.3" @@ -5416,7 +5442,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.11.0", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -5978,6 +6004,22 @@ dependencies = [ "der", ] +[[package]] +name = "ssz_types" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b55bedc9a18ed2860a46d6beb4f4082416ee1d60be0cc364cebdcdddc7afd4" +dependencies = [ + "ethereum_serde_utils", + "ethereum_ssz", + "itertools 0.13.0", + "serde", + "serde_derive", + "smallvec", + "tree_hash", + "typenum", +] + [[package]] name = "stable_deref_trait" version = "1.2.1" @@ -5988,10 +6030,19 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" name = "stateless-validator-common" version = "0.1.0" dependencies = [ - "reth-stateless", + "alloy-eips", + "alloy-primitives", + "anyhow", + "ethereum_ssz", + "ethereum_ssz_derive", "rkyv", "serde", + "serde_with", "sha2", + "ssz_types", + "tree_hash", + "tree_hash_derive", + "typenum", ] [[package]] @@ -6011,6 +6062,7 @@ dependencies = [ "ethrex-vm", "guest", "guest_program", + "reth-stateless", "rkyv", "stateless-validator-common", ] @@ -6019,19 +6071,32 @@ dependencies = [ name = "stateless-validator-reth" version = "0.1.0" dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-genesis", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types-engine", "anyhow", "ere-io", "ere-zkvm-interface", + "ethereum_ssz", "guest", "once_cell", "reth-chainspec", "reth-ethereum-primitives", "reth-evm-ethereum", + "reth-payload-validator", "reth-primitives-traits", "reth-stateless", "serde", + "serde_with", + "sha2", "sparsestate", + "ssz_types", "stateless-validator-common", + "tree_hash", + "tree_hash_derive", ] [[package]] @@ -6188,7 +6253,7 @@ dependencies = [ "getrandom 0.3.4", "once_cell", "rustix 1.1.3", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -6538,6 +6603,31 @@ dependencies = [ "tracing-log", ] +[[package]] +name = "tree_hash" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee44f4cef85f88b4dea21c0b1f58320bdf35715cf56d840969487cff00613321" +dependencies = [ + "alloy-primitives", + "ethereum_hashing", + "ethereum_ssz", + "smallvec", + "typenum", +] + +[[package]] +name = "tree_hash_derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bee2ea1551f90040ab0e34b6fb7f2fa3bad8acc925837ac654f2c78a13e3089" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.112", +] + [[package]] name = "try-lock" version = "0.2.5" @@ -6848,7 +6938,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index e2a82446..93605ce1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,6 +43,7 @@ serde = { version = "1.0", default-features = false } serde_json = { version = "*", default-features = false } serde_with = { version = "3", default-features = false } sha2 = { version = "0.10.9", default-features = false } +tempfile = { version = "3.6.0", default-features = false } # test flate2 = "1.1.5" @@ -55,16 +56,19 @@ tracing-subscriber = "0.3.22" alloy-consensus = { version = "1.1.2", default-features = false } alloy-eips = { version = "1.1.2", default-features = false } alloy-genesis = { version = "1.1.2", default-features = false } +alloy-rpc-types-engine = { version = "1.1.2", default-features = false } alloy-primitives = { version = "1.4.1", default-features = false } alloy-rlp = { version = "0.3.10", default-features = false } alloy-trie = { version = "0.9.1", default-features = false } # reth reth-chainspec = { git = "https://github.com/paradigmxyz/reth", rev = "cfde951976bfa9100a6d9f806e06fb539ae25241", default-features = false } +reth-ethereum-payload-builder = { git = "https://github.com/paradigmxyz/reth", rev = "cfde951976bfa9100a6d9f806e06fb539ae25241", default-features = false } reth-ethereum-primitives = { git = "https://github.com/paradigmxyz/reth", rev = "cfde951976bfa9100a6d9f806e06fb539ae25241", default-features = false } reth-evm-ethereum = { git = "https://github.com/paradigmxyz/reth", rev = "cfde951976bfa9100a6d9f806e06fb539ae25241", default-features = false } reth-primitives-traits = { git = "https://github.com/paradigmxyz/reth", rev = "cfde951976bfa9100a6d9f806e06fb539ae25241", default-features = false } reth-stateless = { git = "https://github.com/paradigmxyz/reth", rev = "cfde951976bfa9100a6d9f806e06fb539ae25241", default-features = false } +reth-payload-validator = { git = "https://github.com/paradigmxyz/reth", rev = "cfde951976bfa9100a6d9f806e06fb539ae25241", default-features = false } # ethrex ethrex-common = { git = "https://github.com/lambdaclass/ethrex.git", rev = "e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1", default-features = false } @@ -73,6 +77,12 @@ ethrex-rlp = { git = "https://github.com/lambdaclass/ethrex.git", rev = "e6d7085 ethrex-rpc = { git = "https://github.com/lambdaclass/ethrex.git", rev = "e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1", default-features = false } ethrex-vm = { git = "https://github.com/lambdaclass/ethrex.git", rev = "e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1", default-features = false } +# lighthouse +tree_hash = "0.10.0" +tree_hash_derive = "0.10.0" +ssz_types = { version = "0.11", default-features = false } +typenum = { version = "1.18", default-features = false } + # ssz ethereum_ssz = "0.9" ethereum_ssz_derive = "0.9" @@ -92,3 +102,6 @@ block-encoding-length = { path = "crates/block-encoding-length", default-feature stateless-validator-common = { path = "crates/stateless-validator-common", default-features = false } stateless-validator-ethrex = { path = "crates/stateless-validator-ethrex", default-features = false } stateless-validator-reth = { path = "crates/stateless-validator-reth", default-features = false } + +[patch.crates-io] +ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "181896944365e4b76dd6407c2d679fb844165dd6" } diff --git a/crates/integration-tests/Cargo.toml b/crates/integration-tests/Cargo.toml index 533f5cf2..f04de789 100644 --- a/crates/integration-tests/Cargo.toml +++ b/crates/integration-tests/Cargo.toml @@ -16,6 +16,8 @@ serde = { workspace = true, features = ["derive"] } tar.workspace = true tracing.workspace = true tracing-subscriber.workspace = true +tempfile.workspace = true +serde_json.workspace = true # reth reth-stateless.workspace = true @@ -29,13 +31,25 @@ ere-zkvm-interface.workspace = true guest.workspace = true [dev-dependencies] -serde_json.workspace = true +alloy-primitives.workspace = true +reth-chainspec.workspace = true +reth-stateless.workspace = true +reth-evm-ethereum.workspace = true # ere ere-zkvm-interface.workspace = true ere-dockerized.workspace = true # local -block-encoding-length = { workspace = true, default-features = true, features = ["host"] } -stateless-validator-ethrex = { workspace = true, default-features = true, features = ["host"] } -stateless-validator-reth = { workspace = true, default-features = true, features = ["host"] } +block-encoding-length = { workspace = true, default-features = true, features = [ + "host", +] } +stateless-validator-common = { workspace = true, default-features = true, features = [ + "host", +] } +stateless-validator-ethrex = { workspace = true, default-features = true, features = [ + "host", +] } +stateless-validator-reth = { workspace = true, default-features = true, features = [ + "host", +] } diff --git a/crates/integration-tests/src/lib.rs b/crates/integration-tests/src/lib.rs index 2607db72..66fb5184 100644 --- a/crates/integration-tests/src/lib.rs +++ b/crates/integration-tests/src/lib.rs @@ -2,20 +2,22 @@ use std::{ fs::{self, File}, - path::PathBuf, + path::{Path, PathBuf}, }; use ere_dockerized::{CompilerKind, DockerizedCompiler, DockerizedzkVM, zkVMKind}; use ere_io::Io; use ere_zkvm_interface::{Compiler, Input, ProverResourceType, zkVM}; use flate2::read::GzDecoder; -use guest::{Guest, GuestInput, GuestOutput}; +use guest::{Guest, GuestInput, GuestOutput, Platform}; use rayon::prelude::*; use sha2::{Digest, Sha256}; use tar::Archive; use tracing::info; use tracing_subscriber::EnvFilter; +use crate::stateless_validator::StatelessValidatorFixture; + pub mod stateless_validator; /// Returns path to workspace @@ -32,7 +34,7 @@ pub fn fixtures_dir() -> PathBuf { } /// Unpack all fixtures in fixtures dir. -pub fn untar_fixtures() -> std::io::Result<()> { +pub fn untar_fixtures(target_dir: &Path) -> std::io::Result<()> { let fixtures_dir = fixtures_dir(); for entry in fs::read_dir(&fixtures_dir)? { @@ -41,13 +43,28 @@ pub fn untar_fixtures() -> std::io::Result<()> { if filename.is_some_and(|file_name| file_name.ends_with(".tar.gz")) { let file = File::open(&path)?; let gz = GzDecoder::new(file); - Archive::new(gz).unpack(&fixtures_dir)?; + Archive::new(gz).unpack(target_dir)?; } } Ok(()) } +/// Reads all stateless validator fixtures. +pub fn get_fixtures() -> Vec { + let dir = tempfile::tempdir().unwrap(); + let dir_path = dir.path(); + untar_fixtures(dir_path).unwrap(); + fs::read_dir(dir_path.join("block")) + .unwrap() + .map(|file| { + let bytes = fs::read(file.unwrap().path()).unwrap(); + let fixture: StatelessValidatorFixture = serde_json::from_slice(&bytes).unwrap(); + fixture + }) + .collect() +} + /// Compiles guest program and initialize zkVM. pub fn compile_and_init_zkvm(guest: &str, zkvm_kind: zkVMKind) -> DockerizedzkVM { let workspace = workspace(); @@ -134,3 +151,22 @@ impl TestCase { self } } +/// A platform that to run guests outside zkVMs. +#[derive(Debug)] +pub struct NoopPlatform; + +impl Platform for NoopPlatform { + #[allow(unreachable_code)] + fn read_whole_input() -> impl std::ops::Deref { + panic!("Can't read input in NoopPlatform"); + &[] as &[u8] + } + + fn write_whole_output(_: &[u8]) { + panic!("Can't write output in NoopPlatform"); + } + + fn print(message: &str) { + println!("{}", message); + } +} diff --git a/crates/integration-tests/src/stateless_validator.rs b/crates/integration-tests/src/stateless_validator.rs index 756e3826..9b649390 100644 --- a/crates/integration-tests/src/stateless_validator.rs +++ b/crates/integration-tests/src/stateless_validator.rs @@ -1,5 +1,6 @@ //! This module proivdes struct for stateless validator test fixture. +use guest::Platform; use reth_stateless::StatelessInput; use serde::{Deserialize, Serialize}; From c72cd25fcc773c4e219dc42ec4b24cccaca08c43 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Tue, 13 Jan 2026 15:48:53 -0300 Subject: [PATCH 08/46] bin sp1 fixes --- bin/stateless-validator-reth/sp1/Cargo.lock | 177 +++++++++++++++++++- bin/stateless-validator-reth/sp1/Cargo.toml | 6 +- 2 files changed, 177 insertions(+), 6 deletions(-) diff --git a/bin/stateless-validator-reth/sp1/Cargo.lock b/bin/stateless-validator-reth/sp1/Cargo.lock index bd01a1b6..305d30ac 100644 --- a/bin/stateless-validator-reth/sp1/Cargo.lock +++ b/bin/stateless-validator-reth/sp1/Cargo.lock @@ -267,7 +267,10 @@ dependencies = [ "alloy-eips", "alloy-primitives", "alloy-rlp", + "alloy-serde", "derive_more", + "rand 0.8.5", + "serde", "strum", ] @@ -398,7 +401,7 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04950a13cc4209d8e9b78f306e87782466bad8538c94324702d061ff03e211c9" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", "syn 2.0.111", @@ -413,6 +416,12 @@ dependencies = [ "libc", ] +[[package]] +name = "anyhow" +version = "1.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" + [[package]] name = "ark-bls12-381" version = "0.5.0" @@ -1076,14 +1085,38 @@ dependencies = [ "typenum", ] +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + [[package]] name = "darling" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.21.3", + "darling_macro 0.21.3", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.111", ] [[package]] @@ -1101,13 +1134,24 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core 0.20.11", + "quote", + "syn 2.0.111", +] + [[package]] name = "darling_macro" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ - "darling_core", + "darling_core 0.21.3", "quote", "syn 2.0.111", ] @@ -1339,6 +1383,54 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "ethereum_hashing" +version = "0.7.0" +source = "git+https://github.com/jsign/ethereum_hashing?rev=181896944365e4b76dd6407c2d679fb844165dd6#181896944365e4b76dd6407c2d679fb844165dd6" +dependencies = [ + "sha2", +] + +[[package]] +name = "ethereum_serde_utils" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dc1355dbb41fbbd34ec28d4fb2a57d9a70c67ac3c19f6a5ca4d4a176b9e997a" +dependencies = [ + "alloy-primitives", + "hex", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "ethereum_ssz" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dcddb2554d19cde19b099fadddde576929d7a4d0c1cd3512d1fd95cf174375c" +dependencies = [ + "alloy-primitives", + "ethereum_serde_utils", + "itertools 0.13.0", + "serde", + "serde_derive", + "smallvec", + "typenum", +] + +[[package]] +name = "ethereum_ssz_derive" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a657b6b3b7e153637dc6bdc6566ad9279d9ee11a15b12cfb24a2e04360637e9f" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "fastrand" version = "2.3.0" @@ -2812,6 +2904,16 @@ dependencies = [ "url", ] +[[package]] +name = "reth-payload-validator" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +dependencies = [ + "alloy-consensus", + "alloy-rpc-types-engine", + "reth-primitives-traits", +] + [[package]] name = "reth-primitives-traits" version = "1.9.3" @@ -3441,7 +3543,7 @@ version = "3.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", "syn 2.0.111", @@ -3597,6 +3699,22 @@ dependencies = [ "der", ] +[[package]] +name = "ssz_types" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b55bedc9a18ed2860a46d6beb4f4082416ee1d60be0cc364cebdcdddc7afd4" +dependencies = [ + "ethereum_serde_utils", + "ethereum_ssz", + "itertools 0.13.0", + "serde", + "serde_derive", + "smallvec", + "tree_hash", + "typenum", +] + [[package]] name = "stable_deref_trait" version = "1.2.1" @@ -3607,24 +3725,48 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" name = "stateless-validator-common" version = "0.1.0" dependencies = [ + "alloy-eips", + "alloy-primitives", + "anyhow", + "ethereum_ssz", + "ethereum_ssz_derive", "serde", + "serde_with", + "ssz_types", + "tree_hash", + "tree_hash_derive", + "typenum", ] [[package]] name = "stateless-validator-reth" version = "0.1.0" dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-genesis", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types-engine", + "anyhow", "ere-io", + "ethereum_ssz", "guest", "once_cell", "reth-chainspec", "reth-ethereum-primitives", "reth-evm-ethereum", + "reth-payload-validator", "reth-primitives-traits", "reth-stateless", "serde", + "serde_with", + "sha2", "sparsestate", + "ssz_types", "stateless-validator-common", + "tree_hash", + "tree_hash_derive", ] [[package]] @@ -3896,6 +4038,31 @@ dependencies = [ "once_cell", ] +[[package]] +name = "tree_hash" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee44f4cef85f88b4dea21c0b1f58320bdf35715cf56d840969487cff00613321" +dependencies = [ + "alloy-primitives", + "ethereum_hashing", + "ethereum_ssz", + "smallvec", + "typenum", +] + +[[package]] +name = "tree_hash_derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bee2ea1551f90040ab0e34b6fb7f2fa3bad8acc925837ac654f2c78a13e3089" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "typenum" version = "1.19.0" diff --git a/bin/stateless-validator-reth/sp1/Cargo.toml b/bin/stateless-validator-reth/sp1/Cargo.toml index 21b1fbc7..edfac4c6 100644 --- a/bin/stateless-validator-reth/sp1/Cargo.toml +++ b/bin/stateless-validator-reth/sp1/Cargo.toml @@ -7,7 +7,10 @@ edition = "2024" [dependencies] # enable features -alloy-primitives = { version = "1.4.1", default-features = false, features = ["map-foldhash", "sha3-keccak"] } +alloy-primitives = { version = "1.4.1", default-features = false, features = [ + "map-foldhash", + "sha3-keccak", +] } revm = { version = "33.1.0", default-features = false, features = ["bn"] } # ere @@ -25,6 +28,7 @@ k256 = { git = "https://github.com/sp1-patches/elliptic-curves", tag = "patch-k2 p256 = { git = "https://github.com/sp1-patches/elliptic-curves", tag = "patch-p256-13.2-sp1-5.0.0" } substrate-bn = { git = "https://github.com/sp1-patches/bn", tag = "patch-0.6.0-sp1-5.0.0" } ecdsa = { git = "https://github.com/sp1-patches/signatures", tag = "patch-16.9-sp1-4.1.0" } +ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "181896944365e4b76dd6407c2d679fb844165dd6" } [profile.release] codegen-units = 1 From d9eaf25c28595f145238dc6c8d5f38ab03fab88f Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Tue, 13 Jan 2026 17:23:11 -0300 Subject: [PATCH 09/46] refactor, simplification and cleanup --- .../tests/execution_payload.rs | 2 +- crates/stateless-validator-common/Cargo.toml | 9 +- .../src/execution_payload.rs | 459 ++---------------- crates/stateless-validator-common/src/host.rs | 166 ++++++- crates/stateless-validator-reth/Cargo.toml | 1 - .../src/execution_payload.rs | 142 +----- crates/stateless-validator-reth/src/host.rs | 70 +-- 7 files changed, 263 insertions(+), 586 deletions(-) diff --git a/crates/integration-tests/tests/execution_payload.rs b/crates/integration-tests/tests/execution_payload.rs index 4e59fa54..87ddf042 100644 --- a/crates/integration-tests/tests/execution_payload.rs +++ b/crates/integration-tests/tests/execution_payload.rs @@ -11,7 +11,7 @@ use guest::Guest; use integration_tests::{NoopPlatform, get_fixtures}; use reth_chainspec::ChainSpec; use reth_evm_ethereum::EthEvmConfig; -use reth_stateless::{Genesis, stateless_validation, stateless_validation_with_trie}; +use reth_stateless::{Genesis, stateless_validation}; use stateless_validator_reth::{ execution_payload::new_payload_request_to_block, guest::{StatelessValidatorRethGuest, StatelessValidatorRethInput}, diff --git a/crates/stateless-validator-common/Cargo.toml b/crates/stateless-validator-common/Cargo.toml index 5d267635..2e825d17 100644 --- a/crates/stateless-validator-common/Cargo.toml +++ b/crates/stateless-validator-common/Cargo.toml @@ -10,10 +10,13 @@ workspace = true [dependencies] rkyv = { workspace = true, optional = true } -serde = { workspace = true, features = ["derive"], optional = true } +serde = { workspace = true, optional = true, features = [ + "derive", + "alloc", +], default-features = false } +serde_with = { workspace = true, optional = true } sha2 = { workspace = true, optional = true } anyhow.workspace = true -serde_with.workspace = true # lighthouse tree_hash.workspace = true @@ -32,7 +35,7 @@ alloy-eips.workspace = true # guest default = ["std"] std = [] -serde = ["dep:serde"] +serde = ["dep:serde", "dep:serde_with"] rkyv = ["dep:rkyv"] # host diff --git a/crates/stateless-validator-common/src/execution_payload.rs b/crates/stateless-validator-common/src/execution_payload.rs index b4ca11c1..f1298992 100644 --- a/crates/stateless-validator-common/src/execution_payload.rs +++ b/crates/stateless-validator-common/src/execution_payload.rs @@ -1,36 +1,38 @@ -//! Execution payload types for zkVM guest programs. +//! Consensus types to support new payload requests. #![allow(missing_docs)] use alloc::vec::Vec; -use anyhow::{Context, Result}; use serde::{Deserialize, Serialize}; use serde_with::{Bytes, serde_as}; -use ssz::{Decode, Encode}; use ssz_types::{FixedVector, VariableList}; -use tree_hash::{Hash256, TreeHash, TreeHashType, merkle_root, mix_in_length}; +use tree_hash::TreeHash; use tree_hash_derive::TreeHash; +use typenum::Prod; +/// Primitive types pub type Hash32 = [u8; 32]; +pub type Bytes48 = [u8; 48]; +pub type Bytes96 = [u8; 96]; pub type Address20 = [u8; 20]; +pub type Uint256Bytes = [u8; 32]; pub type LogsBloom = FixedVector; pub type ExtraData = VariableList; -pub type Uint256Bytes = [u8; 32]; - -pub type MaxWithdrawalsPerPayload = typenum::U16; -pub type MaxBlobCommitmentsPerBlock = typenum::U4096; +/// Limits +pub type MaxBytesPerTransaction = Prod; // 2^30 +pub type MaxWithdrawalsPerPayload = typenum::U16; // 16 +pub type MaxTransactionsPerPayload = Prod; // 2^20 +pub type MaxBlobCommitmentsPerBlock = typenum::U4096; // 4096 pub type MaxDepositRequestsPerPayload = typenum::U8192; // 2^13 pub type MaxWithdrawalRequestsPerPayload = typenum::U16; // 2^4 pub type MaxConsolidationRequestsPerPayload = typenum::U2; // 2^1 -pub type Bytes48 = [u8; 48]; -pub type Bytes96 = [u8; 96]; - -pub const MAX_BYTES_PER_TRANSACTION: usize = 1 << 30; // 2^30 -pub const MAX_TRANSACTIONS_PER_PAYLOAD: usize = 1 << 20; // 2^20 -const BYTES_PER_CHUNK: usize = 32; +/// Composite types +pub type Transaction = VariableList; +pub type Transactions = VariableList; +pub type Withdrawals = VariableList; #[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] pub struct Withdrawal { @@ -56,7 +58,7 @@ pub struct DepositRequest { #[serde_as] #[derive( - Debug, Clone, TreeHash, Serialize, Deserialize, ssz_derive::Encode, ssz_derive::Decode, + Debug, Clone, Serialize, Deserialize, TreeHash, ssz_derive::Encode, ssz_derive::Decode, )] pub struct WithdrawalRequest { pub source_address: Address20, @@ -67,7 +69,7 @@ pub struct WithdrawalRequest { #[serde_as] #[derive( - Debug, Clone, TreeHash, Serialize, Deserialize, ssz_derive::Encode, ssz_derive::Decode, + Debug, Clone, Serialize, Deserialize, TreeHash, ssz_derive::Encode, ssz_derive::Decode, )] pub struct ConsolidationRequest { pub source_address: Address20, @@ -92,9 +94,7 @@ pub enum ForkName { Electra, } -/// ExecutionPayloadV1 (Bellatrix) -#[serde_as] -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] pub struct ExecutionPayloadV1 { pub parent_hash: Hash32, pub fee_recipient: Address20, @@ -109,13 +109,10 @@ pub struct ExecutionPayloadV1 { pub extra_data: ExtraData, pub base_fee_per_gas: Uint256Bytes, pub block_hash: Hash32, - #[serde_as(as = "Vec")] - pub transactions: Vec>, + pub transactions: Transactions, } -/// ExecutionPayloadV2 (Capella) -#[serde_as] -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] pub struct ExecutionPayloadV2 { pub parent_hash: Hash32, pub fee_recipient: Address20, @@ -130,14 +127,11 @@ pub struct ExecutionPayloadV2 { pub extra_data: ExtraData, pub base_fee_per_gas: Uint256Bytes, pub block_hash: Hash32, - #[serde_as(as = "Vec")] - pub transactions: Vec>, - pub withdrawals: Vec, + pub transactions: Transactions, + pub withdrawals: Withdrawals, } -/// ExecutionPayloadV3 (Deneb/Electra) -#[serde_as] -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] pub struct ExecutionPayloadV3 { pub parent_hash: Hash32, pub fee_recipient: Address20, @@ -152,217 +146,12 @@ pub struct ExecutionPayloadV3 { pub extra_data: ExtraData, pub base_fee_per_gas: Uint256Bytes, pub block_hash: Hash32, - #[serde_as(as = "Vec")] - pub transactions: Vec>, - pub withdrawals: Vec, + pub transactions: Transactions, + pub withdrawals: Withdrawals, pub blob_gas_used: u64, pub excess_blob_gas: u64, } -/// Computes the SSZ tree hash root of the transactions list. -fn compute_transactions_root(transactions: &[Vec]) -> Hash32 { - let tx_leaf_limit = MAX_BYTES_PER_TRANSACTION / BYTES_PER_CHUNK; - - let tx_roots: Vec = transactions - .iter() - .map(|tx| { - let root = merkle_root(tx.as_ref(), tx_leaf_limit); - mix_in_length(&root, tx.len()) - }) - .collect(); - - let roots_bytes: Vec = tx_roots.iter().flat_map(|h| h.0).collect(); - let list_root = merkle_root(&roots_bytes, MAX_TRANSACTIONS_PER_PAYLOAD); - mix_in_length(&list_root, transactions.len()).0 -} - -/// Computes the SSZ tree hash root of the withdrawals list. -fn compute_withdrawals_root(withdrawals: &[Withdrawal]) -> Hash32 { - type Withdrawals = VariableList; - Withdrawals::from(withdrawals.to_vec()).tree_hash_root().0 -} - -impl TreeHash for ExecutionPayloadV1 { - fn tree_hash_type() -> TreeHashType { - TreeHashType::Container - } - - fn tree_hash_packed_encoding(&self) -> tree_hash::PackedEncoding { - unreachable!("Container types should not be packed") - } - - fn tree_hash_packing_factor() -> usize { - unreachable!("Container types should not be packed") - } - - fn tree_hash_root(&self) -> Hash256 { - // Compute transactions root from actual data - let transactions_root = compute_transactions_root(&self.transactions); - - // Build header struct for tree hashing - #[derive(TreeHash)] - struct HeaderV1 { - parent_hash: Hash32, - fee_recipient: Address20, - state_root: Hash32, - receipts_root: Hash32, - logs_bloom: LogsBloom, - prev_randao: Hash32, - block_number: u64, - gas_limit: u64, - gas_used: u64, - timestamp: u64, - extra_data: ExtraData, - base_fee_per_gas: Uint256Bytes, - block_hash: Hash32, - transactions_root: Hash32, - } - - let header = HeaderV1 { - parent_hash: self.parent_hash, - fee_recipient: self.fee_recipient, - state_root: self.state_root, - receipts_root: self.receipts_root, - logs_bloom: self.logs_bloom.clone(), - prev_randao: self.prev_randao, - block_number: self.block_number, - gas_limit: self.gas_limit, - gas_used: self.gas_used, - timestamp: self.timestamp, - extra_data: self.extra_data.clone(), - base_fee_per_gas: self.base_fee_per_gas, - block_hash: self.block_hash, - transactions_root, - }; - - header.tree_hash_root() - } -} - -impl TreeHash for ExecutionPayloadV2 { - fn tree_hash_type() -> TreeHashType { - TreeHashType::Container - } - - fn tree_hash_packed_encoding(&self) -> tree_hash::PackedEncoding { - unreachable!("Container types should not be packed") - } - - fn tree_hash_packing_factor() -> usize { - unreachable!("Container types should not be packed") - } - - fn tree_hash_root(&self) -> Hash256 { - let transactions_root = compute_transactions_root(&self.transactions); - let withdrawals_root = compute_withdrawals_root(&self.withdrawals); - - #[derive(TreeHash)] - struct HeaderV2 { - parent_hash: Hash32, - fee_recipient: Address20, - state_root: Hash32, - receipts_root: Hash32, - logs_bloom: LogsBloom, - prev_randao: Hash32, - block_number: u64, - gas_limit: u64, - gas_used: u64, - timestamp: u64, - extra_data: ExtraData, - base_fee_per_gas: Uint256Bytes, - block_hash: Hash32, - transactions_root: Hash32, - withdrawals_root: Hash32, - } - - let header = HeaderV2 { - parent_hash: self.parent_hash, - fee_recipient: self.fee_recipient, - state_root: self.state_root, - receipts_root: self.receipts_root, - logs_bloom: self.logs_bloom.clone(), - prev_randao: self.prev_randao, - block_number: self.block_number, - gas_limit: self.gas_limit, - gas_used: self.gas_used, - timestamp: self.timestamp, - extra_data: self.extra_data.clone(), - base_fee_per_gas: self.base_fee_per_gas, - block_hash: self.block_hash, - transactions_root, - withdrawals_root, - }; - - header.tree_hash_root() - } -} - -impl TreeHash for ExecutionPayloadV3 { - fn tree_hash_type() -> TreeHashType { - TreeHashType::Container - } - - fn tree_hash_packed_encoding(&self) -> tree_hash::PackedEncoding { - unreachable!("Container types should not be packed") - } - - fn tree_hash_packing_factor() -> usize { - unreachable!("Container types should not be packed") - } - - fn tree_hash_root(&self) -> Hash256 { - let transactions_root = compute_transactions_root(&self.transactions); - let withdrawals_root = compute_withdrawals_root(&self.withdrawals); - - #[derive(TreeHash)] - struct HeaderV3 { - parent_hash: Hash32, - fee_recipient: Address20, - state_root: Hash32, - receipts_root: Hash32, - logs_bloom: LogsBloom, - prev_randao: Hash32, - block_number: u64, - gas_limit: u64, - gas_used: u64, - timestamp: u64, - extra_data: ExtraData, - base_fee_per_gas: Uint256Bytes, - block_hash: Hash32, - transactions_root: Hash32, - withdrawals_root: Hash32, - blob_gas_used: u64, - excess_blob_gas: u64, - } - - let header = HeaderV3 { - parent_hash: self.parent_hash, - fee_recipient: self.fee_recipient, - state_root: self.state_root, - receipts_root: self.receipts_root, - logs_bloom: self.logs_bloom.clone(), - prev_randao: self.prev_randao, - block_number: self.block_number, - gas_limit: self.gas_limit, - gas_used: self.gas_used, - timestamp: self.timestamp, - extra_data: self.extra_data.clone(), - base_fee_per_gas: self.base_fee_per_gas, - block_hash: self.block_hash, - transactions_root, - withdrawals_root, - blob_gas_used: self.blob_gas_used, - excess_blob_gas: self.excess_blob_gas, - }; - - header.tree_hash_root() - } -} - -// ============================================================================ -// NewPayloadRequest types -// ============================================================================ - #[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] pub struct NewPayloadRequestBellatrix { pub execution_payload: ExecutionPayloadV1, @@ -381,7 +170,15 @@ pub struct NewPayloadRequestDeneb { } #[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] -pub struct NewPayloadRequestElectra { +pub struct NewPayloadRequestElectraFulu { + pub execution_payload: ExecutionPayloadV3, + pub versioned_hashes: VariableList, + pub parent_beacon_block_root: Hash32, + pub execution_requests: ExecutionRequests, +} + +#[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +pub struct NewPayloadRequestFulu { pub execution_payload: ExecutionPayloadV3, pub versioned_hashes: VariableList, pub parent_beacon_block_root: Hash32, @@ -393,198 +190,16 @@ pub enum NewPayloadRequest { Bellatrix(NewPayloadRequestBellatrix), Capella(NewPayloadRequestCapella), Deneb(NewPayloadRequestDeneb), - Electra(NewPayloadRequestElectra), + ElectraFulu(NewPayloadRequestElectraFulu), } impl NewPayloadRequest { - pub fn new_bellatrix(execution_payload: ExecutionPayloadV1) -> Self { - NewPayloadRequest::Bellatrix(NewPayloadRequestBellatrix { execution_payload }) - } - - pub fn new_capella(execution_payload: ExecutionPayloadV2) -> Self { - NewPayloadRequest::Capella(NewPayloadRequestCapella { execution_payload }) - } - - pub fn new_deneb( - execution_payload: ExecutionPayloadV3, - versioned_hashes: Vec, - parent_beacon_block_root: Hash32, - ) -> Result { - let versioned_hashes = - VariableList::::new(versioned_hashes).map_err( - |err| { - anyhow::anyhow!( - "Versioned hashes length should be within bounds for MaxBlobCommitmentsPerBlock: {:?}", - err - ) - }, - )?; - Ok(NewPayloadRequest::Deneb(NewPayloadRequestDeneb { - execution_payload, - versioned_hashes, - parent_beacon_block_root, - })) - } - - pub fn new_electra( - execution_payload: ExecutionPayloadV3, - versioned_hashes: Vec, - parent_beacon_block_root: Hash32, - execution_requests: &[impl AsRef<[u8]>], - ) -> Result { - let versioned_hashes = - VariableList::::new(versioned_hashes).map_err( - |err| { - anyhow::anyhow!( - "Versioned hashes length should be within bounds for MaxBlobCommitmentsPerBlock: {:?}", - err - ) - }, - )?; - let execution_requests = decode_execution_requests(execution_requests) - .context("Decoding execution requests failed")?; - Ok(NewPayloadRequest::Electra(NewPayloadRequestElectra { - execution_payload, - versioned_hashes, - parent_beacon_block_root, - execution_requests, - })) - } - - /// Returns the tree hash root of this request. pub fn tree_hash_root(&self) -> [u8; 32] { match self { NewPayloadRequest::Bellatrix(req) => req.tree_hash_root().0, NewPayloadRequest::Capella(req) => req.tree_hash_root().0, NewPayloadRequest::Deneb(req) => req.tree_hash_root().0, - NewPayloadRequest::Electra(req) => req.tree_hash_root().0, + NewPayloadRequest::ElectraFulu(req) => req.tree_hash_root().0, } } - - /// Returns the versioned hashes if this is a Deneb or Electra request. - pub fn versioned_hashes(&self) -> Option<&VariableList> { - match self { - NewPayloadRequest::Bellatrix(_) | NewPayloadRequest::Capella(_) => None, - NewPayloadRequest::Deneb(req) => Some(&req.versioned_hashes), - NewPayloadRequest::Electra(req) => Some(&req.versioned_hashes), - } - } - - /// Returns the parent beacon block root if this is a Deneb or Electra request. - pub fn parent_beacon_block_root(&self) -> Option { - match self { - NewPayloadRequest::Bellatrix(_) | NewPayloadRequest::Capella(_) => None, - NewPayloadRequest::Deneb(req) => Some(req.parent_beacon_block_root), - NewPayloadRequest::Electra(req) => Some(req.parent_beacon_block_root), - } - } - - /// Returns the execution requests if this is an Electra request. - pub fn execution_requests(&self) -> Option<&ExecutionRequests> { - match self { - NewPayloadRequest::Electra(req) => Some(&req.execution_requests), - _ => None, - } - } -} - -fn decode_execution_requests(requests_list: &[impl AsRef<[u8]>]) -> Result { - // EIP-7685: requests are encoded as request_type (1 byte) ++ request_data - // Request types for Electra (Prague): - // - 0x00: Deposit requests (EIP-6110) - // - 0x01: Withdrawal requests (EIP-7002) - // - 0x02: Consolidation requests (EIP-7251) - - const DEPOSIT_REQUEST_TYPE: u8 = 0x00; - const WITHDRAWAL_REQUEST_TYPE: u8 = 0x01; - const CONSOLIDATION_REQUEST_TYPE: u8 = 0x02; - - // Fixed SSZ sizes for each request type (excluding the type byte) - let deposit_request_size = ::ssz_fixed_len(); - let withdrawal_request_size = ::ssz_fixed_len(); - let consolidation_request_size = ::ssz_fixed_len(); - - let mut deposits = Vec::new(); - let mut withdrawals = Vec::new(); - let mut consolidations = Vec::new(); - - for (idx, request) in requests_list.iter().enumerate() { - let request_bytes = request.as_ref(); - - anyhow::ensure!(!request_bytes.is_empty(), "Empty request at index {}", idx); - - // Read request type (first byte) - let request_type = request_bytes[0]; - let data = &request_bytes[1..]; - - match request_type { - DEPOSIT_REQUEST_TYPE => { - anyhow::ensure!( - data.len() == deposit_request_size, - "Invalid deposit request size at index {}: expected {}, got {}", - idx, - deposit_request_size, - data.len() - ); - - let deposit = DepositRequest::from_ssz_bytes(data).map_err(|e| { - anyhow::anyhow!( - "Failed to SSZ decode deposit request at index {}: {:?}", - idx, - e - ) - })?; - deposits.push(deposit); - } - WITHDRAWAL_REQUEST_TYPE => { - anyhow::ensure!( - data.len() == withdrawal_request_size, - "Invalid withdrawal request size at index {}: expected {}, got {}", - idx, - withdrawal_request_size, - data.len() - ); - - let withdrawal = WithdrawalRequest::from_ssz_bytes(data).map_err(|e| { - anyhow::anyhow!( - "Failed to SSZ decode withdrawal request at index {}: {:?}", - idx, - e - ) - })?; - withdrawals.push(withdrawal); - } - CONSOLIDATION_REQUEST_TYPE => { - anyhow::ensure!( - data.len() == consolidation_request_size, - "Invalid consolidation request size at index {}: expected {}, got {}", - idx, - consolidation_request_size, - data.len() - ); - - let consolidation = ConsolidationRequest::from_ssz_bytes(data).map_err(|e| { - anyhow::anyhow!( - "Failed to SSZ decode consolidation request at index {}: {:?}", - idx, - e - ) - })?; - consolidations.push(consolidation); - } - _ => { - anyhow::bail!("Unknown request type at index {}: {:#x}", idx, request_type); - } - } - } - - Ok(ExecutionRequests { - deposits: VariableList::new(deposits) - .map_err(|e| anyhow::anyhow!("Failed to create deposits VariableList: {:?}", e))?, - withdrawals: VariableList::new(withdrawals) - .map_err(|e| anyhow::anyhow!("Failed to create withdrawals VariableList: {:?}", e))?, - consolidations: VariableList::new(consolidations).map_err(|e| { - anyhow::anyhow!("Failed to create consolidations VariableList: {:?}", e) - })?, - }) } diff --git a/crates/stateless-validator-common/src/host.rs b/crates/stateless-validator-common/src/host.rs index 21ba28ce..ee7df3fc 100644 --- a/crates/stateless-validator-common/src/host.rs +++ b/crates/stateless-validator-common/src/host.rs @@ -2,7 +2,18 @@ use sha2::{Digest, Sha256}; -use crate::guest::StatelessValidatorOutput; +use crate::{ + execution_payload::{ + ConsolidationRequest, DepositRequest, ExecutionPayloadV1, ExecutionPayloadV2, + ExecutionPayloadV3, ExecutionRequests, Hash32, NewPayloadRequest, + NewPayloadRequestBellatrix, NewPayloadRequestCapella, NewPayloadRequestDeneb, + NewPayloadRequestElectraFulu, WithdrawalRequest, + }, + guest::StatelessValidatorOutput, +}; +use anyhow::{Context, Result}; +use ssz::{Decode, Encode}; +use ssz_types::VariableList; impl StatelessValidatorOutput { /// Returns sha256 digest of serialized output. @@ -10,3 +21,156 @@ impl StatelessValidatorOutput { Sha256::digest(self.serialize()).into() } } + +impl NewPayloadRequest { + /// Constructs a new [`NewPayloadRequest`] for Bellatrix. + pub fn new_bellatrix(execution_payload: ExecutionPayloadV1) -> Self { + NewPayloadRequest::Bellatrix(NewPayloadRequestBellatrix { execution_payload }) + } + + /// Constructs a new [`NewPayloadRequest`] for Capella. + pub fn new_capella(execution_payload: ExecutionPayloadV2) -> Self { + NewPayloadRequest::Capella(NewPayloadRequestCapella { execution_payload }) + } + + /// Constructs a new [`NewPayloadRequest`] for Deneb. + pub fn new_deneb( + execution_payload: ExecutionPayloadV3, + versioned_hashes: Vec, + parent_beacon_block_root: Hash32, + ) -> Result { + let versioned_hashes = VariableList::new(versioned_hashes).map_err(|err| { + anyhow::anyhow!("Versioned hashes length should be within bounds: {:?}", err) + })?; + Ok(NewPayloadRequest::Deneb(NewPayloadRequestDeneb { + execution_payload, + versioned_hashes, + parent_beacon_block_root, + })) + } + + /// Constructs a new [`NewPayloadRequest`] for Electra or Fulu. + pub fn new_electra_fulu( + execution_payload: ExecutionPayloadV3, + versioned_hashes: Vec, + parent_beacon_block_root: Hash32, + execution_requests: &[impl AsRef<[u8]>], + ) -> Result { + let versioned_hashes = VariableList::new(versioned_hashes).map_err(|err| { + anyhow::anyhow!("Versioned hashes length should be within bounds: {:?}", err) + })?; + let execution_requests = decode_execution_requests(execution_requests) + .context("Decoding execution requests failed")?; + Ok(NewPayloadRequest::ElectraFulu( + NewPayloadRequestElectraFulu { + execution_payload, + versioned_hashes, + parent_beacon_block_root, + execution_requests, + }, + )) + } +} + +/// Decodes a list of execution requests obtained from execution and deserializes them into an +/// [`ExecutionRequests`] struct. +fn decode_execution_requests(requests_list: &[impl AsRef<[u8]>]) -> Result { + // EIP-7685: requests are encoded as request_type (1 byte) ++ request_data + // Request types for Electra (Prague): + // - 0x00: Deposit requests (EIP-6110) + // - 0x01: Withdrawal requests (EIP-7002) + // - 0x02: Consolidation requests (EIP-7251) + + const DEPOSIT_REQUEST_TYPE: u8 = 0x00; + const WITHDRAWAL_REQUEST_TYPE: u8 = 0x01; + const CONSOLIDATION_REQUEST_TYPE: u8 = 0x02; + + // Fixed SSZ sizes for each request type (excluding the type byte) + let deposit_request_size = ::ssz_fixed_len(); + let withdrawal_request_size = ::ssz_fixed_len(); + let consolidation_request_size = ::ssz_fixed_len(); + + let mut deposits = Vec::new(); + let mut withdrawals = Vec::new(); + let mut consolidations = Vec::new(); + + for (idx, request) in requests_list.iter().enumerate() { + let request_bytes = request.as_ref(); + + anyhow::ensure!(!request_bytes.is_empty(), "Empty request at index {}", idx); + + // Read request type (first byte) + let request_type = request_bytes[0]; + let data = &request_bytes[1..]; + + match request_type { + DEPOSIT_REQUEST_TYPE => { + anyhow::ensure!( + data.len() == deposit_request_size, + "Invalid deposit request size at index {}: expected {}, got {}", + idx, + deposit_request_size, + data.len() + ); + + let deposit = DepositRequest::from_ssz_bytes(data).map_err(|e| { + anyhow::anyhow!( + "Failed to SSZ decode deposit request at index {}: {:?}", + idx, + e + ) + })?; + deposits.push(deposit); + } + WITHDRAWAL_REQUEST_TYPE => { + anyhow::ensure!( + data.len() == withdrawal_request_size, + "Invalid withdrawal request size at index {}: expected {}, got {}", + idx, + withdrawal_request_size, + data.len() + ); + + let withdrawal = WithdrawalRequest::from_ssz_bytes(data).map_err(|e| { + anyhow::anyhow!( + "Failed to SSZ decode withdrawal request at index {}: {:?}", + idx, + e + ) + })?; + withdrawals.push(withdrawal); + } + CONSOLIDATION_REQUEST_TYPE => { + anyhow::ensure!( + data.len() == consolidation_request_size, + "Invalid consolidation request size at index {}: expected {}, got {}", + idx, + consolidation_request_size, + data.len() + ); + + let consolidation = ConsolidationRequest::from_ssz_bytes(data).map_err(|e| { + anyhow::anyhow!( + "Failed to SSZ decode consolidation request at index {}: {:?}", + idx, + e + ) + })?; + consolidations.push(consolidation); + } + _ => { + anyhow::bail!("Unknown request type at index {}: {:#x}", idx, request_type); + } + } + } + + Ok(ExecutionRequests { + deposits: VariableList::new(deposits) + .map_err(|e| anyhow::anyhow!("Failed to create deposits VariableList: {:?}", e))?, + withdrawals: VariableList::new(withdrawals) + .map_err(|e| anyhow::anyhow!("Failed to create withdrawals VariableList: {:?}", e))?, + consolidations: VariableList::new(consolidations).map_err(|e| { + anyhow::anyhow!("Failed to create consolidations VariableList: {:?}", e) + })?, + }) +} diff --git a/crates/stateless-validator-reth/Cargo.toml b/crates/stateless-validator-reth/Cargo.toml index e5236742..a8c7111c 100644 --- a/crates/stateless-validator-reth/Cargo.toml +++ b/crates/stateless-validator-reth/Cargo.toml @@ -26,7 +26,6 @@ alloy-rpc-types-engine = { workspace = true, default-features = false, features # reth reth-chainspec.workspace = true -# reth-ethereum-payload-builder = { workspace = true, default-features = false } reth-payload-validator = { workspace = true, default-features = false } reth-ethereum-primitives.workspace = true reth-evm-ethereum.workspace = true diff --git a/crates/stateless-validator-reth/src/execution_payload.rs b/crates/stateless-validator-reth/src/execution_payload.rs index 4c167491..233b1617 100644 --- a/crates/stateless-validator-reth/src/execution_payload.rs +++ b/crates/stateless-validator-reth/src/execution_payload.rs @@ -16,7 +16,6 @@ use anyhow::{Context, Result}; use reth_chainspec::{ChainSpec, EthereumHardforks}; use reth_payload_validator::{cancun, prague, shanghai}; use reth_primitives_traits::{Block as _, SealedBlock, SignedTransaction}; -use ssz_types::{FixedVector, VariableList}; use stateless_validator_common::execution_payload::{ ExecutionPayloadV1, ExecutionPayloadV2, ExecutionPayloadV3, ForkName, NewPayloadRequest, Withdrawal, @@ -63,7 +62,7 @@ pub fn new_payload_request_to_block( Ok(sealed_block.into_block()) } -pub fn ensure_well_formed_payload( +fn ensure_well_formed_payload( chain_spec: ChainSpec, payload: ExecutionData, ) -> Result>, PayloadError> @@ -154,7 +153,7 @@ pub fn new_payload_request_to_execution_data(req: NewPayloadRequest) -> Executio ExecutionData::new(AlloyExecutionPayload::V3(v3), sidecar) } - NewPayloadRequest::Electra(e) => { + NewPayloadRequest::ElectraFulu(e) => { let (v1, withdrawals) = convert_v2_to_alloy_from_v3(&e.execution_payload); let v3 = AlloyExecutionPayloadV3 { payload_inner: AlloyExecutionPayloadV2 { @@ -201,7 +200,11 @@ fn convert_v1_to_alloy(payload: ExecutionPayloadV1) -> AlloyExecutionPayloadV1 { extra_data: Bytes::from(payload.extra_data.to_vec()), base_fee_per_gas: U256::from_le_bytes(payload.base_fee_per_gas), block_hash: B256::from(payload.block_hash), - transactions: payload.transactions.into_iter().map(Bytes::from).collect(), + transactions: payload + .transactions + .into_iter() + .map(|tx| Bytes::from(tx.to_vec())) + .collect(), } } @@ -223,7 +226,11 @@ fn convert_v2_to_alloy( extra_data: Bytes::from(payload.extra_data.to_vec()), base_fee_per_gas: U256::from_le_bytes(payload.base_fee_per_gas), block_hash: B256::from(payload.block_hash), - transactions: payload.transactions.into_iter().map(Bytes::from).collect(), + transactions: payload + .transactions + .into_iter() + .map(|tx| Bytes::from(tx.to_vec())) + .collect(), }; let withdrawals = payload @@ -256,7 +263,7 @@ fn convert_v2_to_alloy_from_v3( transactions: payload .transactions .iter() - .map(|tx| Bytes::from(tx.clone())) + .map(|tx| Bytes::from(tx.to_vec())) .collect(), }; @@ -317,126 +324,3 @@ fn compute_requests_hash( B256::from_slice(&outer_hasher.finalize()) } - -// ============================================================================ -// Conversion: ExecutionData -> NewPayloadRequest (for creating requests from blocks) -// ============================================================================ - -/// Creates a new execution payload request from ExecutionData. -/// -/// This extracts the transaction and withdrawal data from the ExecutionData -/// and creates the appropriate NewPayloadRequest variant. -pub fn create_new_payload_request( - execution_data: &ExecutionData, - requests: &alloy_eips::eip7685::Requests, -) -> anyhow::Result { - match &execution_data.payload { - AlloyExecutionPayload::V1(v1) => { - let payload = ExecutionPayloadV1 { - parent_hash: v1.parent_hash.0, - fee_recipient: v1.fee_recipient.0.0, - state_root: v1.state_root.0, - receipts_root: v1.receipts_root.0, - logs_bloom: FixedVector::from(v1.logs_bloom.0.to_vec()), - prev_randao: v1.prev_randao.0, - block_number: v1.block_number, - gas_limit: v1.gas_limit, - gas_used: v1.gas_used, - timestamp: v1.timestamp, - extra_data: VariableList::from(v1.extra_data.to_vec()), - base_fee_per_gas: v1.base_fee_per_gas.to_le_bytes(), - block_hash: v1.block_hash.0, - transactions: v1.transactions.iter().map(|tx| tx.to_vec()).collect(), - }; - Ok(NewPayloadRequest::new_bellatrix(payload)) - } - AlloyExecutionPayload::V2(v2) => { - let v1 = &v2.payload_inner; - let payload = ExecutionPayloadV2 { - parent_hash: v1.parent_hash.0, - fee_recipient: v1.fee_recipient.0.0, - state_root: v1.state_root.0, - receipts_root: v1.receipts_root.0, - logs_bloom: FixedVector::from(v1.logs_bloom.0.to_vec()), - prev_randao: v1.prev_randao.0, - block_number: v1.block_number, - gas_limit: v1.gas_limit, - gas_used: v1.gas_used, - timestamp: v1.timestamp, - extra_data: VariableList::from(v1.extra_data.to_vec()), - base_fee_per_gas: v1.base_fee_per_gas.to_le_bytes(), - block_hash: v1.block_hash.0, - transactions: v1.transactions.iter().map(|tx| tx.to_vec()).collect(), - withdrawals: v2 - .withdrawals - .iter() - .map(convert_alloy_withdrawal) - .collect(), - }; - Ok(NewPayloadRequest::new_capella(payload)) - } - AlloyExecutionPayload::V3(v3) => { - let v2 = &v3.payload_inner; - let v1 = &v2.payload_inner; - let payload = ExecutionPayloadV3 { - parent_hash: v1.parent_hash.0, - fee_recipient: v1.fee_recipient.0.0, - state_root: v1.state_root.0, - receipts_root: v1.receipts_root.0, - logs_bloom: FixedVector::from(v1.logs_bloom.0.to_vec()), - prev_randao: v1.prev_randao.0, - block_number: v1.block_number, - gas_limit: v1.gas_limit, - gas_used: v1.gas_used, - timestamp: v1.timestamp, - extra_data: VariableList::from(v1.extra_data.to_vec()), - base_fee_per_gas: v1.base_fee_per_gas.to_le_bytes(), - block_hash: v1.block_hash.0, - transactions: v1.transactions.iter().map(|tx| tx.to_vec()).collect(), - withdrawals: v2 - .withdrawals - .iter() - .map(convert_alloy_withdrawal) - .collect(), - blob_gas_used: v3.blob_gas_used, - excess_blob_gas: v3.excess_blob_gas, - }; - - let sidecar = &execution_data.sidecar; - match (sidecar.cancun(), sidecar.prague()) { - // Deneb - (Some(c), None) => { - let versioned_hashes = c.versioned_hashes.iter().map(|h| h.0).collect(); - let parent_beacon_block_root = c.parent_beacon_block_root.0; - NewPayloadRequest::new_deneb( - payload, - versioned_hashes, - parent_beacon_block_root, - ) - } - // Electra - (Some(c), Some(_)) => { - let versioned_hashes = c.versioned_hashes.iter().map(|h| h.0).collect(); - let parent_beacon_block_root = c.parent_beacon_block_root.0; - NewPayloadRequest::new_electra( - payload, - versioned_hashes, - parent_beacon_block_root, - requests, - ) - } - _ => anyhow::bail!("Missing sidecar for Deneb execution payload"), - } - } - } -} - -/// Converts alloy's Withdrawal to our Withdrawal -fn convert_alloy_withdrawal(w: &AlloyWithdrawal) -> Withdrawal { - Withdrawal { - index: w.index, - validator_index: w.validator_index, - address: w.address.0.0, - amount: w.amount, - } -} diff --git a/crates/stateless-validator-reth/src/host.rs b/crates/stateless-validator-reth/src/host.rs index 94bd6894..cf592035 100644 --- a/crates/stateless-validator-reth/src/host.rs +++ b/crates/stateless-validator-reth/src/host.rs @@ -14,7 +14,7 @@ use reth_stateless::UncompressedPublicKey; use ssz_types::{FixedVector, VariableList}; use stateless_validator_common::execution_payload::{ ExecutionPayloadV1, ExecutionPayloadV2, ExecutionPayloadV3, ForkName, NewPayloadRequest, - Withdrawal, + Transaction as Tx, Transactions, Withdrawal, Withdrawals, }; pub use stateless_validator_common::guest::StatelessValidatorOutput; @@ -77,14 +77,17 @@ pub fn to_new_payload_request( let fork = determine_fork_name(&stateless_input.chain_config, header.timestamp); // Convert transactions to RLP-encoded bytes - let transactions: Vec> = body - .transactions() - .map(|tx| { - let mut buf = Vec::new(); - tx.encode_2718(&mut buf); - buf - }) - .collect(); + let transactions: Transactions = { + let txs: Vec = body + .transactions() + .map(|tx| { + let mut buf = Vec::new(); + tx.encode_2718(&mut buf); + Tx::from(buf) + }) + .collect(); + Transactions::from(txs) + }; // Helper to convert alloy withdrawal to our neutral type let convert_withdrawal = |w: &alloy_eips::eip4895::Withdrawal| Withdrawal { @@ -111,16 +114,19 @@ pub fn to_new_payload_request( base_fee_per_gas: U256::from(header.base_fee_per_gas.unwrap_or_default()) .to_le_bytes(), block_hash: stateless_input.block.hash_slow().0, - transactions, + transactions: transactions.clone(), }; Ok(NewPayloadRequest::new_bellatrix(payload)) } ForkName::Capella => { - let withdrawals: Vec = body - .withdrawals - .as_ref() - .map(|ws| ws.iter().map(convert_withdrawal).collect()) - .unwrap_or_default(); + let withdrawals: Withdrawals = { + let wdls: Vec = body + .withdrawals + .as_ref() + .map(|ws| ws.iter().map(convert_withdrawal).collect()) + .unwrap_or_default(); + Withdrawals::from(wdls) + }; let payload = ExecutionPayloadV2 { parent_hash: header.parent_hash.0, @@ -137,17 +143,20 @@ pub fn to_new_payload_request( base_fee_per_gas: U256::from(header.base_fee_per_gas.unwrap_or_default()) .to_le_bytes(), block_hash: stateless_input.block.hash_slow().0, - transactions, + transactions: transactions.clone(), withdrawals, }; Ok(NewPayloadRequest::new_capella(payload)) } ForkName::Deneb => { - let withdrawals: Vec = body - .withdrawals - .as_ref() - .map(|ws| ws.iter().map(convert_withdrawal).collect()) - .unwrap_or_default(); + let withdrawals: Withdrawals = { + let wdls: Vec = body + .withdrawals + .as_ref() + .map(|ws| ws.iter().map(convert_withdrawal).collect()) + .unwrap_or_default(); + Withdrawals::from(wdls) + }; let payload = ExecutionPayloadV3 { parent_hash: header.parent_hash.0, @@ -164,7 +173,7 @@ pub fn to_new_payload_request( base_fee_per_gas: U256::from(header.base_fee_per_gas.unwrap_or_default()) .to_le_bytes(), block_hash: stateless_input.block.hash_slow().0, - transactions, + transactions: transactions.clone(), withdrawals, blob_gas_used: header.blob_gas_used.unwrap_or_default(), excess_blob_gas: header.excess_blob_gas.unwrap_or_default(), @@ -187,11 +196,14 @@ pub fn to_new_payload_request( NewPayloadRequest::new_deneb(payload, versioned_hashes, parent_beacon_block_root) } ForkName::Electra => { - let withdrawals: Vec = body - .withdrawals - .as_ref() - .map(|ws| ws.iter().map(convert_withdrawal).collect()) - .unwrap_or_default(); + let withdrawals: Withdrawals = { + let wdls: Vec = body + .withdrawals + .as_ref() + .map(|ws| ws.iter().map(convert_withdrawal).collect()) + .unwrap_or_default(); + Withdrawals::from(wdls) + }; let payload = ExecutionPayloadV3 { parent_hash: header.parent_hash.0, @@ -228,7 +240,7 @@ pub fn to_new_payload_request( .unwrap_or_default() .0; - NewPayloadRequest::new_electra( + NewPayloadRequest::new_electra_fulu( payload, versioned_hashes, parent_beacon_block_root, @@ -260,7 +272,7 @@ mod test { extra_data: Default::default(), base_fee_per_gas: [6; 32], block_hash: [7; 32], - transactions: vec![], + transactions: Default::default(), }); for output in [ StatelessValidatorOutput::new(&dummy_new_payload_request, false), From 1129c05ec043cafadf93983d9342e6598c1222de Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Tue, 13 Jan 2026 18:04:18 -0300 Subject: [PATCH 10/46] stateless validator common polishing --- .../stateless-validator-common/src/guest.rs | 7 +-- .../stateless-validator-ethrex/src/guest.rs | 43 +++++++++---------- crates/stateless-validator-reth/src/guest.rs | 10 ++--- crates/stateless-validator-reth/src/host.rs | 9 ++-- 4 files changed, 31 insertions(+), 38 deletions(-) diff --git a/crates/stateless-validator-common/src/guest.rs b/crates/stateless-validator-common/src/guest.rs index 0a826a29..df9a879a 100644 --- a/crates/stateless-validator-common/src/guest.rs +++ b/crates/stateless-validator-common/src/guest.rs @@ -1,7 +1,5 @@ //! Stateless validator common types and utilities for guest. -use crate::execution_payload::NewPayloadRequest; - /// Static size of [`StatelessValidatorOutput`]. pub const STATELESS_VALIDATOR_OUTPUT_SIZE: usize = size_of::(); @@ -13,7 +11,7 @@ pub const STATELESS_VALIDATOR_OUTPUT_SIZE: usize = size_of:: Self { - let new_payload_request_root = new_payload_request.tree_hash_root(); + pub fn new(new_payload_request_root: [u8; 32], successful_block_validation: bool) -> Self { Self { new_payload_request_root, successful_block_validation, diff --git a/crates/stateless-validator-ethrex/src/guest.rs b/crates/stateless-validator-ethrex/src/guest.rs index b11f1a30..7431758c 100644 --- a/crates/stateless-validator-ethrex/src/guest.rs +++ b/crates/stateless-validator-ethrex/src/guest.rs @@ -118,34 +118,33 @@ impl Guest for StatelessValidatorEthrexGuest { #[cfg(test)] mod test { - use stateless_validator_common::execution_payload::{ - ExecutionPayloadHeaderV1, NewPayloadRequest, - }; + use stateless_validator_common::execution_payload::{ExecutionPayloadV1, NewPayloadRequest}; use crate::guest::{Io, StatelessValidatorEthrexIo, StatelessValidatorOutput}; #[test] fn serialize_output() { - let dummy_new_payload_request = - NewPayloadRequest::new_bellatrix(ExecutionPayloadHeaderV1 { - parent_hash: [1; 32], - fee_recipient: [2; 20], - state_root: [3; 32], - receipts_root: [4; 32], - logs_bloom: Default::default(), - prev_randao: [5; 32], - block_number: 1, - gas_limit: 2, - gas_used: 3, - timestamp: 4, - extra_data: Default::default(), - base_fee_per_gas: [6; 32], - block_hash: [7; 32], - transactions_root: [8; 32], - }); + let dummy_new_payload_request_root = NewPayloadRequest::new_bellatrix(ExecutionPayloadV1 { + parent_hash: [1; 32], + fee_recipient: [2; 20], + state_root: [3; 32], + receipts_root: [4; 32], + logs_bloom: Default::default(), + prev_randao: [5; 32], + block_number: 1, + gas_limit: 2, + gas_used: 3, + timestamp: 4, + extra_data: Default::default(), + base_fee_per_gas: [6; 32], + block_hash: [7; 32], + transactions: Default::default(), + }) + .tree_hash_root(); + for output in [ - StatelessValidatorOutput::new(dummy_new_payload_request.clone(), false), - StatelessValidatorOutput::new(dummy_new_payload_request.clone(), true), + StatelessValidatorOutput::new(dummy_new_payload_request_root, false), + StatelessValidatorOutput::new(dummy_new_payload_request_root, true), ] { assert_eq!( StatelessValidatorEthrexIo::serialize_output(&output).unwrap(), diff --git a/crates/stateless-validator-reth/src/guest.rs b/crates/stateless-validator-reth/src/guest.rs index 53ee7573..136cc7f9 100644 --- a/crates/stateless-validator-reth/src/guest.rs +++ b/crates/stateless-validator-reth/src/guest.rs @@ -68,7 +68,7 @@ impl Guest for StatelessValidatorRethGuest { Ok(block) => block, Err(err) => { P::print(&format!("Failed to convert to reth block: {err}\n")); - return StatelessValidatorOutput::default(); // TODO + return StatelessValidatorOutput::new(new_payload_request_root, false); } }; @@ -83,14 +83,10 @@ impl Guest for StatelessValidatorRethGuest { }); match res { - Ok(_) => StatelessValidatorOutput { - // TODO: change to use constructor - new_payload_request_root, - successful_block_validation: true, - }, + Ok(_) => StatelessValidatorOutput::new(new_payload_request_root, true), Err(err) => { P::print(&format!("Block validation failed: {err}\n")); - StatelessValidatorOutput::default() // TODO + StatelessValidatorOutput::new(new_payload_request_root, false) } } } diff --git a/crates/stateless-validator-reth/src/host.rs b/crates/stateless-validator-reth/src/host.rs index cf592035..f9a2aa41 100644 --- a/crates/stateless-validator-reth/src/host.rs +++ b/crates/stateless-validator-reth/src/host.rs @@ -258,7 +258,7 @@ mod test { #[test] fn serialize_output() { - let dummy_new_payload_request = NewPayloadRequest::new_bellatrix(ExecutionPayloadV1 { + let dummy_new_payload_request_root = NewPayloadRequest::new_bellatrix(ExecutionPayloadV1 { parent_hash: [1; 32], fee_recipient: [2; 20], state_root: [3; 32], @@ -273,10 +273,11 @@ mod test { base_fee_per_gas: [6; 32], block_hash: [7; 32], transactions: Default::default(), - }); + }) + .tree_hash_root(); for output in [ - StatelessValidatorOutput::new(&dummy_new_payload_request, false), - StatelessValidatorOutput::new(&dummy_new_payload_request, true), + StatelessValidatorOutput::new(dummy_new_payload_request_root, false), + StatelessValidatorOutput::new(dummy_new_payload_request_root, true), ] { assert_eq!( StatelessValidatorRethIo::serialize_output(&output).unwrap(), From e8b533c0ed3e6d2f7a5a0da59e528b3622b9cf96 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Tue, 13 Jan 2026 18:06:29 -0300 Subject: [PATCH 11/46] remove compat since we switched input type --- crates/stateless-validator-reth/src/lib.rs | 2 - .../src/serde_bincode_compat.rs | 346 ------------------ 2 files changed, 348 deletions(-) delete mode 100644 crates/stateless-validator-reth/src/serde_bincode_compat.rs diff --git a/crates/stateless-validator-reth/src/lib.rs b/crates/stateless-validator-reth/src/lib.rs index 225d5a2f..aedd9e00 100644 --- a/crates/stateless-validator-reth/src/lib.rs +++ b/crates/stateless-validator-reth/src/lib.rs @@ -8,7 +8,5 @@ pub mod guest; pub mod execution_payload; -pub mod serde_bincode_compat; - #[cfg(feature = "host")] pub mod host; diff --git a/crates/stateless-validator-reth/src/serde_bincode_compat.rs b/crates/stateless-validator-reth/src/serde_bincode_compat.rs deleted file mode 100644 index 63785b91..00000000 --- a/crates/stateless-validator-reth/src/serde_bincode_compat.rs +++ /dev/null @@ -1,346 +0,0 @@ -//! Bincode-compatible serde implementations for `alloy-rpc-types-engine` types. -//! -//! The standard serde implementations for some types use `#[serde(flatten)]` and -//! `#[serde(untagged)]` which are incompatible with bincode serialization. -//! This module provides wrapper types only for the problematic types. -//! -//! Types that need wrappers: -//! - `ExecutionPayload` - uses `#[serde(untagged)]` -//! - `ExecutionPayloadV2` - uses `#[serde(flatten)]` on `payload_inner` -//! - `ExecutionPayloadV3` - uses `#[serde(flatten)]` on `payload_inner` -//! - `RequestsOrHash` - uses `#[serde(untagged)]` -//! -//! Types that don't need wrappers but contain problematic nested types: -//! - `ExecutionPayloadSidecar` - contains `PraguePayloadFields` → `RequestsOrHash` -//! - `PraguePayloadFields` - contains `RequestsOrHash` - -use alloc::vec::Vec; - -use alloy_eips::{ - eip4895::Withdrawal, - eip7685::{Requests, RequestsOrHash}, -}; -use alloy_primitives::{Address, B256, Bloom, Bytes, U256}; -pub use alloy_rpc_types_engine::ExecutionData; -use alloy_rpc_types_engine::{ - CancunPayloadFields, ExecutionPayloadSidecar, ExecutionPayloadV1, ExecutionPayloadV2, - ExecutionPayloadV3, PraguePayloadFields, -}; -use serde::{Deserialize, Deserializer, Serialize, Serializer}; -use serde_with::{DeserializeAs, SerializeAs}; - -/// Bincode-compatible [`ExecutionData`] serde implementation. -#[derive(Debug, Serialize, Deserialize)] -pub struct ExecutionDataCompat { - payload: ExecutionPayloadCompat, - sidecar: ExecutionPayloadSidecarCompat, -} - -impl SerializeAs for ExecutionDataCompat { - fn serialize_as(value: &ExecutionData, serializer: S) -> Result - where - S: Serializer, - { - ExecutionDataCompat::from(value).serialize(serializer) - } -} - -impl<'de> DeserializeAs<'de, ExecutionData> for ExecutionDataCompat { - fn deserialize_as(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - ExecutionDataCompat::deserialize(deserializer).map(Into::into) - } -} - -impl From<&ExecutionData> for ExecutionDataCompat { - fn from(value: &ExecutionData) -> Self { - Self { - payload: ExecutionPayloadCompat::from(&value.payload), - sidecar: ExecutionPayloadSidecarCompat::from(&value.sidecar), - } - } -} - -impl From for ExecutionData { - fn from(value: ExecutionDataCompat) -> Self { - Self::new(value.payload.into(), value.sidecar.into()) - } -} - -/// Bincode-compatible [`ExecutionPayload`] serde implementation. -/// -/// The original uses `#[serde(untagged)]` which is incompatible with bincode. -/// This version uses explicit enum discriminants. -#[derive(Debug, Serialize, Deserialize)] -pub enum ExecutionPayloadCompat { - /// V1 payload (no flatten issues, use original type directly) - V1(ExecutionPayloadV1), - /// V2 payload (has flatten, needs compat wrapper) - V2(ExecutionPayloadV2Compat), - /// V3 payload (has flatten, needs compat wrapper) - V3(ExecutionPayloadV3Compat), -} - -impl From<&alloy_rpc_types_engine::ExecutionPayload> for ExecutionPayloadCompat { - fn from(value: &alloy_rpc_types_engine::ExecutionPayload) -> Self { - match value { - alloy_rpc_types_engine::ExecutionPayload::V1(v1) => Self::V1(v1.clone()), - alloy_rpc_types_engine::ExecutionPayload::V2(v2) => { - Self::V2(ExecutionPayloadV2Compat::from(v2)) - } - alloy_rpc_types_engine::ExecutionPayload::V3(v3) => { - Self::V3(ExecutionPayloadV3Compat::from(v3)) - } - } - } -} - -impl From for alloy_rpc_types_engine::ExecutionPayload { - fn from(value: ExecutionPayloadCompat) -> Self { - match value { - ExecutionPayloadCompat::V1(v1) => Self::V1(v1), - ExecutionPayloadCompat::V2(v2) => Self::V2(v2.into()), - ExecutionPayloadCompat::V3(v3) => Self::V3(v3.into()), - } - } -} - -/// Bincode-compatible [`ExecutionPayloadV2`] serde implementation. -/// -/// The original uses `#[serde(flatten)]` on `payload_inner` which is incompatible with bincode. -/// This version inlines all V1 fields. -#[derive(Debug, Serialize, Deserialize)] -pub struct ExecutionPayloadV2Compat { - // V1 fields (inlined instead of flattened) - parent_hash: B256, - fee_recipient: Address, - state_root: B256, - receipts_root: B256, - logs_bloom: Bloom, - prev_randao: B256, - block_number: u64, - gas_limit: u64, - gas_used: u64, - timestamp: u64, - extra_data: Bytes, - base_fee_per_gas: U256, - block_hash: B256, - transactions: Vec, - // V2 fields - withdrawals: Vec, -} - -impl From<&ExecutionPayloadV2> for ExecutionPayloadV2Compat { - fn from(value: &ExecutionPayloadV2) -> Self { - let v1 = &value.payload_inner; - Self { - parent_hash: v1.parent_hash, - fee_recipient: v1.fee_recipient, - state_root: v1.state_root, - receipts_root: v1.receipts_root, - logs_bloom: v1.logs_bloom, - prev_randao: v1.prev_randao, - block_number: v1.block_number, - gas_limit: v1.gas_limit, - gas_used: v1.gas_used, - timestamp: v1.timestamp, - extra_data: v1.extra_data.clone(), - base_fee_per_gas: v1.base_fee_per_gas, - block_hash: v1.block_hash, - transactions: v1.transactions.clone(), - withdrawals: value.withdrawals.clone(), - } - } -} - -impl From for ExecutionPayloadV2 { - fn from(value: ExecutionPayloadV2Compat) -> Self { - Self { - payload_inner: ExecutionPayloadV1 { - parent_hash: value.parent_hash, - fee_recipient: value.fee_recipient, - state_root: value.state_root, - receipts_root: value.receipts_root, - logs_bloom: value.logs_bloom, - prev_randao: value.prev_randao, - block_number: value.block_number, - gas_limit: value.gas_limit, - gas_used: value.gas_used, - timestamp: value.timestamp, - extra_data: value.extra_data, - base_fee_per_gas: value.base_fee_per_gas, - block_hash: value.block_hash, - transactions: value.transactions, - }, - withdrawals: value.withdrawals, - } - } -} - -/// Bincode-compatible [`ExecutionPayloadV3`] serde implementation. -/// -/// The original uses `#[serde(flatten)]` on `payload_inner` which is incompatible with bincode. -/// This version inlines all V1 and V2 fields. -#[derive(Debug, Serialize, Deserialize)] -pub struct ExecutionPayloadV3Compat { - // V1 fields (inlined) - parent_hash: B256, - fee_recipient: Address, - state_root: B256, - receipts_root: B256, - logs_bloom: Bloom, - prev_randao: B256, - block_number: u64, - gas_limit: u64, - gas_used: u64, - timestamp: u64, - extra_data: Bytes, - base_fee_per_gas: U256, - block_hash: B256, - transactions: Vec, - // V2 fields (inlined) - withdrawals: Vec, - // V3 fields - blob_gas_used: u64, - excess_blob_gas: u64, -} - -impl From<&ExecutionPayloadV3> for ExecutionPayloadV3Compat { - fn from(value: &ExecutionPayloadV3) -> Self { - let v2 = &value.payload_inner; - let v1 = &v2.payload_inner; - Self { - parent_hash: v1.parent_hash, - fee_recipient: v1.fee_recipient, - state_root: v1.state_root, - receipts_root: v1.receipts_root, - logs_bloom: v1.logs_bloom, - prev_randao: v1.prev_randao, - block_number: v1.block_number, - gas_limit: v1.gas_limit, - gas_used: v1.gas_used, - timestamp: v1.timestamp, - extra_data: v1.extra_data.clone(), - base_fee_per_gas: v1.base_fee_per_gas, - block_hash: v1.block_hash, - transactions: v1.transactions.clone(), - withdrawals: v2.withdrawals.clone(), - blob_gas_used: value.blob_gas_used, - excess_blob_gas: value.excess_blob_gas, - } - } -} - -impl From for ExecutionPayloadV3 { - fn from(value: ExecutionPayloadV3Compat) -> Self { - Self { - payload_inner: ExecutionPayloadV2 { - payload_inner: ExecutionPayloadV1 { - parent_hash: value.parent_hash, - fee_recipient: value.fee_recipient, - state_root: value.state_root, - receipts_root: value.receipts_root, - logs_bloom: value.logs_bloom, - prev_randao: value.prev_randao, - block_number: value.block_number, - gas_limit: value.gas_limit, - gas_used: value.gas_used, - timestamp: value.timestamp, - extra_data: value.extra_data, - base_fee_per_gas: value.base_fee_per_gas, - block_hash: value.block_hash, - transactions: value.transactions, - }, - withdrawals: value.withdrawals, - }, - blob_gas_used: value.blob_gas_used, - excess_blob_gas: value.excess_blob_gas, - } - } -} - -/// Bincode-compatible [`ExecutionPayloadSidecar`] serde implementation. -/// -/// The sidecar itself doesn't use flatten/untagged, but it contains -/// `PraguePayloadFields` which contains `RequestsOrHash` (untagged). -#[derive(Debug, Serialize, Deserialize)] -pub struct ExecutionPayloadSidecarCompat { - // CancunPayloadFields doesn't have any problematic attributes, use directly - cancun: Option, - // PraguePayloadFields contains RequestsOrHash which uses untagged - prague: Option, -} - -impl From<&ExecutionPayloadSidecar> for ExecutionPayloadSidecarCompat { - fn from(value: &ExecutionPayloadSidecar) -> Self { - Self { - cancun: value.cancun().cloned(), - prague: value.prague().map(PraguePayloadFieldsCompat::from), - } - } -} - -impl From for ExecutionPayloadSidecar { - fn from(value: ExecutionPayloadSidecarCompat) -> Self { - let prague: Option = value.prague.map(Into::into); - match (value.cancun, prague) { - (Some(c), Some(p)) => Self::v4(c, p), - (Some(c), None) => Self::v3(c), - _ => Self::none(), - } - } -} - -/// Bincode-compatible [`PraguePayloadFields`] serde implementation. -/// -/// Contains `RequestsOrHash` which uses `#[serde(untagged)]`. -#[derive(Debug, Serialize, Deserialize)] -pub struct PraguePayloadFieldsCompat { - requests: RequestsOrHashCompat, -} - -impl From<&PraguePayloadFields> for PraguePayloadFieldsCompat { - fn from(value: &PraguePayloadFields) -> Self { - Self { - requests: RequestsOrHashCompat::from(&value.requests), - } - } -} - -impl From for PraguePayloadFields { - fn from(value: PraguePayloadFieldsCompat) -> Self { - Self::new(value.requests) - } -} - -/// Bincode-compatible [`RequestsOrHash`] serde implementation. -/// -/// The original uses `#[serde(untagged)]` which is incompatible with bincode. -/// This version uses explicit enum discriminants. -#[derive(Debug, Serialize, Deserialize)] -pub enum RequestsOrHashCompat { - /// List of requests - Requests(Requests), - /// Precomputed hash - Hash(B256), -} - -impl From<&RequestsOrHash> for RequestsOrHashCompat { - fn from(value: &RequestsOrHash) -> Self { - match value { - RequestsOrHash::Requests(r) => Self::Requests(r.clone()), - RequestsOrHash::Hash(h) => Self::Hash(*h), - } - } -} - -impl From for RequestsOrHash { - fn from(value: RequestsOrHashCompat) -> Self { - match value { - RequestsOrHashCompat::Requests(r) => Self::Requests(r), - RequestsOrHashCompat::Hash(h) => Self::Hash(h), - } - } -} From 31bdd849744755ff50041dc2d4d987100c947869 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Tue, 13 Jan 2026 18:36:05 -0300 Subject: [PATCH 12/46] perf improvements and renames --- bin/stateless-validator-reth/sp1/Cargo.lock | 1 + .../tests/execution_payload.rs | 2 +- crates/stateless-validator-common/Cargo.toml | 11 +- crates/stateless-validator-common/src/host.rs | 4 +- crates/stateless-validator-common/src/lib.rs | 2 +- ...tion_payload.rs => new_payload_request.rs} | 37 +++++ .../stateless-validator-ethrex/src/guest.rs | 2 +- crates/stateless-validator-reth/Cargo.toml | 12 +- crates/stateless-validator-reth/src/guest.rs | 4 +- crates/stateless-validator-reth/src/host.rs | 37 ++++- crates/stateless-validator-reth/src/lib.rs | 2 +- ...tion_payload.rs => new_payload_request.rs} | 126 ++++-------------- 12 files changed, 114 insertions(+), 126 deletions(-) rename crates/stateless-validator-common/src/{execution_payload.rs => new_payload_request.rs} (84%) rename crates/stateless-validator-reth/src/{execution_payload.rs => new_payload_request.rs} (67%) diff --git a/bin/stateless-validator-reth/sp1/Cargo.lock b/bin/stateless-validator-reth/sp1/Cargo.lock index 305d30ac..26a2006e 100644 --- a/bin/stateless-validator-reth/sp1/Cargo.lock +++ b/bin/stateless-validator-reth/sp1/Cargo.lock @@ -3732,6 +3732,7 @@ dependencies = [ "ethereum_ssz_derive", "serde", "serde_with", + "sha2", "ssz_types", "tree_hash", "tree_hash_derive", diff --git a/crates/integration-tests/tests/execution_payload.rs b/crates/integration-tests/tests/execution_payload.rs index 87ddf042..e17a9842 100644 --- a/crates/integration-tests/tests/execution_payload.rs +++ b/crates/integration-tests/tests/execution_payload.rs @@ -13,9 +13,9 @@ use reth_chainspec::ChainSpec; use reth_evm_ethereum::EthEvmConfig; use reth_stateless::{Genesis, stateless_validation}; use stateless_validator_reth::{ - execution_payload::new_payload_request_to_block, guest::{StatelessValidatorRethGuest, StatelessValidatorRethInput}, host::to_new_payload_request, + new_payload_request::new_payload_request_to_block, }; /// Verify that StatelessInput is converted to ExecutionPayload correctly against precomputed roots. diff --git a/crates/stateless-validator-common/Cargo.toml b/crates/stateless-validator-common/Cargo.toml index 2e825d17..f2645673 100644 --- a/crates/stateless-validator-common/Cargo.toml +++ b/crates/stateless-validator-common/Cargo.toml @@ -9,14 +9,13 @@ license.workspace = true workspace = true [dependencies] +anyhow.workspace = true rkyv = { workspace = true, optional = true } +serde_with = { workspace = true, optional = true } serde = { workspace = true, optional = true, features = [ "derive", "alloc", ], default-features = false } -serde_with = { workspace = true, optional = true } -sha2 = { workspace = true, optional = true } -anyhow.workspace = true # lighthouse tree_hash.workspace = true @@ -28,9 +27,13 @@ typenum.workspace = true ethereum_ssz.workspace = true ethereum_ssz_derive.workspace = true +#alloy alloy-primitives.workspace = true alloy-eips.workspace = true +# crypto +sha2.workspace = true + [features] # guest default = ["std"] @@ -39,4 +42,4 @@ serde = ["dep:serde", "dep:serde_with"] rkyv = ["dep:rkyv"] # host -host = ["std", "dep:sha2"] +host = ["std"] diff --git a/crates/stateless-validator-common/src/host.rs b/crates/stateless-validator-common/src/host.rs index ee7df3fc..da69bfd8 100644 --- a/crates/stateless-validator-common/src/host.rs +++ b/crates/stateless-validator-common/src/host.rs @@ -3,13 +3,13 @@ use sha2::{Digest, Sha256}; use crate::{ - execution_payload::{ + guest::StatelessValidatorOutput, + new_payload_request::{ ConsolidationRequest, DepositRequest, ExecutionPayloadV1, ExecutionPayloadV2, ExecutionPayloadV3, ExecutionRequests, Hash32, NewPayloadRequest, NewPayloadRequestBellatrix, NewPayloadRequestCapella, NewPayloadRequestDeneb, NewPayloadRequestElectraFulu, WithdrawalRequest, }, - guest::StatelessValidatorOutput, }; use anyhow::{Context, Result}; use ssz::{Decode, Encode}; diff --git a/crates/stateless-validator-common/src/lib.rs b/crates/stateless-validator-common/src/lib.rs index 46a8b6d0..e2a2c38b 100644 --- a/crates/stateless-validator-common/src/lib.rs +++ b/crates/stateless-validator-common/src/lib.rs @@ -4,8 +4,8 @@ extern crate alloc; -pub mod execution_payload; pub mod guest; +pub mod new_payload_request; #[cfg(feature = "host")] pub mod host; diff --git a/crates/stateless-validator-common/src/execution_payload.rs b/crates/stateless-validator-common/src/new_payload_request.rs similarity index 84% rename from crates/stateless-validator-common/src/execution_payload.rs rename to crates/stateless-validator-common/src/new_payload_request.rs index f1298992..25319532 100644 --- a/crates/stateless-validator-common/src/execution_payload.rs +++ b/crates/stateless-validator-common/src/new_payload_request.rs @@ -203,3 +203,40 @@ impl NewPayloadRequest { } } } + +/// Computes the requests hash for EL block construction. +pub fn compute_requests_hash(requests: &ExecutionRequests) -> [u8; 32] { + use sha2::{Digest, Sha256}; + use ssz::Encode; + + let mut outer_hasher = Sha256::new(); + + // Deposit requests (type 0x00) + let mut deposits_bytes = vec![0x00u8]; + for deposit in requests.deposits.iter() { + deposits_bytes.extend(deposit.as_ssz_bytes()); + } + if deposits_bytes.len() > 1 { + outer_hasher.update(Sha256::digest(&deposits_bytes)); + } + + // Withdrawal requests (type 0x01) + let mut withdrawals_bytes = vec![0x01u8]; + for withdrawal in requests.withdrawals.iter() { + withdrawals_bytes.extend(withdrawal.as_ssz_bytes()); + } + if withdrawals_bytes.len() > 1 { + outer_hasher.update(Sha256::digest(&withdrawals_bytes)); + } + + // Consolidation requests (type 0x02) + let mut consolidations_bytes = vec![0x02u8]; + for consolidation in requests.consolidations.iter() { + consolidations_bytes.extend(consolidation.as_ssz_bytes()); + } + if consolidations_bytes.len() > 1 { + outer_hasher.update(Sha256::digest(&consolidations_bytes)); + } + + outer_hasher.finalize().into() +} diff --git a/crates/stateless-validator-ethrex/src/guest.rs b/crates/stateless-validator-ethrex/src/guest.rs index 7431758c..af1d3354 100644 --- a/crates/stateless-validator-ethrex/src/guest.rs +++ b/crates/stateless-validator-ethrex/src/guest.rs @@ -118,7 +118,7 @@ impl Guest for StatelessValidatorEthrexGuest { #[cfg(test)] mod test { - use stateless_validator_common::execution_payload::{ExecutionPayloadV1, NewPayloadRequest}; + use stateless_validator_common::new_payload_request::{ExecutionPayloadV1, NewPayloadRequest}; use crate::guest::{Io, StatelessValidatorEthrexIo, StatelessValidatorOutput}; diff --git a/crates/stateless-validator-reth/Cargo.toml b/crates/stateless-validator-reth/Cargo.toml index a8c7111c..23fc6c55 100644 --- a/crates/stateless-validator-reth/Cargo.toml +++ b/crates/stateless-validator-reth/Cargo.toml @@ -15,11 +15,11 @@ serde.workspace = true serde_with.workspace = true # alloy -alloy-consensus = { workspace = true } -alloy-eips = { workspace = true } -alloy-genesis = { workspace = true } -alloy-primitives = { workspace = true } -alloy-rlp = { workspace = true } +alloy-consensus.workspace = true +alloy-eips.workspace = true +alloy-genesis.workspace = true +alloy-primitives.workspace = true +alloy-rlp.workspace = true alloy-rpc-types-engine = { workspace = true, default-features = false, features = [ "serde", ] } @@ -33,7 +33,7 @@ reth-primitives-traits.workspace = true reth-stateless.workspace = true # lighthouse -tree_hash = { workspace = true } +tree_hash.workspace = true tree_hash_derive.workspace = true # ssz diff --git a/crates/stateless-validator-reth/src/guest.rs b/crates/stateless-validator-reth/src/guest.rs index 136cc7f9..fcfb2315 100644 --- a/crates/stateless-validator-reth/src/guest.rs +++ b/crates/stateless-validator-reth/src/guest.rs @@ -12,9 +12,9 @@ use reth_stateless::{ use serde::{Deserialize, Serialize}; use serde_with::serde_as; use sparsestate::SparseState; -use stateless_validator_common::execution_payload::NewPayloadRequest; +use stateless_validator_common::new_payload_request::NewPayloadRequest; -use crate::execution_payload::new_payload_request_to_block; +use crate::new_payload_request::new_payload_request_to_block; #[rustfmt::skip] pub use { diff --git a/crates/stateless-validator-reth/src/host.rs b/crates/stateless-validator-reth/src/host.rs index f9a2aa41..9fef19be 100644 --- a/crates/stateless-validator-reth/src/host.rs +++ b/crates/stateless-validator-reth/src/host.rs @@ -3,6 +3,7 @@ use alloc::{format, vec::Vec}; use alloy_eips::{Encodable2718, eip7685::Requests}; +use alloy_genesis::ChainConfig; use alloy_primitives::U256; use anyhow::Context; use ere_zkvm_interface::Input; @@ -12,16 +13,13 @@ use reth_primitives_traits::Block; pub use reth_stateless::StatelessInput; use reth_stateless::UncompressedPublicKey; use ssz_types::{FixedVector, VariableList}; -use stateless_validator_common::execution_payload::{ +pub use stateless_validator_common::guest::StatelessValidatorOutput; +use stateless_validator_common::new_payload_request::{ ExecutionPayloadV1, ExecutionPayloadV2, ExecutionPayloadV3, ForkName, NewPayloadRequest, Transaction as Tx, Transactions, Withdrawal, Withdrawals, }; -pub use stateless_validator_common::guest::StatelessValidatorOutput; -use crate::{ - execution_payload::determine_fork_name, - guest::{StatelessValidatorRethGuest, StatelessValidatorRethInput}, -}; +use crate::guest::{StatelessValidatorRethGuest, StatelessValidatorRethInput}; impl StatelessValidatorRethInput { /// Construct [`StatelessValidatorRethInput`] given [`StatelessInput`]. @@ -63,6 +61,31 @@ where .collect() } +/// Determines the fork name based on alloy chain config and block timestamp. +pub fn determine_fork_name(chain_config: &ChainConfig, timestamp: u64) -> ForkName { + // Check forks in reverse chronological order + if chain_config + .prague_time + .is_some_and(|prague_time| timestamp >= prague_time) + { + return ForkName::Electra; + } + if chain_config + .cancun_time + .is_some_and(|cancun_time| timestamp >= cancun_time) + { + return ForkName::Deneb; + } + if chain_config + .shanghai_time + .is_some_and(|shanghai_time| timestamp >= shanghai_time) + { + return ForkName::Capella; + } + // Default to Bellatrix for post-merge blocks + ForkName::Bellatrix +} + /// Converts a [`StatelessInput`] to a [`NewPayloadRequest`]. /// /// This creates the appropriate NewPayloadRequest variant based on the fork. @@ -252,7 +275,7 @@ pub fn to_new_payload_request( #[cfg(test)] mod test { - use stateless_validator_common::execution_payload::{ExecutionPayloadV1, NewPayloadRequest}; + use stateless_validator_common::new_payload_request::{ExecutionPayloadV1, NewPayloadRequest}; use crate::guest::{Io, StatelessValidatorOutput, StatelessValidatorRethIo}; diff --git a/crates/stateless-validator-reth/src/lib.rs b/crates/stateless-validator-reth/src/lib.rs index aedd9e00..1aaae5ab 100644 --- a/crates/stateless-validator-reth/src/lib.rs +++ b/crates/stateless-validator-reth/src/lib.rs @@ -6,7 +6,7 @@ extern crate alloc; pub mod guest; -pub mod execution_payload; +pub mod new_payload_request; #[cfg(feature = "host")] pub mod host; diff --git a/crates/stateless-validator-reth/src/execution_payload.rs b/crates/stateless-validator-reth/src/new_payload_request.rs similarity index 67% rename from crates/stateless-validator-reth/src/execution_payload.rs rename to crates/stateless-validator-reth/src/new_payload_request.rs index 233b1617..8475eb01 100644 --- a/crates/stateless-validator-reth/src/execution_payload.rs +++ b/crates/stateless-validator-reth/src/new_payload_request.rs @@ -1,10 +1,9 @@ -//! Execution payload conversion between NewPayloadRequest and alloy types. +//! Execution payload request to block utilities. use alloc::{sync::Arc, vec::Vec}; use alloy_consensus::Block; use alloy_eips::eip4895::Withdrawal as AlloyWithdrawal; -use alloy_genesis::ChainConfig; use alloy_primitives::{Address, B256, Bloom, Bytes, U256}; use alloy_rpc_types_engine::{ CancunPayloadFields, ExecutionData, ExecutionPayload as AlloyExecutionPayload, @@ -16,52 +15,29 @@ use anyhow::{Context, Result}; use reth_chainspec::{ChainSpec, EthereumHardforks}; use reth_payload_validator::{cancun, prague, shanghai}; use reth_primitives_traits::{Block as _, SealedBlock, SignedTransaction}; -use stateless_validator_common::execution_payload::{ - ExecutionPayloadV1, ExecutionPayloadV2, ExecutionPayloadV3, ForkName, NewPayloadRequest, - Withdrawal, +use stateless_validator_common::new_payload_request::{ + ExecutionPayloadV1, ExecutionPayloadV2, ExecutionPayloadV3, NewPayloadRequest, Withdrawal, + compute_requests_hash, }; -/// Determines the fork name based on alloy chain config and block timestamp. -pub fn determine_fork_name(chain_config: &ChainConfig, timestamp: u64) -> ForkName { - // Check forks in reverse chronological order - if chain_config - .prague_time - .is_some_and(|prague_time| timestamp >= prague_time) - { - return ForkName::Electra; - } - if chain_config - .cancun_time - .is_some_and(|cancun_time| timestamp >= cancun_time) - { - return ForkName::Deneb; - } - if chain_config - .shanghai_time - .is_some_and(|shanghai_time| timestamp >= shanghai_time) - { - return ForkName::Capella; - } - // Default to Bellatrix for post-merge blocks - ForkName::Bellatrix -} - -/// Converts a [`NewPayloadRequest`] into a validated reth [`SealedBlock`]. -/// -/// This converts the request to `ExecutionData`, then uses -/// `EthereumExecutionPayloadValidator` to validate the payload and return a sealed block. +/// Converts a [`NewPayloadRequest`] into a validated reth [`Block`]. pub fn new_payload_request_to_block( new_payload_request: NewPayloadRequest, chain_spec: Arc, -) -> Result> { +) -> Result> { let execution_data = new_payload_request_to_execution_data(new_payload_request); - let sealed_block: SealedBlock< - Block>, - > = ensure_well_formed_payload(chain_spec, execution_data) + let sealed_block = ensure_well_formed_payload(chain_spec, execution_data) .context("Payload validation failed")?; Ok(sealed_block.into_block()) } +/// This method is copied from `reth-ethereum-payload-builder` crate. +/// https://github.com/paradigmxyz/reth/blob/8eecad3d1d433ed509373713c21c31504290d17d/crates/ethereum/payload/src/validator.rs#L66 +/// Unfortunately, that crate does not allow to have minimal activated +/// features in alloy-consensus to use directly without pulling in blst +/// and other non-friendly dependencies for zkVMs. +/// TODO: If we can upstream some changes to this crate accordingly, we +/// can remove this method and use directly from reth. fn ensure_well_formed_payload( chain_spec: ChainSpec, payload: ExecutionData, @@ -105,12 +81,7 @@ where Ok(sealed_block) } -// ============================================================================ -// Conversion: NewPayloadRequest -> ExecutionData -// ============================================================================ - -/// Converts a [`NewPayloadRequest`] into an alloy [`ExecutionData`]. -pub fn new_payload_request_to_execution_data(req: NewPayloadRequest) -> ExecutionData { +fn new_payload_request_to_execution_data(req: NewPayloadRequest) -> ExecutionData { match req { NewPayloadRequest::Bellatrix(b) => { let v1 = convert_v1_to_alloy(b.execution_payload); @@ -141,11 +112,8 @@ pub fn new_payload_request_to_execution_data(req: NewPayloadRequest) -> Executio excess_blob_gas: d.execution_payload.excess_blob_gas, }; - let versioned_hashes: Vec = d - .versioned_hashes - .into_iter() - .map(|h| B256::from(h)) - .collect(); + let versioned_hashes: Vec = + d.versioned_hashes.into_iter().map(B256::from).collect(); let parent_beacon_block_root = B256::from(d.parent_beacon_block_root); let cancun_fields = CancunPayloadFields::new(parent_beacon_block_root, versioned_hashes); @@ -164,18 +132,13 @@ pub fn new_payload_request_to_execution_data(req: NewPayloadRequest) -> Executio excess_blob_gas: e.execution_payload.excess_blob_gas, }; - let versioned_hashes: Vec = e - .versioned_hashes - .into_iter() - .map(|h| B256::from(h)) - .collect(); + let versioned_hashes: Vec = + e.versioned_hashes.into_iter().map(B256::from).collect(); let parent_beacon_block_root = B256::from(e.parent_beacon_block_root); let cancun_fields = CancunPayloadFields::new(parent_beacon_block_root, versioned_hashes); - // For Electra, compute requests_hash from execution_requests - // The requests_hash is stored in the sidecar - let requests_hash = compute_requests_hash(&e.execution_requests); + let requests_hash = B256::from(compute_requests_hash(&e.execution_requests)); let prague_fields = alloy_rpc_types_engine::PraguePayloadFields::new(requests_hash); let sidecar = ExecutionPayloadSidecar::v4(cancun_fields, prague_fields); @@ -197,13 +160,13 @@ fn convert_v1_to_alloy(payload: ExecutionPayloadV1) -> AlloyExecutionPayloadV1 { gas_limit: payload.gas_limit, gas_used: payload.gas_used, timestamp: payload.timestamp, - extra_data: Bytes::from(payload.extra_data.to_vec()), + extra_data: Bytes::from(Vec::from(payload.extra_data)), base_fee_per_gas: U256::from_le_bytes(payload.base_fee_per_gas), block_hash: B256::from(payload.block_hash), transactions: payload .transactions .into_iter() - .map(|tx| Bytes::from(tx.to_vec())) + .map(|tx| Bytes::from(Vec::from(tx))) .collect(), } } @@ -223,13 +186,13 @@ fn convert_v2_to_alloy( gas_limit: payload.gas_limit, gas_used: payload.gas_used, timestamp: payload.timestamp, - extra_data: Bytes::from(payload.extra_data.to_vec()), + extra_data: Bytes::from(Vec::from(payload.extra_data)), base_fee_per_gas: U256::from_le_bytes(payload.base_fee_per_gas), block_hash: B256::from(payload.block_hash), transactions: payload .transactions .into_iter() - .map(|tx| Bytes::from(tx.to_vec())) + .map(|tx| Bytes::from(Vec::from(tx))) .collect(), }; @@ -263,7 +226,7 @@ fn convert_v2_to_alloy_from_v3( transactions: payload .transactions .iter() - .map(|tx| Bytes::from(tx.to_vec())) + .map(|tx| Bytes::copy_from_slice(tx)) .collect(), }; @@ -285,42 +248,3 @@ fn convert_withdrawal(w: Withdrawal) -> AlloyWithdrawal { amount: w.amount, } } - -/// Computes the requests hash for Electra from ExecutionRequests per EIP-7685. -fn compute_requests_hash( - requests: &stateless_validator_common::execution_payload::ExecutionRequests, -) -> B256 { - use sha2::{Digest, Sha256}; - use ssz::Encode; - - let mut outer_hasher = Sha256::new(); - - // Deposit requests (type 0x00) - let mut deposits_bytes = vec![0x00u8]; - for deposit in requests.deposits.iter() { - deposits_bytes.extend(deposit.as_ssz_bytes()); - } - if deposits_bytes.len() > 1 { - outer_hasher.update(Sha256::digest(&deposits_bytes)); - } - - // Withdrawal requests (type 0x01) - let mut withdrawals_bytes = vec![0x01u8]; - for withdrawal in requests.withdrawals.iter() { - withdrawals_bytes.extend(withdrawal.as_ssz_bytes()); - } - if withdrawals_bytes.len() > 1 { - outer_hasher.update(Sha256::digest(&withdrawals_bytes)); - } - - // Consolidation requests (type 0x02) - let mut consolidations_bytes = vec![0x02u8]; - for consolidation in requests.consolidations.iter() { - consolidations_bytes.extend(consolidation.as_ssz_bytes()); - } - if consolidations_bytes.len() > 1 { - outer_hasher.update(Sha256::digest(&consolidations_bytes)); - } - - B256::from_slice(&outer_hasher.finalize()) -} From e46f7f8dbbd94b39e7b9e0c004e40ec3c684ef9a Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Tue, 13 Jan 2026 19:36:08 -0300 Subject: [PATCH 13/46] avoid more allocations --- .../src/new_payload_request.rs | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/crates/stateless-validator-reth/src/new_payload_request.rs b/crates/stateless-validator-reth/src/new_payload_request.rs index 8475eb01..77ac5186 100644 --- a/crates/stateless-validator-reth/src/new_payload_request.rs +++ b/crates/stateless-validator-reth/src/new_payload_request.rs @@ -102,14 +102,16 @@ fn new_payload_request_to_execution_data(req: NewPayloadRequest) -> ExecutionDat ) } NewPayloadRequest::Deneb(d) => { - let (v1, withdrawals) = convert_v2_to_alloy_from_v3(&d.execution_payload); + let blob_gas_used = d.execution_payload.blob_gas_used; + let excess_blob_gas = d.execution_payload.excess_blob_gas; + let (v1, withdrawals) = convert_v2_to_alloy_from_v3(d.execution_payload); let v3 = AlloyExecutionPayloadV3 { payload_inner: AlloyExecutionPayloadV2 { payload_inner: v1, withdrawals, }, - blob_gas_used: d.execution_payload.blob_gas_used, - excess_blob_gas: d.execution_payload.excess_blob_gas, + blob_gas_used, + excess_blob_gas, }; let versioned_hashes: Vec = @@ -122,14 +124,16 @@ fn new_payload_request_to_execution_data(req: NewPayloadRequest) -> ExecutionDat ExecutionData::new(AlloyExecutionPayload::V3(v3), sidecar) } NewPayloadRequest::ElectraFulu(e) => { - let (v1, withdrawals) = convert_v2_to_alloy_from_v3(&e.execution_payload); + let blob_gas_used = e.execution_payload.blob_gas_used; + let excess_blob_gas = e.execution_payload.excess_blob_gas; + let (v1, withdrawals) = convert_v2_to_alloy_from_v3(e.execution_payload); let v3 = AlloyExecutionPayloadV3 { payload_inner: AlloyExecutionPayloadV2 { payload_inner: v1, withdrawals, }, - blob_gas_used: e.execution_payload.blob_gas_used, - excess_blob_gas: e.execution_payload.excess_blob_gas, + blob_gas_used, + excess_blob_gas, }; let versioned_hashes: Vec = @@ -207,7 +211,7 @@ fn convert_v2_to_alloy( /// Converts ExecutionPayloadV3 to alloy's (V1, withdrawals) - used for Deneb/Electra fn convert_v2_to_alloy_from_v3( - payload: &ExecutionPayloadV3, + payload: ExecutionPayloadV3, ) -> (AlloyExecutionPayloadV1, Vec) { let v1 = AlloyExecutionPayloadV1 { parent_hash: B256::from(payload.parent_hash), @@ -220,20 +224,20 @@ fn convert_v2_to_alloy_from_v3( gas_limit: payload.gas_limit, gas_used: payload.gas_used, timestamp: payload.timestamp, - extra_data: Bytes::from(payload.extra_data.to_vec()), + extra_data: Bytes::from(Vec::from(payload.extra_data)), base_fee_per_gas: U256::from_le_bytes(payload.base_fee_per_gas), block_hash: B256::from(payload.block_hash), transactions: payload .transactions - .iter() - .map(|tx| Bytes::copy_from_slice(tx)) + .into_iter() + .map(|tx| Bytes::from(Vec::from(tx))) .collect(), }; let withdrawals = payload .withdrawals - .iter() - .map(|w| convert_withdrawal(w.clone())) + .into_iter() + .map(convert_withdrawal) .collect(); (v1, withdrawals) From 373d16a2d2bbc282838ac363cca7f60523b63ad0 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Tue, 13 Jan 2026 20:04:51 -0300 Subject: [PATCH 14/46] add fulu support, and other improvements --- .../tests/execution_payload.rs | 62 ++++--------------- .../tests/stateless-validator-reth.rs | 30 +-------- crates/stateless-validator-common/src/host.rs | 6 +- .../src/new_payload_request.rs | 1 + crates/stateless-validator-reth/src/host.rs | 56 ++++++++++++++--- .../src/new_payload_request.rs | 4 -- 6 files changed, 63 insertions(+), 96 deletions(-) diff --git a/crates/integration-tests/tests/execution_payload.rs b/crates/integration-tests/tests/execution_payload.rs index e17a9842..08ded27f 100644 --- a/crates/integration-tests/tests/execution_payload.rs +++ b/crates/integration-tests/tests/execution_payload.rs @@ -1,20 +1,13 @@ -//! Test for StatelessInput <-> ExecutionPayload conversion -//! -//! The prover input data is StatelessInput constructed from debug_executionWitness. -/// The guest program input is NewPayloadRequest. -/// -/// The following tests check proper conversion between these types. +//! Test for StatelessInput <-> NewPayloadRequest conversion use std::{collections::HashMap, sync::Arc}; use alloy_primitives::{B256, b256}; use guest::Guest; use integration_tests::{NoopPlatform, get_fixtures}; use reth_chainspec::ChainSpec; -use reth_evm_ethereum::EthEvmConfig; -use reth_stateless::{Genesis, stateless_validation}; +use reth_stateless::Genesis; use stateless_validator_reth::{ guest::{StatelessValidatorRethGuest, StatelessValidatorRethInput}, - host::to_new_payload_request, new_payload_request::new_payload_request_to_block, }; @@ -26,33 +19,16 @@ fn test_stateless_input_to_execution_payload() { let expected_roots = expected_execution_payload_tree_roots(); for fixture in get_fixtures() { if !fixture.success { + // For invalid blocks we can't correctly generate the NewPayloadRequest + // from an EL block. This is because to get the Electra requests, we + // need to execute the block successfully first. continue; } - let genesis = Genesis { - config: fixture.stateless_input.chain_config.clone(), - ..Default::default() - }; - let chain_spec: Arc = Arc::new(genesis.into()); - let evm_config = EthEvmConfig::new(chain_spec.clone()); - let signers = stateless_validator_reth::host::recover_signers( - &fixture.stateless_input.block.body.transactions, - ) - .unwrap(); - let (_, out) = stateless_validation( - fixture.stateless_input.block.clone(), - signers, - fixture.stateless_input.witness.clone(), - chain_spec, - evm_config, - ) - .unwrap(); - let block_hash = fixture.stateless_input.block.hash_slow(); let expected_root = *expected_roots.get(&block_hash).unwrap(); let input = - StatelessValidatorRethInput::new(&fixture.stateless_input, out.requests.clone()) - .unwrap(); + StatelessValidatorRethInput::new(&fixture.stateless_input, fixture.success).unwrap(); let output = StatelessValidatorRethGuest::compute::(input); assert_eq!( @@ -67,32 +43,16 @@ fn test_stateless_input_to_execution_payload() { #[test] fn test_block_roundtrip() { for fixture in get_fixtures() { - if !fixture.success { - continue; - } + // Simulate the preparation the prover does to send input to the guest. + let input = + StatelessValidatorRethInput::new(&fixture.stateless_input, fixture.success).unwrap(); + let new_payload_request = input.new_payload_request; + let genesis = Genesis { config: fixture.stateless_input.chain_config.clone(), ..Default::default() }; let chain_spec: Arc = Arc::new(genesis.into()); - let evm_config = EthEvmConfig::new(chain_spec.clone()); - let signers = stateless_validator_reth::host::recover_signers( - &fixture.stateless_input.block.body.transactions, - ) - .unwrap(); - let (_, out) = stateless_validation( - fixture.stateless_input.block.clone(), - signers, - fixture.stateless_input.witness.clone(), - chain_spec.clone(), - evm_config, - ) - .unwrap(); - - // Simulate the preparation the prover does to send input to the guest. - let new_payload_request = - to_new_payload_request(&fixture.stateless_input, out.requests.clone()).unwrap(); - // In the guest, reconstruct the block from NewPayloadRequest. let block = new_payload_request_to_block(new_payload_request, chain_spec).unwrap(); diff --git a/crates/integration-tests/tests/stateless-validator-reth.rs b/crates/integration-tests/tests/stateless-validator-reth.rs index 933b42f0..ae354330 100644 --- a/crates/integration-tests/tests/stateless-validator-reth.rs +++ b/crates/integration-tests/tests/stateless-validator-reth.rs @@ -1,41 +1,15 @@ //! Execution tests for `stateless-validator-reth` guest program -use std::sync::Arc; - use ere_dockerized::zkVMKind; use guest::Guest; use integration_tests::{NoopPlatform, TestCase, get_fixtures}; -use reth_chainspec::ChainSpec; -use reth_evm_ethereum::EthEvmConfig; -use reth_stateless::{Genesis, stateless_validation}; use stateless_validator_reth::guest::{StatelessValidatorRethGuest, StatelessValidatorRethInput}; fn test_execution(zkvm_kind: zkVMKind) { let fixtures = get_fixtures(); - let inputs = fixtures.into_iter().filter(|a| a.success).map(|fixture| { - // TODO: remove .filter above - // TODO: move inside StatelessValidatorRethInput::new? - let genesis = Genesis { - config: fixture.stateless_input.chain_config.clone(), - ..Default::default() - }; - let chain_spec: Arc = Arc::new(genesis.into()); - let evm_config = EthEvmConfig::new(chain_spec.clone()); - let signers = stateless_validator_reth::host::recover_signers( - &fixture.stateless_input.block.body.transactions, - ) - .unwrap(); - let (_, out) = stateless_validation( - fixture.stateless_input.block.clone(), - signers, - fixture.stateless_input.witness.clone(), - chain_spec.clone(), - evm_config, - ) - .unwrap(); + let inputs = fixtures.into_iter().map(|fixture| { let input = - StatelessValidatorRethInput::new(&fixture.stateless_input, out.requests.clone()) - .unwrap(); + StatelessValidatorRethInput::new(&fixture.stateless_input, fixture.success).unwrap(); let output = StatelessValidatorRethGuest::compute::(input.clone()); assert_eq!(output.successful_block_validation, fixture.success); diff --git a/crates/stateless-validator-common/src/host.rs b/crates/stateless-validator-common/src/host.rs index da69bfd8..4f04377e 100644 --- a/crates/stateless-validator-common/src/host.rs +++ b/crates/stateless-validator-common/src/host.rs @@ -1,6 +1,9 @@ //! Stateless validator common types and utilities for host. +use anyhow::{Context, Result}; use sha2::{Digest, Sha256}; +use ssz::{Decode, Encode}; +use ssz_types::VariableList; use crate::{ guest::StatelessValidatorOutput, @@ -11,9 +14,6 @@ use crate::{ NewPayloadRequestElectraFulu, WithdrawalRequest, }, }; -use anyhow::{Context, Result}; -use ssz::{Decode, Encode}; -use ssz_types::VariableList; impl StatelessValidatorOutput { /// Returns sha256 digest of serialized output. diff --git a/crates/stateless-validator-common/src/new_payload_request.rs b/crates/stateless-validator-common/src/new_payload_request.rs index 25319532..9a807203 100644 --- a/crates/stateless-validator-common/src/new_payload_request.rs +++ b/crates/stateless-validator-common/src/new_payload_request.rs @@ -92,6 +92,7 @@ pub enum ForkName { Capella, Deneb, Electra, + Fulu, } #[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] diff --git a/crates/stateless-validator-reth/src/host.rs b/crates/stateless-validator-reth/src/host.rs index 9fef19be..9bf7c6f5 100644 --- a/crates/stateless-validator-reth/src/host.rs +++ b/crates/stateless-validator-reth/src/host.rs @@ -1,17 +1,21 @@ //! Implementations for host environment. use alloc::{format, vec::Vec}; +use alloy_consensus::Transaction; +use std::sync::Arc; use alloy_eips::{Encodable2718, eip7685::Requests}; -use alloy_genesis::ChainConfig; +use alloy_genesis::{ChainConfig, Genesis}; use alloy_primitives::U256; use anyhow::Context; use ere_zkvm_interface::Input; use guest::{GuestIo, Io}; +use reth_chainspec::ChainSpec; use reth_ethereum_primitives::TransactionSigned; +use reth_evm_ethereum::EthEvmConfig; use reth_primitives_traits::Block; pub use reth_stateless::StatelessInput; -use reth_stateless::UncompressedPublicKey; +use reth_stateless::{UncompressedPublicKey, stateless_validation}; use ssz_types::{FixedVector, VariableList}; pub use stateless_validator_common::guest::StatelessValidatorOutput; use stateless_validator_common::new_payload_request::{ @@ -23,9 +27,10 @@ use crate::guest::{StatelessValidatorRethGuest, StatelessValidatorRethInput}; impl StatelessValidatorRethInput { /// Construct [`StatelessValidatorRethInput`] given [`StatelessInput`]. - pub fn new(stateless_input: &StatelessInput, requests: Requests) -> anyhow::Result { - let new_payload_request = to_new_payload_request(stateless_input, requests)?; + pub fn new(stateless_input: &StatelessInput, valid_block: bool) -> anyhow::Result { let signers = recover_signers(&stateless_input.block.body.transactions)?; + let requests = get_requests(stateless_input, &signers, valid_block); + let new_payload_request = to_new_payload_request(stateless_input, requests)?; Ok(Self { new_payload_request, @@ -64,6 +69,12 @@ where /// Determines the fork name based on alloy chain config and block timestamp. pub fn determine_fork_name(chain_config: &ChainConfig, timestamp: u64) -> ForkName { // Check forks in reverse chronological order + if chain_config + .osaka_time + .is_some_and(|osaka_time| timestamp >= osaka_time) + { + return ForkName::Fulu; + } if chain_config .prague_time .is_some_and(|prague_time| timestamp >= prague_time) @@ -82,19 +93,14 @@ pub fn determine_fork_name(chain_config: &ChainConfig, timestamp: u64) -> ForkNa { return ForkName::Capella; } - // Default to Bellatrix for post-merge blocks ForkName::Bellatrix } /// Converts a [`StatelessInput`] to a [`NewPayloadRequest`]. -/// -/// This creates the appropriate NewPayloadRequest variant based on the fork. pub fn to_new_payload_request( stateless_input: &StatelessInput, requests: Requests, ) -> anyhow::Result { - use alloy_consensus::transaction::Transaction; - let header = stateless_input.block.header(); let body = stateless_input.block.body(); let fork = determine_fork_name(&stateless_input.chain_config, header.timestamp); @@ -218,7 +224,7 @@ pub fn to_new_payload_request( NewPayloadRequest::new_deneb(payload, versioned_hashes, parent_beacon_block_root) } - ForkName::Electra => { + ForkName::Electra | ForkName::Fulu => { let withdrawals: Withdrawals = { let wdls: Vec = body .withdrawals @@ -273,6 +279,36 @@ pub fn to_new_payload_request( } } +fn get_requests( + stateless_input: &StatelessInput, + signers: &[UncompressedPublicKey], + valid_block: bool, +) -> Requests { + if !valid_block { + return Requests::default(); + } + + let genesis = Genesis { + config: stateless_input.chain_config.clone(), + ..Default::default() + }; + let chain_spec: Arc = Arc::new(genesis.into()); + let evm_config = EthEvmConfig::new(chain_spec.clone()); + let (_, out) = stateless_validation( + stateless_input.block.clone(), + signers.to_owned(), + stateless_input.witness.clone(), + chain_spec.clone(), + evm_config, + ) + .unwrap(); + + // This clone doesn't make much sense, but rust-analyzer can't figure out + // why isn't required and mark it as error otherwise. Since this is only used + // in the host side, we can afford the extra clone. + out.requests.clone() +} + #[cfg(test)] mod test { use stateless_validator_common::new_payload_request::{ExecutionPayloadV1, NewPayloadRequest}; diff --git a/crates/stateless-validator-reth/src/new_payload_request.rs b/crates/stateless-validator-reth/src/new_payload_request.rs index 77ac5186..d9566fa5 100644 --- a/crates/stateless-validator-reth/src/new_payload_request.rs +++ b/crates/stateless-validator-reth/src/new_payload_request.rs @@ -151,7 +151,6 @@ fn new_payload_request_to_execution_data(req: NewPayloadRequest) -> ExecutionDat } } -/// Converts ExecutionPayloadV1 to alloy's ExecutionPayloadV1 fn convert_v1_to_alloy(payload: ExecutionPayloadV1) -> AlloyExecutionPayloadV1 { AlloyExecutionPayloadV1 { parent_hash: B256::from(payload.parent_hash), @@ -175,7 +174,6 @@ fn convert_v1_to_alloy(payload: ExecutionPayloadV1) -> AlloyExecutionPayloadV1 { } } -/// Converts ExecutionPayloadV2 to alloy's (V1, withdrawals) fn convert_v2_to_alloy( payload: ExecutionPayloadV2, ) -> (AlloyExecutionPayloadV1, Vec) { @@ -209,7 +207,6 @@ fn convert_v2_to_alloy( (v1, withdrawals) } -/// Converts ExecutionPayloadV3 to alloy's (V1, withdrawals) - used for Deneb/Electra fn convert_v2_to_alloy_from_v3( payload: ExecutionPayloadV3, ) -> (AlloyExecutionPayloadV1, Vec) { @@ -243,7 +240,6 @@ fn convert_v2_to_alloy_from_v3( (v1, withdrawals) } -/// Converts our Withdrawal to alloy's Withdrawal fn convert_withdrawal(w: Withdrawal) -> AlloyWithdrawal { AlloyWithdrawal { index: w.index, From 5c1bc9c26e5a2bec6f96390a1a15bdbda1ce3223 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Tue, 13 Jan 2026 20:28:50 -0300 Subject: [PATCH 15/46] add missing patches --- .../airbender/Cargo.toml | 14 +++++++-- .../openvm/Cargo.toml | 29 +++++++++++++++---- bin/stateless-validator-reth/pico/Cargo.toml | 6 +++- bin/stateless-validator-reth/risc0/Cargo.toml | 20 +++++++++++-- bin/stateless-validator-reth/zisk/Cargo.toml | 6 +++- .../src/stateless_validator.rs | 1 - 6 files changed, 61 insertions(+), 15 deletions(-) diff --git a/bin/stateless-validator-reth/airbender/Cargo.toml b/bin/stateless-validator-reth/airbender/Cargo.toml index 3bfc5036..674e3836 100644 --- a/bin/stateless-validator-reth/airbender/Cargo.toml +++ b/bin/stateless-validator-reth/airbender/Cargo.toml @@ -7,17 +7,25 @@ edition = "2024" [dependencies] # enable features -alloy-primitives = { version = "1.4.1", default-features = false, features = ["map-foldhash", "sha3-keccak"] } +alloy-primitives = { version = "1.4.1", default-features = false, features = [ + "map-foldhash", + "sha3-keccak", +] } revm = { version = "33.1.0", default-features = false, features = ["bn"] } # ere -ere-platform-airbender = { git = "https://github.com/eth-act/ere", rev = "ec75f8a26657ddbf7efc44cdb3167fff4f55fe27", features = ["custom_allocator"] } +ere-platform-airbender = { git = "https://github.com/eth-act/ere", rev = "ec75f8a26657ddbf7efc44cdb3167fff4f55fe27", features = [ + "custom_allocator", +] } # local -stateless-validator-reth = { path = "../../../crates/stateless-validator-reth", default-features = false, features = ["k256"] } +stateless-validator-reth = { path = "../../../crates/stateless-validator-reth", default-features = false, features = [ + "k256", +] } [patch.crates-io] radium = { git = "https://github.com/han0110/radium", branch = "feature/riscv32ima" } +ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "181896944365e4b76dd6407c2d679fb844165dd6" } [profile.release] codegen-units = 1 diff --git a/bin/stateless-validator-reth/openvm/Cargo.toml b/bin/stateless-validator-reth/openvm/Cargo.toml index eb1c7f26..b72c59f2 100644 --- a/bin/stateless-validator-reth/openvm/Cargo.toml +++ b/bin/stateless-validator-reth/openvm/Cargo.toml @@ -7,25 +7,39 @@ edition = "2024" [dependencies] # enable features -alloy-consensus = { version = "1.1.2", default-features = false, features = ["crypto-backend"] } -alloy-primitives = { version = "1.4.1", default-features = false, features = ["map-hashbrown", "native-keccak"] } +alloy-consensus = { version = "1.1.2", default-features = false, features = [ + "crypto-backend", +] } +alloy-primitives = { version = "1.4.1", default-features = false, features = [ + "map-hashbrown", + "native-keccak", +] } # revm revm = { version = "33.1.0", default-features = false } # openvm -openvm = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.2", features = ["std"] } +openvm = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.2", features = [ + "std", +] } openvm-algebra-guest = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.2" } openvm-ecc-guest = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.2" } openvm-k256 = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.2", package = "k256" } openvm-keccak256 = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.2" } openvm-p256 = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.2", package = "p256" } -openvm-pairing = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.2", features = ["bn254", "bls12_381"] } +openvm-pairing = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.2", features = [ + "bn254", + "bls12_381", +] } openvm-sha2 = { git = "https://github.com/openvm-org/openvm.git", tag = "v1.4.2" } -openvm-kzg = { git = "https://github.com/axiom-crypto/openvm-kzg.git", rev = "530a6ed413def5296b7e4967650ba4fc8fd92ea1", default-features = false, features = ["use-intrinsics"] } +openvm-kzg = { git = "https://github.com/axiom-crypto/openvm-kzg.git", rev = "530a6ed413def5296b7e4967650ba4fc8fd92ea1", default-features = false, features = [ + "use-intrinsics", +] } # ere -ere-platform-openvm = { git = "https://github.com/eth-act/ere", rev = "ec75f8a26657ddbf7efc44cdb3167fff4f55fe27", features = ["std"] } +ere-platform-openvm = { git = "https://github.com/eth-act/ere", rev = "ec75f8a26657ddbf7efc44cdb3167fff4f55fe27", features = [ + "std", +] } # local stateless-validator-reth = { path = "../../../crates/stateless-validator-reth" } @@ -50,6 +64,9 @@ openvm-rv32im-guest = { git = "https://github.com/openvm-org//openvm.git", tag = openvm-sha2 = { git = "https://github.com/openvm-org//openvm.git", tag = "v1.4.2" } openvm-sha256-guest = { git = "https://github.com/openvm-org//openvm.git", tag = "v1.4.2" } +[patch.crates-io] +ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "181896944365e4b76dd6407c2d679fb844165dd6" } + [profile.release] codegen-units = 1 lto = "fat" diff --git a/bin/stateless-validator-reth/pico/Cargo.toml b/bin/stateless-validator-reth/pico/Cargo.toml index 715929f3..afbc662d 100644 --- a/bin/stateless-validator-reth/pico/Cargo.toml +++ b/bin/stateless-validator-reth/pico/Cargo.toml @@ -7,7 +7,10 @@ edition = "2024" [dependencies] # enable features -alloy-primitives = { version = "1.4.1", default-features = false, features = ["map-foldhash", "sha3-keccak"] } +alloy-primitives = { version = "1.4.1", default-features = false, features = [ + "map-foldhash", + "sha3-keccak", +] } revm = { version = "33.1.0", default-features = false, features = ["bn"] } # crypto provider @@ -26,6 +29,7 @@ sha3 = { git = "https://github.com/brevis-network/hashes", tag = "pico-patch-v1. curve25519-dalek = { git = "https://github.com/brevis-network/curve25519-dalek", tag = "pico-patch-v1.0.1-curve25519-dalek-v4.1.3" } ecdsa-core = { git = "https://github.com/brevis-network/signatures", tag = "pico-patch-v1.0.1-ecdsa-0.16.9", package = "ecdsa" } substrate-bn = { git = "https://github.com/brevis-network/bn", tag = "pico-patch-v1.0.1-bn-v0.6.0" } +ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "181896944365e4b76dd6407c2d679fb844165dd6" } [profile.release] codegen-units = 1 diff --git a/bin/stateless-validator-reth/risc0/Cargo.toml b/bin/stateless-validator-reth/risc0/Cargo.toml index f1a08de6..f525166c 100644 --- a/bin/stateless-validator-reth/risc0/Cargo.toml +++ b/bin/stateless-validator-reth/risc0/Cargo.toml @@ -7,11 +7,24 @@ edition = "2024" [dependencies] # enable features -alloy-primitives = { version = "1.4.1", default-features = false, features = ["map-foldhash", "tiny-keccak"] } -revm = { version = "33.1.0", default-features = false, features = ["std", "c-kzg", "blst", "bn"] } +alloy-primitives = { version = "1.4.1", default-features = false, features = [ + "map-foldhash", + "tiny-keccak", +] } +revm = { version = "33.1.0", default-features = false, features = [ + "std", + "c-kzg", + "blst", + "bn", +] } # ere -ere-platform-risc0 = { git = "https://github.com/eth-act/ere", rev = "ec75f8a26657ddbf7efc44cdb3167fff4f55fe27", features = ["std", "unstable", "getrandom", "sys-getenv"] } +ere-platform-risc0 = { git = "https://github.com/eth-act/ere", rev = "ec75f8a26657ddbf7efc44cdb3167fff4f55fe27", features = [ + "std", + "unstable", + "getrandom", + "sys-getenv", +] } # local stateless-validator-reth = { path = "../../../crates/stateless-validator-reth" } @@ -25,6 +38,7 @@ p256 = { git = "https://github.com/risc0/RustCrypto-elliptic-curves", tag = "p25 substrate-bn = { git = "https://github.com/risc0/paritytech-bn", tag = "v0.6.0-risczero.0" } crypto-bigint = { git = "https://github.com/risc0/RustCrypto-crypto-bigint", tag = "v0.5.5-risczero.0" } c-kzg = { git = "https://github.com/risc0/c-kzg-4844", tag = "v2.1.5-risczero.0" } +ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "181896944365e4b76dd6407c2d679fb844165dd6" } [profile.release] codegen-units = 1 diff --git a/bin/stateless-validator-reth/zisk/Cargo.toml b/bin/stateless-validator-reth/zisk/Cargo.toml index d1b32d99..24631c53 100644 --- a/bin/stateless-validator-reth/zisk/Cargo.toml +++ b/bin/stateless-validator-reth/zisk/Cargo.toml @@ -7,7 +7,10 @@ edition = "2024" [dependencies] # enable features -alloy-primitives = { version = "1.4.1", default-features = false, features = ["map-foldhash", "sha3-keccak"] } +alloy-primitives = { version = "1.4.1", default-features = false, features = [ + "map-foldhash", + "sha3-keccak", +] } revm = { version = "33.1.0", default-features = false, features = ["bn"] } # ere @@ -28,6 +31,7 @@ ark-ff = { git = "https://github.com/0xPolygonHermez/zisk-patch-ark-algebra.git" ark-bn254 = { git = "https://github.com/0xPolygonHermez/zisk-patch-ark-algebra.git", tag = "patch-0.5.0-zisk-0.15.0" } ark-serialize = { git = "https://github.com/0xPolygonHermez/zisk-patch-ark-algebra.git", tag = "patch-0.5.0-zisk-0.15.0" } aurora-engine-modexp = { git = "https://github.com/0xPolygonHermez/zisk-patch-modexp.git", tag = "patch-1.2.0-zisk-0.15.0" } +ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "181896944365e4b76dd6407c2d679fb844165dd6" } [profile.release] codegen-units = 1 diff --git a/crates/integration-tests/src/stateless_validator.rs b/crates/integration-tests/src/stateless_validator.rs index 9b649390..756e3826 100644 --- a/crates/integration-tests/src/stateless_validator.rs +++ b/crates/integration-tests/src/stateless_validator.rs @@ -1,6 +1,5 @@ //! This module proivdes struct for stateless validator test fixture. -use guest::Platform; use reth_stateless::StatelessInput; use serde::{Deserialize, Serialize}; From 8c8ee0517a373ebfbf26d5cd436247d33103d7e8 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Tue, 13 Jan 2026 20:47:50 -0300 Subject: [PATCH 16/46] catch panics --- .../airbender/Cargo.lock | 178 ++++++++++++++++- bin/stateless-validator-reth/zisk/Cargo.lock | 187 +++++++++++++++++- crates/stateless-validator-reth/src/guest.rs | 27 +++ 3 files changed, 382 insertions(+), 10 deletions(-) diff --git a/bin/stateless-validator-reth/airbender/Cargo.lock b/bin/stateless-validator-reth/airbender/Cargo.lock index 81cba99b..d3e14482 100644 --- a/bin/stateless-validator-reth/airbender/Cargo.lock +++ b/bin/stateless-validator-reth/airbender/Cargo.lock @@ -267,7 +267,10 @@ dependencies = [ "alloy-eips", "alloy-primitives", "alloy-rlp", + "alloy-serde", "derive_more", + "rand 0.8.5", + "serde", "strum", ] @@ -398,7 +401,7 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04950a13cc4209d8e9b78f306e87782466bad8538c94324702d061ff03e211c9" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", "syn 2.0.111", @@ -413,6 +416,12 @@ dependencies = [ "libc", ] +[[package]] +name = "anyhow" +version = "1.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" + [[package]] name = "ark-bls12-381" version = "0.5.0" @@ -1029,14 +1038,38 @@ dependencies = [ "typenum", ] +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + [[package]] name = "darling" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.21.3", + "darling_macro 0.21.3", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.111", ] [[package]] @@ -1054,13 +1087,24 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core 0.20.11", + "quote", + "syn 2.0.111", +] + [[package]] name = "darling_macro" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ - "darling_core", + "darling_core 0.21.3", "quote", "syn 2.0.111", ] @@ -1292,6 +1336,54 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "ethereum_hashing" +version = "0.7.0" +source = "git+https://github.com/jsign/ethereum_hashing?rev=181896944365e4b76dd6407c2d679fb844165dd6#181896944365e4b76dd6407c2d679fb844165dd6" +dependencies = [ + "sha2", +] + +[[package]] +name = "ethereum_serde_utils" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dc1355dbb41fbbd34ec28d4fb2a57d9a70c67ac3c19f6a5ca4d4a176b9e997a" +dependencies = [ + "alloy-primitives", + "hex", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "ethereum_ssz" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dcddb2554d19cde19b099fadddde576929d7a4d0c1cd3512d1fd95cf174375c" +dependencies = [ + "alloy-primitives", + "ethereum_serde_utils", + "itertools 0.13.0", + "serde", + "serde_derive", + "smallvec", + "typenum", +] + +[[package]] +name = "ethereum_ssz_derive" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a657b6b3b7e153637dc6bdc6566ad9279d9ee11a15b12cfb24a2e04360637e9f" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "fastrand" version = "2.3.0" @@ -2627,6 +2719,16 @@ dependencies = [ "url", ] +[[package]] +name = "reth-payload-validator" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +dependencies = [ + "alloy-consensus", + "alloy-rpc-types-engine", + "reth-primitives-traits", +] + [[package]] name = "reth-primitives-traits" version = "1.9.3" @@ -3262,7 +3364,7 @@ version = "3.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", "syn 2.0.111", @@ -3371,6 +3473,22 @@ dependencies = [ "der", ] +[[package]] +name = "ssz_types" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b55bedc9a18ed2860a46d6beb4f4082416ee1d60be0cc364cebdcdddc7afd4" +dependencies = [ + "ethereum_serde_utils", + "ethereum_ssz", + "itertools 0.13.0", + "serde", + "serde_derive", + "smallvec", + "tree_hash", + "typenum", +] + [[package]] name = "stable_deref_trait" version = "1.2.1" @@ -3381,24 +3499,49 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" name = "stateless-validator-common" version = "0.1.0" dependencies = [ + "alloy-eips", + "alloy-primitives", + "anyhow", + "ethereum_ssz", + "ethereum_ssz_derive", "serde", + "serde_with", + "sha2", + "ssz_types", + "tree_hash", + "tree_hash_derive", + "typenum", ] [[package]] name = "stateless-validator-reth" version = "0.1.0" dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-genesis", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types-engine", + "anyhow", "ere-io", + "ethereum_ssz", "guest", "once_cell", "reth-chainspec", "reth-ethereum-primitives", "reth-evm-ethereum", + "reth-payload-validator", "reth-primitives-traits", "reth-stateless", "serde", + "serde_with", + "sha2", "sparsestate", + "ssz_types", "stateless-validator-common", + "tree_hash", + "tree_hash_derive", ] [[package]] @@ -3667,6 +3810,31 @@ dependencies = [ "once_cell", ] +[[package]] +name = "tree_hash" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee44f4cef85f88b4dea21c0b1f58320bdf35715cf56d840969487cff00613321" +dependencies = [ + "alloy-primitives", + "ethereum_hashing", + "ethereum_ssz", + "smallvec", + "typenum", +] + +[[package]] +name = "tree_hash_derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bee2ea1551f90040ab0e34b6fb7f2fa3bad8acc925837ac654f2c78a13e3089" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "typenum" version = "1.19.0" diff --git a/bin/stateless-validator-reth/zisk/Cargo.lock b/bin/stateless-validator-reth/zisk/Cargo.lock index e3f6d0ef..f3f61889 100644 --- a/bin/stateless-validator-reth/zisk/Cargo.lock +++ b/bin/stateless-validator-reth/zisk/Cargo.lock @@ -267,7 +267,10 @@ dependencies = [ "alloy-eips", "alloy-primitives", "alloy-rlp", + "alloy-serde", "derive_more", + "rand 0.8.5", + "serde", "strum", ] @@ -398,7 +401,7 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04950a13cc4209d8e9b78f306e87782466bad8538c94324702d061ff03e211c9" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", "syn 2.0.111", @@ -413,6 +416,12 @@ dependencies = [ "libc", ] +[[package]] +name = "anyhow" +version = "1.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" + [[package]] name = "ark-bls12-381" version = "0.5.0" @@ -1027,14 +1036,38 @@ dependencies = [ "typenum", ] +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + [[package]] name = "darling" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.21.3", + "darling_macro 0.21.3", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.111", ] [[package]] @@ -1052,13 +1085,24 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core 0.20.11", + "quote", + "syn 2.0.111", +] + [[package]] name = "darling_macro" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ - "darling_core", + "darling_core 0.21.3", "quote", "syn 2.0.111", ] @@ -1290,6 +1334,54 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "ethereum_hashing" +version = "0.7.0" +source = "git+https://github.com/jsign/ethereum_hashing?rev=181896944365e4b76dd6407c2d679fb844165dd6#181896944365e4b76dd6407c2d679fb844165dd6" +dependencies = [ + "sha2", +] + +[[package]] +name = "ethereum_serde_utils" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dc1355dbb41fbbd34ec28d4fb2a57d9a70c67ac3c19f6a5ca4d4a176b9e997a" +dependencies = [ + "alloy-primitives", + "hex", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "ethereum_ssz" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dcddb2554d19cde19b099fadddde576929d7a4d0c1cd3512d1fd95cf174375c" +dependencies = [ + "alloy-primitives", + "ethereum_serde_utils", + "itertools 0.13.0", + "serde", + "serde_derive", + "smallvec", + "typenum", +] + +[[package]] +name = "ethereum_ssz_derive" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a657b6b3b7e153637dc6bdc6566ad9279d9ee11a15b12cfb24a2e04360637e9f" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "fastrand" version = "2.3.0" @@ -1695,6 +1787,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.14.0" @@ -2613,6 +2714,16 @@ dependencies = [ "url", ] +[[package]] +name = "reth-payload-validator" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +dependencies = [ + "alloy-consensus", + "alloy-rpc-types-engine", + "reth-primitives-traits", +] + [[package]] name = "reth-primitives-traits" version = "1.9.3" @@ -3243,7 +3354,7 @@ version = "3.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", "syn 2.0.111", @@ -3350,6 +3461,22 @@ dependencies = [ "der", ] +[[package]] +name = "ssz_types" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b55bedc9a18ed2860a46d6beb4f4082416ee1d60be0cc364cebdcdddc7afd4" +dependencies = [ + "ethereum_serde_utils", + "ethereum_ssz", + "itertools 0.13.0", + "serde", + "serde_derive", + "smallvec", + "tree_hash", + "typenum", +] + [[package]] name = "stable_deref_trait" version = "1.2.1" @@ -3360,24 +3487,49 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" name = "stateless-validator-common" version = "0.1.0" dependencies = [ + "alloy-eips", + "alloy-primitives", + "anyhow", + "ethereum_ssz", + "ethereum_ssz_derive", "serde", + "serde_with", + "sha2", + "ssz_types", + "tree_hash", + "tree_hash_derive", + "typenum", ] [[package]] name = "stateless-validator-reth" version = "0.1.0" dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-genesis", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types-engine", + "anyhow", "ere-io", + "ethereum_ssz", "guest", "once_cell", "reth-chainspec", "reth-ethereum-primitives", "reth-evm-ethereum", + "reth-payload-validator", "reth-primitives-traits", "reth-stateless", "serde", + "serde_with", + "sha2", "sparsestate", + "ssz_types", "stateless-validator-common", + "tree_hash", + "tree_hash_derive", ] [[package]] @@ -3645,6 +3797,31 @@ dependencies = [ "once_cell", ] +[[package]] +name = "tree_hash" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee44f4cef85f88b4dea21c0b1f58320bdf35715cf56d840969487cff00613321" +dependencies = [ + "alloy-primitives", + "ethereum_hashing", + "ethereum_ssz", + "smallvec", + "typenum", +] + +[[package]] +name = "tree_hash_derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bee2ea1551f90040ab0e34b6fb7f2fa3bad8acc925837ac654f2c78a13e3089" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "typenum" version = "1.19.0" diff --git a/crates/stateless-validator-reth/src/guest.rs b/crates/stateless-validator-reth/src/guest.rs index fcfb2315..9657704d 100644 --- a/crates/stateless-validator-reth/src/guest.rs +++ b/crates/stateless-validator-reth/src/guest.rs @@ -51,6 +51,33 @@ impl Guest for StatelessValidatorRethGuest { fn compute(input: GuestInput) -> GuestOutput { let new_payload_request_root = input.new_payload_request.tree_hash_root(); + #[cfg(feature = "std")] + { + let result = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| { + Self::compute_inner::

(input, new_payload_request_root) + })); + + match result { + Ok(output) => output, + Err(_) => { + P::print("Panic occurred during validation\n"); + StatelessValidatorOutput::new(new_payload_request_root, false) + } + } + } + + #[cfg(not(feature = "std"))] + { + Self::compute_inner::

(input, new_payload_request_root) + } + } +} + +impl StatelessValidatorRethGuest { + fn compute_inner( + input: GuestInput, + new_payload_request_root: [u8; 32], + ) -> GuestOutput { let (chain_spec, evm_config, block_result) = P::cycle_scope("validation_inputs_preparation", || { let genesis = Genesis { From d4beb1fab71d9c7f9c5332103d02cc51ea0d292e Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Tue, 13 Jan 2026 21:29:21 -0300 Subject: [PATCH 17/46] user external source of truth in main integration test runs --- crates/integration-tests/Cargo.toml | 10 +- .../src/stateless_validator.rs | 88 ++++++++++++++ .../tests/execution_payload.rs | 111 +----------------- .../tests/stateless-validator-reth.rs | 19 ++- crates/stateless-validator-reth/src/host.rs | 2 +- 5 files changed, 116 insertions(+), 114 deletions(-) diff --git a/crates/integration-tests/Cargo.toml b/crates/integration-tests/Cargo.toml index f04de789..ab667ce0 100644 --- a/crates/integration-tests/Cargo.toml +++ b/crates/integration-tests/Cargo.toml @@ -22,6 +22,9 @@ serde_json.workspace = true # reth reth-stateless.workspace = true +# alloy +alloy-primitives.workspace = true + # ere ere-dockerized.workspace = true ere-io.workspace = true @@ -29,9 +32,11 @@ ere-zkvm-interface.workspace = true # local guest.workspace = true +stateless-validator-reth = { workspace = true, default-features = true, features = [ + "host", +] } [dev-dependencies] -alloy-primitives.workspace = true reth-chainspec.workspace = true reth-stateless.workspace = true reth-evm-ethereum.workspace = true @@ -50,6 +55,3 @@ stateless-validator-common = { workspace = true, default-features = true, featur stateless-validator-ethrex = { workspace = true, default-features = true, features = [ "host", ] } -stateless-validator-reth = { workspace = true, default-features = true, features = [ - "host", -] } diff --git a/crates/integration-tests/src/stateless_validator.rs b/crates/integration-tests/src/stateless_validator.rs index 756e3826..035c1b6d 100644 --- a/crates/integration-tests/src/stateless_validator.rs +++ b/crates/integration-tests/src/stateless_validator.rs @@ -1,7 +1,11 @@ //! This module proivdes struct for stateless validator test fixture. +use std::collections::HashMap; + +use alloy_primitives::{B256, b256}; use reth_stateless::StatelessInput; use serde::{Deserialize, Serialize}; +use stateless_validator_reth::host::StatelessValidatorOutput; /// A stateless validation fixture containing block data and witness information. #[derive(Debug, Clone, Serialize, Deserialize)] @@ -13,3 +17,87 @@ pub struct StatelessValidatorFixture { /// Whether the stateless block validation is successful. pub success: bool, } + +/// Returns the expected `StatelessValidatorOutput` for a given block hash in the fixtures, which was +/// calculated by an independent implementation. +pub fn get_stateless_validator_output(block_hash: B256, success: bool) -> StatelessValidatorOutput { + let expected_roots = expected_execution_payload_tree_roots(); + let expected_root = *expected_roots.get(&block_hash).unwrap(); + + StatelessValidatorOutput::new(expected_root.0, success) +} + +/// Returns a mapping of block hashes from fixtures to their expected execution payload tree roots. +/// These roots where independently computed from this repository. +fn expected_execution_payload_tree_roots() -> HashMap { + HashMap::from([ + ( + b256!("e6e4c256069674f7939f82fc808d0cd104210533c83add12d2c33d274fc3c027"), + b256!("043b1e44af00a6ff2b3c0570404d8b6701fe6221ed6aa3a39856c835f1ccdec4"), + ), + ( + b256!("74356579507633dcd34faa38c64f8ec46bc23ab5c13bbb1f2ce46786147baf54"), + b256!("03a7ab28fe855a1ba21024171c3b235e7a2e0206d2f0deefa50e186daf02fcf9"), + ), + ( + b256!("f72d095aaf5db3e99dbb76ec7f1dee9e6a3fe4cda536c073c7403ff160be356c"), + b256!("9acbdd5767796bc24c3afbfa52f56fec54636d0e78db03032abdfa8e6f81c9dd"), + ), + ( + b256!("eca0cdd3433d05468326534f1fd7b64a23b7d01c3cec0791f4c5e16e0caa4228"), + b256!("693e63f3b1db57e43f00161ef24ce591980dfc97cc0fa15fd6c1502f4dc97cec"), + ), + ( + b256!("bdee559b347d195bd65a82cac27533e2b9f94a5ba9dfb662e05033d12fb0ca4d"), + b256!("ae730c3c051710c9b18e48c7a6cbf011aa967e93d32cd969e548030c8fc1216a"), + ), + ( + b256!("8466849d8c0855c92e9732b70f58e0d228a03d7741f7f0344ad9457eda4dab99"), + b256!("3d1e280f1df9e380aefee8d6ff2cf10cd508e29812957ea53be7585b995781a0"), + ), + ( + b256!("b19d0861de72dbc6f40d6a118b05a975c3b7a525ad19db37b2bd975d60f0648f"), + b256!("fe081fe4f17e96ff956517e23e204245cce07a68e18a40489f19fc2223403d48"), + ), + ( + b256!("7c6cf5941884a4c9a3183bf4d8c0025e771838929ea3651353f9a09ddb0f56de"), + b256!("0000000000000000000000000000000000000000000000000000000000000000"), + ), + ( + b256!("2c041b9467dcf0899f85681d164d7edb08b992a552e796761c50d88dbffb6598"), + b256!("8d129e566ca042f959abf3e1bc5d0e21c2a6a52d381f1d906e0a8665aeff14fe"), + ), + ( + b256!("c8e14160123e5e2f8037857b7fdc414bc1687b7c9173218c7ba25320e9448f24"), + b256!("befe3b02a08353c0c07511f009590d01503ad076d34db02447ded858b02389d6"), + ), + ( + b256!("a6ee6b71a5c245a00e2724f3e92cf1b25e12fcc8844a343c241e00020d48500e"), + b256!("957785c5a0d6008eb28e2d01a8a19c708cb07e69a3d8ac3c5e7c0b8557e046ab"), + ), + ( + b256!("cdaf26ec02a13a84ca0a3fc0047584290e57eb972dff3d19ebf2978733f1735f"), + b256!("89134081d1d828eeba109aa97ff5714af6d9d2f44efaa48da62e81916f49c9ad"), + ), + ( + b256!("c8ac491bec27d1fbf6fa9e894b4f1ba593491e84bb593b9a81dfb89f29027149"), + b256!("5743a40b8ffd635ec3e50c4f1833fd6734af834ac43189c4bf50c9df3b18c2b9"), + ), + ( + b256!("e4bd1c4dc22a58a0a9a8e789e2c54b4ace2d1ebc16a605c3976723b52fc011f1"), + b256!("45328434f812b65daa21b4e8a3d6440d0da95fbd95a6c10b0a28f081cab53bd5"), + ), + ( + b256!("ba11cc5f2a0d42cc2d1c6ecee10b0c2c3c17dc685b17584be3474d6cafb14140"), + b256!("4e5881a6977b69b39787accd970dafb9138bc8580046be01b7b073a91cd3eaec"), + ), + ( + b256!("444460fa6bf40df3a2b419d55450fb68424c3b5dff248581afb87741be7f92b9"), + b256!("0cb48a874df4018608d53f09a025cad2977ffb06881cc6d2d07382c8280a2ce3"), + ), + ( + b256!("cec65cbf796165f17dc68b583aff9bb8e2f5ccd0fb41c03ac53d57b4740b6534"), + b256!("895c7d51f58aeab5ec891651de307043efd42300338db3dbaf0d1e36dc13138c"), + ), + ]) +} diff --git a/crates/integration-tests/tests/execution_payload.rs b/crates/integration-tests/tests/execution_payload.rs index 08ded27f..57ac4377 100644 --- a/crates/integration-tests/tests/execution_payload.rs +++ b/crates/integration-tests/tests/execution_payload.rs @@ -1,44 +1,14 @@ //! Test for StatelessInput <-> NewPayloadRequest conversion -use std::{collections::HashMap, sync::Arc}; +use std::sync::Arc; -use alloy_primitives::{B256, b256}; -use guest::Guest; -use integration_tests::{NoopPlatform, get_fixtures}; +use integration_tests::get_fixtures; use reth_chainspec::ChainSpec; use reth_stateless::Genesis; use stateless_validator_reth::{ - guest::{StatelessValidatorRethGuest, StatelessValidatorRethInput}, - new_payload_request::new_payload_request_to_block, + guest::StatelessValidatorRethInput, new_payload_request::new_payload_request_to_block, }; -/// Verify that StatelessInput is converted to ExecutionPayload correctly against precomputed roots. -/// This verifies that StatelessInput -> NewPayloadRequest is correct. -#[test] -fn test_stateless_input_to_execution_payload() { - // TODO: move this kind of tests to have independent assertion in stateless-validator-*.rs integration tests. - let expected_roots = expected_execution_payload_tree_roots(); - for fixture in get_fixtures() { - if !fixture.success { - // For invalid blocks we can't correctly generate the NewPayloadRequest - // from an EL block. This is because to get the Electra requests, we - // need to execute the block successfully first. - continue; - } - let block_hash = fixture.stateless_input.block.hash_slow(); - let expected_root = *expected_roots.get(&block_hash).unwrap(); - - let input = - StatelessValidatorRethInput::new(&fixture.stateless_input, fixture.success).unwrap(); - let output = StatelessValidatorRethGuest::compute::(input); - - assert_eq!( - output.new_payload_request_root, expected_root, - "ExecutionPayload tree root mismatch for block hash: {block_hash}" - ); - } -} - -// The guest program input is NewPayloadRequest, but the prover input is StatelessInput. +// The guest program input is NewPayloadRequest but the prover input is StatelessInput. // This test verifies that the guest program reconstructs the same block as the original StatelessInput. #[test] fn test_block_roundtrip() { @@ -66,76 +36,3 @@ fn test_block_roundtrip() { ); } } - -fn expected_execution_payload_tree_roots() -> HashMap { - HashMap::from([ - ( - b256!("e6e4c256069674f7939f82fc808d0cd104210533c83add12d2c33d274fc3c027"), - b256!("043b1e44af00a6ff2b3c0570404d8b6701fe6221ed6aa3a39856c835f1ccdec4"), - ), - ( - b256!("74356579507633dcd34faa38c64f8ec46bc23ab5c13bbb1f2ce46786147baf54"), - b256!("03a7ab28fe855a1ba21024171c3b235e7a2e0206d2f0deefa50e186daf02fcf9"), - ), - ( - b256!("f72d095aaf5db3e99dbb76ec7f1dee9e6a3fe4cda536c073c7403ff160be356c"), - b256!("9acbdd5767796bc24c3afbfa52f56fec54636d0e78db03032abdfa8e6f81c9dd"), - ), - ( - b256!("eca0cdd3433d05468326534f1fd7b64a23b7d01c3cec0791f4c5e16e0caa4228"), - b256!("693e63f3b1db57e43f00161ef24ce591980dfc97cc0fa15fd6c1502f4dc97cec"), - ), - ( - b256!("bdee559b347d195bd65a82cac27533e2b9f94a5ba9dfb662e05033d12fb0ca4d"), - b256!("ae730c3c051710c9b18e48c7a6cbf011aa967e93d32cd969e548030c8fc1216a"), - ), - ( - b256!("8466849d8c0855c92e9732b70f58e0d228a03d7741f7f0344ad9457eda4dab99"), - b256!("3d1e280f1df9e380aefee8d6ff2cf10cd508e29812957ea53be7585b995781a0"), - ), - ( - b256!("b19d0861de72dbc6f40d6a118b05a975c3b7a525ad19db37b2bd975d60f0648f"), - b256!("fe081fe4f17e96ff956517e23e204245cce07a68e18a40489f19fc2223403d48"), - ), - ( - b256!("7c6cf5941884a4c9a3183bf4d8c0025e771838929ea3651353f9a09ddb0f56de"), - b256!("0000000000000000000000000000000000000000000000000000000000000000"), - ), - ( - b256!("2c041b9467dcf0899f85681d164d7edb08b992a552e796761c50d88dbffb6598"), - b256!("8d129e566ca042f959abf3e1bc5d0e21c2a6a52d381f1d906e0a8665aeff14fe"), - ), - ( - b256!("c8e14160123e5e2f8037857b7fdc414bc1687b7c9173218c7ba25320e9448f24"), - b256!("befe3b02a08353c0c07511f009590d01503ad076d34db02447ded858b02389d6"), - ), - ( - b256!("a6ee6b71a5c245a00e2724f3e92cf1b25e12fcc8844a343c241e00020d48500e"), - b256!("957785c5a0d6008eb28e2d01a8a19c708cb07e69a3d8ac3c5e7c0b8557e046ab"), - ), - ( - b256!("cdaf26ec02a13a84ca0a3fc0047584290e57eb972dff3d19ebf2978733f1735f"), - b256!("89134081d1d828eeba109aa97ff5714af6d9d2f44efaa48da62e81916f49c9ad"), - ), - ( - b256!("c8ac491bec27d1fbf6fa9e894b4f1ba593491e84bb593b9a81dfb89f29027149"), - b256!("5743a40b8ffd635ec3e50c4f1833fd6734af834ac43189c4bf50c9df3b18c2b9"), - ), - ( - b256!("e4bd1c4dc22a58a0a9a8e789e2c54b4ace2d1ebc16a605c3976723b52fc011f1"), - b256!("45328434f812b65daa21b4e8a3d6440d0da95fbd95a6c10b0a28f081cab53bd5"), - ), - ( - b256!("ba11cc5f2a0d42cc2d1c6ecee10b0c2c3c17dc685b17584be3474d6cafb14140"), - b256!("4e5881a6977b69b39787accd970dafb9138bc8580046be01b7b073a91cd3eaec"), - ), - ( - b256!("444460fa6bf40df3a2b419d55450fb68424c3b5dff248581afb87741be7f92b9"), - b256!("0cb48a874df4018608d53f09a025cad2977ffb06881cc6d2d07382c8280a2ce3"), - ), - ( - b256!("cec65cbf796165f17dc68b583aff9bb8e2f5ccd0fb41c03ac53d57b4740b6534"), - b256!("895c7d51f58aeab5ec891651de307043efd42300338db3dbaf0d1e36dc13138c"), - ), - ]) -} diff --git a/crates/integration-tests/tests/stateless-validator-reth.rs b/crates/integration-tests/tests/stateless-validator-reth.rs index ae354330..597ea318 100644 --- a/crates/integration-tests/tests/stateless-validator-reth.rs +++ b/crates/integration-tests/tests/stateless-validator-reth.rs @@ -2,7 +2,9 @@ use ere_dockerized::zkVMKind; use guest::Guest; -use integration_tests::{NoopPlatform, TestCase, get_fixtures}; +use integration_tests::{ + NoopPlatform, TestCase, get_fixtures, stateless_validator::get_stateless_validator_output, +}; use stateless_validator_reth::guest::{StatelessValidatorRethGuest, StatelessValidatorRethInput}; fn test_execution(zkvm_kind: zkVMKind) { @@ -10,7 +12,20 @@ fn test_execution(zkvm_kind: zkVMKind) { let inputs = fixtures.into_iter().map(|fixture| { let input = StatelessValidatorRethInput::new(&fixture.stateless_input, fixture.success).unwrap(); - let output = StatelessValidatorRethGuest::compute::(input.clone()); + + let output = if !fixture.success { + // For invalid blocks we can't correctly generate the NewPayloadRequest + // from an EL block. This is because to get the Electra requests, we + // need to execute the block successfully first. + StatelessValidatorRethGuest::compute::(input.clone()) + } else { + // For valid blocks (i.e. mainnet), we can rely on testing the output against an independent + // implementation that calculated the NewPayloadRequest root from a CL block. + get_stateless_validator_output( + fixture.stateless_input.block.hash_slow(), + fixture.success, + ) + }; assert_eq!(output.successful_block_validation, fixture.success); TestCase::new::(fixture.name, input, output).output_sha256() diff --git a/crates/stateless-validator-reth/src/host.rs b/crates/stateless-validator-reth/src/host.rs index 9bf7c6f5..ab4edc9b 100644 --- a/crates/stateless-validator-reth/src/host.rs +++ b/crates/stateless-validator-reth/src/host.rs @@ -1,9 +1,9 @@ //! Implementations for host environment. use alloc::{format, vec::Vec}; -use alloy_consensus::Transaction; use std::sync::Arc; +use alloy_consensus::Transaction; use alloy_eips::{Encodable2718, eip7685::Requests}; use alloy_genesis::{ChainConfig, Genesis}; use alloy_primitives::U256; From 7e560fa798ae557217528773dc8a6ac20bc47818 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Tue, 13 Jan 2026 21:52:08 -0300 Subject: [PATCH 18/46] refactors --- ...tion_payload.rs => new_payload_request.rs} | 21 +++++++++++-------- crates/stateless-validator-reth/src/guest.rs | 9 ++++++-- .../src/new_payload_request.rs | 4 ++-- 3 files changed, 21 insertions(+), 13 deletions(-) rename crates/integration-tests/tests/{execution_payload.rs => new_payload_request.rs} (58%) diff --git a/crates/integration-tests/tests/execution_payload.rs b/crates/integration-tests/tests/new_payload_request.rs similarity index 58% rename from crates/integration-tests/tests/execution_payload.rs rename to crates/integration-tests/tests/new_payload_request.rs index 57ac4377..e13d257c 100644 --- a/crates/integration-tests/tests/execution_payload.rs +++ b/crates/integration-tests/tests/new_payload_request.rs @@ -1,4 +1,4 @@ -//! Test for StatelessInput <-> NewPayloadRequest conversion +//! Test for StatelessInput <-> NewPayloadRequest <-> EL block conversions use std::sync::Arc; use integration_tests::get_fixtures; @@ -8,27 +8,30 @@ use stateless_validator_reth::{ guest::StatelessValidatorRethInput, new_payload_request::new_payload_request_to_block, }; -// The guest program input is NewPayloadRequest but the prover input is StatelessInput. -// This test verifies that the guest program reconstructs the same block as the original StatelessInput. #[test] -fn test_block_roundtrip() { +fn test_new_payload_request_el_block_roundtrip() { for fixture in get_fixtures() { // Simulate the preparation the prover does to send input to the guest. let input = StatelessValidatorRethInput::new(&fixture.stateless_input, fixture.success).unwrap(); let new_payload_request = input.new_payload_request; + // Do the work that the guest program does to reconstruct the block. let genesis = Genesis { config: fixture.stateless_input.chain_config.clone(), ..Default::default() }; - let chain_spec: Arc = Arc::new(genesis.into()); - // In the guest, reconstruct the block from NewPayloadRequest. - let block = new_payload_request_to_block(new_payload_request, chain_spec).unwrap(); + let chain_spec = Arc::new(genesis.into()); + let guest_block = new_payload_request_to_block(new_payload_request, chain_spec).unwrap(); - // Assert that the reconstructed block matches the original block in StatelessInput. - let guest_block_hash = block.hash_slow(); + // Get the block hash computed by the guest. + let guest_block_hash = guest_block.hash_slow(); + + // Original block hash from StatelessInput. let stateless_input_block_hash = fixture.stateless_input.block.hash_slow(); + + // Assert that the EL_Block -> NewPayloadRequest -> EL_Block roundtrip is consistent with + // the original block in StatelessInput. assert_eq!( stateless_input_block_hash, guest_block_hash, "Block hash mismatch for fixture: {}", diff --git a/crates/stateless-validator-reth/src/guest.rs b/crates/stateless-validator-reth/src/guest.rs index 9657704d..9389a9dd 100644 --- a/crates/stateless-validator-reth/src/guest.rs +++ b/crates/stateless-validator-reth/src/guest.rs @@ -86,9 +86,9 @@ impl StatelessValidatorRethGuest { }; let chain_spec: Arc = Arc::new(genesis.into()); let evm_config = EthEvmConfig::new(chain_spec.clone()); - let block_result = + let sealed_block_res = new_payload_request_to_block(input.new_payload_request, chain_spec.clone()); - (chain_spec, evm_config, block_result) + (chain_spec, evm_config, sealed_block_res) }); let block = match block_result { @@ -99,6 +99,11 @@ impl StatelessValidatorRethGuest { } }; + // TODO: consider asking Reth to have an `stateless_validation_with_trie` + // variant which accepts `SealedBlock`. Since this isn't the case today, + // `stateless_validator_with_trie` will hash again the block. + let block = block.into_block(); + let res = P::cycle_scope("validation", || { stateless_validation_with_trie::( block, diff --git a/crates/stateless-validator-reth/src/new_payload_request.rs b/crates/stateless-validator-reth/src/new_payload_request.rs index d9566fa5..2d4a1338 100644 --- a/crates/stateless-validator-reth/src/new_payload_request.rs +++ b/crates/stateless-validator-reth/src/new_payload_request.rs @@ -24,11 +24,11 @@ use stateless_validator_common::new_payload_request::{ pub fn new_payload_request_to_block( new_payload_request: NewPayloadRequest, chain_spec: Arc, -) -> Result> { +) -> Result>> { let execution_data = new_payload_request_to_execution_data(new_payload_request); let sealed_block = ensure_well_formed_payload(chain_spec, execution_data) .context("Payload validation failed")?; - Ok(sealed_block.into_block()) + Ok(sealed_block) } /// This method is copied from `reth-ethereum-payload-builder` crate. From c336955f5af626489aa078568c47ca99264bf21b Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Wed, 14 Jan 2026 09:47:52 -0300 Subject: [PATCH 19/46] use same tree as guest Signed-off-by: Ignacio Hagopian --- crates/stateless-validator-reth/src/host.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/stateless-validator-reth/src/host.rs b/crates/stateless-validator-reth/src/host.rs index ab4edc9b..6741f895 100644 --- a/crates/stateless-validator-reth/src/host.rs +++ b/crates/stateless-validator-reth/src/host.rs @@ -1,6 +1,7 @@ //! Implementations for host environment. use alloc::{format, vec::Vec}; +use sparsestate::SparseState; use std::sync::Arc; use alloy_consensus::Transaction; @@ -15,7 +16,7 @@ use reth_ethereum_primitives::TransactionSigned; use reth_evm_ethereum::EthEvmConfig; use reth_primitives_traits::Block; pub use reth_stateless::StatelessInput; -use reth_stateless::{UncompressedPublicKey, stateless_validation}; +use reth_stateless::{UncompressedPublicKey, stateless_validation_with_trie}; use ssz_types::{FixedVector, VariableList}; pub use stateless_validator_common::guest::StatelessValidatorOutput; use stateless_validator_common::new_payload_request::{ @@ -294,7 +295,7 @@ fn get_requests( }; let chain_spec: Arc = Arc::new(genesis.into()); let evm_config = EthEvmConfig::new(chain_spec.clone()); - let (_, out) = stateless_validation( + let (_, out) = stateless_validation_with_trie::( stateless_input.block.clone(), signers.to_owned(), stateless_input.witness.clone(), From c7c53193fa9041b3329d131281c29b689c2cd2e0 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Wed, 14 Jan 2026 11:41:50 -0300 Subject: [PATCH 20/46] fix request decoding algorithm --- crates/stateless-validator-common/src/host.rs | 96 ++++++++++++------- 1 file changed, 60 insertions(+), 36 deletions(-) diff --git a/crates/stateless-validator-common/src/host.rs b/crates/stateless-validator-common/src/host.rs index 4f04377e..d8aa2391 100644 --- a/crates/stateless-validator-common/src/host.rs +++ b/crates/stateless-validator-common/src/host.rs @@ -94,6 +94,8 @@ fn decode_execution_requests(requests_list: &[impl AsRef<[u8]>]) -> Result = None; + for (idx, request) in requests_list.iter().enumerate() { let request_bytes = request.as_ref(); @@ -103,60 +105,82 @@ fn decode_execution_requests(requests_list: &[impl AsRef<[u8]>]) -> Result last_type, + "Invalid request ordering at index {}: type {:#x} must be greater than previous type {:#x}", + idx, + request_type, + last_type + ); + } + last_request_type = Some(request_type); + match request_type { DEPOSIT_REQUEST_TYPE => { anyhow::ensure!( - data.len() == deposit_request_size, - "Invalid deposit request size at index {}: expected {}, got {}", - idx, + data.len() % deposit_request_size == 0, + "Deposit request data length {} is not a multiple of {} at index {}", + data.len(), deposit_request_size, - data.len() + idx ); - let deposit = DepositRequest::from_ssz_bytes(data).map_err(|e| { - anyhow::anyhow!( - "Failed to SSZ decode deposit request at index {}: {:?}", - idx, - e - ) - })?; - deposits.push(deposit); + for (i, chunk) in data.chunks_exact(deposit_request_size).enumerate() { + let deposit = DepositRequest::from_ssz_bytes(chunk).map_err(|e| { + anyhow::anyhow!( + "Failed to SSZ decode deposit request {} at index {}: {:?}", + i, + idx, + e + ) + })?; + deposits.push(deposit); + } } WITHDRAWAL_REQUEST_TYPE => { anyhow::ensure!( - data.len() == withdrawal_request_size, - "Invalid withdrawal request size at index {}: expected {}, got {}", - idx, + data.len() % withdrawal_request_size == 0, + "Withdrawal request data length {} is not a multiple of {} at index {}", + data.len(), withdrawal_request_size, - data.len() + idx ); - let withdrawal = WithdrawalRequest::from_ssz_bytes(data).map_err(|e| { - anyhow::anyhow!( - "Failed to SSZ decode withdrawal request at index {}: {:?}", - idx, - e - ) - })?; - withdrawals.push(withdrawal); + for (i, chunk) in data.chunks_exact(withdrawal_request_size).enumerate() { + let withdrawal = WithdrawalRequest::from_ssz_bytes(chunk).map_err(|e| { + anyhow::anyhow!( + "Failed to SSZ decode withdrawal request {} at index {}: {:?}", + i, + idx, + e + ) + })?; + withdrawals.push(withdrawal); + } } CONSOLIDATION_REQUEST_TYPE => { anyhow::ensure!( - data.len() == consolidation_request_size, - "Invalid consolidation request size at index {}: expected {}, got {}", - idx, + data.len() % consolidation_request_size == 0, + "Consolidation request data length {} is not a multiple of {} at index {}", + data.len(), consolidation_request_size, - data.len() + idx ); - let consolidation = ConsolidationRequest::from_ssz_bytes(data).map_err(|e| { - anyhow::anyhow!( - "Failed to SSZ decode consolidation request at index {}: {:?}", - idx, - e - ) - })?; - consolidations.push(consolidation); + for (i, chunk) in data.chunks_exact(consolidation_request_size).enumerate() { + let consolidation = + ConsolidationRequest::from_ssz_bytes(chunk).map_err(|e| { + anyhow::anyhow!( + "Failed to SSZ decode consolidation request {} at index {}: {:?}", + i, + idx, + e + ) + })?; + consolidations.push(consolidation); + } } _ => { anyhow::bail!("Unknown request type at index {}: {:#x}", idx, request_type); From 55512b9738b72d1c8cec82c8d5c1e3b38bb15ff9 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Wed, 14 Jan 2026 14:45:12 -0300 Subject: [PATCH 21/46] fix --- crates/stateless-validator-common/Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/stateless-validator-common/Cargo.toml b/crates/stateless-validator-common/Cargo.toml index f2645673..7cbc3624 100644 --- a/crates/stateless-validator-common/Cargo.toml +++ b/crates/stateless-validator-common/Cargo.toml @@ -11,7 +11,7 @@ workspace = true [dependencies] anyhow.workspace = true rkyv = { workspace = true, optional = true } -serde_with = { workspace = true, optional = true } +serde_with = { workspace = true, optional = true, features = ["macros"] } serde = { workspace = true, optional = true, features = [ "derive", "alloc", @@ -37,7 +37,7 @@ sha2.workspace = true [features] # guest default = ["std"] -std = [] +std = ["serde"] serde = ["dep:serde", "dep:serde_with"] rkyv = ["dep:rkyv"] From 84d67d0498c02b42729cf947c2ca48f3eab99857 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Wed, 14 Jan 2026 16:46:13 -0300 Subject: [PATCH 22/46] star ethrex progress --- Cargo.lock | 2 +- crates/stateless-validator-ethrex/Cargo.toml | 2 +- .../stateless-validator-ethrex/src/guest.rs | 84 ++++++++++++------- 3 files changed, 58 insertions(+), 30 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 43bd2449..b953d8aa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6063,7 +6063,7 @@ dependencies = [ "guest", "guest_program", "reth-stateless", - "rkyv", + "serde", "stateless-validator-common", ] diff --git a/crates/stateless-validator-ethrex/Cargo.toml b/crates/stateless-validator-ethrex/Cargo.toml index 438e5631..28ddd7e8 100644 --- a/crates/stateless-validator-ethrex/Cargo.toml +++ b/crates/stateless-validator-ethrex/Cargo.toml @@ -10,7 +10,7 @@ workspace = true [dependencies] anyhow = { workspace = true, optional = true } -rkyv.workspace = true +serde.workspace = true # alloy alloy-consensus = { workspace = true, optional = true } diff --git a/crates/stateless-validator-ethrex/src/guest.rs b/crates/stateless-validator-ethrex/src/guest.rs index af1d3354..d424ffb9 100644 --- a/crates/stateless-validator-ethrex/src/guest.rs +++ b/crates/stateless-validator-ethrex/src/guest.rs @@ -2,13 +2,17 @@ use alloc::format; use core::fmt::Debug; +use stateless_validator_common::new_payload_request::NewPayloadRequest; -use ere_io::rkyv::{ - IoRkyv, - rkyv::{Archive, Deserialize, Serialize}, +use ere_io::serde::{IoSerde, bincode::BincodeLegacy}; +use ethrex_common::types::{ + Block, block_execution_witness::ExecutionWitness, fee_config::FeeConfig, }; -use ethrex_common::types::block_execution_witness::ExecutionWitness; -use ethrex_guest_program::{execution::execution_program, input::ProgramInput}; +use ethrex_guest_program::{ + execution::execution_program, + input::{self, ProgramInput}, +}; +use serde::{Deserialize, Serialize}; #[rustfmt::skip] pub use { @@ -17,21 +21,38 @@ pub use { }; /// Input for the Ethrex stateless validator guest program. -#[derive(Serialize, Deserialize, Archive)] -pub struct StatelessValidatorEthrexInput(pub ProgramInput); +#[derive(Serialize, Deserialize)] +pub struct StatelessValidatorEthrexInput { + /// New payload request data. + pub new_payload_request: NewPayloadRequest, + /// database containing all the data necessary to execute + pub execution_witness: ExecutionWitness, + /// value used to calculate base fee + pub elasticity_multiplier: u64, + /// Configuration for L2 fees used for each block + pub fee_configs: Option>, + #[cfg(feature = "l2")] + /// KZG commitment to the blob data + #[serde_as(as = "[_; 48]")] + pub blob_commitment: blobs_bundle::Commitment, + #[cfg(feature = "l2")] + /// KZG opening for a challenge over the blob commitment + #[serde_as(as = "[_; 48]")] + pub blob_proof: blobs_bundle::Proof, +} impl Clone for StatelessValidatorEthrexInput { fn clone(&self) -> Self { - Self(ProgramInput { - blocks: self.0.blocks.clone(), - execution_witness: self.0.execution_witness.clone(), - elasticity_multiplier: self.0.elasticity_multiplier, - fee_configs: self.0.fee_configs.clone(), + Self { + new_payload_request: self.new_payload_request.clone(), + execution_witness: self.execution_witness.clone(), + elasticity_multiplier: self.elasticity_multiplier, + fee_configs: self.fee_configs.clone(), #[cfg(feature = "l2")] - blob_commitment: self.0.blob_commitment, + blob_commitment: self.blob_commitment, #[cfg(feature = "l2")] - blob_proof: self.0.blob_proof, - }) + blob_proof: self.blob_proof, + } } } @@ -54,20 +75,20 @@ impl Debug for StatelessValidatorEthrexInput { } f.debug_struct("StatelessValidatorEthrexInput") - .field("blocks", &self.0.blocks) + .field("new_payload_request", &self.new_payload_request) .field( "execution_witness", - &DebugExecutionWitness(&self.0.execution_witness), + &DebugExecutionWitness(&self.execution_witness), ) - .field("elasticity_multiplier", &self.0.elasticity_multiplier) - .field("fee_configs", &self.0.fee_configs) + .field("elasticity_multiplier", &self.elasticity_multiplier) + .field("fee_configs", &self.fee_configs) .finish() } } /// [`Io`] implementation of Ethrex stateless validator. pub type StatelessValidatorEthrexIo = - IoRkyv; + IoSerde; /// [`Guest`] implementation for Ethrex stateless validator. #[derive(Debug, Clone)] @@ -76,12 +97,19 @@ pub struct StatelessValidatorEthrexGuest; impl Guest for StatelessValidatorEthrexGuest { type Io = StatelessValidatorEthrexIo; - fn compute( - StatelessValidatorEthrexInput(input): GuestInput, - ) -> GuestOutput { - if input.blocks.len() != 1 { - return StatelessValidatorOutput::default(); // TODO - } + fn compute(input: GuestInput) -> GuestOutput { + let new_payload_request_root = input.new_payload_request.tree_hash_root(); + let block = get_block_from_new_payload_request(&input.new_payload_request); + let input = ProgramInput { + blocks: vec![block], + execution_witness: input.execution_witness, + elasticity_multiplier: input.elasticity_multiplier, + fee_configs: input.fee_configs, + #[cfg(feature = "l2")] + blob_commitment: input.blob_commitment, + #[cfg(feature = "l2")] + blob_proof: input.blob_proof, + }; let (execution_payload_header_hash, beacon_root) = P::cycle_scope("public_inputs_preparation", || { @@ -106,11 +134,11 @@ impl Guest for StatelessValidatorEthrexGuest { match res { Ok(_) => { - StatelessValidatorOutput::default() // TODO -- Implement. + return StatelessValidatorOutput::new(new_payload_request_root, true); } Err(err) => { P::print(&format!("Block {} validation failed: {err}\n", block_num)); - StatelessValidatorOutput::default() // TODO + return StatelessValidatorOutput::new(new_payload_request_root, false); } } } From 78954f49d4b6dc9c07e833bdb2631c5d77d77f93 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Wed, 14 Jan 2026 16:59:07 -0300 Subject: [PATCH 23/46] progress --- crates/stateless-validator-ethrex/src/lib.rs | 2 ++ .../stateless-validator-ethrex/src/new_payload_request.rs | 6 ++++++ 2 files changed, 8 insertions(+) create mode 100644 crates/stateless-validator-ethrex/src/new_payload_request.rs diff --git a/crates/stateless-validator-ethrex/src/lib.rs b/crates/stateless-validator-ethrex/src/lib.rs index 9f5f6fe5..0f02a0fc 100644 --- a/crates/stateless-validator-ethrex/src/lib.rs +++ b/crates/stateless-validator-ethrex/src/lib.rs @@ -8,3 +8,5 @@ pub mod guest; #[cfg(feature = "host")] pub mod host; + +pub mod new_payload_request; diff --git a/crates/stateless-validator-ethrex/src/new_payload_request.rs b/crates/stateless-validator-ethrex/src/new_payload_request.rs new file mode 100644 index 00000000..531a45df --- /dev/null +++ b/crates/stateless-validator-ethrex/src/new_payload_request.rs @@ -0,0 +1,6 @@ +use anyhow::{Context, Result}; +use ethrex_common::types::Block; +use stateless_validator_common::new_payload_request::NewPayloadRequest; + +/// Converts a [`NewPayloadRequest`] into a validated reth [`Block`]. +pub fn new_payload_request_to_block(new_payload_request: NewPayloadRequest) -> Result {} From e690b2a185273d5ba7974aa4de302f8b4234154f Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Wed, 14 Jan 2026 17:30:12 -0300 Subject: [PATCH 24/46] more ethrex progress --- Cargo.lock | 29 ++-- Cargo.toml | 10 +- crates/stateless-validator-ethrex/Cargo.toml | 12 +- .../stateless-validator-ethrex/src/guest.rs | 37 ++--- .../src/new_payload_request.rs | 148 +++++++++++++++++- 5 files changed, 179 insertions(+), 57 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b953d8aa..b304134a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1951,7 +1951,6 @@ version = "0.0.16" source = "git+https://github.com/eth-act/ere?rev=ec75f8a26657ddbf7efc44cdb3167fff4f55fe27#ec75f8a26657ddbf7efc44cdb3167fff4f55fe27" dependencies = [ "bincode 2.0.1", - "rkyv", "serde", ] @@ -2087,7 +2086,7 @@ dependencies = [ [[package]] name = "ethrex-blockchain" version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" dependencies = [ "bytes", "ethrex-common", @@ -2108,7 +2107,7 @@ dependencies = [ [[package]] name = "ethrex-common" version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" dependencies = [ "bytes", "crc32fast", @@ -2139,7 +2138,7 @@ dependencies = [ [[package]] name = "ethrex-crypto" version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" dependencies = [ "c-kzg", "kzg-rs", @@ -2150,7 +2149,7 @@ dependencies = [ [[package]] name = "ethrex-l2-common" version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" dependencies = [ "bytes", "ethereum-types", @@ -2174,7 +2173,7 @@ dependencies = [ [[package]] name = "ethrex-levm" version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" dependencies = [ "ark-bn254", "ark-ec", @@ -2208,7 +2207,7 @@ dependencies = [ [[package]] name = "ethrex-metrics" version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" dependencies = [ "axum", "ethrex-common", @@ -2224,7 +2223,7 @@ dependencies = [ [[package]] name = "ethrex-p2p" version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" dependencies = [ "aes", "async-trait", @@ -2266,7 +2265,7 @@ dependencies = [ [[package]] name = "ethrex-rlp" version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" dependencies = [ "bytes", "ethereum-types", @@ -2280,7 +2279,7 @@ dependencies = [ [[package]] name = "ethrex-rpc" version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" dependencies = [ "axum", "axum-extra", @@ -2319,7 +2318,7 @@ dependencies = [ [[package]] name = "ethrex-storage" version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" dependencies = [ "anyhow", "async-trait", @@ -2344,7 +2343,7 @@ dependencies = [ [[package]] name = "ethrex-threadpool" version = "0.1.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" dependencies = [ "crossbeam 0.8.4", ] @@ -2352,7 +2351,7 @@ dependencies = [ [[package]] name = "ethrex-trie" version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" dependencies = [ "anyhow", "bytes", @@ -2376,7 +2375,7 @@ dependencies = [ [[package]] name = "ethrex-vm" version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" dependencies = [ "bincode 1.3.3", "bytes", @@ -2710,7 +2709,7 @@ dependencies = [ [[package]] name = "guest_program" version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" dependencies = [ "bincode 1.3.3", "bytes", diff --git a/Cargo.toml b/Cargo.toml index 93605ce1..4d1301f3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -71,11 +71,11 @@ reth-stateless = { git = "https://github.com/paradigmxyz/reth", rev = "cfde95197 reth-payload-validator = { git = "https://github.com/paradigmxyz/reth", rev = "cfde951976bfa9100a6d9f806e06fb539ae25241", default-features = false } # ethrex -ethrex-common = { git = "https://github.com/lambdaclass/ethrex.git", rev = "e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1", default-features = false } -ethrex-guest-program = { git = "https://github.com/lambdaclass/ethrex.git", rev = "e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1", default-features = false, package = "guest_program" } -ethrex-rlp = { git = "https://github.com/lambdaclass/ethrex.git", rev = "e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1", default-features = false } -ethrex-rpc = { git = "https://github.com/lambdaclass/ethrex.git", rev = "e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1", default-features = false } -ethrex-vm = { git = "https://github.com/lambdaclass/ethrex.git", rev = "e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1", default-features = false } +ethrex-common = { git = "https://github.com/jsign/ethrex.git", rev = "1b8ead02693419e9dc98f1940f18c0029a1efb6f", default-features = false } +ethrex-guest-program = { git = "https://github.com/jsign/ethrex.git", rev = "1b8ead02693419e9dc98f1940f18c0029a1efb6f", default-features = false, package = "guest_program" } +ethrex-rlp = { git = "https://github.com/jsign/ethrex.git", rev = "1b8ead02693419e9dc98f1940f18c0029a1efb6f", default-features = false } +ethrex-rpc = { git = "https://github.com/jsign/ethrex.git", rev = "1b8ead02693419e9dc98f1940f18c0029a1efb6f", default-features = false } +ethrex-vm = { git = "https://github.com/jsign/ethrex.git", rev = "1b8ead02693419e9dc98f1940f18c0029a1efb6f", default-features = false } # lighthouse tree_hash = "0.10.0" diff --git a/crates/stateless-validator-ethrex/Cargo.toml b/crates/stateless-validator-ethrex/Cargo.toml index 28ddd7e8..0d2245dc 100644 --- a/crates/stateless-validator-ethrex/Cargo.toml +++ b/crates/stateless-validator-ethrex/Cargo.toml @@ -9,7 +9,7 @@ license.workspace = true workspace = true [dependencies] -anyhow = { workspace = true, optional = true } +anyhow.workspace = true serde.workspace = true # alloy @@ -21,20 +21,20 @@ alloy-rlp = { workspace = true, optional = true } # ethrex ethrex-common.workspace = true ethrex-guest-program.workspace = true -ethrex-rlp = { workspace = true } -ethrex-rpc = { workspace = true, optional = true } +ethrex-rlp.workspace = true +ethrex-rpc.workspace = true ethrex-vm.workspace = true # reth reth-stateless = { workspace = true, optional = true } # ere -ere-io = { workspace = true, features = ["rkyv"] } +ere-io = { workspace = true, features = ["bincode"] } ere-zkvm-interface = { workspace = true, optional = true } # local guest.workspace = true -stateless-validator-common = { workspace = true, features = ["rkyv"] } +stateless-validator-common.workspace = true [features] # guest @@ -49,12 +49,10 @@ zisk = ["ethrex-vm/zisk"] host = [ "std", "stateless-validator-common/host", - "dep:anyhow", "dep:alloy-consensus", "dep:alloy-eips", "dep:alloy-rlp", "dep:alloy-genesis", - "dep:ethrex-rpc", "dep:ere-zkvm-interface", "dep:reth-stateless", ] diff --git a/crates/stateless-validator-ethrex/src/guest.rs b/crates/stateless-validator-ethrex/src/guest.rs index d424ffb9..77afee4e 100644 --- a/crates/stateless-validator-ethrex/src/guest.rs +++ b/crates/stateless-validator-ethrex/src/guest.rs @@ -4,14 +4,10 @@ use alloc::format; use core::fmt::Debug; use stateless_validator_common::new_payload_request::NewPayloadRequest; +use crate::new_payload_request::get_block_from_new_payload_request; use ere_io::serde::{IoSerde, bincode::BincodeLegacy}; -use ethrex_common::types::{ - Block, block_execution_witness::ExecutionWitness, fee_config::FeeConfig, -}; -use ethrex_guest_program::{ - execution::execution_program, - input::{self, ProgramInput}, -}; +use ethrex_common::types::{block_execution_witness::ExecutionWitness, fee_config::FeeConfig}; +use ethrex_guest_program::{execution::execution_program, input::ProgramInput}; use serde::{Deserialize, Serialize}; #[rustfmt::skip] @@ -99,7 +95,14 @@ impl Guest for StatelessValidatorEthrexGuest { fn compute(input: GuestInput) -> GuestOutput { let new_payload_request_root = input.new_payload_request.tree_hash_root(); - let block = get_block_from_new_payload_request(&input.new_payload_request); + + let block = match get_block_from_new_payload_request(input.new_payload_request) { + Ok(block) => block, + Err(err) => { + P::print(&format!("Block construction failed: {err}\n")); + return StatelessValidatorOutput::new(new_payload_request_root, false); + } + }; let input = ProgramInput { blocks: vec![block], execution_witness: input.execution_witness, @@ -111,24 +114,6 @@ impl Guest for StatelessValidatorEthrexGuest { blob_proof: input.blob_proof, }; - let (execution_payload_header_hash, beacon_root) = - P::cycle_scope("public_inputs_preparation", || { - // let execution_payload = to_execution_payload_ethrex( - // &input.blocks[0], - // &input.execution_witness.chain_config, - // ); - // TODO - // let execution_payload_header_hash = - // execution_payload_to_header_hash(&execution_payload); - let execution_payload_header_hash = [0u8; 32]; - let beacon_root = input.blocks[0] - .header - .parent_beacon_block_root - .unwrap_or_default(); - - (execution_payload_header_hash, beacon_root) - }); - let block_num = input.blocks[0].header.number; let res = P::cycle_scope("validation", || execution_program(input)); diff --git a/crates/stateless-validator-ethrex/src/new_payload_request.rs b/crates/stateless-validator-ethrex/src/new_payload_request.rs index 531a45df..fb3e45ff 100644 --- a/crates/stateless-validator-ethrex/src/new_payload_request.rs +++ b/crates/stateless-validator-ethrex/src/new_payload_request.rs @@ -1,6 +1,146 @@ +//! Conversion utilities for NewPayloadRequest to ethrex Block. + use anyhow::{Context, Result}; -use ethrex_common::types::Block; -use stateless_validator_common::new_payload_request::NewPayloadRequest; +use ethrex_common::{Address, Bloom, Bytes, H256, types::Block}; +use ethrex_rpc::types::payload::{EncodedTransaction, ExecutionPayload}; +use stateless_validator_common::new_payload_request::{ + ExecutionPayloadV1, ExecutionPayloadV2, ExecutionPayloadV3, NewPayloadRequest, Withdrawal, + compute_requests_hash, +}; + +/// Converts a [`NewPayloadRequest`] into an ethrex [`Block`]. +pub fn get_block_from_new_payload_request(req: NewPayloadRequest) -> Result { + match req { + NewPayloadRequest::Bellatrix(b) => { + let payload = convert_v1_to_ethrex(b.execution_payload); + payload.into_block(None, None).context("into_block failed") + } + NewPayloadRequest::Capella(c) => { + let payload = convert_v2_to_ethrex(c.execution_payload); + payload.into_block(None, None).context("into_block failed") + } + NewPayloadRequest::Deneb(d) => { + let parent_beacon_block_root = Some(H256::from(d.parent_beacon_block_root)); + let payload = convert_v3_to_ethrex(d.execution_payload); + payload + .into_block(parent_beacon_block_root, None) + .context("into_block failed") + } + NewPayloadRequest::ElectraFulu(e) => { + let parent_beacon_block_root = Some(H256::from(e.parent_beacon_block_root)); + let requests_hash = Some(H256::from(compute_requests_hash(&e.execution_requests))); + let payload = convert_v3_to_ethrex(e.execution_payload); + payload + .into_block(parent_beacon_block_root, requests_hash) + .context("into_block failed") + } + } +} + +/// Convert V1 payload (Bellatrix) to ethrex ExecutionPayload. +fn convert_v1_to_ethrex(payload: ExecutionPayloadV1) -> ExecutionPayload { + ExecutionPayload { + parent_hash: H256::from(payload.parent_hash), + fee_recipient: Address::from(payload.fee_recipient), + state_root: H256::from(payload.state_root), + receipts_root: H256::from(payload.receipts_root), + logs_bloom: Bloom::from_slice(&payload.logs_bloom[..]), + prev_randao: H256::from(payload.prev_randao), + block_number: payload.block_number, + gas_limit: payload.gas_limit, + gas_used: payload.gas_used, + timestamp: payload.timestamp, + extra_data: Bytes::from(Vec::from(payload.extra_data)), + base_fee_per_gas: base_fee_to_u64(&payload.base_fee_per_gas), + block_hash: H256::from(payload.block_hash), + transactions: payload + .transactions + .into_iter() + .map(|t| EncodedTransaction(Bytes::from(Vec::from(t)))) + .collect(), + withdrawals: None, + blob_gas_used: None, + excess_blob_gas: None, + } +} + +/// Convert V2 payload (Capella) to ethrex ExecutionPayload. +fn convert_v2_to_ethrex(payload: ExecutionPayloadV2) -> ExecutionPayload { + ExecutionPayload { + parent_hash: H256::from(payload.parent_hash), + fee_recipient: Address::from(payload.fee_recipient), + state_root: H256::from(payload.state_root), + receipts_root: H256::from(payload.receipts_root), + logs_bloom: Bloom::from_slice(&payload.logs_bloom[..]), + prev_randao: H256::from(payload.prev_randao), + block_number: payload.block_number, + gas_limit: payload.gas_limit, + gas_used: payload.gas_used, + timestamp: payload.timestamp, + extra_data: Bytes::from(Vec::from(payload.extra_data)), + base_fee_per_gas: base_fee_to_u64(&payload.base_fee_per_gas), + block_hash: H256::from(payload.block_hash), + transactions: payload + .transactions + .into_iter() + .map(|t| EncodedTransaction(Bytes::from(Vec::from(t)))) + .collect(), + withdrawals: Some( + payload + .withdrawals + .into_iter() + .map(convert_withdrawal) + .collect(), + ), + blob_gas_used: None, + excess_blob_gas: None, + } +} + +/// Convert V3 payload (Deneb/Electra) to ethrex ExecutionPayload. +fn convert_v3_to_ethrex(payload: ExecutionPayloadV3) -> ExecutionPayload { + ExecutionPayload { + parent_hash: H256::from(payload.parent_hash), + fee_recipient: Address::from(payload.fee_recipient), + state_root: H256::from(payload.state_root), + receipts_root: H256::from(payload.receipts_root), + logs_bloom: Bloom::from_slice(&payload.logs_bloom[..]), + prev_randao: H256::from(payload.prev_randao), + block_number: payload.block_number, + gas_limit: payload.gas_limit, + gas_used: payload.gas_used, + timestamp: payload.timestamp, + extra_data: Bytes::from(Vec::from(payload.extra_data)), + base_fee_per_gas: base_fee_to_u64(&payload.base_fee_per_gas), + block_hash: H256::from(payload.block_hash), + transactions: payload + .transactions + .into_iter() + .map(|t| EncodedTransaction(Bytes::from(Vec::from(t)))) + .collect(), + withdrawals: Some( + payload + .withdrawals + .into_iter() + .map(convert_withdrawal) + .collect(), + ), + blob_gas_used: Some(payload.blob_gas_used), + excess_blob_gas: Some(payload.excess_blob_gas), + } +} + +/// Convert our Withdrawal type to ethrex's Withdrawal type. +fn convert_withdrawal(w: Withdrawal) -> ethrex_common::types::Withdrawal { + ethrex_common::types::Withdrawal { + index: w.index, + validator_index: w.validator_index, + address: Address::from(w.address), + amount: w.amount, + } +} -/// Converts a [`NewPayloadRequest`] into a validated reth [`Block`]. -pub fn new_payload_request_to_block(new_payload_request: NewPayloadRequest) -> Result {} +/// Convert base_fee_per_gas from 32-byte little-endian to u64. +fn base_fee_to_u64(base_fee: &[u8; 32]) -> u64 { + u64::from_le_bytes(base_fee[..8].try_into().unwrap()) +} From 92f16b1b7e7307fd638bd09bc6e93f52e8eddf59 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Wed, 14 Jan 2026 17:45:45 -0300 Subject: [PATCH 25/46] more ethrex progress --- Cargo.lock | 1 + bin/stateless-validator-ethrex/sp1/Cargo.lock | 6581 +++++++++++++---- .../tests/stateless-validator-ethrex.rs | 3 +- crates/stateless-validator-ethrex/Cargo.toml | 1 + crates/stateless-validator-ethrex/src/host.rs | 20 +- 5 files changed, 5143 insertions(+), 1463 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b304134a..7a0539ad 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6064,6 +6064,7 @@ dependencies = [ "reth-stateless", "serde", "stateless-validator-common", + "stateless-validator-reth", ] [[package]] diff --git a/bin/stateless-validator-ethrex/sp1/Cargo.lock b/bin/stateless-validator-ethrex/sp1/Cargo.lock index 367fbd42..ec0306bd 100644 --- a/bin/stateless-validator-ethrex/sp1/Cargo.lock +++ b/bin/stateless-validator-ethrex/sp1/Cargo.lock @@ -13,13 +13,24 @@ dependencies = [ "num-traits", ] +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if 1.0.4", + "cipher", + "cpufeatures", +] + [[package]] name = "ahash" version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "once_cell", "version_check", "zerocopy", @@ -41,178 +52,224 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] -name = "android_system_properties" -version = "0.1.5" +name = "alloy-chains" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +checksum = "25db5bcdd086f0b1b9610140a12c59b757397be90bd130d8d836fc8da0815a34" dependencies = [ - "libc", + "alloy-primitives", + "alloy-rlp", + "num_enum", + "serde", + "strum", ] [[package]] -name = "anstream" -version = "0.6.21" +name = "alloy-consensus" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", +checksum = "12870ab65b131f609257436935047eec3cfabee8809732f6bf5a69fe2a18cf2e" +dependencies = [ + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "alloy-trie 0.9.3", + "alloy-tx-macros", + "auto_impl", + "borsh", + "c-kzg", + "derive_more 2.1.1", + "either", + "k256", + "once_cell", + "rand 0.8.5", + "secp256k1", + "serde", + "serde_json", + "serde_with", + "thiserror 2.0.17", ] [[package]] -name = "anstyle" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" - -[[package]] -name = "anstyle-parse" -version = "0.2.7" +name = "alloy-consensus-any" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +checksum = "47c66b14d2187de0c4efe4ef678aaa57a6a34cccdbea3a0773627fac9bd128f4" dependencies = [ - "utf8parse", + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "serde", ] [[package]] -name = "anstyle-query" -version = "1.1.5" +name = "alloy-eip2124" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" +checksum = "741bdd7499908b3aa0b159bba11e71c8cddd009a2c2eb7a06e825f1ec87900a5" dependencies = [ - "windows-sys", + "alloy-primitives", + "alloy-rlp", + "crc", + "serde", + "thiserror 2.0.17", ] [[package]] -name = "anstyle-wincon" -version = "3.0.11" +name = "alloy-eip2930" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" +checksum = "9441120fa82df73e8959ae0e4ab8ade03de2aaae61be313fbf5746277847ce25" dependencies = [ - "anstyle", - "once_cell_polyfill", - "windows-sys", + "alloy-primitives", + "alloy-rlp", + "borsh", + "serde", ] [[package]] -name = "anyhow" -version = "1.0.100" +name = "alloy-eip7702" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +checksum = "2919c5a56a1007492da313e7a3b6d45ef5edc5d33416fdec63c0d7a2702a0d20" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "borsh", + "k256", + "serde", + "serde_with", + "thiserror 2.0.17", +] [[package]] -name = "ark-bn254" -version = "0.5.0" +name = "alloy-eips" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-std", +checksum = "f076d25ddfcd2f1cbcc234e072baf97567d1df0e3fccdc1f8af8cc8b18dc6299" +dependencies = [ + "alloy-eip2124", + "alloy-eip2930", + "alloy-eip7702", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "auto_impl", + "borsh", + "c-kzg", + "derive_more 2.1.1", + "either", + "serde", + "serde_with", + "sha2", + "thiserror 2.0.17", ] [[package]] -name = "ark-ec" -version = "0.5.0" +name = "alloy-evm" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" +checksum = "01be36ba6f5e6e62563b369e03ca529eac46aea50677f84655084b4750816574" dependencies = [ - "ahash", - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "educe", - "fnv", - "hashbrown 0.15.5", - "itertools 0.13.0", - "num-bigint 0.4.6", - "num-integer", - "num-traits", - "zeroize", + "alloy-consensus", + "alloy-eips", + "alloy-hardforks", + "alloy-primitives", + "alloy-sol-types", + "auto_impl", + "derive_more 2.1.1", + "revm", + "thiserror 2.0.17", ] [[package]] -name = "ark-ff" -version = "0.5.0" +name = "alloy-genesis" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" +checksum = "48d424ac007b5f89d65eecb4ed6cc5ca74cbaf231f471789a8158fdf4cc5f446" dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "arrayvec", - "digest", - "educe", - "itertools 0.13.0", - "num-bigint 0.4.6", - "num-traits", - "paste", - "zeroize", + "alloy-eips", + "alloy-primitives", + "alloy-serde", + "alloy-trie 0.9.3", + "borsh", + "serde", + "serde_with", ] [[package]] -name = "ark-ff-asm" -version = "0.5.0" +name = "alloy-hardforks" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" +checksum = "83ba208044232d14d4adbfa77e57d6329f51bc1acc21f5667bb7db72d88a0831" dependencies = [ - "quote", - "syn 2.0.111", + "alloy-chains", + "alloy-eip2124", + "alloy-primitives", + "auto_impl", + "dyn-clone", ] [[package]] -name = "ark-ff-macros" -version = "0.5.0" +name = "alloy-network-primitives" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" +checksum = "fba5c43e055effb5bd33dbc74b1ab7fe0f367d8801a25af9e7c716b3ef5e440b" dependencies = [ - "num-bigint 0.4.6", - "num-traits", - "proc-macro2", - "quote", - "syn 2.0.111", + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-serde", + "serde", ] [[package]] -name = "ark-poly" -version = "0.5.0" +name = "alloy-primitives" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" +checksum = "f6a0fb18dd5fb43ec5f0f6a20be1ce0287c79825827de5744afaa6c957737c33" dependencies = [ - "ahash", - "ark-ff", - "ark-serialize", - "ark-std", - "educe", - "fnv", - "hashbrown 0.15.5", + "alloy-rlp", + "bytes", + "cfg-if 1.0.4", + "const-hex", + "derive_more 2.1.1", + "foldhash 0.2.0", + "hashbrown 0.16.1", + "indexmap 2.12.1", + "itoa", + "k256", + "keccak-asm", + "paste", + "proptest", + "rand 0.9.2", + "rapidhash", + "ruint", + "rustc-hash", + "serde", + "sha3", + "tiny-keccak", ] [[package]] -name = "ark-serialize" -version = "0.5.0" +name = "alloy-rlp" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" +checksum = "5f70d83b765fdc080dbcd4f4db70d8d23fe4761f2f02ebfa9146b833900634b4" dependencies = [ - "ark-serialize-derive", - "ark-std", + "alloy-rlp-derive", "arrayvec", - "digest", - "num-bigint 0.4.6", + "bytes", ] [[package]] -name = "ark-serialize-derive" -version = "0.5.0" +name = "alloy-rlp-derive" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" +checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" dependencies = [ "proc-macro2", "quote", @@ -220,649 +277,847 @@ dependencies = [ ] [[package]] -name = "ark-std" -version = "0.5.0" +name = "alloy-rpc-types-debug" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" +checksum = "ccb37a9eee8e7a19bb07b5cd55d33457884e44b212588b7429c5d318d2b90295" dependencies = [ - "num-traits", - "rand", + "alloy-primitives", + "derive_more 2.1.1", + "serde", + "serde_with", ] [[package]] -name = "arrayref" -version = "0.3.9" +name = "alloy-rpc-types-engine" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" +checksum = "95157286826aa7bb5463a5f4188266bbf2555db1fd53bb814a4b35c106f2a498" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "derive_more 2.1.1", + "rand 0.8.5", + "serde", + "strum", +] [[package]] -name = "arrayvec" -version = "0.7.6" +name = "alloy-rpc-types-eth" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +checksum = "1ec734cce11f7fe889950b36b51589397528b26beb6f890834a2131ee9f174d7" +dependencies = [ + "alloy-consensus", + "alloy-consensus-any", + "alloy-eips", + "alloy-network-primitives", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "alloy-sol-types", + "itertools 0.14.0", + "serde", + "serde_json", + "serde_with", + "thiserror 2.0.17", +] [[package]] -name = "async-trait" -version = "0.1.89" +name = "alloy-serde" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +checksum = "27f076bfd74fccc63d50546e1765359736357a953de2eb778b7b6191571735e6" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", + "alloy-primitives", + "serde", + "serde_json", ] [[package]] -name = "autocfg" -version = "1.5.0" +name = "alloy-sol-macro" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "09eb18ce0df92b4277291bbaa0ed70545d78b02948df756bbd3d6214bf39a218" +dependencies = [ + "alloy-sol-macro-expander", + "alloy-sol-macro-input", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.111", +] [[package]] -name = "base16ct" -version = "0.2.0" +name = "alloy-sol-macro-expander" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +checksum = "95d9fa2daf21f59aa546d549943f10b5cce1ae59986774019fbedae834ffe01b" +dependencies = [ + "alloy-sol-macro-input", + "const-hex", + "heck", + "indexmap 2.12.1", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.111", + "syn-solidity", + "tiny-keccak", +] [[package]] -name = "base64" -version = "0.13.1" +name = "alloy-sol-macro-input" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +checksum = "9396007fe69c26ee118a19f4dee1f5d1d6be186ea75b3881adf16d87f8444686" +dependencies = [ + "const-hex", + "dunce", + "heck", + "macro-string", + "proc-macro2", + "quote", + "syn 2.0.111", + "syn-solidity", +] [[package]] -name = "base64" -version = "0.22.1" +name = "alloy-sol-types" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +checksum = "09aeea64f09a7483bdcd4193634c7e5cf9fd7775ee767585270cd8ce2d69dc95" +dependencies = [ + "alloy-primitives", + "alloy-sol-macro", +] [[package]] -name = "base64ct" -version = "1.8.0" +name = "alloy-trie" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" +checksum = "983d99aa81f586cef9dae38443245e585840fcf0fc58b09aee0b1f27aed1d500" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "arrayvec", + "derive_more 2.1.1", + "nybbles 0.3.4", + "smallvec", + "tracing", +] [[package]] -name = "bincode" -version = "1.3.3" +name = "alloy-trie" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +checksum = "428aa0f0e0658ff091f8f667c406e034b431cb10abd39de4f507520968acc499" dependencies = [ + "alloy-primitives", + "alloy-rlp", + "arrayvec", + "derive_more 2.1.1", + "nybbles 0.4.7", "serde", + "smallvec", + "tracing", ] [[package]] -name = "bit-set" -version = "0.8.0" +name = "alloy-tx-macros" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +checksum = "bb0d567f4830dea921868c7680004ae0c7f221b05e6477db6c077c7953698f56" dependencies = [ - "bit-vec", + "darling 0.21.3", + "proc-macro2", + "quote", + "syn 2.0.111", ] [[package]] -name = "bit-vec" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" - -[[package]] -name = "bitvec" -version = "1.0.1" +name = "android_system_properties" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ - "funty", - "radium", - "tap", - "wyz", + "libc", ] [[package]] -name = "blake3" -version = "1.8.2" +name = "anstream" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ - "arrayref", - "arrayvec", - "cc", - "cfg-if", - "constant_time_eq", + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", ] [[package]] -name = "block-buffer" -version = "0.10.4" +name = "anstyle" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" + +[[package]] +name = "anstyle-parse" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ - "generic-array", + "utf8parse", ] [[package]] -name = "bls12_381" -version = "0.8.0" -source = "git+https://github.com/lambdaclass/bls12_381-patch/?branch=expose-fp-struct#f2242f78b2b5fc10d9168a810c04ab8728ac6804" +name = "anstyle-query" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "cfg-if", - "digest", - "ff", - "group", - "hex", - "pairing", - "rand_core", - "sp1-lib", - "subtle", + "windows-sys 0.61.2", ] [[package]] -name = "bumpalo" -version = "3.19.0" +name = "anstyle-wincon" +version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.61.2", +] [[package]] -name = "byte-slice-cast" -version = "1.2.3" +name = "anyhow" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] -name = "bytecheck" -version = "0.8.2" +name = "ark-bls12-381" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0caa33a2c0edca0419d15ac723dff03f1956f7978329b1e3b5fdaaaed9d3ca8b" +checksum = "3df4dcc01ff89867cd86b0da835f23c3f02738353aaee7dde7495af71363b8d5" dependencies = [ - "bytecheck_derive", - "ptr_meta", - "rancor", - "simdutf8", + "ark-ec", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", ] [[package]] -name = "bytecheck_derive" -version = "0.8.2" +name = "ark-bn254" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89385e82b5d1821d2219e0b095efa2cc1f246cbf99080f3be46a1a85c0d392d9" +checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", + "ark-ec", + "ark-ff 0.5.0", + "ark-std 0.5.0", ] [[package]] -name = "bytemuck" -version = "1.24.0" +name = "ark-ec" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" +checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" dependencies = [ - "bytemuck_derive", + "ahash", + "ark-ff 0.5.0", + "ark-poly", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.5", + "itertools 0.13.0", + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "zeroize", ] [[package]] -name = "bytemuck_derive" -version = "1.10.2" +name = "ark-ff" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint 0.4.6", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", ] [[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.11.0" +name = "ark-ff" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" dependencies = [ - "serde", + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint 0.4.6", + "num-traits", + "paste", + "rustc_version 0.4.1", + "zeroize", ] [[package]] -name = "camino" -version = "1.2.1" +name = "ark-ff" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" +checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" +dependencies = [ + "ark-ff-asm 0.5.0", + "ark-ff-macros 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "arrayvec", + "digest 0.10.7", + "educe", + "itertools 0.13.0", + "num-bigint 0.4.6", + "num-traits", + "paste", + "zeroize", +] [[package]] -name = "cc" -version = "1.2.47" +name = "ark-ff-asm" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd405d82c84ff7f35739f175f67d8b9fb7687a0e84ccdc78bd3568839827cf07" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" dependencies = [ - "find-msvc-tools", - "shlex", + "quote", + "syn 1.0.109", ] [[package]] -name = "cfg-if" -version = "1.0.4" +name = "ark-ff-asm" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] [[package]] -name = "chrono" -version = "0.4.42" +name = "ark-ff-asm" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ - "iana-time-zone", - "num-traits", - "serde", - "windows-link", + "quote", + "syn 2.0.111", ] [[package]] -name = "clap" -version = "4.5.53" +name = "ark-ff-macros" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" dependencies = [ - "clap_builder", - "clap_derive", + "num-bigint 0.4.6", + "num-traits", + "quote", + "syn 1.0.109", ] [[package]] -name = "clap_builder" -version = "4.5.53" +name = "ark-ff-macros" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", + "num-bigint 0.4.6", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "clap_derive" -version = "4.5.49" +name = "ark-ff-macros" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" dependencies = [ - "heck", + "num-bigint 0.4.6", + "num-traits", "proc-macro2", "quote", "syn 2.0.111", ] [[package]] -name = "clap_lex" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" - -[[package]] -name = "colorchoice" -version = "1.0.4" +name = "ark-poly" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" +dependencies = [ + "ahash", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.5", +] [[package]] -name = "const-default" -version = "1.0.0" +name = "ark-serialize" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b396d1f76d455557e1218ec8066ae14bba60b4b36ecd55577ba979f5db7ecaa" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] [[package]] -name = "const-oid" -version = "0.9.6" +name = "ark-serialize" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint 0.4.6", +] [[package]] -name = "const_format" -version = "0.2.35" +name = "ark-serialize" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" +checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" dependencies = [ - "const_format_proc_macros", + "ark-serialize-derive", + "ark-std 0.5.0", + "arrayvec", + "digest 0.10.7", + "num-bigint 0.4.6", ] [[package]] -name = "const_format_proc_macros" -version = "0.2.34" +name = "ark-serialize-derive" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "syn 2.0.111", ] [[package]] -name = "constant_time_eq" -version = "0.3.1" +name = "ark-std" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand 0.8.5", +] [[package]] -name = "convert_case" -version = "0.6.0" +name = "ark-std" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" dependencies = [ - "unicode-segmentation", + "num-traits", + "rand 0.8.5", ] [[package]] -name = "core-foundation-sys" -version = "0.8.7" +name = "ark-std" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" +dependencies = [ + "num-traits", + "rand 0.8.5", +] [[package]] -name = "cpufeatures" -version = "0.2.17" +name = "arrayref" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" dependencies = [ - "libc", + "serde", ] [[package]] -name = "crc32fast" -version = "1.5.0" +name = "async-trait" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ - "cfg-if", + "proc-macro2", + "quote", + "syn 2.0.111", ] [[package]] -name = "critical-section" -version = "1.2.0" +name = "atomic-waker" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] -name = "crossbeam" -version = "0.8.4" +name = "aurora-engine-modexp" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +checksum = "518bc5745a6264b5fd7b09dffb9667e400ee9e2bbe18555fac75e1fe9afa0df9" dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-epoch", - "crossbeam-queue", - "crossbeam-utils", + "hex", + "num", ] [[package]] -name = "crossbeam-channel" -version = "0.5.15" +name = "auto_impl" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ - "crossbeam-utils", + "proc-macro2", + "quote", + "syn 2.0.111", ] [[package]] -name = "crossbeam-deque" -version = "0.8.6" +name = "autocfg" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "axum" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8" dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", + "axum-core", + "base64 0.22.1", + "bytes", + "form_urlencoded", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "serde_core", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sha1", + "sync_wrapper", + "tokio", + "tokio-tungstenite", + "tower", + "tower-layer", + "tower-service", + "tracing", ] [[package]] -name = "crossbeam-epoch" -version = "0.9.18" +name = "axum-core" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" dependencies = [ - "crossbeam-utils", + "bytes", + "futures-core", + "http", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "sync_wrapper", + "tower-layer", + "tower-service", + "tracing", ] [[package]] -name = "crossbeam-queue" -version = "0.3.12" +name = "axum-extra" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +checksum = "9963ff19f40c6102c76756ef0a46004c0d58957d87259fc9208ff8441c12ab96" dependencies = [ - "crossbeam-utils", + "axum", + "axum-core", + "bytes", + "futures-util", + "headers", + "http", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "serde_core", + "tower-layer", + "tower-service", + "tracing", ] [[package]] -name = "crossbeam-utils" -version = "0.8.21" +name = "base16ct" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" [[package]] -name = "crunchy" -version = "0.2.4" +name = "base64" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "git+https://github.com/sp1-patches/RustCrypto-bigint?tag=patch-0.5.5-sp1-4.0.0#d421029772fb604022defd4cae5fffb269ad5155" -dependencies = [ - "generic-array", - "rand_core", - "subtle", - "zeroize", -] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] -name = "crypto-common" -version = "0.1.6" +name = "base64ct" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] -name = "darling" -version = "0.21.3" +name = "bincode" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" dependencies = [ - "darling_core", - "darling_macro", + "serde", ] [[package]] -name = "darling_core" -version = "0.21.3" +name = "bincode" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740" dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.111", + "serde", + "unty", ] [[package]] -name = "darling_macro" -version = "0.21.3" +name = "bit-set" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ - "darling_core", - "quote", - "syn 2.0.111", + "bit-vec", ] [[package]] -name = "datatest-stable" -version = "0.2.10" +name = "bit-vec" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833306ca7eec4d95844e65f0d7502db43888c5c1006c6c517e8cf51a27d15431" -dependencies = [ - "camino", - "fancy-regex", - "libtest-mimic", - "walkdir", -] +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] -name = "der" -version = "0.7.10" +name = "bitcoin-io" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +checksum = "2dee39a0ee5b4095224a0cfc6bf4cc1baf0f9624b96b367e53b66d974e51d953" + +[[package]] +name = "bitcoin_hashes" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26ec84b80c482df901772e931a9a681e26a1b9ee2302edeff23cb30328745c8b" dependencies = [ - "const-oid", - "pem-rfc7468", - "zeroize", + "bitcoin-io", + "hex-conservative", ] [[package]] -name = "deranged" -version = "0.5.5" +name = "bitflags" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" dependencies = [ - "powerfmt", "serde_core", ] [[package]] -name = "derive_more" -version = "1.0.0" +name = "bitvec" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ - "derive_more-impl", + "funty", + "radium", + "serde", + "tap", + "wyz", ] [[package]] -name = "derive_more-impl" -version = "1.0.0" +name = "blake3" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "syn 2.0.111", - "unicode-xid", + "arrayref", + "arrayvec", + "cc", + "cfg-if 1.0.4", + "constant_time_eq", ] [[package]] -name = "digest" -version = "0.10.7" +name = "block-buffer" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", - "subtle", + "generic-array", ] [[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +name = "bls12_381" +version = "0.8.0" +source = "git+https://github.com/lambdaclass/bls12_381-patch/?branch=expose-fp-struct#f2242f78b2b5fc10d9168a810c04ab8728ac6804" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", + "cfg-if 1.0.4", + "digest 0.10.7", + "ff", + "group", + "hex", + "pairing", + "rand_core 0.6.4", + "sp1-lib", + "subtle", ] [[package]] -name = "dyn-clone" -version = "1.0.20" +name = "blst" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" +checksum = "dcdb4c7013139a150f9fc55d123186dbfaba0d912817466282c73ac49e71fb45" +dependencies = [ + "cc", + "glob", + "threadpool", + "zeroize", +] [[package]] -name = "ecdsa" -version = "0.16.9" -source = "git+https://github.com/sp1-patches/signatures?tag=patch-16.9-sp1-4.1.0#1880299a48fe7ef249edaa616fd411239fb5daf1" +name = "borsh" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1da5ab77c1437701eeff7c88d968729e7766172279eab0676857b3d63af7a6f" dependencies = [ - "der", - "digest", - "elliptic-curve", - "rfc6979", - "signature", - "spki", + "borsh-derive", + "cfg_aliases", ] [[package]] -name = "educe" -version = "0.6.0" +name = "borsh-derive" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" +checksum = "0686c856aa6aac0c4498f936d7d6a02df690f614c03e4d906d1018062b5c5e2c" dependencies = [ - "enum-ordinalize", + "once_cell", + "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.111", ] [[package]] -name = "either" -version = "1.15.0" +name = "bumpalo" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] -name = "elliptic-curve" -version = "0.13.8" +name = "byte-slice-cast" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" + +[[package]] +name = "bytecheck" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0caa33a2c0edca0419d15ac723dff03f1956f7978329b1e3b5fdaaaed9d3ca8b" dependencies = [ - "base16ct", - "crypto-bigint", - "digest", - "ff", - "generic-array", - "group", - "hkdf", - "pem-rfc7468", - "pkcs8", - "rand_core", - "sec1", - "subtle", - "zeroize", + "bytecheck_derive", + "ptr_meta", + "rancor", + "simdutf8", ] [[package]] -name = "embedded-alloc" -version = "0.6.0" +name = "bytecheck_derive" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f2de9133f68db0d4627ad69db767726c99ff8585272716708227008d3f1bddd" +checksum = "89385e82b5d1821d2219e0b095efa2cc1f246cbf99080f3be46a1a85c0d392d9" dependencies = [ - "const-default", - "critical-section", - "linked_list_allocator", - "rlsf", + "proc-macro2", + "quote", + "syn 2.0.111", ] [[package]] -name = "enum-ordinalize" -version = "4.3.2" +name = "bytemuck" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a1091a7bb1f8f2c4b28f1fe2cef4980ca2d410a3d727d67ecc3178c9b0800f0" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" dependencies = [ - "enum-ordinalize-derive", + "bytemuck_derive", ] [[package]] -name = "enum-ordinalize-derive" -version = "4.3.2" +name = "bytemuck_derive" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" +checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", @@ -870,394 +1125,2534 @@ dependencies = [ ] [[package]] -name = "equivalent" -version = "1.0.2" +name = "byteorder" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] -name = "ere-io" -version = "0.0.16" -source = "git+https://github.com/eth-act/ere?rev=ec75f8a26657ddbf7efc44cdb3167fff4f55fe27#ec75f8a26657ddbf7efc44cdb3167fff4f55fe27" +name = "bytes" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" dependencies = [ - "rkyv", + "serde", ] [[package]] -name = "ere-platform-sp1" -version = "0.0.16" -source = "git+https://github.com/eth-act/ere?rev=ec75f8a26657ddbf7efc44cdb3167fff4f55fe27#ec75f8a26657ddbf7efc44cdb3167fff4f55fe27" +name = "c-kzg" +version = "2.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e00bf4b112b07b505472dbefd19e37e53307e2bfed5a79e0cc161d58ccd0e687" dependencies = [ - "ere-platform-trait", - "sp1-zkvm", + "blst", + "cc", + "glob", + "hex", + "libc", + "once_cell", + "serde", ] [[package]] -name = "ere-platform-trait" -version = "0.0.16" -source = "git+https://github.com/eth-act/ere?rev=ec75f8a26657ddbf7efc44cdb3167fff4f55fe27#ec75f8a26657ddbf7efc44cdb3167fff4f55fe27" +name = "camino" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" + +[[package]] +name = "cc" +version = "1.2.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd405d82c84ff7f35739f175f67d8b9fb7687a0e84ccdc78bd3568839827cf07" dependencies = [ - "digest", + "find-msvc-tools", + "jobserver", + "libc", + "shlex", ] [[package]] -name = "escape8259" -version = "0.5.3" +name = "cfg-if" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5692dd7b5a1978a5aeb0ce83b7655c58ca8efdcb79d21036ea249da95afec2c6" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] -name = "ethbloom" -version = "0.14.1" +name = "cfg-if" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c321610643004cf908ec0f5f2aa0d8f1f8e14b540562a2887a1111ff1ecbf7b" -dependencies = [ - "crunchy", - "fixed-hash", - "impl-rlp", - "impl-serde", - "tiny-keccak", -] +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] -name = "ethereum-types" -version = "0.15.1" +name = "cfg_aliases" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ab15ed80916029f878e0267c3a9f92b67df55e79af370bf66199059ae2b4ee3" -dependencies = [ - "ethbloom", - "fixed-hash", - "impl-rlp", - "impl-serde", - "primitive-types", - "uint", -] +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] -name = "ethrex-blockchain" -version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +name = "chrono" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "bytes", - "ethrex-common", - "ethrex-crypto", - "ethrex-metrics", - "ethrex-rlp", - "ethrex-storage", - "ethrex-trie", - "ethrex-vm", - "hex", - "rustc-hash", - "thiserror", - "tokio", - "tokio-util", - "tracing", + "iana-time-zone", + "num-traits", + "serde", + "windows-link", ] [[package]] -name = "ethrex-common" -version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "bytes", - "crc32fast", - "ethereum-types", - "ethrex-crypto", - "ethrex-rlp", - "ethrex-trie", - "hex", - "hex-literal", - "k256", - "kzg-rs", - "lazy_static", - "libc", - "once_cell", - "rayon", - "rkyv", - "rustc-hash", - "serde", - "serde_json", - "sha2", - "sha3", - "thiserror", - "tinyvec", - "tracing", - "url", + "crypto-common", + "inout", ] [[package]] -name = "ethrex-crypto" -version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +name = "clap" +version = "4.5.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" dependencies = [ - "kzg-rs", - "thiserror", - "tiny-keccak", + "clap_builder", + "clap_derive", ] [[package]] -name = "ethrex-l2-common" -version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +name = "clap_builder" +version = "4.5.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" dependencies = [ - "bytes", - "ethereum-types", - "ethrex-common", - "ethrex-crypto", - "ethrex-rlp", - "ethrex-storage", - "ethrex-trie", - "ethrex-vm", - "hex", - "k256", - "lambdaworks-crypto", - "rkyv", - "serde", - "serde_with", - "sha3", - "thiserror", - "tracing", + "anstream", + "anstyle", + "clap_lex", + "strsim", ] [[package]] -name = "ethrex-levm" -version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +name = "clap_derive" +version = "4.5.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" dependencies = [ - "ark-bn254", - "ark-ec", - "ark-ff", - "bitvec", - "bls12_381", - "bytes", - "datatest-stable", - "derive_more", - "ethrex-common", - "ethrex-crypto", - "ethrex-rlp", - "k256", - "lambdaworks-math", - "lazy_static", - "malachite", - "p256", - "ripemd", - "rustc-hash", - "serde", - "serde_json", - "sha2", - "sha3", - "strum", - "substrate-bn", - "thiserror", - "walkdir", + "heck", + "proc-macro2", + "quote", + "syn 2.0.111", ] [[package]] -name = "ethrex-metrics" -version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" -dependencies = [ - "ethrex-common", - "serde", - "serde_json", - "thiserror", - "tracing-subscriber", -] +name = "clap_lex" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] -name = "ethrex-rlp" -version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + +[[package]] +name = "concat-kdf" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d72c1252426a83be2092dd5884a5f6e3b8e7180f6891b6263d2c21b92ec8816" dependencies = [ - "bytes", - "ethereum-types", - "hex", - "lazy_static", - "snap", - "thiserror", - "tinyvec", + "digest 0.10.7", ] [[package]] -name = "ethrex-storage" -version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +name = "const-default" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b396d1f76d455557e1218ec8066ae14bba60b4b36ecd55577ba979f5db7ecaa" + +[[package]] +name = "const-hex" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bb320cac8a0750d7f25280aa97b09c26edfe161164238ecbbb31092b079e735" dependencies = [ - "anyhow", - "async-trait", - "bytes", - "ethereum-types", - "ethrex-common", - "ethrex-crypto", - "ethrex-rlp", - "ethrex-trie", - "hex", - "lru", - "qfilter", - "rayon", - "rustc-hash", - "serde", - "serde_json", - "thiserror", - "tokio", - "tracing", + "cfg-if 1.0.4", + "cpufeatures", + "proptest", + "serde_core", ] [[package]] -name = "ethrex-threadpool" -version = "0.1.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const_format" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" dependencies = [ - "crossbeam", + "const_format_proc_macros", ] [[package]] -name = "ethrex-trie" -version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" dependencies = [ - "anyhow", - "bytes", - "crossbeam", - "digest", - "ethereum-types", - "ethrex-crypto", - "ethrex-rlp", - "ethrex-threadpool", - "hex", + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "convert_case" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if 1.0.4", +] + +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + +[[package]] +name = "crossbeam" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69323bff1fb41c635347b8ead484a5ca6c3f11914d784170b158d8449ab07f8e" +dependencies = [ + "cfg-if 0.1.10", + "crossbeam-channel 0.4.4", + "crossbeam-deque 0.7.4", + "crossbeam-epoch 0.8.2", + "crossbeam-queue 0.2.3", + "crossbeam-utils 0.7.2", +] + +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel 0.5.15", + "crossbeam-deque 0.8.6", + "crossbeam-epoch 0.9.18", + "crossbeam-queue 0.3.12", + "crossbeam-utils 0.8.21", +] + +[[package]] +name = "crossbeam-channel" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87" +dependencies = [ + "crossbeam-utils 0.7.2", + "maybe-uninit", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils 0.8.21", +] + +[[package]] +name = "crossbeam-deque" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20ff29ded3204c5106278a81a38f4b482636ed4fa1e6cfbeef193291beb29ed" +dependencies = [ + "crossbeam-epoch 0.8.2", + "crossbeam-utils 0.7.2", + "maybe-uninit", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch 0.9.18", + "crossbeam-utils 0.8.21", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" +dependencies = [ + "autocfg", + "cfg-if 0.1.10", + "crossbeam-utils 0.7.2", "lazy_static", - "rkyv", - "rustc-hash", - "serde", - "serde_json", - "smallvec", - "thiserror", - "tracing", + "maybe-uninit", + "memoffset", + "scopeguard", ] [[package]] -name = "ethrex-vm" -version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "bincode", - "bytes", - "derive_more", - "dyn-clone", - "ethereum-types", - "ethrex-common", - "ethrex-crypto", - "ethrex-levm", - "ethrex-rlp", - "ethrex-trie", + "crossbeam-utils 0.8.21", +] + +[[package]] +name = "crossbeam-queue" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" +dependencies = [ + "cfg-if 0.1.10", + "crossbeam-utils 0.7.2", + "maybe-uninit", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils 0.8.21", +] + +[[package]] +name = "crossbeam-utils" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" +dependencies = [ + "autocfg", + "cfg-if 0.1.10", "lazy_static", - "rkyv", - "serde", - "thiserror", - "tracing", ] [[package]] -name = "fancy-regex" -version = "0.14.0" +name = "crossbeam-utils" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e24cb5a94bcae1e5408b0effca5cd7172ea3c5755049c5f3af4cd283a165298" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "git+https://github.com/sp1-patches/RustCrypto-bigint?tag=patch-0.5.5-sp1-4.0.0#d421029772fb604022defd4cae5fffb269ad5155" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core 0.21.3", + "darling_macro 0.21.3", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.111", +] + +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "serde", + "strsim", + "syn 2.0.111", +] + +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core 0.20.11", + "quote", + "syn 2.0.111", +] + +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core 0.21.3", + "quote", + "syn 2.0.111", +] + +[[package]] +name = "data-encoding" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" + +[[package]] +name = "datatest-stable" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "833306ca7eec4d95844e65f0d7502db43888c5c1006c6c517e8cf51a27d15431" +dependencies = [ + "camino", + "fancy-regex", + "libtest-mimic", + "walkdir", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +dependencies = [ + "powerfmt", + "serde_core", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive-where" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl 1.0.0", +] + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl 2.1.1", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "convert_case 0.6.0", + "proc-macro2", + "quote", + "syn 2.0.111", + "unicode-xid", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "convert_case 0.10.0", + "proc-macro2", + "quote", + "rustc_version 0.4.1", + "syn 2.0.111", + "unicode-xid", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "git+https://github.com/sp1-patches/signatures?tag=patch-16.9-sp1-4.1.0#1880299a48fe7ef249edaa616fd411239fb5daf1" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "serdect", + "signature", + "spki", +] + +[[package]] +name = "educe" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" +dependencies = [ + "enum-ordinalize", + "proc-macro2", + "quote", + "syn 2.0.111", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +dependencies = [ + "serde", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array", + "group", + "hkdf", + "pem-rfc7468", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "serdect", + "subtle", + "zeroize", +] + +[[package]] +name = "embedded-alloc" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f2de9133f68db0d4627ad69db767726c99ff8585272716708227008d3f1bddd" +dependencies = [ + "const-default", + "critical-section", + "linked_list_allocator", + "rlsf", +] + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if 1.0.4", +] + +[[package]] +name = "enum-ordinalize" +version = "4.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a1091a7bb1f8f2c4b28f1fe2cef4980ca2d410a3d727d67ecc3178c9b0800f0" +dependencies = [ + "enum-ordinalize-derive", +] + +[[package]] +name = "enum-ordinalize-derive" +version = "4.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + +[[package]] +name = "envy" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f47e0157f2cb54f5ae1bd371b30a2ae4311e1c028f575cd4e81de7353215965" +dependencies = [ + "serde", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "ere-io" +version = "0.0.16" +source = "git+https://github.com/eth-act/ere?rev=ec75f8a26657ddbf7efc44cdb3167fff4f55fe27#ec75f8a26657ddbf7efc44cdb3167fff4f55fe27" +dependencies = [ + "bincode 2.0.1", + "serde", +] + +[[package]] +name = "ere-platform-sp1" +version = "0.0.16" +source = "git+https://github.com/eth-act/ere?rev=ec75f8a26657ddbf7efc44cdb3167fff4f55fe27#ec75f8a26657ddbf7efc44cdb3167fff4f55fe27" +dependencies = [ + "ere-platform-trait", + "sp1-zkvm", +] + +[[package]] +name = "ere-platform-trait" +version = "0.0.16" +source = "git+https://github.com/eth-act/ere?rev=ec75f8a26657ddbf7efc44cdb3167fff4f55fe27#ec75f8a26657ddbf7efc44cdb3167fff4f55fe27" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "escape8259" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5692dd7b5a1978a5aeb0ce83b7655c58ca8efdcb79d21036ea249da95afec2c6" + +[[package]] +name = "ethbloom" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c321610643004cf908ec0f5f2aa0d8f1f8e14b540562a2887a1111ff1ecbf7b" +dependencies = [ + "crunchy", + "fixed-hash", + "impl-rlp", + "impl-serde", + "tiny-keccak", +] + +[[package]] +name = "ethereum-types" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ab15ed80916029f878e0267c3a9f92b67df55e79af370bf66199059ae2b4ee3" +dependencies = [ + "ethbloom", + "fixed-hash", + "impl-rlp", + "impl-serde", + "primitive-types 0.13.1", + "uint 0.10.0", +] + +[[package]] +name = "ethereum_hashing" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c853bd72c9e5787f8aafc3df2907c2ed03cff3150c3acd94e2e53a98ab70a8ab" +dependencies = [ + "cpufeatures", + "ring", + "sha2", +] + +[[package]] +name = "ethereum_serde_utils" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dc1355dbb41fbbd34ec28d4fb2a57d9a70c67ac3c19f6a5ca4d4a176b9e997a" +dependencies = [ + "alloy-primitives", + "hex", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "ethereum_ssz" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dcddb2554d19cde19b099fadddde576929d7a4d0c1cd3512d1fd95cf174375c" +dependencies = [ + "alloy-primitives", + "ethereum_serde_utils", + "itertools 0.13.0", + "serde", + "serde_derive", + "smallvec", + "typenum", +] + +[[package]] +name = "ethereum_ssz_derive" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a657b6b3b7e153637dc6bdc6566ad9279d9ee11a15b12cfb24a2e04360637e9f" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.111", +] + +[[package]] +name = "ethrex-blockchain" +version = "8.0.0" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +dependencies = [ + "bytes", + "ethrex-common", + "ethrex-crypto", + "ethrex-metrics", + "ethrex-rlp", + "ethrex-storage", + "ethrex-trie", + "ethrex-vm", + "hex", + "rustc-hash", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "ethrex-common" +version = "8.0.0" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +dependencies = [ + "bytes", + "crc32fast", + "ethereum-types", + "ethrex-crypto", + "ethrex-rlp", + "ethrex-trie", + "hex", + "hex-literal", + "k256", + "kzg-rs", + "lazy_static", + "libc", + "once_cell", + "rayon", + "rkyv", + "rustc-hash", + "serde", + "serde_json", + "sha2", + "sha3", + "thiserror 2.0.17", + "tinyvec", + "tracing", + "url", +] + +[[package]] +name = "ethrex-crypto" +version = "8.0.0" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +dependencies = [ + "c-kzg", + "kzg-rs", + "thiserror 2.0.17", + "tiny-keccak", +] + +[[package]] +name = "ethrex-l2-common" +version = "8.0.0" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +dependencies = [ + "bytes", + "ethereum-types", + "ethrex-common", + "ethrex-crypto", + "ethrex-rlp", + "ethrex-storage", + "ethrex-trie", + "ethrex-vm", + "hex", + "k256", + "lambdaworks-crypto", + "rkyv", + "serde", + "serde_with", + "sha3", + "thiserror 2.0.17", + "tracing", +] + +[[package]] +name = "ethrex-levm" +version = "8.0.0" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff 0.5.0", + "bitvec", + "bls12_381", + "bytes", + "datatest-stable", + "derive_more 1.0.0", + "ethrex-common", + "ethrex-crypto", + "ethrex-rlp", + "k256", + "lambdaworks-math", + "lazy_static", + "malachite", + "p256", + "ripemd", + "rustc-hash", + "serde", + "serde_json", + "sha2", + "sha3", + "strum", + "substrate-bn", + "thiserror 2.0.17", + "walkdir", +] + +[[package]] +name = "ethrex-metrics" +version = "8.0.0" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +dependencies = [ + "axum", + "ethrex-common", + "prometheus 0.13.4", + "serde", + "serde_json", + "thiserror 2.0.17", + "tokio", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "ethrex-p2p" +version = "8.0.0" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +dependencies = [ + "aes", + "async-trait", + "bytes", + "concat-kdf", + "crossbeam 0.8.4", + "ctr", + "ethereum-types", + "ethrex-blockchain", + "ethrex-common", + "ethrex-crypto", + "ethrex-rlp", + "ethrex-storage", + "ethrex-threadpool", + "ethrex-trie", + "futures", + "hex", + "hmac", + "indexmap 2.12.1", + "lazy_static", + "prometheus 0.14.0", + "rand 0.8.5", + "rayon", + "rustc-hash", + "secp256k1", + "serde", + "serde_json", + "sha2", + "snap", + "spawned-concurrency", + "spawned-rt", + "thiserror 2.0.17", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", +] + +[[package]] +name = "ethrex-rlp" +version = "8.0.0" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +dependencies = [ + "bytes", + "ethereum-types", + "hex", + "lazy_static", + "snap", + "thiserror 2.0.17", + "tinyvec", +] + +[[package]] +name = "ethrex-rpc" +version = "8.0.0" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +dependencies = [ + "axum", + "axum-extra", + "bytes", + "envy", + "ethereum-types", + "ethrex-blockchain", + "ethrex-common", + "ethrex-crypto", + "ethrex-metrics", + "ethrex-p2p", + "ethrex-rlp", + "ethrex-storage", + "ethrex-trie", + "ethrex-vm", + "hex", + "hex-literal", + "jsonwebtoken", + "rand 0.8.5", + "reqwest", + "secp256k1", + "serde", + "serde_json", + "sha2", + "spawned-concurrency", + "spawned-rt", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tower-http", + "tracing", + "tracing-subscriber", + "uuid", +] + +[[package]] +name = "ethrex-storage" +version = "8.0.0" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +dependencies = [ + "anyhow", + "async-trait", + "bytes", + "ethereum-types", + "ethrex-common", + "ethrex-crypto", + "ethrex-rlp", + "ethrex-trie", + "hex", + "lru", + "qfilter", + "rayon", + "rustc-hash", + "serde", + "serde_json", + "thiserror 2.0.17", + "tokio", + "tracing", +] + +[[package]] +name = "ethrex-threadpool" +version = "0.1.0" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +dependencies = [ + "crossbeam 0.8.4", +] + +[[package]] +name = "ethrex-trie" +version = "8.0.0" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +dependencies = [ + "anyhow", + "bytes", + "crossbeam 0.8.4", + "digest 0.10.7", + "ethereum-types", + "ethrex-crypto", + "ethrex-rlp", + "ethrex-threadpool", + "hex", + "lazy_static", + "rkyv", + "rustc-hash", + "serde", + "serde_json", + "smallvec", + "thiserror 2.0.17", + "tracing", +] + +[[package]] +name = "ethrex-vm" +version = "8.0.0" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +dependencies = [ + "bincode 1.3.3", + "bytes", + "derive_more 1.0.0", + "dyn-clone", + "ethereum-types", + "ethrex-common", + "ethrex-crypto", + "ethrex-levm", + "ethrex-rlp", + "ethrex-trie", + "lazy_static", + "rkyv", + "serde", + "thiserror 2.0.17", + "tracing", +] + +[[package]] +name = "fancy-regex" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e24cb5a94bcae1e5408b0effca5cd7172ea3c5755049c5f3af4cd283a165298" +dependencies = [ + "bit-set", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "fastrlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "bitvec", + "byteorder", + "ff_derive", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "ff_derive" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f10d12652036b0e99197587c6ba87a8fc3031986499973c030d8b44fcc151b60" +dependencies = [ + "addchain", + "num-bigint 0.3.3", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand 0.8.5", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "gcd" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" + +[[package]] +name = "generic-array" +version = "0.14.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if 1.0.4", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if 1.0.4", + "libc", + "r-efi", + "wasip2", +] + +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "guest" +version = "0.1.0" +dependencies = [ + "ere-io", + "ere-platform-trait", + "sha2", +] + +[[package]] +name = "guest_program" +version = "8.0.0" +source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +dependencies = [ + "bincode 1.3.3", + "bytes", + "ethrex-blockchain", + "ethrex-common", + "ethrex-crypto", + "ethrex-l2-common", + "ethrex-rlp", + "ethrex-storage", + "ethrex-trie", + "ethrex-vm", + "hex", + "rkyv", + "serde", + "serde_json", + "serde_with", + "thiserror 2.0.17", +] + +[[package]] +name = "h2" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap 2.12.1", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "allocator-api2", + "foldhash 0.1.5", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.2.0", + "serde", + "serde_core", +] + +[[package]] +name = "headers" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" +dependencies = [ + "base64 0.22.1", + "bytes", + "headers-core", + "http", + "httpdate", + "mime", + "sha1", +] + +[[package]] +name = "headers-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" +dependencies = [ + "http", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hex-conservative" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fda06d18ac606267c40c04e41b9947729bf8b9efe74bd4e82b61a5f26a510b9f" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "http" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "pin-utils", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "system-configuration", + "tokio", + "tower-service", + "tracing", + "windows-registry", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" + +[[package]] +name = "icu_properties" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" + +[[package]] +name = "icu_provider" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-codec" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d40b9d5e17727407e55028eafc22b2dc68781786e6d7eb8a21103f5058e3a14" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-rlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54ed8ad1f3877f7e775b8cbf30ed1bd3209a95401817f19a0eb4402d13f8cf90" +dependencies = [ + "rlp 0.6.1", +] + +[[package]] +name = "impl-serde" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a143eada6a1ec4aefa5049037a26a6d597bfd64f8c026d07b77133e02b7dd0b" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" +dependencies = [ + "equivalent", + "hashbrown 0.16.1", + "serde", + "serde_core", +] + +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "generic-array", +] + +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "iri-string" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "jsonwebtoken" +version = "9.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" +dependencies = [ + "base64 0.22.1", + "js-sys", + "pem", + "ring", + "serde", + "serde_json", + "simple_asn1", +] + +[[package]] +name = "k256" +version = "0.13.4" +source = "git+https://github.com/sp1-patches/elliptic-curves?tag=patch-k256-13.4-sp1-5.0.0#f7d8998e05d8cbcbd8e543eba1030a7385011fa8" +dependencies = [ + "cfg-if 1.0.4", + "ecdsa", + "elliptic-curve", + "hex", + "once_cell", + "serdect", + "sha2", + "signature", + "sp1-lib", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "keccak-asm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" +dependencies = [ + "digest 0.10.7", + "sha3-asm", +] + +[[package]] +name = "kzg-rs" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9201effeea3fcc93b587904ae2df9ce97e433184b9d6d299e9ebc9830a546636" +dependencies = [ + "ff", + "hex", + "serde_arrays", + "sha2", + "sp1_bls12_381", + "spin", +] + +[[package]] +name = "lambdaworks-crypto" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58b1a1c1102a5a7fbbda117b79fb3a01e033459c738a3c1642269603484fd1c1" +dependencies = [ + "lambdaworks-math", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "sha2", + "sha3", +] + +[[package]] +name = "lambdaworks-math" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "018a95aa873eb49896a858dee0d925c33f3978d073c64b08dd4f2c9b35a017c6" +dependencies = [ + "getrandom 0.2.16", + "num-bigint 0.4.6", + "num-traits", + "rand 0.8.5", + "rayon", + "serde", + "serde_json", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] + +[[package]] +name = "libc" +version = "0.2.180" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" + +[[package]] +name = "libm" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + +[[package]] +name = "libtest-mimic" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5297962ef19edda4ce33aaa484386e0a5b3d7f2f4e037cbeee00503ef6b29d33" +dependencies = [ + "anstream", + "anstyle", + "clap", + "escape8259", +] + +[[package]] +name = "linked_list_allocator" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afa463f5405ee81cdb9cc2baf37e08ec7e4c8209442b5d72c04cfb2cd6e6286" + +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + +[[package]] +name = "litemap" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" + +[[package]] +name = "lru" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96051b46fc183dc9cd4a223960ef37b9af631b55191852a8274bfef064cda20f" +dependencies = [ + "hashbrown 0.16.1", +] + +[[package]] +name = "macro-string" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + +[[package]] +name = "malachite" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec410515e231332b14cd986a475d1c3323bcfa4c7efc038bfa1d5b410b1c57e4" +dependencies = [ + "malachite-base", + "malachite-nz", + "malachite-q", +] + +[[package]] +name = "malachite-base" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c738d3789301e957a8f7519318fcbb1b92bb95863b28f6938ae5a05be6259f34" +dependencies = [ + "hashbrown 0.15.5", + "itertools 0.14.0", + "libm", + "ryu", +] + +[[package]] +name = "malachite-nz" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1707c9a1fa36ce21749b35972bfad17bbf34cf5a7c96897c0491da321e387d3b" +dependencies = [ + "itertools 0.14.0", + "libm", + "malachite-base", + "wide", +] + +[[package]] +name = "malachite-q" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d764801aa4e96bbb69b389dcd03b50075345131cd63ca2e380bca71cc37a3675" +dependencies = [ + "itertools 0.14.0", + "malachite-base", + "malachite-nz", +] + +[[package]] +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "bit-set", "regex-automata", - "regex-syntax", ] [[package]] -name = "ff" -version = "0.13.1" +name = "matchit" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" + +[[package]] +name = "maybe-uninit" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" + +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + +[[package]] +name = "memoffset" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mio" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "modular-bitfield" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a53d79ba8304ac1c4f9eb3b9d281f21f7be9d4626f72ce7df4ad8fbde4f38a74" +dependencies = [ + "modular-bitfield-impl", + "static_assertions", +] + +[[package]] +name = "modular-bitfield-impl" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a7d5f7076603ebc68de2dc6a650ec331a062a13abaa346975be747bbfa4b789" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "mpt" +version = "0.1.0" +source = "git+https://github.com/eth-act/zkvm-ethereum-mpt.git?tag=v0.4.0#d4d8f968c183aedc23100c3a5634dee14c320757" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "alloy-trie 0.8.1", + "arrayvec", +] + +[[package]] +name = "munge" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e17401f259eba956ca16491461b6e8f72913a0a114e39736ce404410f915a0c" +dependencies = [ + "munge_macro", +] + +[[package]] +name = "munge_macro" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4568f25ccbd45ab5d5603dc34318c1ec56b117531781260002151b8530a9f931" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + +[[package]] +name = "native-tls" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint 0.4.6", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "bitvec", - "byteorder", - "ff_derive", - "rand_core", - "subtle", + "num-integer", + "num-traits", ] [[package]] -name = "ff_derive" -version = "0.13.1" +name = "num-complex" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f10d12652036b0e99197587c6ba87a8fc3031986499973c030d8b44fcc151b60" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ - "addchain", - "num-bigint 0.3.3", - "num-integer", "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", ] [[package]] -name = "find-msvc-tools" -version = "0.1.5" +name = "num-conv" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] -name = "fixed-hash" -version = "0.8.0" +name = "num-integer" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "byteorder", - "rand", - "rustc-hex", - "static_assertions", + "num-traits", ] [[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foldhash" -version = "0.1.5" +name = "num-iter" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] [[package]] -name = "foldhash" -version = "0.2.0" +name = "num-rational" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint 0.4.6", + "num-integer", + "num-traits", +] [[package]] -name = "form_urlencoded" -version = "1.2.2" +name = "num-traits" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ - "percent-encoding", + "autocfg", + "libm", ] [[package]] -name = "funty" -version = "2.0.0" +name = "num_cpus" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi", + "libc", +] [[package]] -name = "futures-core" -version = "0.3.31" +name = "num_enum" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" +dependencies = [ + "num_enum_derive", + "rustversion", +] [[package]] -name = "futures-macro" -version = "0.3.31" +name = "num_enum_derive" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ "proc-macro2", "quote", @@ -1265,1116 +3660,1446 @@ dependencies = [ ] [[package]] -name = "futures-sink" -version = "0.3.31" +name = "nybbles" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "8983bb634df7248924ee0c4c3a749609b5abcb082c28fffe3254b3eb3602b307" +dependencies = [ + "const-hex", + "smallvec", +] [[package]] -name = "futures-task" -version = "0.3.31" +name = "nybbles" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "7b5676b5c379cf5b03da1df2b3061c4a4e2aa691086a56ac923e08c143f53f59" +dependencies = [ + "alloy-rlp", + "cfg-if 1.0.4", + "proptest", + "ruint", + "serde", + "smallvec", +] [[package]] -name = "futures-util" -version = "0.3.31" +name = "once_cell" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" dependencies = [ - "futures-core", - "futures-macro", - "futures-task", - "pin-project-lite", - "pin-utils", - "slab", + "critical-section", + "portable-atomic", ] [[package]] -name = "gcd" -version = "2.3.0" +name = "once_cell_polyfill" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] -name = "generic-array" -version = "0.14.9" +name = "op-alloy-consensus" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +checksum = "726da827358a547be9f1e37c2a756b9e3729cb0350f43408164794b370cad8ae" dependencies = [ - "typenum", - "version_check", - "zeroize", + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "derive_more 2.1.1", + "serde", + "serde_with", + "thiserror 2.0.17", ] [[package]] -name = "getrandom" -version = "0.2.16" +name = "openssl" +version = "0.10.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" dependencies = [ - "cfg-if", - "js-sys", + "bitflags", + "cfg-if 1.0.4", + "foreign-types", "libc", - "wasi", - "wasm-bindgen", + "once_cell", + "openssl-macros", + "openssl-sys", ] [[package]] -name = "getrandom" -version = "0.3.4" +name = "openssl-macros" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ - "cfg-if", - "libc", - "r-efi", - "wasip2", + "proc-macro2", + "quote", + "syn 2.0.111", ] [[package]] -name = "group" -version = "0.13.0" +name = "openssl-probe" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff", - "rand_core", - "subtle", -] +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] -name = "guest" -version = "0.1.0" +name = "openssl-sys" +version = "0.9.111" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" dependencies = [ - "ere-io", - "ere-platform-trait", - "sha2", + "cc", + "libc", + "pkg-config", + "vcpkg", ] [[package]] -name = "guest_program" -version = "8.0.0" -source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" +name = "p256" +version = "0.13.2" +source = "git+https://github.com/sp1-patches/elliptic-curves?tag=patch-p256-13.2-sp1-5.0.0#10cca2ef98bebbad35e2475849433fc3e75e27d9" dependencies = [ - "bincode", - "bytes", - "ethrex-blockchain", - "ethrex-common", - "ethrex-crypto", - "ethrex-l2-common", - "ethrex-rlp", - "ethrex-storage", - "ethrex-trie", - "ethrex-vm", + "ecdsa", + "elliptic-curve", "hex", - "rkyv", - "serde", - "serde_json", - "serde_with", - "thiserror", + "primeorder", + "sha2", + "sp1-lib", ] [[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.15.5" +name = "p3-baby-bear" +version = "0.2.3-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +checksum = "7521838ecab2ddf4f7bc4ceebad06ec02414729598485c1ada516c39900820e8" dependencies = [ - "allocator-api2", - "foldhash 0.1.5", + "num-bigint 0.4.6", + "p3-field", + "p3-mds", + "p3-poseidon2", + "p3-symmetric", + "rand 0.8.5", + "serde", ] [[package]] -name = "hashbrown" -version = "0.16.1" +name = "p3-dft" +version = "0.2.3-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +checksum = "46414daedd796f1eefcdc1811c0484e4bced5729486b6eaba9521c572c76761a" dependencies = [ - "allocator-api2", - "equivalent", - "foldhash 0.2.0", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "tracing", ] [[package]] -name = "heck" -version = "0.5.0" +name = "p3-field" +version = "0.2.3-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +checksum = "48948a0516b349e9d1cdb95e7236a6ee010c44e68c5cc78b4b92bf1c4022a0d9" +dependencies = [ + "itertools 0.12.1", + "num-bigint 0.4.6", + "num-traits", + "p3-util", + "rand 0.8.5", + "serde", +] [[package]] -name = "hex" -version = "0.4.3" +name = "p3-matrix" +version = "0.2.3-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +checksum = "3e4de3f373589477cb735ea58e125898ed20935e03664b4614c7fac258b3c42f" +dependencies = [ + "itertools 0.12.1", + "p3-field", + "p3-maybe-rayon", + "p3-util", + "rand 0.8.5", + "serde", + "tracing", +] [[package]] -name = "hex-literal" -version = "0.4.1" +name = "p3-maybe-rayon" +version = "0.2.3-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" +checksum = "c3968ad1160310296eb04f91a5f4edfa38fe1d6b2b8cd6b5c64e6f9b7370979e" -[[package]] -name = "hkdf" -version = "0.12.4" +[[package]] +name = "p3-mds" +version = "0.2.3-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +checksum = "2356b1ed0add6d5dfbf7a338ce534a6fde827374394a52cec16a0840af6e97c9" dependencies = [ - "hmac", + "itertools 0.12.1", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-symmetric", + "p3-util", + "rand 0.8.5", ] [[package]] -name = "hmac" -version = "0.12.1" +name = "p3-poseidon2" +version = "0.2.3-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "7da1eec7e1b6900581bedd95e76e1ef4975608dd55be9872c9d257a8a9651c3a" dependencies = [ - "digest", + "gcd", + "p3-field", + "p3-mds", + "p3-symmetric", + "rand 0.8.5", + "serde", ] [[package]] -name = "iana-time-zone" -version = "0.1.64" +name = "p3-symmetric" +version = "0.2.3-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +checksum = "edb439bea1d822623b41ff4b51e3309e80d13cadf8b86d16ffd5e6efb9fdc360" dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core", + "itertools 0.12.1", + "p3-field", + "serde", ] [[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" +name = "p3-util" +version = "0.2.3-succinct" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +checksum = "b6c2c2010678b9332b563eaa38364915b585c1a94b5ca61e2c7541c087ddda5c" dependencies = [ - "cc", + "serde", ] [[package]] -name = "icu_collections" -version = "2.1.1" +name = "pairing" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" dependencies = [ - "displaydoc", - "potential_utf", - "yoke", - "zerofrom", - "zerovec", + "group", ] [[package]] -name = "icu_locale_core" -version = "2.1.1" +name = "parity-scale-codec" +version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", + "arrayvec", + "bitvec", + "byte-slice-cast", + "const_format", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "rustversion", + "serde", ] [[package]] -name = "icu_normalizer" -version = "2.1.1" +name = "parity-scale-codec-derive" +version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" dependencies = [ - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.111", ] [[package]] -name = "icu_normalizer_data" -version = "2.1.1" +name = "parking_lot" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] [[package]] -name = "icu_properties" -version = "2.1.1" +name = "parking_lot_core" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ - "icu_collections", - "icu_locale_core", - "icu_properties_data", - "icu_provider", - "zerotrie", - "zerovec", + "cfg-if 1.0.4", + "libc", + "redox_syscall", + "smallvec", + "windows-link", ] [[package]] -name = "icu_properties_data" -version = "2.1.1" +name = "paste" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] -name = "icu_provider" -version = "2.1.1" +name = "pem" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" dependencies = [ - "displaydoc", - "icu_locale_core", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", + "base64 0.22.1", + "serde_core", ] [[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "1.1.0" +name = "pem-rfc7468" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", + "base64ct", ] [[package]] -name = "idna_adapter" -version = "1.2.1" +name = "percent-encoding" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" -dependencies = [ - "icu_normalizer", - "icu_properties", -] +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] -name = "impl-codec" -version = "0.7.1" +name = "pest" +version = "2.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d40b9d5e17727407e55028eafc22b2dc68781786e6d7eb8a21103f5058e3a14" +checksum = "2c9eb05c21a464ea704b53158d358a31e6425db2f63a1a7312268b05fe2b75f7" dependencies = [ - "parity-scale-codec", + "memchr", + "ucd-trie", ] [[package]] -name = "impl-rlp" -version = "0.4.0" +name = "phf" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54ed8ad1f3877f7e775b8cbf30ed1bd3209a95401817f19a0eb4402d13f8cf90" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" dependencies = [ - "rlp", + "phf_macros", + "phf_shared", + "serde", ] [[package]] -name = "impl-serde" -version = "0.5.0" +name = "phf_generator" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a143eada6a1ec4aefa5049037a26a6d597bfd64f8c026d07b77133e02b7dd0b" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" dependencies = [ - "serde", + "fastrand", + "phf_shared", ] [[package]] -name = "impl-trait-for-tuples" -version = "0.2.3" +name = "phf_macros" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" dependencies = [ + "phf_generator", + "phf_shared", "proc-macro2", "quote", "syn 2.0.111", ] [[package]] -name = "indexmap" -version = "1.9.3" +name = "phf_shared" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", + "siphasher", ] [[package]] -name = "indexmap" -version = "2.12.1" +name = "pin-project-lite" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" -dependencies = [ - "equivalent", - "hashbrown 0.16.1", - "serde", - "serde_core", -] +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] -name = "is_terminal_polyfill" -version = "1.70.2" +name = "pin-utils" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] -name = "itertools" -version = "0.12.1" +name = "pkcs8" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "either", + "der", + "spki", ] [[package]] -name = "itertools" -version = "0.13.0" +name = "pkg-config" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] -name = "itertools" -version = "0.14.0" +name = "portable-atomic" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" + +[[package]] +name = "potential_utf" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ - "either", + "zerovec", ] [[package]] -name = "itoa" -version = "1.0.15" +name = "powerfmt" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] -name = "js-sys" -version = "0.3.82" +name = "ppv-lite86" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "once_cell", - "wasm-bindgen", + "zerocopy", ] [[package]] -name = "k256" -version = "0.13.4" -source = "git+https://github.com/sp1-patches/elliptic-curves?tag=patch-k256-13.4-sp1-5.0.0#f7d8998e05d8cbcbd8e543eba1030a7385011fa8" +name = "primeorder" +version = "0.13.1" +source = "git+https://github.com/sp1-patches/elliptic-curves?tag=patch-p256-13.2-sp1-5.0.0#10cca2ef98bebbad35e2475849433fc3e75e27d9" dependencies = [ - "cfg-if", - "ecdsa", "elliptic-curve", - "hex", - "once_cell", - "sha2", - "signature", - "sp1-lib", ] [[package]] -name = "keccak" -version = "0.1.5" +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec 0.6.0", + "uint 0.9.5", +] + +[[package]] +name = "primitive-types" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +checksum = "d15600a7d856470b7d278b3fe0e311fe28c2526348549f8ef2ff7db3299c87f5" dependencies = [ - "cpufeatures", + "fixed-hash", + "impl-codec 0.7.1", + "impl-rlp", + "impl-serde", + "uint 0.10.0", ] [[package]] -name = "kzg-rs" -version = "0.2.7" +name = "proc-macro-crate" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9201effeea3fcc93b587904ae2df9ce97e433184b9d6d299e9ebc9830a546636" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "ff", - "hex", - "serde_arrays", - "sha2", - "sp1_bls12_381", - "spin", + "toml_edit", ] [[package]] -name = "lambdaworks-crypto" -version = "0.13.0" +name = "proc-macro-error-attr2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58b1a1c1102a5a7fbbda117b79fb3a01e033459c738a3c1642269603484fd1c1" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" dependencies = [ - "lambdaworks-math", - "rand", - "rand_chacha", - "serde", - "sha2", - "sha3", + "proc-macro2", + "quote", ] [[package]] -name = "lambdaworks-math" -version = "0.13.0" +name = "proc-macro-error2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "018a95aa873eb49896a858dee0d925c33f3978d073c64b08dd4f2c9b35a017c6" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" dependencies = [ - "getrandom 0.2.16", - "num-bigint 0.4.6", - "num-traits", - "rand", - "rayon", - "serde", - "serde_json", + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.111", ] [[package]] -name = "lazy_static" -version = "1.5.0" +name = "proc-macro2" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ - "spin", + "unicode-ident", ] [[package]] -name = "libc" -version = "0.2.177" +name = "procfs" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "731e0d9356b0c25f16f33b5be79b1c57b562f141ebfcdb0ad8ac2c13a24293b4" +dependencies = [ + "bitflags", + "hex", + "lazy_static", + "procfs-core", + "rustix 0.38.44", +] [[package]] -name = "libm" -version = "0.2.15" +name = "procfs-core" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" +checksum = "2d3554923a69f4ce04c4a754260c338f505ce22642d3830e049a399fc2059a29" +dependencies = [ + "bitflags", + "hex", +] [[package]] -name = "libtest-mimic" -version = "0.8.1" +name = "prometheus" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5297962ef19edda4ce33aaa484386e0a5b3d7f2f4e037cbeee00503ef6b29d33" +checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" dependencies = [ - "anstream", - "anstyle", - "clap", - "escape8259", + "cfg-if 1.0.4", + "fnv", + "lazy_static", + "libc", + "memchr", + "parking_lot", + "procfs", + "protobuf 2.28.0", + "thiserror 1.0.69", ] [[package]] -name = "linked_list_allocator" -version = "0.10.5" +name = "prometheus" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afa463f5405ee81cdb9cc2baf37e08ec7e4c8209442b5d72c04cfb2cd6e6286" +checksum = "3ca5326d8d0b950a9acd87e6a3f94745394f62e4dae1b1ee22b2bc0c394af43a" +dependencies = [ + "cfg-if 1.0.4", + "fnv", + "lazy_static", + "memchr", + "parking_lot", + "protobuf 3.7.2", + "thiserror 2.0.17", +] [[package]] -name = "litemap" -version = "0.8.1" +name = "proptest" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" +checksum = "bee689443a2bd0a16ab0348b52ee43e3b2d1b1f931c8aa5c9f8de4c86fbe8c40" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags", + "num-traits", + "rand 0.9.2", + "rand_chacha 0.9.0", + "rand_xorshift", + "regex-syntax", + "rusty-fork", + "tempfile", + "unarray", +] [[package]] -name = "log" -version = "0.4.28" +name = "protobuf" +version = "2.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" [[package]] -name = "lru" -version = "0.16.2" +name = "protobuf" +version = "3.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96051b46fc183dc9cd4a223960ef37b9af631b55191852a8274bfef064cda20f" +checksum = "d65a1d4ddae7d8b5de68153b48f6aa3bba8cb002b243dbdbc55a5afbc98f99f4" dependencies = [ - "hashbrown 0.16.1", + "once_cell", + "protobuf-support", + "thiserror 1.0.69", ] [[package]] -name = "malachite" -version = "0.6.1" +name = "protobuf-support" +version = "3.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec410515e231332b14cd986a475d1c3323bcfa4c7efc038bfa1d5b410b1c57e4" +checksum = "3e36c2f31e0a47f9280fb347ef5e461ffcd2c52dd520d8e216b52f93b0b0d7d6" dependencies = [ - "malachite-base", - "malachite-nz", - "malachite-q", + "thiserror 1.0.69", ] [[package]] -name = "malachite-base" -version = "0.6.1" +name = "ptr_meta" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c738d3789301e957a8f7519318fcbb1b92bb95863b28f6938ae5a05be6259f34" +checksum = "0b9a0cf95a1196af61d4f1cbdab967179516d9a4a4312af1f31948f8f6224a79" dependencies = [ - "hashbrown 0.15.5", - "itertools 0.14.0", - "libm", - "ryu", + "ptr_meta_derive", ] [[package]] -name = "malachite-nz" -version = "0.6.1" +name = "ptr_meta_derive" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1707c9a1fa36ce21749b35972bfad17bbf34cf5a7c96897c0491da321e387d3b" +checksum = "7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1" dependencies = [ - "itertools 0.14.0", - "libm", - "malachite-base", - "wide", + "proc-macro2", + "quote", + "syn 2.0.111", ] [[package]] -name = "malachite-q" -version = "0.6.1" +name = "qfilter" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d764801aa4e96bbb69b389dcd03b50075345131cd63ca2e380bca71cc37a3675" +checksum = "746341cd2357c9a4df2d951522b4a8dd1ef553e543119899ad7bf87e938c8fbe" dependencies = [ - "itertools 0.14.0", - "malachite-base", - "malachite-nz", + "xxhash-rust", ] [[package]] -name = "matchers" -version = "0.2.0" +name = "quick-error" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quote" +version = "1.0.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" dependencies = [ - "regex-automata", + "proc-macro2", ] [[package]] -name = "memchr" -version = "2.7.6" +name = "r-efi" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] -name = "munge" -version = "0.4.7" +name = "radium" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e17401f259eba956ca16491461b6e8f72913a0a114e39736ce404410f915a0c" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rancor" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a063ea72381527c2a0561da9c80000ef822bdd7c3241b1cc1b12100e3df081ee" dependencies = [ - "munge_macro", + "ptr_meta", ] [[package]] -name = "munge_macro" -version = "0.4.7" +name = "rand" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4568f25ccbd45ab5d5603dc34318c1ec56b117531781260002151b8530a9f931" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", + "serde", ] [[package]] -name = "nu-ansi-term" -version = "0.50.3" +name = "rand" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ - "windows-sys", + "rand_chacha 0.9.0", + "rand_core 0.9.5", + "serde", ] [[package]] -name = "num-bigint" -version = "0.3.3" +name = "rand_chacha" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ - "autocfg", - "num-integer", - "num-traits", + "ppv-lite86", + "rand_core 0.6.4", ] [[package]] -name = "num-bigint" -version = "0.4.6" +name = "rand_chacha" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ - "num-integer", - "num-traits", + "ppv-lite86", + "rand_core 0.9.5", ] [[package]] -name = "num-conv" -version = "0.1.0" +name = "rand_core" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] [[package]] -name = "num-integer" -version = "0.1.46" +name = "rand_core" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ - "num-traits", + "getrandom 0.3.4", + "serde", ] [[package]] -name = "num-traits" -version = "0.2.19" +name = "rand_xorshift" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" dependencies = [ - "autocfg", + "rand_core 0.9.5", ] [[package]] -name = "once_cell" -version = "1.21.3" +name = "rapidhash" +version = "4.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "5d8b5b858a440a0bc02625b62dd95131b9201aa9f69f411195dd4a7cfb1de3d7" +dependencies = [ + "rustversion", +] [[package]] -name = "once_cell_polyfill" -version = "1.70.2" +name = "rayon" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +dependencies = [ + "either", + "rayon-core", +] [[package]] -name = "p256" -version = "0.13.2" -source = "git+https://github.com/sp1-patches/elliptic-curves?tag=patch-p256-13.2-sp1-5.0.0#10cca2ef98bebbad35e2475849433fc3e75e27d9" +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ - "ecdsa", - "elliptic-curve", - "hex", - "primeorder", - "sha2", - "sp1-lib", + "crossbeam-deque 0.8.6", + "crossbeam-utils 0.8.21", ] [[package]] -name = "p3-baby-bear" -version = "0.2.3-succinct" +name = "redox_syscall" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7521838ecab2ddf4f7bc4ceebad06ec02414729598485c1ada516c39900820e8" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "num-bigint 0.4.6", - "p3-field", - "p3-mds", - "p3-poseidon2", - "p3-symmetric", - "rand", - "serde", + "bitflags", ] [[package]] -name = "p3-dft" -version = "0.2.3-succinct" +name = "ref-cast" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46414daedd796f1eefcdc1811c0484e4bced5729486b6eaba9521c572c76761a" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" dependencies = [ - "p3-field", - "p3-matrix", - "p3-maybe-rayon", - "p3-util", - "tracing", + "ref-cast-impl", ] [[package]] -name = "p3-field" -version = "0.2.3-succinct" +name = "ref-cast-impl" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48948a0516b349e9d1cdb95e7236a6ee010c44e68c5cc78b4b92bf1c4022a0d9" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ - "itertools 0.12.1", - "num-bigint 0.4.6", - "num-traits", - "p3-util", - "rand", - "serde", + "proc-macro2", + "quote", + "syn 2.0.111", ] [[package]] -name = "p3-matrix" -version = "0.2.3-succinct" +name = "regex-automata" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4de3f373589477cb735ea58e125898ed20935e03664b4614c7fac258b3c42f" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ - "itertools 0.12.1", - "p3-field", - "p3-maybe-rayon", - "p3-util", - "rand", - "serde", - "tracing", + "aho-corasick", + "memchr", + "regex-syntax", ] [[package]] -name = "p3-maybe-rayon" -version = "0.2.3-succinct" +name = "regex-syntax" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3968ad1160310296eb04f91a5f4edfa38fe1d6b2b8cd6b5c64e6f9b7370979e" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] -name = "p3-mds" -version = "0.2.3-succinct" +name = "rend" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2356b1ed0add6d5dfbf7a338ce534a6fde827374394a52cec16a0840af6e97c9" +checksum = "cadadef317c2f20755a64d7fdc48f9e7178ee6b0e1f7fce33fa60f1d68a276e6" dependencies = [ - "itertools 0.12.1", - "p3-dft", - "p3-field", - "p3-matrix", - "p3-symmetric", - "p3-util", - "rand", + "bytecheck", ] [[package]] -name = "p3-poseidon2" -version = "0.2.3-succinct" +name = "reqwest" +version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da1eec7e1b6900581bedd95e76e1ef4975608dd55be9872c9d257a8a9651c3a" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ - "gcd", - "p3-field", - "p3-mds", - "p3-symmetric", - "rand", + "base64 0.22.1", + "bytes", + "encoding_rs", + "futures-core", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-tls", + "hyper-util", + "js-sys", + "log", + "mime", + "native-tls", + "percent-encoding", + "pin-project-lite", + "rustls-pki-types", "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-native-tls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", ] [[package]] -name = "p3-symmetric" -version = "0.2.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb439bea1d822623b41ff4b51e3309e80d13cadf8b86d16ffd5e6efb9fdc360" +name = "reth-chainspec" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +dependencies = [ + "alloy-chains", + "alloy-consensus", + "alloy-eips", + "alloy-evm", + "alloy-genesis", + "alloy-primitives", + "alloy-trie 0.9.3", + "auto_impl", + "derive_more 2.1.1", + "reth-ethereum-forks", + "reth-network-peers", + "reth-primitives-traits", + "serde_json", +] + +[[package]] +name = "reth-codecs" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" dependencies = [ - "itertools 0.12.1", - "p3-field", + "alloy-consensus", + "alloy-eips", + "alloy-genesis", + "alloy-primitives", + "alloy-trie 0.9.3", + "bytes", + "modular-bitfield", + "op-alloy-consensus", + "reth-codecs-derive", + "reth-zstd-compressors", "serde", ] [[package]] -name = "p3-util" -version = "0.2.3-succinct" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c2c2010678b9332b563eaa38364915b585c1a94b5ca61e2c7541c087ddda5c" +name = "reth-codecs-derive" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" dependencies = [ - "serde", + "proc-macro2", + "quote", + "syn 2.0.111", ] [[package]] -name = "pairing" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" +name = "reth-consensus" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" dependencies = [ - "group", + "alloy-consensus", + "alloy-primitives", + "auto_impl", + "reth-execution-types", + "reth-primitives-traits", + "thiserror 2.0.17", ] [[package]] -name = "parity-scale-codec" -version = "3.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" +name = "reth-consensus-common" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" dependencies = [ - "arrayvec", - "bitvec", - "byte-slice-cast", - "const_format", - "impl-trait-for-tuples", - "parity-scale-codec-derive", - "rustversion", - "serde", + "alloy-consensus", + "alloy-eips", + "reth-chainspec", + "reth-consensus", + "reth-primitives-traits", ] [[package]] -name = "parity-scale-codec-derive" -version = "3.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" +name = "reth-db-models" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.111", + "alloy-eips", + "alloy-primitives", + "reth-primitives-traits", ] [[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +name = "reth-errors" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +dependencies = [ + "reth-consensus", + "reth-execution-errors", + "reth-storage-errors", + "thiserror 2.0.17", +] [[package]] -name = "pem-rfc7468" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +name = "reth-ethereum-consensus" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "reth-chainspec", + "reth-consensus", + "reth-consensus-common", + "reth-execution-types", + "reth-primitives-traits", + "tracing", +] + +[[package]] +name = "reth-ethereum-forks" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" dependencies = [ - "base64ct", + "alloy-eip2124", + "alloy-hardforks", + "alloy-primitives", + "auto_impl", + "once_cell", ] [[package]] -name = "percent-encoding" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" +name = "reth-ethereum-primitives" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types-eth", + "alloy-serde", + "reth-codecs", + "reth-primitives-traits", + "serde", + "serde_with", +] [[package]] -name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +name = "reth-evm" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-evm", + "alloy-primitives", + "auto_impl", + "derive_more 2.1.1", + "futures-util", + "reth-execution-errors", + "reth-execution-types", + "reth-primitives-traits", + "reth-storage-api", + "reth-storage-errors", + "reth-trie-common", + "revm", +] [[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +name = "reth-evm-ethereum" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-evm", + "alloy-primitives", + "alloy-rpc-types-engine", + "reth-chainspec", + "reth-ethereum-forks", + "reth-ethereum-primitives", + "reth-evm", + "reth-execution-types", + "reth-primitives-traits", + "reth-storage-errors", + "revm", +] [[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +name = "reth-execution-errors" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" dependencies = [ - "der", - "spki", + "alloy-evm", + "alloy-primitives", + "alloy-rlp", + "nybbles 0.4.7", + "reth-storage-errors", + "thiserror 2.0.17", ] [[package]] -name = "potential_utf" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +name = "reth-execution-types" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" dependencies = [ - "zerovec", + "alloy-consensus", + "alloy-eips", + "alloy-evm", + "alloy-primitives", + "derive_more 2.1.1", + "reth-ethereum-primitives", + "reth-primitives-traits", + "reth-trie-common", + "revm", ] [[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +name = "reth-network-peers" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "serde_with", + "thiserror 2.0.17", + "url", +] [[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +name = "reth-payload-validator" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" dependencies = [ - "zerocopy", + "alloy-consensus", + "alloy-rpc-types-engine", + "reth-primitives-traits", ] [[package]] -name = "primeorder" -version = "0.13.1" -source = "git+https://github.com/sp1-patches/elliptic-curves?tag=patch-p256-13.2-sp1-5.0.0#10cca2ef98bebbad35e2475849433fc3e75e27d9" +name = "reth-primitives-traits" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-genesis", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types-eth", + "alloy-trie 0.9.3", + "auto_impl", + "bytes", + "derive_more 2.1.1", + "once_cell", + "op-alloy-consensus", + "reth-codecs", + "revm-bytecode", + "revm-primitives", + "revm-state", + "secp256k1", + "serde", + "serde_with", + "thiserror 2.0.17", +] + +[[package]] +name = "reth-prune-types" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" dependencies = [ - "elliptic-curve", + "alloy-primitives", + "derive_more 2.1.1", + "strum", + "thiserror 2.0.17", ] [[package]] -name = "primitive-types" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d15600a7d856470b7d278b3fe0e311fe28c2526348549f8ef2ff7db3299c87f5" +name = "reth-revm" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" dependencies = [ - "fixed-hash", - "impl-codec", - "impl-rlp", - "impl-serde", - "uint", + "alloy-primitives", + "reth-primitives-traits", + "reth-storage-api", + "reth-storage-errors", + "revm", ] [[package]] -name = "proc-macro-crate" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +name = "reth-stages-types" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" dependencies = [ - "toml_edit", + "alloy-primitives", + "reth-trie-common", ] [[package]] -name = "proc-macro2" -version = "1.0.103" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +name = "reth-stateless" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +dependencies = [ + "alloy-consensus", + "alloy-genesis", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types-debug", + "alloy-trie 0.9.3", + "itertools 0.14.0", + "reth-chainspec", + "reth-consensus", + "reth-errors", + "reth-ethereum-consensus", + "reth-ethereum-primitives", + "reth-evm", + "reth-primitives-traits", + "reth-revm", + "reth-trie-common", + "reth-trie-sparse", + "serde", + "serde_with", + "thiserror 2.0.17", +] + +[[package]] +name = "reth-static-file-types" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" dependencies = [ - "unicode-ident", + "alloy-primitives", + "derive_more 2.1.1", + "serde", + "strum", ] [[package]] -name = "ptr_meta" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9a0cf95a1196af61d4f1cbdab967179516d9a4a4312af1f31948f8f6224a79" +name = "reth-storage-api" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-rpc-types-engine", + "auto_impl", + "reth-chainspec", + "reth-db-models", + "reth-ethereum-primitives", + "reth-execution-types", + "reth-primitives-traits", + "reth-prune-types", + "reth-stages-types", + "reth-storage-errors", + "reth-trie-common", + "revm-database", +] + +[[package]] +name = "reth-storage-errors" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" dependencies = [ - "ptr_meta_derive", + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "derive_more 2.1.1", + "reth-primitives-traits", + "reth-prune-types", + "reth-static-file-types", + "revm-database-interface", + "thiserror 2.0.17", ] [[package]] -name = "ptr_meta_derive" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1" +name = "reth-trie-common" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", + "alloy-consensus", + "alloy-primitives", + "alloy-rlp", + "alloy-trie 0.9.3", + "derive_more 2.1.1", + "itertools 0.14.0", + "nybbles 0.4.7", + "reth-primitives-traits", + "revm-database", ] [[package]] -name = "qfilter" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "746341cd2357c9a4df2d951522b4a8dd1ef553e543119899ad7bf87e938c8fbe" -dependencies = [ - "xxhash-rust", +name = "reth-trie-sparse" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "alloy-trie 0.9.3", + "auto_impl", + "reth-execution-errors", + "reth-primitives-traits", + "reth-trie-common", + "smallvec", + "tracing", ] [[package]] -name = "quote" -version = "1.0.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +name = "reth-zstd-compressors" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" dependencies = [ - "proc-macro2", + "zstd", ] [[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - -[[package]] -name = "radium" -version = "0.7.0" +name = "revm" +version = "33.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" +checksum = "0c85ed0028f043f87b3c88d4a4cb6f0a76440085523b6a8afe5ff003cf418054" +dependencies = [ + "revm-bytecode", + "revm-context", + "revm-context-interface", + "revm-database", + "revm-database-interface", + "revm-handler", + "revm-inspector", + "revm-interpreter", + "revm-precompile", + "revm-primitives", + "revm-state", +] [[package]] -name = "rancor" -version = "0.1.1" +name = "revm-bytecode" +version = "7.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a063ea72381527c2a0561da9c80000ef822bdd7c3241b1cc1b12100e3df081ee" +checksum = "e2c6b5e6e8dd1e28a4a60e5f46615d4ef0809111c9e63208e55b5c7058200fb0" dependencies = [ - "ptr_meta", + "bitvec", + "phf", + "revm-primitives", + "serde", ] [[package]] -name = "rand" -version = "0.8.5" +name = "revm-context" +version = "12.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "f038f0c9c723393ac897a5df9140b21cfa98f5753a2cb7d0f28fa430c4118abf" dependencies = [ - "libc", - "rand_chacha", - "rand_core", + "bitvec", + "cfg-if 1.0.4", + "derive-where", + "revm-bytecode", + "revm-context-interface", + "revm-database-interface", + "revm-primitives", + "revm-state", ] [[package]] -name = "rand_chacha" -version = "0.3.1" +name = "revm-context-interface" +version = "13.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "431c9a14e4ef1be41ae503708fd02d974f80ef1f2b6b23b5e402e8d854d1b225" dependencies = [ - "ppv-lite86", - "rand_core", + "alloy-eip2930", + "alloy-eip7702", + "auto_impl", + "either", + "revm-database-interface", + "revm-primitives", + "revm-state", ] [[package]] -name = "rand_core" -version = "0.6.4" +name = "revm-database" +version = "9.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "980d8d6bba78c5dd35b83abbb6585b0b902eb25ea4448ed7bfba6283b0337191" dependencies = [ - "getrandom 0.2.16", + "revm-bytecode", + "revm-database-interface", + "revm-primitives", + "revm-state", ] [[package]] -name = "rayon" -version = "1.11.0" +name = "revm-database-interface" +version = "8.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +checksum = "8cce03e3780287b07abe58faf4a7f5d8be7e81321f93ccf3343c8f7755602bae" dependencies = [ + "auto_impl", "either", - "rayon-core", + "revm-primitives", + "revm-state", ] [[package]] -name = "rayon-core" -version = "1.13.0" +name = "revm-handler" +version = "14.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +checksum = "d44f8f6dbeec3fecf9fe55f78ef0a758bdd92ea46cd4f1ca6e2a946b32c367f3" dependencies = [ - "crossbeam-deque", - "crossbeam-utils", + "auto_impl", + "derive-where", + "revm-bytecode", + "revm-context", + "revm-context-interface", + "revm-database-interface", + "revm-interpreter", + "revm-precompile", + "revm-primitives", + "revm-state", ] [[package]] -name = "ref-cast" -version = "1.0.25" +name = "revm-inspector" +version = "14.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +checksum = "5617e49216ce1ca6c8826bcead0386bc84f49359ef67cde6d189961735659f93" dependencies = [ - "ref-cast-impl", + "auto_impl", + "either", + "revm-context", + "revm-database-interface", + "revm-handler", + "revm-interpreter", + "revm-primitives", + "revm-state", ] [[package]] -name = "ref-cast-impl" -version = "1.0.25" +name = "revm-interpreter" +version = "31.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +checksum = "26ec36405f7477b9dccdc6caa3be19adf5662a7a0dffa6270cdb13a090c077e5" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", + "revm-bytecode", + "revm-context-interface", + "revm-primitives", + "revm-state", ] [[package]] -name = "regex-automata" -version = "0.4.13" +name = "revm-precompile" +version = "31.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +checksum = "9a62958af953cc4043e93b5be9b8497df84cc3bd612b865c49a7a7dfa26a84e2" dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", + "ark-bls12-381", + "ark-bn254", + "ark-ec", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "arrayref", + "aurora-engine-modexp", + "cfg-if 1.0.4", + "k256", + "p256", + "revm-primitives", + "ripemd", + "sha2", ] [[package]] -name = "regex-syntax" -version = "0.8.8" +name = "revm-primitives" +version = "21.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" +checksum = "29e161db429d465c09ba9cbff0df49e31049fe6b549e28eb0b7bd642fcbd4412" +dependencies = [ + "alloy-primitives", + "num_enum", + "once_cell", + "serde", +] [[package]] -name = "rend" -version = "0.5.3" +name = "revm-state" +version = "8.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadadef317c2f20755a64d7fdc48f9e7178ee6b0e1f7fce33fa60f1d68a276e6" +checksum = "7d8be953b7e374dbdea0773cf360debed8df394ea8d82a8b240a6b5da37592fc" dependencies = [ - "bytecheck", + "bitflags", + "revm-bytecode", + "revm-primitives", + "serde", ] [[package]] @@ -2386,13 +5111,27 @@ dependencies = [ "subtle", ] +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if 1.0.4", + "getrandom 0.2.16", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + [[package]] name = "ripemd" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -2425,6 +5164,16 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes", + "rustc-hex", +] + [[package]] name = "rlp" version = "0.6.1" @@ -2441,12 +5190,46 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "222fb240c3286247ecdee6fa5341e7cdad0ffdf8e7e401d9937f2d58482a20bf" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "const-default", "libc", "svgbobdoc", ] +[[package]] +name = "ruint" +version = "1.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c141e807189ad38a07276942c6623032d3753c8859c146104ac2e4d68865945a" +dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "ark-ff 0.5.0", + "bytes", + "fastrlp 0.3.1", + "fastrlp 0.4.0", + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "parity-scale-codec", + "primitive-types 0.12.2", + "proptest", + "rand 0.8.5", + "rand 0.9.2", + "rlp 0.5.2", + "ruint-macro", + "serde_core", + "valuable", + "zeroize", +] + +[[package]] +name = "ruint-macro" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" + [[package]] name = "rustc-hash" version = "2.1.1" @@ -2459,12 +5242,101 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.27", +] + +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustix" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys 0.11.0", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.23.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21e6f2ab2928ca4291b86736a8bd920a277a399bba1589409d72154ff87c1282" +dependencies = [ + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +[[package]] +name = "rusty-fork" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + [[package]] name = "ryu" version = "1.0.20" @@ -2472,59 +5344,143 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] -name = "safe_arch" -version = "0.7.4" +name = "safe_arch" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "serdect", + "subtle", + "zeroize", +] + +[[package]] +name = "secp256k1" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252" +dependencies = [ + "bitcoin_hashes", + "rand 0.8.5", + "secp256k1-sys", + "serde", +] + +[[package]] +name = "secp256k1-sys" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" dependencies = [ - "bytemuck", + "cc", ] [[package]] -name = "same-file" -version = "1.0.6" +name = "security-framework" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "winapi-util", + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", ] [[package]] -name = "schemars" -version = "0.9.0" +name = "security-framework-sys" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", + "core-foundation-sys", + "libc", ] [[package]] -name = "schemars" -version = "1.1.0" +name = "semver" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", + "semver-parser", ] [[package]] -name = "sec1" -version = "0.7.3" +name = "semver" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" + +[[package]] +name = "semver-parser" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" dependencies = [ - "base16ct", - "der", - "generic-array", - "pkcs8", - "subtle", - "zeroize", + "pest", ] [[package]] @@ -2579,6 +5535,29 @@ dependencies = [ "serde_core", ] +[[package]] +name = "serde_path_to_error" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" +dependencies = [ + "itoa", + "serde", + "serde_core", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + [[package]] name = "serde_with" version = "3.16.0" @@ -2604,20 +5583,41 @@ version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08a72d8216842fdd57820dc78d840bef99248e35fb2554ff923319e60f2d686b" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", "syn 2.0.111", ] +[[package]] +name = "serdect" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" +dependencies = [ + "base16ct", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if 1.0.4", + "cpufeatures", + "digest 0.10.7", +] + [[package]] name = "sha2" version = "0.10.9" source = "git+https://github.com/sp1-patches/RustCrypto-hashes?tag=patch-sha2-0.10.9-sp1-4.0.0#0b1945eea7d9a776fd6e50ffd5fc51f0c5e6f155" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "cpufeatures", - "digest", + "digest 0.10.7", ] [[package]] @@ -2625,10 +5625,20 @@ name = "sha3" version = "0.10.8" source = "git+https://github.com/sp1-patches/RustCrypto-hashes?tag=patch-sha3-0.10.8-sp1-4.0.0#8f6d303c0861ba7e5adcc36207c0f41fe5edaabc" dependencies = [ - "digest", + "digest 0.10.7", "keccak", ] +[[package]] +name = "sha3-asm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" +dependencies = [ + "cc", + "cfg-if 1.0.4", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -2644,14 +5654,24 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + [[package]] name = "signature" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest", - "rand_core", + "digest 0.10.7", + "rand_core 0.6.4", ] [[package]] @@ -2660,6 +5680,24 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" +[[package]] +name = "simple_asn1" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "thiserror 2.0.17", + "time", +] + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + [[package]] name = "slab" version = "0.4.11" @@ -2671,6 +5709,9 @@ name = "smallvec" version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +dependencies = [ + "serde", +] [[package]] name = "snap" @@ -2678,13 +5719,23 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" +[[package]] +name = "socket2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + [[package]] name = "sp1-lib" version = "5.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b73b8ff343f2405d5935440e56b7aba5cee6d87303f0051974cbd6f5de502f57" dependencies = [ - "bincode", + "bincode 1.3.3", "elliptic-curve", "serde", "sp1-primitives", @@ -2696,9 +5747,9 @@ version = "5.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e69a03098f827102c54c31a5e57280eb45b2c085de433b3f702e4f9e3ec1641" dependencies = [ - "bincode", + "bincode 1.3.3", "blake3", - "cfg-if", + "cfg-if 1.0.4", "hex", "lazy_static", "num-bigint 0.4.6", @@ -2716,14 +5767,14 @@ version = "5.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6247de4d980d1f3311fa877cc5d2d3b7e111258878c8196a8bb9728aec98c8c" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "critical-section", "embedded-alloc", "getrandom 0.2.16", "getrandom 0.3.4", "lazy_static", "libm", - "rand", + "rand 0.8.5", "sha2", "sp1-lib", "sp1-primitives", @@ -2735,15 +5786,57 @@ version = "0.8.0-sp1-5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac255e1704ebcdeec5e02f6a0ebc4d2e9e6b802161938330b6810c13a610c583" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "ff", "group", "pairing", - "rand_core", + "rand_core 0.6.4", "sp1-lib", "subtle", ] +[[package]] +name = "sparsestate" +version = "0.1.0" +source = "git+https://github.com/eth-act/zkvm-ethereum-mpt.git?tag=v0.4.0#d4d8f968c183aedc23100c3a5634dee14c320757" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "alloy-trie 0.9.3", + "mpt", + "reth-errors", + "reth-revm", + "reth-stateless", + "reth-trie-common", +] + +[[package]] +name = "spawned-concurrency" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d3ec6b3c003075f7d1c4c6475308243e853c9a78149b84b1f8b64d5bed49d49" +dependencies = [ + "futures", + "pin-project-lite", + "spawned-rt", + "thiserror 2.0.17", + "tracing", +] + +[[package]] +name = "spawned-rt" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cca60c56b1c60b94dd314edce5ea1a98b6037cca3b44d73828e647bad4dae46c" +dependencies = [ + "crossbeam 0.7.3", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", + "tracing-subscriber", +] + [[package]] name = "spin" version = "0.9.8" @@ -2760,6 +5853,22 @@ dependencies = [ "der", ] +[[package]] +name = "ssz_types" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b55bedc9a18ed2860a46d6beb4f4082416ee1d60be0cc364cebdcdddc7afd4" +dependencies = [ + "ethereum_serde_utils", + "ethereum_ssz", + "itertools 0.13.0", + "serde", + "serde_derive", + "smallvec", + "tree_hash", + "typenum", +] + [[package]] name = "stable_deref_trait" version = "1.2.1" @@ -2770,20 +5879,35 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" name = "stateless-validator-common" version = "0.1.0" dependencies = [ - "rkyv", + "alloy-eips", + "alloy-primitives", + "anyhow", + "ethereum_ssz", + "ethereum_ssz_derive", + "serde", + "serde_with", + "sha2", + "ssz_types", + "tree_hash", + "tree_hash_derive", + "typenum", ] [[package]] name = "stateless-validator-ethrex" version = "0.1.0" dependencies = [ + "anyhow", "ere-io", "ethrex-common", + "ethrex-rlp", + "ethrex-rpc", "ethrex-vm", "guest", "guest_program", - "rkyv", + "serde", "stateless-validator-common", + "stateless-validator-reth", ] [[package]] @@ -2794,6 +5918,37 @@ dependencies = [ "stateless-validator-ethrex", ] +[[package]] +name = "stateless-validator-reth" +version = "0.1.0" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-genesis", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types-engine", + "anyhow", + "ere-io", + "ethereum_ssz", + "guest", + "once_cell", + "reth-chainspec", + "reth-ethereum-primitives", + "reth-evm-ethereum", + "reth-payload-validator", + "reth-primitives-traits", + "reth-stateless", + "serde", + "serde_with", + "sha2", + "sparsestate", + "ssz_types", + "stateless-validator-common", + "tree_hash", + "tree_hash_derive", +] + [[package]] name = "static_assertions" version = "1.1.0" @@ -2834,11 +5989,11 @@ source = "git+https://github.com/sp1-patches/bn?tag=patch-0.6.0-sp1-5.0.0#e0d67f dependencies = [ "bytemuck", "byteorder", - "cfg-if", + "cfg-if 1.0.4", "crunchy", "lazy_static", "num-bigint 0.4.6", - "rand", + "rand 0.8.5", "rustc-hex", "sp1-lib", ] @@ -2884,6 +6039,27 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn-solidity" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f92d01b5de07eaf324f7fca61cc6bd3d82bbc1de5b6c963e6fe79e86f36580d" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.111", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + [[package]] name = "synstructure" version = "0.13.2" @@ -2895,19 +6071,73 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tap" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +[[package]] +name = "tempfile" +version = "3.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" +dependencies = [ + "fastrand", + "getrandom 0.3.4", + "once_cell", + "rustix 1.1.3", + "windows-sys 0.61.2", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + [[package]] name = "thiserror" version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl", + "thiserror-impl 2.0.17", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", ] [[package]] @@ -2927,7 +6157,16 @@ version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", ] [[package]] @@ -2966,42 +6205,105 @@ name = "tiny-keccak" version = "2.0.2" source = "git+https://github.com/sp1-patches/tiny-keccak?tag=patch-2.0.2-sp1-4.0.0#d2ffd330259c8f290b07d99cc1ef1f74774382c2" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "crunchy", ] [[package]] -name = "tinystr" -version = "0.8.2" +name = "tinystr" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +dependencies = [ + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ - "displaydoc", - "zerovec", + "proc-macro2", + "quote", + "syn 2.0.111", ] [[package]] -name = "tinyvec" -version = "1.10.0" +name = "tokio-native-tls" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ - "tinyvec_macros", + "native-tls", + "tokio", ] [[package]] -name = "tinyvec_macros" -version = "0.1.1" +name = "tokio-rustls" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls", + "tokio", +] [[package]] -name = "tokio" -version = "1.48.0" +name = "tokio-stream" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" dependencies = [ + "futures-core", "pin-project-lite", + "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25a406cddcc431a75d3d9afc6a7c0f7428d4891dd973e4d54c56b46127bf857" +dependencies = [ + "futures-util", + "log", + "tokio", + "tungstenite", ] [[package]] @@ -3048,6 +6350,52 @@ dependencies = [ "winnow", ] +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" +dependencies = [ + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + [[package]] name = "tracing" version = "0.1.41" @@ -3110,12 +6458,78 @@ dependencies = [ "tracing-log", ] +[[package]] +name = "tree_hash" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee44f4cef85f88b4dea21c0b1f58320bdf35715cf56d840969487cff00613321" +dependencies = [ + "alloy-primitives", + "ethereum_hashing", + "ethereum_ssz", + "smallvec", + "typenum", +] + +[[package]] +name = "tree_hash_derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bee2ea1551f90040ab0e34b6fb7f2fa3bad8acc925837ac654f2c78a13e3089" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.111", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "tungstenite" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442" +dependencies = [ + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand 0.9.2", + "sha1", + "thiserror 2.0.17", + "utf-8", +] + [[package]] name = "typenum" version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + [[package]] name = "uint" version = "0.10.0" @@ -3128,6 +6542,12 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + [[package]] name = "unicode-ident" version = "1.0.22" @@ -3152,6 +6572,18 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "unty" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" + [[package]] name = "url" version = "2.5.7" @@ -3164,6 +6596,12 @@ dependencies = [ "serde", ] +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + [[package]] name = "utf8_iter" version = "1.0.4" @@ -3182,6 +6620,7 @@ version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ + "getrandom 0.3.4", "js-sys", "wasm-bindgen", ] @@ -3192,12 +6631,27 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "wait-timeout" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +dependencies = [ + "libc", +] + [[package]] name = "walkdir" version = "2.5.0" @@ -3208,6 +6662,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" @@ -3229,13 +6692,26 @@ version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" dependencies = [ - "cfg-if", + "cfg-if 1.0.4", "once_cell", "rustversion", "wasm-bindgen-macro", "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" +dependencies = [ + "cfg-if 1.0.4", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.105" @@ -3268,6 +6744,16 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "web-sys" +version = "0.3.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "wide" version = "0.7.33" @@ -3284,7 +6770,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -3328,6 +6814,17 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" +dependencies = [ + "windows-link", + "windows-result", + "windows-strings", +] + [[package]] name = "windows-result" version = "0.4.1" @@ -3346,6 +6843,33 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + [[package]] name = "windows-sys" version = "0.61.2" @@ -3355,6 +6879,135 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + [[package]] name = "winnow" version = "0.7.14" @@ -3507,3 +7160,31 @@ dependencies = [ "quote", "syn 2.0.111", ] + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.16+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/crates/integration-tests/tests/stateless-validator-ethrex.rs b/crates/integration-tests/tests/stateless-validator-ethrex.rs index fdd0e0cd..77845181 100644 --- a/crates/integration-tests/tests/stateless-validator-ethrex.rs +++ b/crates/integration-tests/tests/stateless-validator-ethrex.rs @@ -10,7 +10,8 @@ use stateless_validator_ethrex::guest::{ fn test_execution(zkvm_kind: zkVMKind) { let fixtures = get_fixtures(); let inputs = fixtures.into_iter().map(|fixture| { - let input = StatelessValidatorEthrexInput::new(&fixture.stateless_input).unwrap(); + let input = + StatelessValidatorEthrexInput::new(&fixture.stateless_input, fixture.success).unwrap(); let output = StatelessValidatorEthrexGuest::compute::(input.clone()); assert_eq!(output.successful_block_validation, fixture.success); diff --git a/crates/stateless-validator-ethrex/Cargo.toml b/crates/stateless-validator-ethrex/Cargo.toml index 0d2245dc..be8a6ea7 100644 --- a/crates/stateless-validator-ethrex/Cargo.toml +++ b/crates/stateless-validator-ethrex/Cargo.toml @@ -35,6 +35,7 @@ ere-zkvm-interface = { workspace = true, optional = true } # local guest.workspace = true stateless-validator-common.workspace = true +stateless-validator-reth.workspace = true [features] # guest diff --git a/crates/stateless-validator-ethrex/src/host.rs b/crates/stateless-validator-ethrex/src/host.rs index 774befdd..cb91b9d2 100644 --- a/crates/stateless-validator-ethrex/src/host.rs +++ b/crates/stateless-validator-ethrex/src/host.rs @@ -1,19 +1,16 @@ //! Implementations for host environment. -use alloc::vec; - use alloy_eips::eip6110::MAINNET_DEPOSIT_CONTRACT_ADDRESS; -use alloy_rlp::Encodable; use ere_zkvm_interface::Input; use ethrex_common::{ H160, - types::{BlobSchedule, Block, ChainConfig, ForkBlobSchedule, block_execution_witness}, + types::{BlobSchedule, ChainConfig, ForkBlobSchedule, block_execution_witness}, }; -use ethrex_rlp::decode::RLPDecode; use ethrex_rpc::debug::execution_witness::{ RpcExecutionWitness, execution_witness_from_rpc_chain_config, }; use guest::{GuestIo, Io}; +use stateless_validator_reth::guest::StatelessValidatorRethInput; use crate::guest::{StatelessValidatorEthrexGuest, StatelessValidatorEthrexInput}; @@ -25,13 +22,12 @@ pub use { impl StatelessValidatorEthrexInput { /// Construct [`StatelessValidatorEthrexInput`] given [`StatelessInput`]. - pub fn new(stateless_input: &StatelessInput) -> anyhow::Result { - let mut rlp_bytes = vec![]; - stateless_input.block.encode(&mut rlp_bytes); - let (ethrex_block, _) = Block::decode_unfinished(&rlp_bytes)?; + pub fn new(stateless_input: &StatelessInput, valid_block: bool) -> anyhow::Result { + let reth_input = StatelessValidatorRethInput::new(stateless_input, valid_block)?; + let new_payload_request = reth_input.new_payload_request; - Ok(Self(ProgramInput { - blocks: vec![ethrex_block], + Ok(Self { + new_payload_request, execution_witness: from_reth_witness_to_ethrex_witness( stateless_input.block.number, stateless_input, @@ -42,7 +38,7 @@ impl StatelessValidatorEthrexInput { blob_commitment: [0; 48], #[cfg(feature = "l2")] blob_proof: [0; 48], - })) + }) } /// Returns [`Input`] to [`zkVM`] methods. From c1a37be2055179541ee39b1cf4ba5fc12e3536e8 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Wed, 14 Jan 2026 18:09:47 -0300 Subject: [PATCH 26/46] extract ehtrex ExecutionPayload struct since it lives in an RPC crate with network access --- Cargo.lock | 61 +- Cargo.toml | 11 +- .../risc0/Cargo.toml | 6 +- bin/stateless-validator-ethrex/sp1/Cargo.lock | 1674 ++--------------- bin/stateless-validator-ethrex/sp1/Cargo.toml | 6 +- .../zisk/Cargo.toml | 6 +- bin/stateless-validator-reth/sp1/Cargo.lock | 2 - .../tests/new_payload_request.rs | 1 - crates/stateless-validator-common/Cargo.toml | 6 +- crates/stateless-validator-ethrex/Cargo.toml | 4 +- .../src/execution_payload.rs | 93 + crates/stateless-validator-ethrex/src/lib.rs | 1 + .../src/new_payload_request.rs | 3 +- 13 files changed, 260 insertions(+), 1614 deletions(-) create mode 100644 crates/stateless-validator-ethrex/src/execution_payload.rs diff --git a/Cargo.lock b/Cargo.lock index 7a0539ad..f6f17a11 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -489,7 +489,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -500,7 +500,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -1661,9 +1661,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 = "datatest-stable" @@ -1999,7 +1999,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2086,7 +2086,7 @@ dependencies = [ [[package]] name = "ethrex-blockchain" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "bytes", "ethrex-common", @@ -2107,7 +2107,7 @@ dependencies = [ [[package]] name = "ethrex-common" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "bytes", "crc32fast", @@ -2138,7 +2138,7 @@ dependencies = [ [[package]] name = "ethrex-crypto" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "c-kzg", "kzg-rs", @@ -2149,7 +2149,7 @@ dependencies = [ [[package]] name = "ethrex-l2-common" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "bytes", "ethereum-types", @@ -2173,7 +2173,7 @@ dependencies = [ [[package]] name = "ethrex-levm" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "ark-bn254", "ark-ec", @@ -2207,7 +2207,7 @@ dependencies = [ [[package]] name = "ethrex-metrics" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "axum", "ethrex-common", @@ -2223,7 +2223,7 @@ dependencies = [ [[package]] name = "ethrex-p2p" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "aes", "async-trait", @@ -2265,7 +2265,7 @@ dependencies = [ [[package]] name = "ethrex-rlp" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "bytes", "ethereum-types", @@ -2279,7 +2279,7 @@ dependencies = [ [[package]] name = "ethrex-rpc" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "axum", "axum-extra", @@ -2318,7 +2318,7 @@ dependencies = [ [[package]] name = "ethrex-storage" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "anyhow", "async-trait", @@ -2343,7 +2343,7 @@ dependencies = [ [[package]] name = "ethrex-threadpool" version = "0.1.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "crossbeam 0.8.4", ] @@ -2351,7 +2351,7 @@ dependencies = [ [[package]] name = "ethrex-trie" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "anyhow", "bytes", @@ -2375,7 +2375,7 @@ dependencies = [ [[package]] name = "ethrex-vm" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "bincode 1.3.3", "bytes", @@ -2709,7 +2709,7 @@ dependencies = [ [[package]] name = "guest_program" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "bincode 1.3.3", "bytes", @@ -2731,9 +2731,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", @@ -3669,7 +3669,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4385,7 +4385,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" dependencies = [ "anyhow", - "itertools 0.12.1", + "itertools 0.10.5", "proc-macro2", "quote", "syn 2.0.112", @@ -5441,14 +5441,14 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.11.0", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[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", "rustls-pki-types", @@ -6053,6 +6053,7 @@ dependencies = [ "alloy-genesis", "alloy-rlp", "anyhow", + "bytes", "ere-io", "ere-zkvm-interface", "ethrex-common", @@ -6253,7 +6254,7 @@ dependencies = [ "getrandom 0.3.4", "once_cell", "rustix 1.1.3", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -6429,9 +6430,9 @@ dependencies = [ [[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", @@ -6938,7 +6939,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 4d1301f3..e6725a0e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -44,6 +44,7 @@ serde_json = { version = "*", default-features = false } serde_with = { version = "3", default-features = false } sha2 = { version = "0.10.9", default-features = false } tempfile = { version = "3.6.0", default-features = false } +bytes = { version = "1.6.0", default-features = false } # test flate2 = "1.1.5" @@ -71,11 +72,11 @@ reth-stateless = { git = "https://github.com/paradigmxyz/reth", rev = "cfde95197 reth-payload-validator = { git = "https://github.com/paradigmxyz/reth", rev = "cfde951976bfa9100a6d9f806e06fb539ae25241", default-features = false } # ethrex -ethrex-common = { git = "https://github.com/jsign/ethrex.git", rev = "1b8ead02693419e9dc98f1940f18c0029a1efb6f", default-features = false } -ethrex-guest-program = { git = "https://github.com/jsign/ethrex.git", rev = "1b8ead02693419e9dc98f1940f18c0029a1efb6f", default-features = false, package = "guest_program" } -ethrex-rlp = { git = "https://github.com/jsign/ethrex.git", rev = "1b8ead02693419e9dc98f1940f18c0029a1efb6f", default-features = false } -ethrex-rpc = { git = "https://github.com/jsign/ethrex.git", rev = "1b8ead02693419e9dc98f1940f18c0029a1efb6f", default-features = false } -ethrex-vm = { git = "https://github.com/jsign/ethrex.git", rev = "1b8ead02693419e9dc98f1940f18c0029a1efb6f", default-features = false } +ethrex-common = { git = "https://github.com/lambdaclass/ethrex.git", rev = "e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1", default-features = false } +ethrex-guest-program = { git = "https://github.com/lambdaclass/ethrex.git", rev = "e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1", default-features = false, package = "guest_program" } +ethrex-rlp = { git = "https://github.com/lambdaclass/ethrex.git", rev = "e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1", default-features = false } +ethrex-rpc = { git = "https://github.com/lambdaclass/ethrex.git", rev = "e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1", default-features = false } +ethrex-vm = { git = "https://github.com/lambdaclass/ethrex.git", rev = "e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1", default-features = false } # lighthouse tree_hash = "0.10.0" diff --git a/bin/stateless-validator-ethrex/risc0/Cargo.toml b/bin/stateless-validator-ethrex/risc0/Cargo.toml index 41bac053..35e8fa56 100644 --- a/bin/stateless-validator-ethrex/risc0/Cargo.toml +++ b/bin/stateless-validator-ethrex/risc0/Cargo.toml @@ -18,7 +18,10 @@ ere-platform-risc0 = { git = "https://github.com/eth-act/ere", rev = "ec75f8a266 ] } # local -stateless-validator-ethrex = { path = "../../../crates/stateless-validator-ethrex", features = ["std", "risc0"] } +stateless-validator-ethrex = { path = "../../../crates/stateless-validator-ethrex", features = [ + "std", + "risc0", +] } [patch.crates-io] sha2 = { git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.9-risczero.0" } @@ -27,6 +30,7 @@ p256 = { git = "https://github.com/risc0/RustCrypto-elliptic-curves", tag = "p25 crypto-bigint = { git = "https://github.com/risc0/RustCrypto-crypto-bigint", tag = "v0.5.5-risczero.0" } c-kzg = { git = "https://github.com/risc0/c-kzg-4844", tag = "c-kzg/v2.1.1-risczero.0" } substrate-bn = { git = "https://github.com/risc0/paritytech-bn", tag = "v0.6.0-risczero.0" } +ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "181896944365e4b76dd6407c2d679fb844165dd6" } # These precompiles require the "unstable" risc0 feature which is not suited # for production environments. diff --git a/bin/stateless-validator-ethrex/sp1/Cargo.lock b/bin/stateless-validator-ethrex/sp1/Cargo.lock index ec0306bd..f7b6428b 100644 --- a/bin/stateless-validator-ethrex/sp1/Cargo.lock +++ b/bin/stateless-validator-ethrex/sp1/Cargo.lock @@ -13,24 +13,13 @@ dependencies = [ "num-traits", ] -[[package]] -name = "aes" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" -dependencies = [ - "cfg-if 1.0.4", - "cipher", - "cpufeatures", -] - [[package]] name = "ahash" version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ - "cfg-if 1.0.4", + "cfg-if", "once_cell", "version_check", "zerocopy", @@ -88,7 +77,7 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror 2.0.17", + "thiserror", ] [[package]] @@ -115,7 +104,7 @@ dependencies = [ "alloy-rlp", "crc", "serde", - "thiserror 2.0.17", + "thiserror", ] [[package]] @@ -142,7 +131,7 @@ dependencies = [ "k256", "serde", "serde_with", - "thiserror 2.0.17", + "thiserror", ] [[package]] @@ -165,7 +154,7 @@ dependencies = [ "serde", "serde_with", "sha2", - "thiserror 2.0.17", + "thiserror", ] [[package]] @@ -182,7 +171,7 @@ dependencies = [ "auto_impl", "derive_more 2.1.1", "revm", - "thiserror 2.0.17", + "thiserror", ] [[package]] @@ -234,7 +223,7 @@ checksum = "f6a0fb18dd5fb43ec5f0f6a20be1ce0287c79825827de5744afaa6c957737c33" dependencies = [ "alloy-rlp", "bytes", - "cfg-if 1.0.4", + "cfg-if", "const-hex", "derive_more 2.1.1", "foldhash 0.2.0", @@ -323,7 +312,7 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror 2.0.17", + "thiserror", ] [[package]] @@ -483,7 +472,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -494,7 +483,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -789,12 +778,6 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - [[package]] name = "aurora-engine-modexp" version = "1.2.0" @@ -822,84 +805,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" -[[package]] -name = "axum" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8" -dependencies = [ - "axum-core", - "base64 0.22.1", - "bytes", - "form_urlencoded", - "futures-util", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-util", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "serde_core", - "serde_json", - "serde_path_to_error", - "serde_urlencoded", - "sha1", - "sync_wrapper", - "tokio", - "tokio-tungstenite", - "tower", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "axum-core" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" -dependencies = [ - "bytes", - "futures-core", - "http", - "http-body", - "http-body-util", - "mime", - "pin-project-lite", - "sync_wrapper", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "axum-extra" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9963ff19f40c6102c76756ef0a46004c0d58957d87259fc9208ff8441c12ab96" -dependencies = [ - "axum", - "axum-core", - "bytes", - "futures-util", - "headers", - "http", - "http-body", - "http-body-util", - "mime", - "pin-project-lite", - "rustversion", - "serde_core", - "tower-layer", - "tower-service", - "tracing", -] - [[package]] name = "base16ct" version = "0.2.0" @@ -1005,7 +910,7 @@ dependencies = [ "arrayref", "arrayvec", "cc", - "cfg-if 1.0.4", + "cfg-if", "constant_time_eq", ] @@ -1023,7 +928,7 @@ name = "bls12_381" version = "0.8.0" source = "git+https://github.com/lambdaclass/bls12_381-patch/?branch=expose-fp-struct#f2242f78b2b5fc10d9168a810c04ab8728ac6804" dependencies = [ - "cfg-if 1.0.4", + "cfg-if", "digest 0.10.7", "ff", "group", @@ -1172,12 +1077,6 @@ dependencies = [ "shlex", ] -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - [[package]] name = "cfg-if" version = "1.0.4" @@ -1202,16 +1101,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", -] - [[package]] name = "clap" version = "4.5.53" @@ -1258,15 +1147,6 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" -[[package]] -name = "concat-kdf" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d72c1252426a83be2092dd5884a5f6e3b8e7180f6891b6263d2c21b92ec8816" -dependencies = [ - "digest 0.10.7", -] - [[package]] name = "const-default" version = "1.0.0" @@ -1279,7 +1159,7 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3bb320cac8a0750d7f25280aa97b09c26edfe161164238ecbbb31092b079e735" dependencies = [ - "cfg-if 1.0.4", + "cfg-if", "cpufeatures", "proptest", "serde_core", @@ -1335,16 +1215,6 @@ dependencies = [ "unicode-segmentation", ] -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -1381,7 +1251,7 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ - "cfg-if 1.0.4", + "cfg-if", ] [[package]] @@ -1390,41 +1260,17 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" -[[package]] -name = "crossbeam" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69323bff1fb41c635347b8ead484a5ca6c3f11914d784170b158d8449ab07f8e" -dependencies = [ - "cfg-if 0.1.10", - "crossbeam-channel 0.4.4", - "crossbeam-deque 0.7.4", - "crossbeam-epoch 0.8.2", - "crossbeam-queue 0.2.3", - "crossbeam-utils 0.7.2", -] - [[package]] name = "crossbeam" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" dependencies = [ - "crossbeam-channel 0.5.15", - "crossbeam-deque 0.8.6", - "crossbeam-epoch 0.9.18", - "crossbeam-queue 0.3.12", - "crossbeam-utils 0.8.21", -] - -[[package]] -name = "crossbeam-channel" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87" -dependencies = [ - "crossbeam-utils 0.7.2", - "maybe-uninit", + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", ] [[package]] @@ -1433,18 +1279,7 @@ version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" dependencies = [ - "crossbeam-utils 0.8.21", -] - -[[package]] -name = "crossbeam-deque" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20ff29ded3204c5106278a81a38f4b482636ed4fa1e6cfbeef193291beb29ed" -dependencies = [ - "crossbeam-epoch 0.8.2", - "crossbeam-utils 0.7.2", - "maybe-uninit", + "crossbeam-utils", ] [[package]] @@ -1453,23 +1288,8 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ - "crossbeam-epoch 0.9.18", - "crossbeam-utils 0.8.21", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" -dependencies = [ - "autocfg", - "cfg-if 0.1.10", - "crossbeam-utils 0.7.2", - "lazy_static", - "maybe-uninit", - "memoffset", - "scopeguard", + "crossbeam-epoch", + "crossbeam-utils", ] [[package]] @@ -1478,18 +1298,7 @@ version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "crossbeam-utils 0.8.21", -] - -[[package]] -name = "crossbeam-queue" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" -dependencies = [ - "cfg-if 0.1.10", - "crossbeam-utils 0.7.2", - "maybe-uninit", + "crossbeam-utils", ] [[package]] @@ -1498,18 +1307,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" dependencies = [ - "crossbeam-utils 0.8.21", -] - -[[package]] -name = "crossbeam-utils" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" -dependencies = [ - "autocfg", - "cfg-if 0.1.10", - "lazy_static", + "crossbeam-utils", ] [[package]] @@ -1545,15 +1343,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] - [[package]] name = "darling" version = "0.20.11" @@ -1625,12 +1414,6 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "data-encoding" -version = "2.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" - [[package]] name = "datatest-stable" version = "0.2.10" @@ -1844,15 +1627,6 @@ dependencies = [ "rlsf", ] -[[package]] -name = "encoding_rs" -version = "0.8.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" -dependencies = [ - "cfg-if 1.0.4", -] - [[package]] name = "enum-ordinalize" version = "4.3.2" @@ -1873,15 +1647,6 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "envy" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f47e0157f2cb54f5ae1bd371b30a2ae4311e1c028f575cd4e81de7353215965" -dependencies = [ - "serde", -] - [[package]] name = "equivalent" version = "1.0.2" @@ -1921,7 +1686,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -1960,11 +1725,8 @@ dependencies = [ [[package]] name = "ethereum_hashing" version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c853bd72c9e5787f8aafc3df2907c2ed03cff3150c3acd94e2e53a98ab70a8ab" +source = "git+https://github.com/jsign/ethereum_hashing?rev=181896944365e4b76dd6407c2d679fb844165dd6#181896944365e4b76dd6407c2d679fb844165dd6" dependencies = [ - "cpufeatures", - "ring", "sha2", ] @@ -2023,7 +1785,7 @@ dependencies = [ "ethrex-vm", "hex", "rustc-hash", - "thiserror 2.0.17", + "thiserror", "tokio", "tokio-util", "tracing", @@ -2054,7 +1816,7 @@ dependencies = [ "serde_json", "sha2", "sha3", - "thiserror 2.0.17", + "thiserror", "tinyvec", "tracing", "url", @@ -2065,9 +1827,8 @@ name = "ethrex-crypto" version = "8.0.0" source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" dependencies = [ - "c-kzg", "kzg-rs", - "thiserror 2.0.17", + "thiserror", "tiny-keccak", ] @@ -2091,7 +1852,7 @@ dependencies = [ "serde", "serde_with", "sha3", - "thiserror 2.0.17", + "thiserror", "tracing", ] @@ -2124,7 +1885,7 @@ dependencies = [ "sha3", "strum", "substrate-bn", - "thiserror 2.0.17", + "thiserror", "walkdir", ] @@ -2133,59 +1894,13 @@ name = "ethrex-metrics" version = "8.0.0" source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" dependencies = [ - "axum", "ethrex-common", - "prometheus 0.13.4", "serde", "serde_json", - "thiserror 2.0.17", - "tokio", - "tracing", + "thiserror", "tracing-subscriber", ] -[[package]] -name = "ethrex-p2p" -version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" -dependencies = [ - "aes", - "async-trait", - "bytes", - "concat-kdf", - "crossbeam 0.8.4", - "ctr", - "ethereum-types", - "ethrex-blockchain", - "ethrex-common", - "ethrex-crypto", - "ethrex-rlp", - "ethrex-storage", - "ethrex-threadpool", - "ethrex-trie", - "futures", - "hex", - "hmac", - "indexmap 2.12.1", - "lazy_static", - "prometheus 0.14.0", - "rand 0.8.5", - "rayon", - "rustc-hash", - "secp256k1", - "serde", - "serde_json", - "sha2", - "snap", - "spawned-concurrency", - "spawned-rt", - "thiserror 2.0.17", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", -] - [[package]] name = "ethrex-rlp" version = "8.0.0" @@ -2196,49 +1911,10 @@ dependencies = [ "hex", "lazy_static", "snap", - "thiserror 2.0.17", + "thiserror", "tinyvec", ] -[[package]] -name = "ethrex-rpc" -version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" -dependencies = [ - "axum", - "axum-extra", - "bytes", - "envy", - "ethereum-types", - "ethrex-blockchain", - "ethrex-common", - "ethrex-crypto", - "ethrex-metrics", - "ethrex-p2p", - "ethrex-rlp", - "ethrex-storage", - "ethrex-trie", - "ethrex-vm", - "hex", - "hex-literal", - "jsonwebtoken", - "rand 0.8.5", - "reqwest", - "secp256k1", - "serde", - "serde_json", - "sha2", - "spawned-concurrency", - "spawned-rt", - "thiserror 2.0.17", - "tokio", - "tokio-util", - "tower-http", - "tracing", - "tracing-subscriber", - "uuid", -] - [[package]] name = "ethrex-storage" version = "8.0.0" @@ -2259,7 +1935,7 @@ dependencies = [ "rustc-hash", "serde", "serde_json", - "thiserror 2.0.17", + "thiserror", "tokio", "tracing", ] @@ -2269,7 +1945,7 @@ name = "ethrex-threadpool" version = "0.1.0" source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" dependencies = [ - "crossbeam 0.8.4", + "crossbeam", ] [[package]] @@ -2279,7 +1955,7 @@ source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f dependencies = [ "anyhow", "bytes", - "crossbeam 0.8.4", + "crossbeam", "digest 0.10.7", "ethereum-types", "ethrex-crypto", @@ -2292,7 +1968,7 @@ dependencies = [ "serde", "serde_json", "smallvec", - "thiserror 2.0.17", + "thiserror", "tracing", ] @@ -2314,7 +1990,7 @@ dependencies = [ "lazy_static", "rkyv", "serde", - "thiserror 2.0.17", + "thiserror", "tracing", ] @@ -2421,21 +2097,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "form_urlencoded" version = "1.2.2" @@ -2451,54 +2112,12 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" -[[package]] -name = "futures" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", - "futures-sink", -] - [[package]] name = "futures-core" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" -[[package]] -name = "futures-executor" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - [[package]] name = "futures-macro" version = "0.3.31" @@ -2528,13 +2147,9 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ - "futures-channel", "futures-core", - "futures-io", "futures-macro", - "futures-sink", "futures-task", - "memchr", "pin-project-lite", "pin-utils", "slab", @@ -2563,7 +2178,7 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ - "cfg-if 1.0.4", + "cfg-if", "js-sys", "libc", "wasi", @@ -2576,7 +2191,7 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ - "cfg-if 1.0.4", + "cfg-if", "libc", "r-efi", "wasip2", @@ -2628,39 +2243,20 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror 2.0.17", + "thiserror", ] [[package]] -name = "h2" -version = "0.4.13" +name = "hashbrown" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http", - "indexmap 2.12.1", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "foldhash 0.1.5", @@ -2679,30 +2275,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "headers" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" -dependencies = [ - "base64 0.22.1", - "bytes", - "headers-core", - "http", - "httpdate", - "mime", - "sha1", -] - -[[package]] -name = "headers-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" -dependencies = [ - "http", -] - [[package]] name = "heck" version = "0.5.0" @@ -2754,132 +2326,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "http" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" -dependencies = [ - "bytes", - "itoa", -] - -[[package]] -name = "http-body" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http", -] - -[[package]] -name = "http-body-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" -dependencies = [ - "bytes", - "futures-core", - "http", - "http-body", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hyper" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" -dependencies = [ - "atomic-waker", - "bytes", - "futures-channel", - "futures-core", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "pin-utils", - "smallvec", - "tokio", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.27.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" -dependencies = [ - "http", - "hyper", - "hyper-util", - "rustls", - "rustls-pki-types", - "tokio", - "tokio-rustls", - "tower-service", -] - -[[package]] -name = "hyper-tls" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" -dependencies = [ - "bytes", - "http-body-util", - "hyper", - "hyper-util", - "native-tls", - "tokio", - "tokio-native-tls", - "tower-service", -] - -[[package]] -name = "hyper-util" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" -dependencies = [ - "base64 0.22.1", - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "http", - "http-body", - "hyper", - "ipnet", - "libc", - "percent-encoding", - "pin-project-lite", - "socket2", - "system-configuration", - "tokio", - "tower-service", - "tracing", - "windows-registry", -] - [[package]] name = "iana-time-zone" version = "0.1.64" @@ -3082,31 +2528,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "inout" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" -dependencies = [ - "generic-array", -] - -[[package]] -name = "ipnet" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" - -[[package]] -name = "iri-string" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "is_terminal_polyfill" version = "1.70.2" @@ -3175,27 +2596,12 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "jsonwebtoken" -version = "9.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" -dependencies = [ - "base64 0.22.1", - "js-sys", - "pem", - "ring", - "serde", - "serde_json", - "simple_asn1", -] - [[package]] name = "k256" version = "0.13.4" source = "git+https://github.com/sp1-patches/elliptic-curves?tag=patch-k256-13.4-sp1-5.0.0#f7d8998e05d8cbcbd8e543eba1030a7385011fa8" dependencies = [ - "cfg-if 1.0.4", + "cfg-if", "ecdsa", "elliptic-curve", "hex", @@ -3307,12 +2713,6 @@ version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9afa463f5405ee81cdb9cc2baf37e08ec7e4c8209442b5d72c04cfb2cd6e6286" -[[package]] -name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - [[package]] name = "linux-raw-sys" version = "0.11.0" @@ -3325,15 +2725,6 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" -[[package]] -name = "lock_api" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" -dependencies = [ - "scopeguard", -] - [[package]] name = "log" version = "0.4.28" @@ -3415,50 +2806,12 @@ dependencies = [ "regex-automata", ] -[[package]] -name = "matchit" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" - -[[package]] -name = "maybe-uninit" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" - [[package]] name = "memchr" version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" -[[package]] -name = "memoffset" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa" -dependencies = [ - "autocfg", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "mio" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.61.2", -] - [[package]] name = "modular-bitfield" version = "0.11.2" @@ -3511,30 +2864,13 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "native-tls" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - [[package]] name = "nu-ansi-term" version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -3676,7 +3012,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b5676b5c379cf5b03da1df2b3061c4a4e2aa691086a56ac923e08c143f53f59" dependencies = [ "alloy-rlp", - "cfg-if 1.0.4", + "cfg-if", "proptest", "ruint", "serde", @@ -3713,51 +3049,7 @@ dependencies = [ "derive_more 2.1.1", "serde", "serde_with", - "thiserror 2.0.17", -] - -[[package]] -name = "openssl" -version = "0.10.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" -dependencies = [ - "bitflags", - "cfg-if 1.0.4", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "openssl-probe" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - -[[package]] -name = "openssl-sys" -version = "0.9.111" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", + "thiserror", ] [[package]] @@ -3922,45 +3214,12 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "parking_lot" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" -dependencies = [ - "cfg-if 1.0.4", - "libc", - "redox_syscall", - "smallvec", - "windows-link", -] - [[package]] name = "paste" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "pem" -version = "3.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" -dependencies = [ - "base64 0.22.1", - "serde_core", -] - [[package]] name = "pem-rfc7468" version = "0.7.0" @@ -4160,123 +3419,42 @@ dependencies = [ ] [[package]] -name = "procfs" -version = "0.16.0" +name = "proptest" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "731e0d9356b0c25f16f33b5be79b1c57b562f141ebfcdb0ad8ac2c13a24293b4" +checksum = "bee689443a2bd0a16ab0348b52ee43e3b2d1b1f931c8aa5c9f8de4c86fbe8c40" dependencies = [ + "bit-set", + "bit-vec", "bitflags", - "hex", - "lazy_static", - "procfs-core", - "rustix 0.38.44", + "num-traits", + "rand 0.9.2", + "rand_chacha 0.9.0", + "rand_xorshift", + "regex-syntax", + "rusty-fork", + "tempfile", + "unarray", ] [[package]] -name = "procfs-core" -version = "0.16.0" +name = "ptr_meta" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3554923a69f4ce04c4a754260c338f505ce22642d3830e049a399fc2059a29" +checksum = "0b9a0cf95a1196af61d4f1cbdab967179516d9a4a4312af1f31948f8f6224a79" dependencies = [ - "bitflags", - "hex", + "ptr_meta_derive", ] [[package]] -name = "prometheus" -version = "0.13.4" +name = "ptr_meta_derive" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" +checksum = "7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1" dependencies = [ - "cfg-if 1.0.4", - "fnv", - "lazy_static", - "libc", - "memchr", - "parking_lot", - "procfs", - "protobuf 2.28.0", - "thiserror 1.0.69", -] - -[[package]] -name = "prometheus" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ca5326d8d0b950a9acd87e6a3f94745394f62e4dae1b1ee22b2bc0c394af43a" -dependencies = [ - "cfg-if 1.0.4", - "fnv", - "lazy_static", - "memchr", - "parking_lot", - "protobuf 3.7.2", - "thiserror 2.0.17", -] - -[[package]] -name = "proptest" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee689443a2bd0a16ab0348b52ee43e3b2d1b1f931c8aa5c9f8de4c86fbe8c40" -dependencies = [ - "bit-set", - "bit-vec", - "bitflags", - "num-traits", - "rand 0.9.2", - "rand_chacha 0.9.0", - "rand_xorshift", - "regex-syntax", - "rusty-fork", - "tempfile", - "unarray", -] - -[[package]] -name = "protobuf" -version = "2.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" - -[[package]] -name = "protobuf" -version = "3.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d65a1d4ddae7d8b5de68153b48f6aa3bba8cb002b243dbdbc55a5afbc98f99f4" -dependencies = [ - "once_cell", - "protobuf-support", - "thiserror 1.0.69", -] - -[[package]] -name = "protobuf-support" -version = "3.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e36c2f31e0a47f9280fb347ef5e461ffcd2c52dd520d8e216b52f93b0b0d7d6" -dependencies = [ - "thiserror 1.0.69", -] - -[[package]] -name = "ptr_meta" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9a0cf95a1196af61d4f1cbdab967179516d9a4a4312af1f31948f8f6224a79" -dependencies = [ - "ptr_meta_derive", -] - -[[package]] -name = "ptr_meta_derive" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", + "proc-macro2", + "quote", + "syn 2.0.111", ] [[package]] @@ -4420,17 +3598,8 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ - "crossbeam-deque 0.8.6", - "crossbeam-utils 0.8.21", -] - -[[package]] -name = "redox_syscall" -version = "0.5.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" -dependencies = [ - "bitflags", + "crossbeam-deque", + "crossbeam-utils", ] [[package]] @@ -4479,46 +3648,6 @@ dependencies = [ "bytecheck", ] -[[package]] -name = "reqwest" -version = "0.12.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" -dependencies = [ - "base64 0.22.1", - "bytes", - "encoding_rs", - "futures-core", - "h2", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-rustls", - "hyper-tls", - "hyper-util", - "js-sys", - "log", - "mime", - "native-tls", - "percent-encoding", - "pin-project-lite", - "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tokio-native-tls", - "tower", - "tower-http", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "reth-chainspec" version = "1.9.3" @@ -4577,7 +3706,7 @@ dependencies = [ "auto_impl", "reth-execution-types", "reth-primitives-traits", - "thiserror 2.0.17", + "thiserror", ] [[package]] @@ -4610,7 +3739,7 @@ dependencies = [ "reth-consensus", "reth-execution-errors", "reth-storage-errors", - "thiserror 2.0.17", + "thiserror", ] [[package]] @@ -4709,7 +3838,7 @@ dependencies = [ "alloy-rlp", "nybbles 0.4.7", "reth-storage-errors", - "thiserror 2.0.17", + "thiserror", ] [[package]] @@ -4736,7 +3865,7 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "serde_with", - "thiserror 2.0.17", + "thiserror", "url", ] @@ -4774,7 +3903,7 @@ dependencies = [ "secp256k1", "serde", "serde_with", - "thiserror 2.0.17", + "thiserror", ] [[package]] @@ -4785,7 +3914,7 @@ dependencies = [ "alloy-primitives", "derive_more 2.1.1", "strum", - "thiserror 2.0.17", + "thiserror", ] [[package]] @@ -4833,7 +3962,7 @@ dependencies = [ "reth-trie-sparse", "serde", "serde_with", - "thiserror 2.0.17", + "thiserror", ] [[package]] @@ -4882,7 +4011,7 @@ dependencies = [ "reth-prune-types", "reth-static-file-types", "revm-database-interface", - "thiserror 2.0.17", + "thiserror", ] [[package]] @@ -4963,7 +4092,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f038f0c9c723393ac897a5df9140b21cfa98f5753a2cb7d0f28fa430c4118abf" dependencies = [ "bitvec", - "cfg-if 1.0.4", + "cfg-if", "derive-where", "revm-bytecode", "revm-context-interface", @@ -5070,7 +4199,7 @@ dependencies = [ "ark-serialize 0.5.0", "arrayref", "aurora-engine-modexp", - "cfg-if 1.0.4", + "cfg-if", "k256", "p256", "revm-primitives", @@ -5111,20 +4240,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "ring" -version = "0.17.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" -dependencies = [ - "cc", - "cfg-if 1.0.4", - "getrandom 0.2.16", - "libc", - "untrusted", - "windows-sys 0.52.0", -] - [[package]] name = "ripemd" version = "0.1.3" @@ -5190,7 +4305,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "222fb240c3286247ecdee6fa5341e7cdad0ffdf8e7e401d9937f2d58482a20bf" dependencies = [ - "cfg-if 1.0.4", + "cfg-if", "const-default", "libc", "svgbobdoc", @@ -5260,19 +4375,6 @@ dependencies = [ "semver 1.0.27", ] -[[package]] -name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys 0.59.0", -] - [[package]] name = "rustix" version = "1.1.3" @@ -5282,41 +4384,8 @@ dependencies = [ "bitflags", "errno", "libc", - "linux-raw-sys 0.11.0", - "windows-sys 0.61.2", -] - -[[package]] -name = "rustls" -version = "0.23.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" -dependencies = [ - "once_cell", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", -] - -[[package]] -name = "rustls-pki-types" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e6f2ab2928ca4291b86736a8bd920a277a399bba1589409d72154ff87c1282" -dependencies = [ - "zeroize", -] - -[[package]] -name = "rustls-webpki" -version = "0.103.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" -dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", + "linux-raw-sys", + "windows-sys", ] [[package]] @@ -5361,15 +4430,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "schannel" -version = "0.1.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" -dependencies = [ - "windows-sys 0.61.2", -] - [[package]] name = "schemars" version = "0.9.0" @@ -5394,12 +4454,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - [[package]] name = "sec1" version = "0.7.3" @@ -5436,29 +4490,6 @@ dependencies = [ "cc", ] -[[package]] -name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "semver" version = "0.11.0" @@ -5535,29 +4566,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "serde_path_to_error" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" -dependencies = [ - "itoa", - "serde", - "serde_core", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - [[package]] name = "serde_with" version = "3.16.0" @@ -5599,23 +4607,12 @@ dependencies = [ "serde", ] -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if 1.0.4", - "cpufeatures", - "digest 0.10.7", -] - [[package]] name = "sha2" version = "0.10.9" source = "git+https://github.com/sp1-patches/RustCrypto-hashes?tag=patch-sha2-0.10.9-sp1-4.0.0#0b1945eea7d9a776fd6e50ffd5fc51f0c5e6f155" dependencies = [ - "cfg-if 1.0.4", + "cfg-if", "cpufeatures", "digest 0.10.7", ] @@ -5636,7 +4633,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" dependencies = [ "cc", - "cfg-if 1.0.4", + "cfg-if", ] [[package]] @@ -5654,16 +4651,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" -[[package]] -name = "signal-hook-registry" -version = "1.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" -dependencies = [ - "errno", - "libc", -] - [[package]] name = "signature" version = "2.2.0" @@ -5680,18 +4667,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" -[[package]] -name = "simple_asn1" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" -dependencies = [ - "num-bigint 0.4.6", - "num-traits", - "thiserror 2.0.17", - "time", -] - [[package]] name = "siphasher" version = "1.0.1" @@ -5719,16 +4694,6 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" -[[package]] -name = "socket2" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" -dependencies = [ - "libc", - "windows-sys 0.60.2", -] - [[package]] name = "sp1-lib" version = "5.2.4" @@ -5749,7 +4714,7 @@ checksum = "7e69a03098f827102c54c31a5e57280eb45b2c085de433b3f702e4f9e3ec1641" dependencies = [ "bincode 1.3.3", "blake3", - "cfg-if 1.0.4", + "cfg-if", "hex", "lazy_static", "num-bigint 0.4.6", @@ -5767,7 +4732,7 @@ version = "5.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6247de4d980d1f3311fa877cc5d2d3b7e111258878c8196a8bb9728aec98c8c" dependencies = [ - "cfg-if 1.0.4", + "cfg-if", "critical-section", "embedded-alloc", "getrandom 0.2.16", @@ -5786,7 +4751,7 @@ version = "0.8.0-sp1-5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac255e1704ebcdeec5e02f6a0ebc4d2e9e6b802161938330b6810c13a610c583" dependencies = [ - "cfg-if 1.0.4", + "cfg-if", "ff", "group", "pairing", @@ -5810,33 +4775,6 @@ dependencies = [ "reth-trie-common", ] -[[package]] -name = "spawned-concurrency" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d3ec6b3c003075f7d1c4c6475308243e853c9a78149b84b1f8b64d5bed49d49" -dependencies = [ - "futures", - "pin-project-lite", - "spawned-rt", - "thiserror 2.0.17", - "tracing", -] - -[[package]] -name = "spawned-rt" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cca60c56b1c60b94dd314edce5ea1a98b6037cca3b44d73828e647bad4dae46c" -dependencies = [ - "crossbeam 0.7.3", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", - "tracing-subscriber", -] - [[package]] name = "spin" version = "0.9.8" @@ -5898,10 +4836,10 @@ name = "stateless-validator-ethrex" version = "0.1.0" dependencies = [ "anyhow", + "bytes", "ere-io", "ethrex-common", "ethrex-rlp", - "ethrex-rpc", "ethrex-vm", "guest", "guest_program", @@ -5989,7 +4927,7 @@ source = "git+https://github.com/sp1-patches/bn?tag=patch-0.6.0-sp1-5.0.0#e0d67f dependencies = [ "bytemuck", "byteorder", - "cfg-if 1.0.4", + "cfg-if", "crunchy", "lazy_static", "num-bigint 0.4.6", @@ -6051,15 +4989,6 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "sync_wrapper" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" -dependencies = [ - "futures-core", -] - [[package]] name = "synstructure" version = "0.13.2" @@ -6071,27 +5000,6 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "system-configuration" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" -dependencies = [ - "bitflags", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "tap" version = "1.0.1" @@ -6107,17 +5015,8 @@ dependencies = [ "fastrand", "getrandom 0.3.4", "once_cell", - "rustix 1.1.3", - "windows-sys 0.61.2", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl 1.0.69", + "rustix", + "windows-sys", ] [[package]] @@ -6126,18 +5025,7 @@ version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.17", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", + "thiserror-impl", ] [[package]] @@ -6157,7 +5045,7 @@ version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ - "cfg-if 1.0.4", + "cfg-if", ] [[package]] @@ -6205,7 +5093,7 @@ name = "tiny-keccak" version = "2.0.2" source = "git+https://github.com/sp1-patches/tiny-keccak?tag=patch-2.0.2-sp1-4.0.0#d2ffd330259c8f290b07d99cc1ef1f74774382c2" dependencies = [ - "cfg-if 1.0.4", + "cfg-if", "crunchy", ] @@ -6240,70 +5128,7 @@ version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ - "bytes", - "libc", - "mio", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2", - "tokio-macros", - "windows-sys 0.61.2", -] - -[[package]] -name = "tokio-macros" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" -dependencies = [ - "rustls", - "tokio", -] - -[[package]] -name = "tokio-stream" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" -dependencies = [ - "futures-core", "pin-project-lite", - "tokio", - "tokio-util", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d25a406cddcc431a75d3d9afc6a7c0f7428d4891dd973e4d54c56b46127bf857" -dependencies = [ - "futures-util", - "log", - "tokio", - "tungstenite", ] [[package]] @@ -6350,52 +5175,6 @@ dependencies = [ "winnow", ] -[[package]] -name = "tower" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" -dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper", - "tokio", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" -dependencies = [ - "bitflags", - "bytes", - "futures-util", - "http", - "http-body", - "iri-string", - "pin-project-lite", - "tower", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - [[package]] name = "tracing" version = "0.1.41" @@ -6483,29 +5262,6 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "tungstenite" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442" -dependencies = [ - "bytes", - "data-encoding", - "http", - "httparse", - "log", - "rand 0.9.2", - "sha1", - "thiserror 2.0.17", - "utf-8", -] - [[package]] name = "typenum" version = "1.19.0" @@ -6572,12 +5328,6 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - [[package]] name = "unty" version = "0.0.4" @@ -6596,12 +5346,6 @@ dependencies = [ "serde", ] -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -6620,7 +5364,6 @@ version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ - "getrandom 0.3.4", "js-sys", "wasm-bindgen", ] @@ -6631,12 +5374,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "version_check" version = "0.9.5" @@ -6662,15 +5399,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" @@ -6692,26 +5420,13 @@ version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" dependencies = [ - "cfg-if 1.0.4", + "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" -dependencies = [ - "cfg-if 1.0.4", - "js-sys", - "once_cell", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "wasm-bindgen-macro" version = "0.2.105" @@ -6744,16 +5459,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "web-sys" -version = "0.3.82" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - [[package]] name = "wide" version = "0.7.33" @@ -6770,7 +5475,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -6814,17 +5519,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" -[[package]] -name = "windows-registry" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" -dependencies = [ - "windows-link", - "windows-result", - "windows-strings", -] - [[package]] name = "windows-result" version = "0.4.1" @@ -6843,33 +5537,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.5", -] - [[package]] name = "windows-sys" version = "0.61.2" @@ -6879,135 +5546,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.53.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" -dependencies = [ - "windows-link", - "windows_aarch64_gnullvm 0.53.1", - "windows_aarch64_msvc 0.53.1", - "windows_i686_gnu 0.53.1", - "windows_i686_gnullvm 0.53.1", - "windows_i686_msvc 0.53.1", - "windows_x86_64_gnu 0.53.1", - "windows_x86_64_gnullvm 0.53.1", - "windows_x86_64_msvc 0.53.1", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_i686_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" - [[package]] name = "winnow" version = "0.7.14" diff --git a/bin/stateless-validator-ethrex/sp1/Cargo.toml b/bin/stateless-validator-ethrex/sp1/Cargo.toml index 1a138cc6..c56eea0f 100644 --- a/bin/stateless-validator-ethrex/sp1/Cargo.toml +++ b/bin/stateless-validator-ethrex/sp1/Cargo.toml @@ -10,7 +10,10 @@ version = "0.1.0" ere-platform-sp1 = { git = "https://github.com/eth-act/ere", rev = "ec75f8a26657ddbf7efc44cdb3167fff4f55fe27" } # local -stateless-validator-ethrex = { path = "../../../crates/stateless-validator-ethrex", features = ["std", "sp1"] } +stateless-validator-ethrex = { path = "../../../crates/stateless-validator-ethrex", features = [ + "std", + "sp1", +] } [patch.crates-io] sha2-v0-10-9 = { git = "https://github.com/sp1-patches/RustCrypto-hashes", package = "sha2", tag = "patch-sha2-0.10.9-sp1-4.0.0" } @@ -21,6 +24,7 @@ p256 = { git = "https://github.com/sp1-patches/elliptic-curves", tag = "patch-p2 ecdsa = { git = "https://github.com/sp1-patches/signatures", tag = "patch-16.9-sp1-4.1.0" } k256 = { git = "https://github.com/sp1-patches/elliptic-curves", tag = "patch-k256-13.4-sp1-5.0.0" } substrate-bn = { git = "https://github.com/sp1-patches/bn", tag = "patch-0.6.0-sp1-5.0.0" } +ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "181896944365e4b76dd6407c2d679fb844165dd6" } [patch."https://github.com/lambdaclass/bls12_381"] bls12_381 = { git = "https://github.com/lambdaclass/bls12_381-patch/", branch = "expose-fp-struct" } diff --git a/bin/stateless-validator-ethrex/zisk/Cargo.toml b/bin/stateless-validator-ethrex/zisk/Cargo.toml index ab134467..a42450c1 100644 --- a/bin/stateless-validator-ethrex/zisk/Cargo.toml +++ b/bin/stateless-validator-ethrex/zisk/Cargo.toml @@ -10,7 +10,10 @@ version = "0.1.0" ere-platform-zisk = { git = "https://github.com/eth-act/ere", rev = "ec75f8a26657ddbf7efc44cdb3167fff4f55fe27" } # local -stateless-validator-ethrex = { path = "../../../crates/stateless-validator-ethrex", features = ["std", "zisk"] } +stateless-validator-ethrex = { path = "../../../crates/stateless-validator-ethrex", features = [ + "std", + "zisk", +] } [patch.crates-io] sha2 = { git = "https://github.com/0xPolygonHermez/zisk-patch-hashes.git", tag = "patch-sha2-0.10.9-zisk-0.15.0" } @@ -20,6 +23,7 @@ substrate-bn = { git = "https://github.com/0xPolygonHermez/zisk-patch-bn.git", t sp1_bls12_381 = { git = "https://github.com/0xPolygonHermez/zisk-patch-bls12-381", tag = "patch-0.8.0-zisk-0.15.0" } tiny-keccak = { git = "https://github.com/0xPolygonHermez/zisk-patch-tiny-keccak/", tag = "patch-2.0.2-zisk-0.15.0" } kzg-rs = { git = "https://github.com/0xPolygonHermez/zisk-patch-kzg/", tag = "patch-0.2.7-zisk-0.15.0" } +ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "181896944365e4b76dd6407c2d679fb844165dd6" } [features] l2 = ["stateless-validator-ethrex/l2"] diff --git a/bin/stateless-validator-reth/sp1/Cargo.lock b/bin/stateless-validator-reth/sp1/Cargo.lock index 26a2006e..7cbb7cd3 100644 --- a/bin/stateless-validator-reth/sp1/Cargo.lock +++ b/bin/stateless-validator-reth/sp1/Cargo.lock @@ -3725,8 +3725,6 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" name = "stateless-validator-common" version = "0.1.0" dependencies = [ - "alloy-eips", - "alloy-primitives", "anyhow", "ethereum_ssz", "ethereum_ssz_derive", diff --git a/crates/integration-tests/tests/new_payload_request.rs b/crates/integration-tests/tests/new_payload_request.rs index e13d257c..8ba72390 100644 --- a/crates/integration-tests/tests/new_payload_request.rs +++ b/crates/integration-tests/tests/new_payload_request.rs @@ -2,7 +2,6 @@ use std::sync::Arc; use integration_tests::get_fixtures; -use reth_chainspec::ChainSpec; use reth_stateless::Genesis; use stateless_validator_reth::{ guest::StatelessValidatorRethInput, new_payload_request::new_payload_request_to_block, diff --git a/crates/stateless-validator-common/Cargo.toml b/crates/stateless-validator-common/Cargo.toml index 7cbc3624..4af9037f 100644 --- a/crates/stateless-validator-common/Cargo.toml +++ b/crates/stateless-validator-common/Cargo.toml @@ -28,8 +28,8 @@ ethereum_ssz.workspace = true ethereum_ssz_derive.workspace = true #alloy -alloy-primitives.workspace = true -alloy-eips.workspace = true +alloy-primitives = { workspace = true, optional = true } +alloy-eips = { workspace = true, optional = true } # crypto sha2.workspace = true @@ -42,4 +42,4 @@ serde = ["dep:serde", "dep:serde_with"] rkyv = ["dep:rkyv"] # host -host = ["std"] +host = ["std", "dep:alloy-primitives", "dep:alloy-eips"] diff --git a/crates/stateless-validator-ethrex/Cargo.toml b/crates/stateless-validator-ethrex/Cargo.toml index be8a6ea7..5929a319 100644 --- a/crates/stateless-validator-ethrex/Cargo.toml +++ b/crates/stateless-validator-ethrex/Cargo.toml @@ -11,6 +11,7 @@ workspace = true [dependencies] anyhow.workspace = true serde.workspace = true +bytes.workspace = true # alloy alloy-consensus = { workspace = true, optional = true } @@ -22,7 +23,7 @@ alloy-rlp = { workspace = true, optional = true } ethrex-common.workspace = true ethrex-guest-program.workspace = true ethrex-rlp.workspace = true -ethrex-rpc.workspace = true +ethrex-rpc = { workspace = true, optional = true } ethrex-vm.workspace = true # reth @@ -55,5 +56,6 @@ host = [ "dep:alloy-rlp", "dep:alloy-genesis", "dep:ere-zkvm-interface", + "dep:ethrex-rpc", "dep:reth-stateless", ] diff --git a/crates/stateless-validator-ethrex/src/execution_payload.rs b/crates/stateless-validator-ethrex/src/execution_payload.rs new file mode 100644 index 00000000..79fc0d5e --- /dev/null +++ b/crates/stateless-validator-ethrex/src/execution_payload.rs @@ -0,0 +1,93 @@ +#![allow(missing_docs)] +use bytes::Bytes; + +use ethrex_common::{ + Address, Bloom, H256, + constants::DEFAULT_OMMERS_HASH, + types::{ + Block, BlockBody, BlockHeader, Transaction, Withdrawal, compute_transactions_root, + compute_withdrawals_root, + }, +}; +use ethrex_rlp::error::RLPDecodeError; + +#[derive(Clone, Debug)] +pub struct ExecutionPayload { + pub parent_hash: H256, + pub fee_recipient: Address, + pub state_root: H256, + pub receipts_root: H256, + pub logs_bloom: Bloom, + pub prev_randao: H256, + pub block_number: u64, + pub gas_limit: u64, + pub gas_used: u64, + pub timestamp: u64, + pub extra_data: Bytes, + pub base_fee_per_gas: u64, + pub block_hash: H256, + pub transactions: Vec, + pub withdrawals: Option>, + // ExecutionPayloadV3 fields. Optional since we support V2 too + pub blob_gas_used: Option, + pub excess_blob_gas: Option, +} + +#[derive(Clone, Debug)] +pub struct EncodedTransaction(pub Bytes); + +impl ExecutionPayload { + /// Converts an `ExecutionPayload` into a block (aka a BlockHeader and BlockBody) + /// using the parentBeaconBlockRoot received along with the payload in the rpc call `engine_newPayloadV2/V3` + pub fn into_block( + self, + parent_beacon_block_root: Option, + requests_hash: Option, + ) -> Result { + let body = BlockBody { + transactions: self + .transactions + .iter() + .map(|encoded_tx| encoded_tx.decode()) + .collect::, RLPDecodeError>>()?, + ommers: vec![], + withdrawals: self.withdrawals, + }; + let header = BlockHeader { + parent_hash: self.parent_hash, + ommers_hash: *DEFAULT_OMMERS_HASH, + coinbase: self.fee_recipient, + state_root: self.state_root, + transactions_root: compute_transactions_root(&body.transactions), + receipts_root: self.receipts_root, + logs_bloom: self.logs_bloom, + difficulty: 0.into(), + number: self.block_number, + gas_limit: self.gas_limit, + gas_used: self.gas_used, + timestamp: self.timestamp, + extra_data: self.extra_data, + prev_randao: self.prev_randao, + nonce: 0, + base_fee_per_gas: Some(self.base_fee_per_gas), + withdrawals_root: body + .withdrawals + .as_ref() + .map(|w| compute_withdrawals_root(w)), + blob_gas_used: self.blob_gas_used, + excess_blob_gas: self.excess_blob_gas, + parent_beacon_block_root, + // TODO: set the value properly + requests_hash, + ..Default::default() + }; + + Ok(Block::new(header, body)) + } +} + +impl EncodedTransaction { + fn decode(&self) -> Result { + Transaction::decode_canonical(self.0.as_ref()) + } +} diff --git a/crates/stateless-validator-ethrex/src/lib.rs b/crates/stateless-validator-ethrex/src/lib.rs index 0f02a0fc..1f4d0475 100644 --- a/crates/stateless-validator-ethrex/src/lib.rs +++ b/crates/stateless-validator-ethrex/src/lib.rs @@ -9,4 +9,5 @@ pub mod guest; #[cfg(feature = "host")] pub mod host; +pub mod execution_payload; pub mod new_payload_request; diff --git a/crates/stateless-validator-ethrex/src/new_payload_request.rs b/crates/stateless-validator-ethrex/src/new_payload_request.rs index fb3e45ff..9d5f1377 100644 --- a/crates/stateless-validator-ethrex/src/new_payload_request.rs +++ b/crates/stateless-validator-ethrex/src/new_payload_request.rs @@ -2,12 +2,13 @@ use anyhow::{Context, Result}; use ethrex_common::{Address, Bloom, Bytes, H256, types::Block}; -use ethrex_rpc::types::payload::{EncodedTransaction, ExecutionPayload}; use stateless_validator_common::new_payload_request::{ ExecutionPayloadV1, ExecutionPayloadV2, ExecutionPayloadV3, NewPayloadRequest, Withdrawal, compute_requests_hash, }; +use crate::execution_payload::{EncodedTransaction, ExecutionPayload}; + /// Converts a [`NewPayloadRequest`] into an ethrex [`Block`]. pub fn get_block_from_new_payload_request(req: NewPayloadRequest) -> Result { match req { From 0183423d4f5701c33701a113d021c84d5d240e34 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Wed, 14 Jan 2026 18:36:42 -0300 Subject: [PATCH 27/46] more ethrex progress --- Cargo.lock | 3 +- bin/stateless-validator-ethrex/sp1/Cargo.lock | 30 +-- crates/stateless-validator-common/src/lib.rs | 3 + .../src/new_payload_request.rs | 73 ++++++ .../src/rkyv_wrappers.rs | 232 ++++++++++++++++++ crates/stateless-validator-ethrex/Cargo.toml | 6 +- .../src/execution_payload.rs | 1 - .../stateless-validator-ethrex/src/guest.rs | 12 +- crates/stateless-validator-reth/src/host.rs | 2 +- 9 files changed, 335 insertions(+), 27 deletions(-) create mode 100644 crates/stateless-validator-common/src/rkyv_wrappers.rs diff --git a/Cargo.lock b/Cargo.lock index f6f17a11..932faf07 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1951,6 +1951,7 @@ version = "0.0.16" source = "git+https://github.com/eth-act/ere?rev=ec75f8a26657ddbf7efc44cdb3167fff4f55fe27#ec75f8a26657ddbf7efc44cdb3167fff4f55fe27" dependencies = [ "bincode 2.0.1", + "rkyv", "serde", ] @@ -6063,7 +6064,7 @@ dependencies = [ "guest", "guest_program", "reth-stateless", - "serde", + "rkyv", "stateless-validator-common", "stateless-validator-reth", ] diff --git a/bin/stateless-validator-ethrex/sp1/Cargo.lock b/bin/stateless-validator-ethrex/sp1/Cargo.lock index f7b6428b..450365df 100644 --- a/bin/stateless-validator-ethrex/sp1/Cargo.lock +++ b/bin/stateless-validator-ethrex/sp1/Cargo.lock @@ -1659,6 +1659,7 @@ version = "0.0.16" source = "git+https://github.com/eth-act/ere?rev=ec75f8a26657ddbf7efc44cdb3167fff4f55fe27#ec75f8a26657ddbf7efc44cdb3167fff4f55fe27" dependencies = [ "bincode 2.0.1", + "rkyv", "serde", ] @@ -1773,7 +1774,7 @@ dependencies = [ [[package]] name = "ethrex-blockchain" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "bytes", "ethrex-common", @@ -1794,7 +1795,7 @@ dependencies = [ [[package]] name = "ethrex-common" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "bytes", "crc32fast", @@ -1825,7 +1826,7 @@ dependencies = [ [[package]] name = "ethrex-crypto" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "kzg-rs", "thiserror", @@ -1835,7 +1836,7 @@ dependencies = [ [[package]] name = "ethrex-l2-common" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "bytes", "ethereum-types", @@ -1859,7 +1860,7 @@ dependencies = [ [[package]] name = "ethrex-levm" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "ark-bn254", "ark-ec", @@ -1892,7 +1893,7 @@ dependencies = [ [[package]] name = "ethrex-metrics" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "ethrex-common", "serde", @@ -1904,7 +1905,7 @@ dependencies = [ [[package]] name = "ethrex-rlp" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "bytes", "ethereum-types", @@ -1918,7 +1919,7 @@ dependencies = [ [[package]] name = "ethrex-storage" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "anyhow", "async-trait", @@ -1943,7 +1944,7 @@ dependencies = [ [[package]] name = "ethrex-threadpool" version = "0.1.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "crossbeam", ] @@ -1951,7 +1952,7 @@ dependencies = [ [[package]] name = "ethrex-trie" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "anyhow", "bytes", @@ -1975,7 +1976,7 @@ dependencies = [ [[package]] name = "ethrex-vm" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "bincode 1.3.3", "bytes", @@ -2226,7 +2227,7 @@ dependencies = [ [[package]] name = "guest_program" version = "8.0.0" -source = "git+https://github.com/jsign/ethrex.git?rev=1b8ead02693419e9dc98f1940f18c0029a1efb6f#1b8ead02693419e9dc98f1940f18c0029a1efb6f" +source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ "bincode 1.3.3", "bytes", @@ -4817,11 +4818,10 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" name = "stateless-validator-common" version = "0.1.0" dependencies = [ - "alloy-eips", - "alloy-primitives", "anyhow", "ethereum_ssz", "ethereum_ssz_derive", + "rkyv", "serde", "serde_with", "sha2", @@ -4843,7 +4843,7 @@ dependencies = [ "ethrex-vm", "guest", "guest_program", - "serde", + "rkyv", "stateless-validator-common", "stateless-validator-reth", ] diff --git a/crates/stateless-validator-common/src/lib.rs b/crates/stateless-validator-common/src/lib.rs index e2a2c38b..03558a30 100644 --- a/crates/stateless-validator-common/src/lib.rs +++ b/crates/stateless-validator-common/src/lib.rs @@ -7,5 +7,8 @@ extern crate alloc; pub mod guest; pub mod new_payload_request; +#[cfg(feature = "rkyv")] +pub mod rkyv_wrappers; + #[cfg(feature = "host")] pub mod host; diff --git a/crates/stateless-validator-common/src/new_payload_request.rs b/crates/stateless-validator-common/src/new_payload_request.rs index 9a807203..d8af68ee 100644 --- a/crates/stateless-validator-common/src/new_payload_request.rs +++ b/crates/stateless-validator-common/src/new_payload_request.rs @@ -35,6 +35,10 @@ pub type Transactions = VariableList; pub type Withdrawals = VariableList; #[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +#[cfg_attr( + feature = "rkyv", + derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) +)] pub struct Withdrawal { pub index: u64, pub validator_index: u64, @@ -46,6 +50,10 @@ pub struct Withdrawal { #[derive( Debug, Clone, Serialize, Deserialize, TreeHash, ssz_derive::Encode, ssz_derive::Decode, )] +#[cfg_attr( + feature = "rkyv", + derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) +)] pub struct DepositRequest { #[serde_as(as = "Bytes")] pub pubkey: Bytes48, @@ -60,6 +68,10 @@ pub struct DepositRequest { #[derive( Debug, Clone, Serialize, Deserialize, TreeHash, ssz_derive::Encode, ssz_derive::Decode, )] +#[cfg_attr( + feature = "rkyv", + derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) +)] pub struct WithdrawalRequest { pub source_address: Address20, #[serde_as(as = "Bytes")] @@ -71,6 +83,10 @@ pub struct WithdrawalRequest { #[derive( Debug, Clone, Serialize, Deserialize, TreeHash, ssz_derive::Encode, ssz_derive::Decode, )] +#[cfg_attr( + feature = "rkyv", + derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) +)] pub struct ConsolidationRequest { pub source_address: Address20, #[serde_as(as = "Bytes")] @@ -80,9 +96,16 @@ pub struct ConsolidationRequest { } #[derive(Debug, Clone, Default, Serialize, Deserialize, TreeHash)] +#[cfg_attr( + feature = "rkyv", + derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) +)] pub struct ExecutionRequests { + #[cfg_attr(feature = "rkyv", rkyv(with = crate::rkyv_wrappers::AsVariableList))] pub deposits: VariableList, + #[cfg_attr(feature = "rkyv", rkyv(with = crate::rkyv_wrappers::AsVariableList))] pub withdrawals: VariableList, + #[cfg_attr(feature = "rkyv", rkyv(with = crate::rkyv_wrappers::AsVariableList))] pub consolidations: VariableList, } @@ -96,97 +119,147 @@ pub enum ForkName { } #[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +#[cfg_attr( + feature = "rkyv", + derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) +)] pub struct ExecutionPayloadV1 { pub parent_hash: Hash32, pub fee_recipient: Address20, pub state_root: Hash32, pub receipts_root: Hash32, + #[cfg_attr(feature = "rkyv", rkyv(with = crate::rkyv_wrappers::AsFixedVector))] pub logs_bloom: LogsBloom, pub prev_randao: Hash32, pub block_number: u64, pub gas_limit: u64, pub gas_used: u64, pub timestamp: u64, + #[cfg_attr(feature = "rkyv", rkyv(with = crate::rkyv_wrappers::AsVariableList))] pub extra_data: ExtraData, pub base_fee_per_gas: Uint256Bytes, pub block_hash: Hash32, + #[cfg_attr(feature = "rkyv", rkyv(with = crate::rkyv_wrappers::AsNestedVariableList))] pub transactions: Transactions, } #[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +#[cfg_attr( + feature = "rkyv", + derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) +)] pub struct ExecutionPayloadV2 { pub parent_hash: Hash32, pub fee_recipient: Address20, pub state_root: Hash32, pub receipts_root: Hash32, + #[cfg_attr(feature = "rkyv", rkyv(with = crate::rkyv_wrappers::AsFixedVector))] pub logs_bloom: LogsBloom, pub prev_randao: Hash32, pub block_number: u64, pub gas_limit: u64, pub gas_used: u64, pub timestamp: u64, + #[cfg_attr(feature = "rkyv", rkyv(with = crate::rkyv_wrappers::AsVariableList))] pub extra_data: ExtraData, pub base_fee_per_gas: Uint256Bytes, pub block_hash: Hash32, + #[cfg_attr(feature = "rkyv", rkyv(with = crate::rkyv_wrappers::AsNestedVariableList))] pub transactions: Transactions, + #[cfg_attr(feature = "rkyv", rkyv(with = crate::rkyv_wrappers::AsVariableList))] pub withdrawals: Withdrawals, } #[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +#[cfg_attr( + feature = "rkyv", + derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) +)] pub struct ExecutionPayloadV3 { pub parent_hash: Hash32, pub fee_recipient: Address20, pub state_root: Hash32, pub receipts_root: Hash32, + #[cfg_attr(feature = "rkyv", rkyv(with = crate::rkyv_wrappers::AsFixedVector))] pub logs_bloom: LogsBloom, pub prev_randao: Hash32, pub block_number: u64, pub gas_limit: u64, pub gas_used: u64, pub timestamp: u64, + #[cfg_attr(feature = "rkyv", rkyv(with = crate::rkyv_wrappers::AsVariableList))] pub extra_data: ExtraData, pub base_fee_per_gas: Uint256Bytes, pub block_hash: Hash32, + #[cfg_attr(feature = "rkyv", rkyv(with = crate::rkyv_wrappers::AsNestedVariableList))] pub transactions: Transactions, + #[cfg_attr(feature = "rkyv", rkyv(with = crate::rkyv_wrappers::AsVariableList))] pub withdrawals: Withdrawals, pub blob_gas_used: u64, pub excess_blob_gas: u64, } #[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +#[cfg_attr( + feature = "rkyv", + derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) +)] pub struct NewPayloadRequestBellatrix { pub execution_payload: ExecutionPayloadV1, } #[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +#[cfg_attr( + feature = "rkyv", + derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) +)] pub struct NewPayloadRequestCapella { pub execution_payload: ExecutionPayloadV2, } #[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +#[cfg_attr( + feature = "rkyv", + derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) +)] pub struct NewPayloadRequestDeneb { pub execution_payload: ExecutionPayloadV3, + #[cfg_attr(feature = "rkyv", rkyv(with = crate::rkyv_wrappers::AsVariableList))] pub versioned_hashes: VariableList, pub parent_beacon_block_root: Hash32, } #[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +#[cfg_attr( + feature = "rkyv", + derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) +)] pub struct NewPayloadRequestElectraFulu { pub execution_payload: ExecutionPayloadV3, + #[cfg_attr(feature = "rkyv", rkyv(with = crate::rkyv_wrappers::AsVariableList))] pub versioned_hashes: VariableList, pub parent_beacon_block_root: Hash32, pub execution_requests: ExecutionRequests, } #[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +#[cfg_attr( + feature = "rkyv", + derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) +)] pub struct NewPayloadRequestFulu { pub execution_payload: ExecutionPayloadV3, + #[cfg_attr(feature = "rkyv", rkyv(with = crate::rkyv_wrappers::AsVariableList))] pub versioned_hashes: VariableList, pub parent_beacon_block_root: Hash32, pub execution_requests: ExecutionRequests, } #[derive(Debug, Clone, Serialize, Deserialize)] +#[cfg_attr( + feature = "rkyv", + derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) +)] pub enum NewPayloadRequest { Bellatrix(NewPayloadRequestBellatrix), Capella(NewPayloadRequestCapella), diff --git a/crates/stateless-validator-common/src/rkyv_wrappers.rs b/crates/stateless-validator-common/src/rkyv_wrappers.rs new file mode 100644 index 00000000..2bd01028 --- /dev/null +++ b/crates/stateless-validator-common/src/rkyv_wrappers.rs @@ -0,0 +1,232 @@ +//! rkyv wrappers for ssz_types (VariableList, FixedVector). +//! +//! ssz_types doesn't support rkyv natively, so we provide wrappers that +//! serialize them as `Vec` and reconstruct on deserialization. + +use alloc::vec::Vec; +use core::ops::Deref; + +use rkyv::{ + Archive, Deserialize, Place, Serialize, + rancor::{Fallible, Source}, + ser::{Allocator, Writer}, + vec::{ArchivedVec, VecResolver}, + with::{ArchiveWith, DeserializeWith, SerializeWith}, +}; +use ssz_types::{FixedVector, VariableList}; +use typenum::Unsigned; + +/// Wrapper to serialize `VariableList` as `Vec`. +/// +/// On serialization, the inner slice is serialized as a Vec. +/// On deserialization, the Vec is converted back to VariableList. +#[derive(Debug)] +pub struct AsVariableList; + +impl ArchiveWith> for AsVariableList +where + T: Archive, + N: Unsigned, +{ + type Archived = ArchivedVec; + type Resolver = VecResolver; + + fn resolve_with( + field: &VariableList, + resolver: Self::Resolver, + out: Place, + ) { + // VariableList implements Deref + ArchivedVec::resolve_from_slice(field.deref(), resolver, out); + } +} + +impl SerializeWith, S> for AsVariableList +where + T: Serialize, + N: Unsigned, + S: Fallible + Allocator + Writer + ?Sized, +{ + fn serialize_with( + field: &VariableList, + serializer: &mut S, + ) -> Result { + ArchivedVec::serialize_from_slice(field.deref(), serializer) + } +} + +impl DeserializeWith, VariableList, D> for AsVariableList +where + T: Archive, + T::Archived: Deserialize, + N: Unsigned, + D: Fallible + ?Sized, + D::Error: Source, +{ + fn deserialize_with( + archived: &ArchivedVec, + deserializer: &mut D, + ) -> Result, D::Error> { + let vec: Vec = Deserialize::, D>::deserialize(archived, deserializer)?; + // VariableList::new returns Err if vec.len() > N::to_usize() + // This shouldn't happen if data was serialized correctly + Ok(VariableList::new(vec).expect("deserialized VariableList exceeds max length")) + } +} + +/// Wrapper to serialize `FixedVector` as `Vec`. +/// +/// On serialization, the inner slice is serialized as a Vec. +/// On deserialization, the Vec is converted back to FixedVector. +#[derive(Debug)] +pub struct AsFixedVector; + +impl ArchiveWith> for AsFixedVector +where + T: Archive, + N: Unsigned, +{ + type Archived = ArchivedVec; + type Resolver = VecResolver; + + fn resolve_with( + field: &FixedVector, + resolver: Self::Resolver, + out: Place, + ) { + // FixedVector implements Deref + ArchivedVec::resolve_from_slice(field.deref(), resolver, out); + } +} + +impl SerializeWith, S> for AsFixedVector +where + T: Serialize, + N: Unsigned, + S: Fallible + Allocator + Writer + ?Sized, +{ + fn serialize_with( + field: &FixedVector, + serializer: &mut S, + ) -> Result { + ArchivedVec::serialize_from_slice(field.deref(), serializer) + } +} + +impl DeserializeWith, FixedVector, D> for AsFixedVector +where + T: Archive + Clone + Default, + T::Archived: Deserialize, + N: Unsigned, + D: Fallible + ?Sized, + D::Error: Source, +{ + fn deserialize_with( + archived: &ArchivedVec, + deserializer: &mut D, + ) -> Result, D::Error> { + let vec: Vec = Deserialize::, D>::deserialize(archived, deserializer)?; + // FixedVector::new returns Err if vec.len() != N::to_usize() + Ok(FixedVector::new(vec).expect("deserialized FixedVector has wrong length")) + } +} + +/// Wrapper for nested VariableList types like `VariableList, N>`. +/// +/// This is used for fields like `Transactions = VariableList` +/// where `Transaction = VariableList`. +/// +/// Serializes as `Vec>` and reconstructs on deserialization. +#[derive(Debug)] +pub struct AsNestedVariableList; + +impl ArchiveWith, N>> for AsNestedVariableList +where + T: Archive, + M: Unsigned, + N: Unsigned, +{ + type Archived = ArchivedVec>; + type Resolver = VecResolver; + + fn resolve_with( + field: &VariableList, N>, + resolver: Self::Resolver, + out: Place, + ) { + ArchivedVec::resolve_from_len(field.len(), resolver, out); + } +} + +impl SerializeWith, N>, S> for AsNestedVariableList +where + T: Serialize, + M: Unsigned, + N: Unsigned, + S: Fallible + Allocator + Writer + ?Sized, +{ + fn serialize_with( + field: &VariableList, N>, + serializer: &mut S, + ) -> Result { + // Convert to Vec> and serialize that + let vecs: Vec<&[T]> = field.iter().map(|inner| inner.deref()).collect(); + + // We need to serialize as Vec> which archives to ArchivedVec> + // But we have Vec<&[T]>, so we need to serialize each slice individually + ArchivedVec::serialize_from_iter( + vecs.iter().map(|slice| { + // Each slice needs to be wrapped to serialize as ArchivedVec + SliceAsVec(slice) + }), + serializer, + ) + } +} + +/// Helper wrapper to serialize a slice as ArchivedVec +struct SliceAsVec<'a, T>(&'a [T]); + +impl Archive for SliceAsVec<'_, T> { + type Archived = ArchivedVec; + type Resolver = VecResolver; + + fn resolve(&self, resolver: Self::Resolver, out: Place) { + ArchivedVec::resolve_from_slice(self.0, resolver, out); + } +} + +impl, S: Fallible + Allocator + Writer + ?Sized> Serialize + for SliceAsVec<'_, T> +{ + fn serialize(&self, serializer: &mut S) -> Result { + ArchivedVec::serialize_from_slice(self.0, serializer) + } +} + +impl + DeserializeWith>, VariableList, N>, D> + for AsNestedVariableList +where + T: Archive, + T::Archived: Deserialize, + M: Unsigned, + N: Unsigned, + D: Fallible + ?Sized, + D::Error: Source, +{ + fn deserialize_with( + archived: &ArchivedVec>, + deserializer: &mut D, + ) -> Result, N>, D::Error> { + let mut outer = Vec::with_capacity(archived.len()); + for inner_archived in archived.iter() { + let inner_vec: Vec = + Deserialize::, D>::deserialize(inner_archived, deserializer)?; + let inner = VariableList::new(inner_vec) + .expect("deserialized inner VariableList exceeds max length"); + outer.push(inner); + } + Ok(VariableList::new(outer).expect("deserialized outer VariableList exceeds max length")) + } +} diff --git a/crates/stateless-validator-ethrex/Cargo.toml b/crates/stateless-validator-ethrex/Cargo.toml index 5929a319..d3249229 100644 --- a/crates/stateless-validator-ethrex/Cargo.toml +++ b/crates/stateless-validator-ethrex/Cargo.toml @@ -10,7 +10,7 @@ workspace = true [dependencies] anyhow.workspace = true -serde.workspace = true +rkyv.workspace = true bytes.workspace = true # alloy @@ -30,12 +30,12 @@ ethrex-vm.workspace = true reth-stateless = { workspace = true, optional = true } # ere -ere-io = { workspace = true, features = ["bincode"] } +ere-io = { workspace = true, features = ["rkyv"] } ere-zkvm-interface = { workspace = true, optional = true } # local guest.workspace = true -stateless-validator-common.workspace = true +stateless-validator-common = { workspace = true, features = ["rkyv"] } stateless-validator-reth.workspace = true [features] diff --git a/crates/stateless-validator-ethrex/src/execution_payload.rs b/crates/stateless-validator-ethrex/src/execution_payload.rs index 79fc0d5e..003a0704 100644 --- a/crates/stateless-validator-ethrex/src/execution_payload.rs +++ b/crates/stateless-validator-ethrex/src/execution_payload.rs @@ -1,6 +1,5 @@ #![allow(missing_docs)] use bytes::Bytes; - use ethrex_common::{ Address, Bloom, H256, constants::DEFAULT_OMMERS_HASH, diff --git a/crates/stateless-validator-ethrex/src/guest.rs b/crates/stateless-validator-ethrex/src/guest.rs index 77afee4e..a9a9ab16 100644 --- a/crates/stateless-validator-ethrex/src/guest.rs +++ b/crates/stateless-validator-ethrex/src/guest.rs @@ -2,13 +2,13 @@ use alloc::format; use core::fmt::Debug; -use stateless_validator_common::new_payload_request::NewPayloadRequest; -use crate::new_payload_request::get_block_from_new_payload_request; -use ere_io::serde::{IoSerde, bincode::BincodeLegacy}; +use ere_io::rkyv::IoRkyv; use ethrex_common::types::{block_execution_witness::ExecutionWitness, fee_config::FeeConfig}; use ethrex_guest_program::{execution::execution_program, input::ProgramInput}; -use serde::{Deserialize, Serialize}; +use stateless_validator_common::new_payload_request::NewPayloadRequest; + +use crate::new_payload_request::get_block_from_new_payload_request; #[rustfmt::skip] pub use { @@ -17,7 +17,7 @@ pub use { }; /// Input for the Ethrex stateless validator guest program. -#[derive(Serialize, Deserialize)] +#[derive(rkyv::Serialize, rkyv::Deserialize, rkyv::Archive)] pub struct StatelessValidatorEthrexInput { /// New payload request data. pub new_payload_request: NewPayloadRequest, @@ -84,7 +84,7 @@ impl Debug for StatelessValidatorEthrexInput { /// [`Io`] implementation of Ethrex stateless validator. pub type StatelessValidatorEthrexIo = - IoSerde; + IoRkyv; /// [`Guest`] implementation for Ethrex stateless validator. #[derive(Debug, Clone)] diff --git a/crates/stateless-validator-reth/src/host.rs b/crates/stateless-validator-reth/src/host.rs index 6741f895..f6050c3d 100644 --- a/crates/stateless-validator-reth/src/host.rs +++ b/crates/stateless-validator-reth/src/host.rs @@ -1,7 +1,6 @@ //! Implementations for host environment. use alloc::{format, vec::Vec}; -use sparsestate::SparseState; use std::sync::Arc; use alloy_consensus::Transaction; @@ -17,6 +16,7 @@ use reth_evm_ethereum::EthEvmConfig; use reth_primitives_traits::Block; pub use reth_stateless::StatelessInput; use reth_stateless::{UncompressedPublicKey, stateless_validation_with_trie}; +use sparsestate::SparseState; use ssz_types::{FixedVector, VariableList}; pub use stateless_validator_common::guest::StatelessValidatorOutput; use stateless_validator_common::new_payload_request::{ From 3560cbbae35dcdbf2db96d14843b78ea2fae9b29 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Wed, 14 Jan 2026 18:46:45 -0300 Subject: [PATCH 28/46] fix --- bin/stateless-validator-ethrex/sp1/Cargo.lock | 1738 ++--------------- crates/stateless-validator-ethrex/Cargo.toml | 3 +- 2 files changed, 120 insertions(+), 1621 deletions(-) diff --git a/bin/stateless-validator-ethrex/sp1/Cargo.lock b/bin/stateless-validator-ethrex/sp1/Cargo.lock index 450365df..5506f63d 100644 --- a/bin/stateless-validator-ethrex/sp1/Cargo.lock +++ b/bin/stateless-validator-ethrex/sp1/Cargo.lock @@ -40,181 +40,6 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" -[[package]] -name = "alloy-chains" -version = "0.2.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25db5bcdd086f0b1b9610140a12c59b757397be90bd130d8d836fc8da0815a34" -dependencies = [ - "alloy-primitives", - "alloy-rlp", - "num_enum", - "serde", - "strum", -] - -[[package]] -name = "alloy-consensus" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12870ab65b131f609257436935047eec3cfabee8809732f6bf5a69fe2a18cf2e" -dependencies = [ - "alloy-eips", - "alloy-primitives", - "alloy-rlp", - "alloy-serde", - "alloy-trie 0.9.3", - "alloy-tx-macros", - "auto_impl", - "borsh", - "c-kzg", - "derive_more 2.1.1", - "either", - "k256", - "once_cell", - "rand 0.8.5", - "secp256k1", - "serde", - "serde_json", - "serde_with", - "thiserror", -] - -[[package]] -name = "alloy-consensus-any" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47c66b14d2187de0c4efe4ef678aaa57a6a34cccdbea3a0773627fac9bd128f4" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives", - "alloy-rlp", - "alloy-serde", - "serde", -] - -[[package]] -name = "alloy-eip2124" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "741bdd7499908b3aa0b159bba11e71c8cddd009a2c2eb7a06e825f1ec87900a5" -dependencies = [ - "alloy-primitives", - "alloy-rlp", - "crc", - "serde", - "thiserror", -] - -[[package]] -name = "alloy-eip2930" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9441120fa82df73e8959ae0e4ab8ade03de2aaae61be313fbf5746277847ce25" -dependencies = [ - "alloy-primitives", - "alloy-rlp", - "borsh", - "serde", -] - -[[package]] -name = "alloy-eip7702" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2919c5a56a1007492da313e7a3b6d45ef5edc5d33416fdec63c0d7a2702a0d20" -dependencies = [ - "alloy-primitives", - "alloy-rlp", - "borsh", - "k256", - "serde", - "serde_with", - "thiserror", -] - -[[package]] -name = "alloy-eips" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f076d25ddfcd2f1cbcc234e072baf97567d1df0e3fccdc1f8af8cc8b18dc6299" -dependencies = [ - "alloy-eip2124", - "alloy-eip2930", - "alloy-eip7702", - "alloy-primitives", - "alloy-rlp", - "alloy-serde", - "auto_impl", - "borsh", - "c-kzg", - "derive_more 2.1.1", - "either", - "serde", - "serde_with", - "sha2", - "thiserror", -] - -[[package]] -name = "alloy-evm" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01be36ba6f5e6e62563b369e03ca529eac46aea50677f84655084b4750816574" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-hardforks", - "alloy-primitives", - "alloy-sol-types", - "auto_impl", - "derive_more 2.1.1", - "revm", - "thiserror", -] - -[[package]] -name = "alloy-genesis" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d424ac007b5f89d65eecb4ed6cc5ca74cbaf231f471789a8158fdf4cc5f446" -dependencies = [ - "alloy-eips", - "alloy-primitives", - "alloy-serde", - "alloy-trie 0.9.3", - "borsh", - "serde", - "serde_with", -] - -[[package]] -name = "alloy-hardforks" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83ba208044232d14d4adbfa77e57d6329f51bc1acc21f5667bb7db72d88a0831" -dependencies = [ - "alloy-chains", - "alloy-eip2124", - "alloy-primitives", - "auto_impl", - "dyn-clone", -] - -[[package]] -name = "alloy-network-primitives" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fba5c43e055effb5bd33dbc74b1ab7fe0f367d8801a25af9e7c716b3ef5e440b" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives", - "alloy-serde", - "serde", -] - [[package]] name = "alloy-primitives" version = "1.5.2" @@ -249,184 +74,10 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f70d83b765fdc080dbcd4f4db70d8d23fe4761f2f02ebfa9146b833900634b4" dependencies = [ - "alloy-rlp-derive", "arrayvec", "bytes", ] -[[package]] -name = "alloy-rlp-derive" -version = "0.3.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "alloy-rpc-types-debug" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccb37a9eee8e7a19bb07b5cd55d33457884e44b212588b7429c5d318d2b90295" -dependencies = [ - "alloy-primitives", - "derive_more 2.1.1", - "serde", - "serde_with", -] - -[[package]] -name = "alloy-rpc-types-engine" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95157286826aa7bb5463a5f4188266bbf2555db1fd53bb814a4b35c106f2a498" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives", - "alloy-rlp", - "alloy-serde", - "derive_more 2.1.1", - "rand 0.8.5", - "serde", - "strum", -] - -[[package]] -name = "alloy-rpc-types-eth" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec734cce11f7fe889950b36b51589397528b26beb6f890834a2131ee9f174d7" -dependencies = [ - "alloy-consensus", - "alloy-consensus-any", - "alloy-eips", - "alloy-network-primitives", - "alloy-primitives", - "alloy-rlp", - "alloy-serde", - "alloy-sol-types", - "itertools 0.14.0", - "serde", - "serde_json", - "serde_with", - "thiserror", -] - -[[package]] -name = "alloy-serde" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27f076bfd74fccc63d50546e1765359736357a953de2eb778b7b6191571735e6" -dependencies = [ - "alloy-primitives", - "serde", - "serde_json", -] - -[[package]] -name = "alloy-sol-macro" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09eb18ce0df92b4277291bbaa0ed70545d78b02948df756bbd3d6214bf39a218" -dependencies = [ - "alloy-sol-macro-expander", - "alloy-sol-macro-input", - "proc-macro-error2", - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "alloy-sol-macro-expander" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95d9fa2daf21f59aa546d549943f10b5cce1ae59986774019fbedae834ffe01b" -dependencies = [ - "alloy-sol-macro-input", - "const-hex", - "heck", - "indexmap 2.12.1", - "proc-macro-error2", - "proc-macro2", - "quote", - "syn 2.0.111", - "syn-solidity", - "tiny-keccak", -] - -[[package]] -name = "alloy-sol-macro-input" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9396007fe69c26ee118a19f4dee1f5d1d6be186ea75b3881adf16d87f8444686" -dependencies = [ - "const-hex", - "dunce", - "heck", - "macro-string", - "proc-macro2", - "quote", - "syn 2.0.111", - "syn-solidity", -] - -[[package]] -name = "alloy-sol-types" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09aeea64f09a7483bdcd4193634c7e5cf9fd7775ee767585270cd8ce2d69dc95" -dependencies = [ - "alloy-primitives", - "alloy-sol-macro", -] - -[[package]] -name = "alloy-trie" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "983d99aa81f586cef9dae38443245e585840fcf0fc58b09aee0b1f27aed1d500" -dependencies = [ - "alloy-primitives", - "alloy-rlp", - "arrayvec", - "derive_more 2.1.1", - "nybbles 0.3.4", - "smallvec", - "tracing", -] - -[[package]] -name = "alloy-trie" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "428aa0f0e0658ff091f8f667c406e034b431cb10abd39de4f507520968acc499" -dependencies = [ - "alloy-primitives", - "alloy-rlp", - "arrayvec", - "derive_more 2.1.1", - "nybbles 0.4.7", - "serde", - "smallvec", - "tracing", -] - -[[package]] -name = "alloy-tx-macros" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0d567f4830dea921868c7680004ae0c7f221b05e6477db6c077c7953698f56" -dependencies = [ - "darling 0.21.3", - "proc-macro2", - "quote", - "syn 2.0.111", -] - [[package]] name = "android_system_properties" version = "0.1.5" @@ -492,18 +143,6 @@ version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" -[[package]] -name = "ark-bls12-381" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df4dcc01ff89867cd86b0da835f23c3f02738353aaee7dde7495af71363b8d5" -dependencies = [ - "ark-ec", - "ark-ff 0.5.0", - "ark-serialize 0.5.0", - "ark-std 0.5.0", -] - [[package]] name = "ark-bn254" version = "0.5.0" @@ -763,9 +402,6 @@ name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" -dependencies = [ - "serde", -] [[package]] name = "async-trait" @@ -778,16 +414,6 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "aurora-engine-modexp" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518bc5745a6264b5fd7b09dffb9667e400ee9e2bbe18555fac75e1fe9afa0df9" -dependencies = [ - "hex", - "num", -] - [[package]] name = "auto_impl" version = "1.3.0" @@ -838,16 +464,6 @@ dependencies = [ "serde", ] -[[package]] -name = "bincode" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740" -dependencies = [ - "serde", - "unty", -] - [[package]] name = "bit-set" version = "0.8.0" @@ -863,30 +479,11 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" -[[package]] -name = "bitcoin-io" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dee39a0ee5b4095224a0cfc6bf4cc1baf0f9624b96b367e53b66d974e51d953" - -[[package]] -name = "bitcoin_hashes" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26ec84b80c482df901772e931a9a681e26a1b9ee2302edeff23cb30328745c8b" -dependencies = [ - "bitcoin-io", - "hex-conservative", -] - [[package]] name = "bitflags" version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" -dependencies = [ - "serde_core", -] [[package]] name = "bitvec" @@ -896,7 +493,6 @@ checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", "radium", - "serde", "tap", "wyz", ] @@ -939,41 +535,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "blst" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcdb4c7013139a150f9fc55d123186dbfaba0d912817466282c73ac49e71fb45" -dependencies = [ - "cc", - "glob", - "threadpool", - "zeroize", -] - -[[package]] -name = "borsh" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1da5ab77c1437701eeff7c88d968729e7766172279eab0676857b3d63af7a6f" -dependencies = [ - "borsh-derive", - "cfg_aliases", -] - -[[package]] -name = "borsh-derive" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0686c856aa6aac0c4498f936d7d6a02df690f614c03e4d906d1018062b5c5e2c" -dependencies = [ - "once_cell", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.111", -] - [[package]] name = "bumpalo" version = "3.19.0" @@ -1044,21 +605,6 @@ dependencies = [ "serde", ] -[[package]] -name = "c-kzg" -version = "2.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e00bf4b112b07b505472dbefd19e37e53307e2bfed5a79e0cc161d58ccd0e687" -dependencies = [ - "blst", - "cc", - "glob", - "hex", - "libc", - "once_cell", - "serde", -] - [[package]] name = "camino" version = "1.2.1" @@ -1072,8 +618,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd405d82c84ff7f35739f175f67d8b9fb7687a0e84ccdc78bd3568839827cf07" dependencies = [ "find-msvc-tools", - "jobserver", - "libc", "shlex", ] @@ -1083,12 +627,6 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" -[[package]] -name = "cfg_aliases" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - [[package]] name = "chrono" version = "0.4.42" @@ -1230,21 +768,6 @@ dependencies = [ "libc", ] -[[package]] -name = "crc" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" - [[package]] name = "crc32fast" version = "1.5.0" @@ -1387,7 +910,6 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "serde", "strsim", "syn 2.0.111", ] @@ -1458,17 +980,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "derive-where" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - [[package]] name = "derive_more" version = "1.0.0" @@ -1546,12 +1057,6 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "dunce" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" - [[package]] name = "dyn-clone" version = "1.0.20" @@ -1567,7 +1072,6 @@ dependencies = [ "digest 0.10.7", "elliptic-curve", "rfc6979", - "serdect", "signature", "spki", ] @@ -1589,9 +1093,6 @@ name = "either" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" -dependencies = [ - "serde", -] [[package]] name = "elliptic-curve" @@ -1610,7 +1111,6 @@ dependencies = [ "pkcs8", "rand_core 0.6.4", "sec1", - "serdect", "subtle", "zeroize", ] @@ -1658,9 +1158,7 @@ name = "ere-io" version = "0.0.16" source = "git+https://github.com/eth-act/ere?rev=ec75f8a26657ddbf7efc44cdb3167fff4f55fe27#ec75f8a26657ddbf7efc44cdb3167fff4f55fe27" dependencies = [ - "bincode 2.0.1", "rkyv", - "serde", ] [[package]] @@ -1978,7 +1476,7 @@ name = "ethrex-vm" version = "8.0.0" source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ - "bincode 1.3.3", + "bincode", "bytes", "derive_more 1.0.0", "dyn-clone", @@ -2198,12 +1696,6 @@ dependencies = [ "wasip2", ] -[[package]] -name = "glob" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" - [[package]] name = "group" version = "0.13.0" @@ -2229,7 +1721,7 @@ name = "guest_program" version = "8.0.0" source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1#e6d70854d0fe3b0f29ed8961e5cbfc5de7bdd7d1" dependencies = [ - "bincode 1.3.3", + "bincode", "bytes", "ethrex-blockchain", "ethrex-common", @@ -2282,27 +1774,12 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hermit-abi" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" - [[package]] name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "hex-conservative" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda06d18ac606267c40c04e41b9947729bf8b9efe74bd4e82b61a5f26a510b9f" -dependencies = [ - "arrayvec", -] - [[package]] name = "hex-literal" version = "0.4.1" @@ -2577,16 +2054,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" -[[package]] -name = "jobserver" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" -dependencies = [ - "getrandom 0.3.4", - "libc", -] - [[package]] name = "js-sys" version = "0.3.82" @@ -2607,7 +2074,6 @@ dependencies = [ "elliptic-curve", "hex", "once_cell", - "serdect", "sha2", "signature", "sp1-lib", @@ -2741,17 +2207,6 @@ dependencies = [ "hashbrown 0.16.1", ] -[[package]] -name = "macro-string" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - [[package]] name = "malachite" version = "0.6.1" @@ -2813,38 +2268,6 @@ version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" -[[package]] -name = "modular-bitfield" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a53d79ba8304ac1c4f9eb3b9d281f21f7be9d4626f72ce7df4ad8fbde4f38a74" -dependencies = [ - "modular-bitfield-impl", - "static_assertions", -] - -[[package]] -name = "modular-bitfield-impl" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a7d5f7076603ebc68de2dc6a650ec331a062a13abaa346975be747bbfa4b789" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "mpt" -version = "0.1.0" -source = "git+https://github.com/eth-act/zkvm-ethereum-mpt.git?tag=v0.4.0#d4d8f968c183aedc23100c3a5634dee14c320757" -dependencies = [ - "alloy-primitives", - "alloy-rlp", - "alloy-trie 0.8.1", - "arrayvec", -] - [[package]] name = "munge" version = "0.4.7" @@ -2874,20 +2297,6 @@ dependencies = [ "windows-sys", ] -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-bigint 0.4.6", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - [[package]] name = "num-bigint" version = "0.3.3" @@ -2909,15 +2318,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" -dependencies = [ - "num-traits", -] - [[package]] name = "num-conv" version = "0.1.0" @@ -2933,28 +2333,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint 0.4.6", - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -2965,70 +2343,11 @@ dependencies = [ "libm", ] -[[package]] -name = "num_cpus" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" -dependencies = [ - "num_enum_derive", - "rustversion", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "nybbles" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8983bb634df7248924ee0c4c3a749609b5abcb082c28fffe3254b3eb3602b307" -dependencies = [ - "const-hex", - "smallvec", -] - -[[package]] -name = "nybbles" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5676b5c379cf5b03da1df2b3061c4a4e2aa691086a56ac923e08c143f53f59" -dependencies = [ - "alloy-rlp", - "cfg-if", - "proptest", - "ruint", - "serde", - "smallvec", -] - [[package]] name = "once_cell" version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -dependencies = [ - "critical-section", - "portable-atomic", -] [[package]] name = "once_cell_polyfill" @@ -3036,23 +2355,6 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" -[[package]] -name = "op-alloy-consensus" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "726da827358a547be9f1e37c2a756b9e3729cb0350f43408164794b370cad8ae" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives", - "alloy-rlp", - "alloy-serde", - "derive_more 2.1.1", - "serde", - "serde_with", - "thiserror", -] - [[package]] name = "p256" version = "0.13.2" @@ -3247,82 +2549,27 @@ dependencies = [ ] [[package]] -name = "phf" -version = "0.13.1" +name = "pin-project-lite" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" -dependencies = [ - "phf_macros", - "phf_shared", - "serde", -] +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] -name = "phf_generator" -version = "0.13.1" +name = "pin-utils" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" -dependencies = [ - "fastrand", - "phf_shared", -] +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] -name = "phf_macros" -version = "0.13.1" +name = "pkcs8" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "phf_generator", - "phf_shared", - "proc-macro2", - "quote", - "syn 2.0.111", + "der", + "spki", ] -[[package]] -name = "phf_shared" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - -[[package]] -name = "portable-atomic" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" - [[package]] name = "potential_utf" version = "0.1.4" @@ -3388,28 +2635,6 @@ dependencies = [ "toml_edit", ] -[[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "proc-macro-error2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" -dependencies = [ - "proc-macro-error-attr2", - "proc-macro2", - "quote", - "syn 2.0.111", -] - [[package]] name = "proc-macro2" version = "1.0.103" @@ -3459,777 +2684,193 @@ dependencies = [ ] [[package]] -name = "qfilter" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "746341cd2357c9a4df2d951522b4a8dd1ef553e543119899ad7bf87e938c8fbe" -dependencies = [ - "xxhash-rust", -] - -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - -[[package]] -name = "quote" -version = "1.0.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rancor" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a063ea72381527c2a0561da9c80000ef822bdd7c3241b1cc1b12100e3df081ee" -dependencies = [ - "ptr_meta", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", - "serde", -] - -[[package]] -name = "rand" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" -dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.5", - "serde", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core 0.9.5", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.16", -] - -[[package]] -name = "rand_core" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" -dependencies = [ - "getrandom 0.3.4", - "serde", -] - -[[package]] -name = "rand_xorshift" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" -dependencies = [ - "rand_core 0.9.5", -] - -[[package]] -name = "rapidhash" -version = "4.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d8b5b858a440a0bc02625b62dd95131b9201aa9f69f411195dd4a7cfb1de3d7" -dependencies = [ - "rustversion", -] - -[[package]] -name = "rayon" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "ref-cast" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" -dependencies = [ - "ref-cast-impl", -] - -[[package]] -name = "ref-cast-impl" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "regex-automata" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" - -[[package]] -name = "rend" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadadef317c2f20755a64d7fdc48f9e7178ee6b0e1f7fce33fa60f1d68a276e6" -dependencies = [ - "bytecheck", -] - -[[package]] -name = "reth-chainspec" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" -dependencies = [ - "alloy-chains", - "alloy-consensus", - "alloy-eips", - "alloy-evm", - "alloy-genesis", - "alloy-primitives", - "alloy-trie 0.9.3", - "auto_impl", - "derive_more 2.1.1", - "reth-ethereum-forks", - "reth-network-peers", - "reth-primitives-traits", - "serde_json", -] - -[[package]] -name = "reth-codecs" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-genesis", - "alloy-primitives", - "alloy-trie 0.9.3", - "bytes", - "modular-bitfield", - "op-alloy-consensus", - "reth-codecs-derive", - "reth-zstd-compressors", - "serde", -] - -[[package]] -name = "reth-codecs-derive" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "reth-consensus" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" -dependencies = [ - "alloy-consensus", - "alloy-primitives", - "auto_impl", - "reth-execution-types", - "reth-primitives-traits", - "thiserror", -] - -[[package]] -name = "reth-consensus-common" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "reth-chainspec", - "reth-consensus", - "reth-primitives-traits", -] - -[[package]] -name = "reth-db-models" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" -dependencies = [ - "alloy-eips", - "alloy-primitives", - "reth-primitives-traits", -] - -[[package]] -name = "reth-errors" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" -dependencies = [ - "reth-consensus", - "reth-execution-errors", - "reth-storage-errors", - "thiserror", -] - -[[package]] -name = "reth-ethereum-consensus" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives", - "reth-chainspec", - "reth-consensus", - "reth-consensus-common", - "reth-execution-types", - "reth-primitives-traits", - "tracing", -] - -[[package]] -name = "reth-ethereum-forks" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" -dependencies = [ - "alloy-eip2124", - "alloy-hardforks", - "alloy-primitives", - "auto_impl", - "once_cell", -] - -[[package]] -name = "reth-ethereum-primitives" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives", - "alloy-rlp", - "alloy-rpc-types-eth", - "alloy-serde", - "reth-codecs", - "reth-primitives-traits", - "serde", - "serde_with", -] - -[[package]] -name = "reth-evm" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-evm", - "alloy-primitives", - "auto_impl", - "derive_more 2.1.1", - "futures-util", - "reth-execution-errors", - "reth-execution-types", - "reth-primitives-traits", - "reth-storage-api", - "reth-storage-errors", - "reth-trie-common", - "revm", -] - -[[package]] -name = "reth-evm-ethereum" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-evm", - "alloy-primitives", - "alloy-rpc-types-engine", - "reth-chainspec", - "reth-ethereum-forks", - "reth-ethereum-primitives", - "reth-evm", - "reth-execution-types", - "reth-primitives-traits", - "reth-storage-errors", - "revm", -] - -[[package]] -name = "reth-execution-errors" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" -dependencies = [ - "alloy-evm", - "alloy-primitives", - "alloy-rlp", - "nybbles 0.4.7", - "reth-storage-errors", - "thiserror", -] - -[[package]] -name = "reth-execution-types" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-evm", - "alloy-primitives", - "derive_more 2.1.1", - "reth-ethereum-primitives", - "reth-primitives-traits", - "reth-trie-common", - "revm", -] - -[[package]] -name = "reth-network-peers" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" -dependencies = [ - "alloy-primitives", - "alloy-rlp", - "serde_with", - "thiserror", - "url", -] - -[[package]] -name = "reth-payload-validator" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" -dependencies = [ - "alloy-consensus", - "alloy-rpc-types-engine", - "reth-primitives-traits", -] - -[[package]] -name = "reth-primitives-traits" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-genesis", - "alloy-primitives", - "alloy-rlp", - "alloy-rpc-types-eth", - "alloy-trie 0.9.3", - "auto_impl", - "bytes", - "derive_more 2.1.1", - "once_cell", - "op-alloy-consensus", - "reth-codecs", - "revm-bytecode", - "revm-primitives", - "revm-state", - "secp256k1", - "serde", - "serde_with", - "thiserror", -] - -[[package]] -name = "reth-prune-types" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" -dependencies = [ - "alloy-primitives", - "derive_more 2.1.1", - "strum", - "thiserror", -] - -[[package]] -name = "reth-revm" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" -dependencies = [ - "alloy-primitives", - "reth-primitives-traits", - "reth-storage-api", - "reth-storage-errors", - "revm", -] - -[[package]] -name = "reth-stages-types" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +name = "qfilter" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "746341cd2357c9a4df2d951522b4a8dd1ef553e543119899ad7bf87e938c8fbe" dependencies = [ - "alloy-primitives", - "reth-trie-common", + "xxhash-rust", ] [[package]] -name = "reth-stateless" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" -dependencies = [ - "alloy-consensus", - "alloy-genesis", - "alloy-primitives", - "alloy-rlp", - "alloy-rpc-types-debug", - "alloy-trie 0.9.3", - "itertools 0.14.0", - "reth-chainspec", - "reth-consensus", - "reth-errors", - "reth-ethereum-consensus", - "reth-ethereum-primitives", - "reth-evm", - "reth-primitives-traits", - "reth-revm", - "reth-trie-common", - "reth-trie-sparse", - "serde", - "serde_with", - "thiserror", -] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] -name = "reth-static-file-types" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +name = "quote" +version = "1.0.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" dependencies = [ - "alloy-primitives", - "derive_more 2.1.1", - "serde", - "strum", + "proc-macro2", ] [[package]] -name = "reth-storage-api" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives", - "alloy-rpc-types-engine", - "auto_impl", - "reth-chainspec", - "reth-db-models", - "reth-ethereum-primitives", - "reth-execution-types", - "reth-primitives-traits", - "reth-prune-types", - "reth-stages-types", - "reth-storage-errors", - "reth-trie-common", - "revm-database", -] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] -name = "reth-storage-errors" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rancor" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a063ea72381527c2a0561da9c80000ef822bdd7c3241b1cc1b12100e3df081ee" dependencies = [ - "alloy-eips", - "alloy-primitives", - "alloy-rlp", - "derive_more 2.1.1", - "reth-primitives-traits", - "reth-prune-types", - "reth-static-file-types", - "revm-database-interface", - "thiserror", + "ptr_meta", ] [[package]] -name = "reth-trie-common" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ - "alloy-consensus", - "alloy-primitives", - "alloy-rlp", - "alloy-trie 0.9.3", - "derive_more 2.1.1", - "itertools 0.14.0", - "nybbles 0.4.7", - "reth-primitives-traits", - "revm-database", + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", ] [[package]] -name = "reth-trie-sparse" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ - "alloy-primitives", - "alloy-rlp", - "alloy-trie 0.9.3", - "auto_impl", - "reth-execution-errors", - "reth-primitives-traits", - "reth-trie-common", - "smallvec", - "tracing", + "rand_chacha 0.9.0", + "rand_core 0.9.5", + "serde", ] [[package]] -name = "reth-zstd-compressors" -version = "1.9.3" -source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ - "zstd", + "ppv-lite86", + "rand_core 0.6.4", ] [[package]] -name = "revm" -version = "33.1.0" +name = "rand_chacha" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c85ed0028f043f87b3c88d4a4cb6f0a76440085523b6a8afe5ff003cf418054" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ - "revm-bytecode", - "revm-context", - "revm-context-interface", - "revm-database", - "revm-database-interface", - "revm-handler", - "revm-inspector", - "revm-interpreter", - "revm-precompile", - "revm-primitives", - "revm-state", + "ppv-lite86", + "rand_core 0.9.5", ] [[package]] -name = "revm-bytecode" -version = "7.1.1" +name = "rand_core" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2c6b5e6e8dd1e28a4a60e5f46615d4ef0809111c9e63208e55b5c7058200fb0" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "bitvec", - "phf", - "revm-primitives", - "serde", + "getrandom 0.2.16", ] [[package]] -name = "revm-context" -version = "12.1.0" +name = "rand_core" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f038f0c9c723393ac897a5df9140b21cfa98f5753a2cb7d0f28fa430c4118abf" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ - "bitvec", - "cfg-if", - "derive-where", - "revm-bytecode", - "revm-context-interface", - "revm-database-interface", - "revm-primitives", - "revm-state", + "getrandom 0.3.4", + "serde", ] [[package]] -name = "revm-context-interface" -version = "13.1.0" +name = "rand_xorshift" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "431c9a14e4ef1be41ae503708fd02d974f80ef1f2b6b23b5e402e8d854d1b225" +checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" dependencies = [ - "alloy-eip2930", - "alloy-eip7702", - "auto_impl", - "either", - "revm-database-interface", - "revm-primitives", - "revm-state", + "rand_core 0.9.5", ] [[package]] -name = "revm-database" -version = "9.0.6" +name = "rapidhash" +version = "4.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "980d8d6bba78c5dd35b83abbb6585b0b902eb25ea4448ed7bfba6283b0337191" +checksum = "5d8b5b858a440a0bc02625b62dd95131b9201aa9f69f411195dd4a7cfb1de3d7" dependencies = [ - "revm-bytecode", - "revm-database-interface", - "revm-primitives", - "revm-state", + "rustversion", ] [[package]] -name = "revm-database-interface" -version = "8.0.5" +name = "rayon" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cce03e3780287b07abe58faf4a7f5d8be7e81321f93ccf3343c8f7755602bae" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ - "auto_impl", "either", - "revm-primitives", - "revm-state", + "rayon-core", ] [[package]] -name = "revm-handler" -version = "14.1.0" +name = "rayon-core" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d44f8f6dbeec3fecf9fe55f78ef0a758bdd92ea46cd4f1ca6e2a946b32c367f3" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ - "auto_impl", - "derive-where", - "revm-bytecode", - "revm-context", - "revm-context-interface", - "revm-database-interface", - "revm-interpreter", - "revm-precompile", - "revm-primitives", - "revm-state", + "crossbeam-deque", + "crossbeam-utils", ] [[package]] -name = "revm-inspector" -version = "14.1.0" +name = "ref-cast" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5617e49216ce1ca6c8826bcead0386bc84f49359ef67cde6d189961735659f93" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" dependencies = [ - "auto_impl", - "either", - "revm-context", - "revm-database-interface", - "revm-handler", - "revm-interpreter", - "revm-primitives", - "revm-state", + "ref-cast-impl", ] [[package]] -name = "revm-interpreter" -version = "31.1.0" +name = "ref-cast-impl" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26ec36405f7477b9dccdc6caa3be19adf5662a7a0dffa6270cdb13a090c077e5" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ - "revm-bytecode", - "revm-context-interface", - "revm-primitives", - "revm-state", + "proc-macro2", + "quote", + "syn 2.0.111", ] [[package]] -name = "revm-precompile" -version = "31.0.0" +name = "regex-automata" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a62958af953cc4043e93b5be9b8497df84cc3bd612b865c49a7a7dfa26a84e2" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ - "ark-bls12-381", - "ark-bn254", - "ark-ec", - "ark-ff 0.5.0", - "ark-serialize 0.5.0", - "arrayref", - "aurora-engine-modexp", - "cfg-if", - "k256", - "p256", - "revm-primitives", - "ripemd", - "sha2", + "aho-corasick", + "memchr", + "regex-syntax", ] [[package]] -name = "revm-primitives" -version = "21.0.2" +name = "regex-syntax" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29e161db429d465c09ba9cbff0df49e31049fe6b549e28eb0b7bd642fcbd4412" -dependencies = [ - "alloy-primitives", - "num_enum", - "once_cell", - "serde", -] +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] -name = "revm-state" -version = "8.1.1" +name = "rend" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d8be953b7e374dbdea0773cf360debed8df394ea8d82a8b240a6b5da37592fc" +checksum = "cadadef317c2f20755a64d7fdc48f9e7178ee6b0e1f7fce33fa60f1d68a276e6" dependencies = [ - "bitflags", - "revm-bytecode", - "revm-primitives", - "serde", + "bytecheck", ] [[package]] @@ -4465,32 +3106,10 @@ dependencies = [ "der", "generic-array", "pkcs8", - "serdect", "subtle", "zeroize", ] -[[package]] -name = "secp256k1" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252" -dependencies = [ - "bitcoin_hashes", - "rand 0.8.5", - "secp256k1-sys", - "serde", -] - -[[package]] -name = "secp256k1-sys" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" -dependencies = [ - "cc", -] - [[package]] name = "semver" version = "0.11.0" @@ -4598,16 +3217,6 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "serdect" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" -dependencies = [ - "base16ct", - "serde", -] - [[package]] name = "sha2" version = "0.10.9" @@ -4668,12 +3277,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" -[[package]] -name = "siphasher" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" - [[package]] name = "slab" version = "0.4.11" @@ -4685,9 +3288,6 @@ name = "smallvec" version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" -dependencies = [ - "serde", -] [[package]] name = "snap" @@ -4701,7 +3301,7 @@ version = "5.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b73b8ff343f2405d5935440e56b7aba5cee6d87303f0051974cbd6f5de502f57" dependencies = [ - "bincode 1.3.3", + "bincode", "elliptic-curve", "serde", "sp1-primitives", @@ -4713,7 +3313,7 @@ version = "5.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e69a03098f827102c54c31a5e57280eb45b2c085de433b3f702e4f9e3ec1641" dependencies = [ - "bincode 1.3.3", + "bincode", "blake3", "cfg-if", "hex", @@ -4761,21 +3361,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "sparsestate" -version = "0.1.0" -source = "git+https://github.com/eth-act/zkvm-ethereum-mpt.git?tag=v0.4.0#d4d8f968c183aedc23100c3a5634dee14c320757" -dependencies = [ - "alloy-primitives", - "alloy-rlp", - "alloy-trie 0.9.3", - "mpt", - "reth-errors", - "reth-revm", - "reth-stateless", - "reth-trie-common", -] - [[package]] name = "spin" version = "0.9.8" @@ -4845,7 +3430,6 @@ dependencies = [ "guest_program", "rkyv", "stateless-validator-common", - "stateless-validator-reth", ] [[package]] @@ -4856,37 +3440,6 @@ dependencies = [ "stateless-validator-ethrex", ] -[[package]] -name = "stateless-validator-reth" -version = "0.1.0" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-genesis", - "alloy-primitives", - "alloy-rlp", - "alloy-rpc-types-engine", - "anyhow", - "ere-io", - "ethereum_ssz", - "guest", - "once_cell", - "reth-chainspec", - "reth-ethereum-primitives", - "reth-evm-ethereum", - "reth-payload-validator", - "reth-primitives-traits", - "reth-stateless", - "serde", - "serde_with", - "sha2", - "sparsestate", - "ssz_types", - "stateless-validator-common", - "tree_hash", - "tree_hash_derive", -] - [[package]] name = "static_assertions" version = "1.1.0" @@ -4977,18 +3530,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "syn-solidity" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f92d01b5de07eaf324f7fca61cc6bd3d82bbc1de5b6c963e6fe79e86f36580d" -dependencies = [ - "paste", - "proc-macro2", - "quote", - "syn 2.0.111", -] - [[package]] name = "synstructure" version = "0.13.2" @@ -5048,15 +3589,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "threadpool" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" -dependencies = [ - "num_cpus", -] - [[package]] name = "time" version = "0.3.44" @@ -5328,12 +3860,6 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" -[[package]] -name = "unty" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" - [[package]] name = "url" version = "2.5.7" @@ -5698,31 +4224,3 @@ dependencies = [ "quote", "syn 2.0.111", ] - -[[package]] -name = "zstd" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "7.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" -dependencies = [ - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.16+zstd.1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" -dependencies = [ - "cc", - "pkg-config", -] diff --git a/crates/stateless-validator-ethrex/Cargo.toml b/crates/stateless-validator-ethrex/Cargo.toml index d3249229..35f3f71f 100644 --- a/crates/stateless-validator-ethrex/Cargo.toml +++ b/crates/stateless-validator-ethrex/Cargo.toml @@ -36,7 +36,7 @@ ere-zkvm-interface = { workspace = true, optional = true } # local guest.workspace = true stateless-validator-common = { workspace = true, features = ["rkyv"] } -stateless-validator-reth.workspace = true +stateless-validator-reth = { workspace = true, optional = true } [features] # guest @@ -58,4 +58,5 @@ host = [ "dep:ere-zkvm-interface", "dep:ethrex-rpc", "dep:reth-stateless", + "dep:stateless-validator-reth", ] From 821b4204055b7ec2771f0696e4ea802c89a952a1 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Thu, 15 Jan 2026 09:09:11 -0300 Subject: [PATCH 29/46] add ethrex payload validation checks --- .../src/execution_payload.rs | 55 +++++++++++++++++++ .../src/new_payload_request.rs | 9 ++- 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/crates/stateless-validator-ethrex/src/execution_payload.rs b/crates/stateless-validator-ethrex/src/execution_payload.rs index 003a0704..85f7c319 100644 --- a/crates/stateless-validator-ethrex/src/execution_payload.rs +++ b/crates/stateless-validator-ethrex/src/execution_payload.rs @@ -1,4 +1,5 @@ #![allow(missing_docs)] +use anyhow::Result; use bytes::Bytes; use ethrex_common::{ Address, Bloom, H256, @@ -90,3 +91,57 @@ impl EncodedTransaction { Transaction::decode_canonical(self.0.as_ref()) } } + +pub fn validate_execution_payload_v1(payload: &ExecutionPayload) -> Result<()> { + // Validate that only the required arguments are present + anyhow::ensure!( + payload.withdrawals.is_none(), + "withdrawals field is not allowed in ExecutionPayloadV1" + ); + anyhow::ensure!( + payload.blob_gas_used.is_none(), + "blob_gas_used field is not allowed in ExecutionPayloadV1" + ); + anyhow::ensure!( + payload.excess_blob_gas.is_none(), + "excess_blob_gas field is not allowed in ExecutionPayloadV1" + ); + + Ok(()) +} + +pub fn validate_execution_payload_v2(payload: &ExecutionPayload) -> Result<()> { + // Validate that only the required arguments are present + anyhow::ensure!( + payload.withdrawals.is_some(), + "withdrawals field is required in ExecutionPayloadV2" + ); + anyhow::ensure!( + payload.blob_gas_used.is_none(), + "blob_gas_used field is not allowed in ExecutionPayloadV2" + ); + anyhow::ensure!( + payload.excess_blob_gas.is_none(), + "excess_blob_gas field is not allowed in ExecutionPayloadV2" + ); + + Ok(()) +} + +pub fn validate_execution_payload_v3(payload: &ExecutionPayload) -> Result<()> { + // Validate that only the required arguments are present + anyhow::ensure!( + payload.withdrawals.is_some(), + "withdrawals field is required in ExecutionPayloadV3" + ); + anyhow::ensure!( + payload.blob_gas_used.is_some(), + "blob_gas_used field is required in ExecutionPayloadV3" + ); + anyhow::ensure!( + payload.excess_blob_gas.is_some(), + "excess_blob_gas field is required in ExecutionPayloadV3" + ); + + Ok(()) +} diff --git a/crates/stateless-validator-ethrex/src/new_payload_request.rs b/crates/stateless-validator-ethrex/src/new_payload_request.rs index 9d5f1377..234a8b42 100644 --- a/crates/stateless-validator-ethrex/src/new_payload_request.rs +++ b/crates/stateless-validator-ethrex/src/new_payload_request.rs @@ -7,22 +7,28 @@ use stateless_validator_common::new_payload_request::{ compute_requests_hash, }; -use crate::execution_payload::{EncodedTransaction, ExecutionPayload}; +use crate::execution_payload::{ + EncodedTransaction, ExecutionPayload, validate_execution_payload_v1, + validate_execution_payload_v2, validate_execution_payload_v3, +}; /// Converts a [`NewPayloadRequest`] into an ethrex [`Block`]. pub fn get_block_from_new_payload_request(req: NewPayloadRequest) -> Result { match req { NewPayloadRequest::Bellatrix(b) => { let payload = convert_v1_to_ethrex(b.execution_payload); + validate_execution_payload_v1(&payload).context("V1 payload validation failed")?; payload.into_block(None, None).context("into_block failed") } NewPayloadRequest::Capella(c) => { let payload = convert_v2_to_ethrex(c.execution_payload); + validate_execution_payload_v2(&payload).context("V2 payload validation failed")?; payload.into_block(None, None).context("into_block failed") } NewPayloadRequest::Deneb(d) => { let parent_beacon_block_root = Some(H256::from(d.parent_beacon_block_root)); let payload = convert_v3_to_ethrex(d.execution_payload); + validate_execution_payload_v3(&payload).context("V3 payload validation failed")?; payload .into_block(parent_beacon_block_root, None) .context("into_block failed") @@ -31,6 +37,7 @@ pub fn get_block_from_new_payload_request(req: NewPayloadRequest) -> Result Date: Thu, 15 Jan 2026 09:40:19 -0300 Subject: [PATCH 30/46] make serde conditional for common --- crates/stateless-validator-common/src/lib.rs | 3 + .../src/new_payload_request.rs | 63 ++++++++++--------- .../src/serde_wrappers.rs | 27 ++++++++ 3 files changed, 64 insertions(+), 29 deletions(-) create mode 100644 crates/stateless-validator-common/src/serde_wrappers.rs diff --git a/crates/stateless-validator-common/src/lib.rs b/crates/stateless-validator-common/src/lib.rs index 03558a30..5d7cd8a7 100644 --- a/crates/stateless-validator-common/src/lib.rs +++ b/crates/stateless-validator-common/src/lib.rs @@ -10,5 +10,8 @@ pub mod new_payload_request; #[cfg(feature = "rkyv")] pub mod rkyv_wrappers; +#[cfg(feature = "serde")] +pub mod serde_wrappers; + #[cfg(feature = "host")] pub mod host; diff --git a/crates/stateless-validator-common/src/new_payload_request.rs b/crates/stateless-validator-common/src/new_payload_request.rs index d8af68ee..b1a0c534 100644 --- a/crates/stateless-validator-common/src/new_payload_request.rs +++ b/crates/stateless-validator-common/src/new_payload_request.rs @@ -4,8 +4,8 @@ use alloc::vec::Vec; +#[cfg(feature = "serde")] use serde::{Deserialize, Serialize}; -use serde_with::{Bytes, serde_as}; use ssz_types::{FixedVector, VariableList}; use tree_hash::TreeHash; use tree_hash_derive::TreeHash; @@ -34,7 +34,8 @@ pub type Transaction = VariableList; pub type Transactions = VariableList; pub type Withdrawals = VariableList; -#[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +#[derive(Debug, Clone, TreeHash)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr( feature = "rkyv", derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) @@ -46,56 +47,51 @@ pub struct Withdrawal { pub amount: u64, } -#[serde_as] -#[derive( - Debug, Clone, Serialize, Deserialize, TreeHash, ssz_derive::Encode, ssz_derive::Decode, -)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] +#[derive(Debug, Clone, TreeHash, ssz_derive::Encode, ssz_derive::Decode)] #[cfg_attr( feature = "rkyv", derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) )] pub struct DepositRequest { - #[serde_as(as = "Bytes")] + #[cfg_attr(feature = "serde", serde(with = "crate::serde_wrappers::bytes_array"))] pub pubkey: Bytes48, pub withdrawal_credentials: Hash32, pub amount: u64, - #[serde_as(as = "Bytes")] + #[cfg_attr(feature = "serde", serde(with = "crate::serde_wrappers::bytes_array"))] pub signature: Bytes96, pub index: u64, } -#[serde_as] -#[derive( - Debug, Clone, Serialize, Deserialize, TreeHash, ssz_derive::Encode, ssz_derive::Decode, -)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] +#[derive(Debug, Clone, TreeHash, ssz_derive::Encode, ssz_derive::Decode)] #[cfg_attr( feature = "rkyv", derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) )] pub struct WithdrawalRequest { pub source_address: Address20, - #[serde_as(as = "Bytes")] + #[cfg_attr(feature = "serde", serde(with = "crate::serde_wrappers::bytes_array"))] pub validator_pubkey: Bytes48, pub amount: u64, } -#[serde_as] -#[derive( - Debug, Clone, Serialize, Deserialize, TreeHash, ssz_derive::Encode, ssz_derive::Decode, -)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] +#[derive(Debug, Clone, TreeHash, ssz_derive::Encode, ssz_derive::Decode)] #[cfg_attr( feature = "rkyv", derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) )] pub struct ConsolidationRequest { pub source_address: Address20, - #[serde_as(as = "Bytes")] + #[cfg_attr(feature = "serde", serde(with = "crate::serde_wrappers::bytes_array"))] pub source_pubkey: Bytes48, - #[serde_as(as = "Bytes")] + #[cfg_attr(feature = "serde", serde(with = "crate::serde_wrappers::bytes_array"))] pub target_pubkey: Bytes48, } -#[derive(Debug, Clone, Default, Serialize, Deserialize, TreeHash)] +#[derive(Debug, Clone, Default, TreeHash)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr( feature = "rkyv", derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) @@ -118,7 +114,8 @@ pub enum ForkName { Fulu, } -#[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +#[derive(Debug, Clone, TreeHash)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr( feature = "rkyv", derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) @@ -143,7 +140,8 @@ pub struct ExecutionPayloadV1 { pub transactions: Transactions, } -#[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +#[derive(Debug, Clone, TreeHash)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr( feature = "rkyv", derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) @@ -170,7 +168,8 @@ pub struct ExecutionPayloadV2 { pub withdrawals: Withdrawals, } -#[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +#[derive(Debug, Clone, TreeHash)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr( feature = "rkyv", derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) @@ -199,7 +198,8 @@ pub struct ExecutionPayloadV3 { pub excess_blob_gas: u64, } -#[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +#[derive(Debug, Clone, TreeHash)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr( feature = "rkyv", derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) @@ -208,7 +208,8 @@ pub struct NewPayloadRequestBellatrix { pub execution_payload: ExecutionPayloadV1, } -#[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +#[derive(Debug, Clone, TreeHash)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr( feature = "rkyv", derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) @@ -217,7 +218,8 @@ pub struct NewPayloadRequestCapella { pub execution_payload: ExecutionPayloadV2, } -#[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +#[derive(Debug, Clone, TreeHash)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr( feature = "rkyv", derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) @@ -229,7 +231,8 @@ pub struct NewPayloadRequestDeneb { pub parent_beacon_block_root: Hash32, } -#[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +#[derive(Debug, Clone, TreeHash)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr( feature = "rkyv", derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) @@ -242,7 +245,8 @@ pub struct NewPayloadRequestElectraFulu { pub execution_requests: ExecutionRequests, } -#[derive(Debug, Clone, Serialize, Deserialize, TreeHash)] +#[derive(Debug, Clone, TreeHash)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr( feature = "rkyv", derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) @@ -255,7 +259,8 @@ pub struct NewPayloadRequestFulu { pub execution_requests: ExecutionRequests, } -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Debug, Clone)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr( feature = "rkyv", derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) diff --git a/crates/stateless-validator-common/src/serde_wrappers.rs b/crates/stateless-validator-common/src/serde_wrappers.rs new file mode 100644 index 00000000..24f7ea65 --- /dev/null +++ b/crates/stateless-validator-common/src/serde_wrappers.rs @@ -0,0 +1,27 @@ +//! Serde wrappers for byte arrays. +//! +//! Provides helpers for serializing fixed-size byte arrays using serde_with::Bytes, +//! which is efficient for binary formats and uses byte sequences for human-readable formats. + +use serde::{Deserializer, Serializer}; +use serde_with::{DeserializeAs, SerializeAs}; + +/// Serialize a byte array using serde_with::Bytes. +pub mod bytes_array { + use super::*; + + /// Serialize a fixed-size byte array. + pub fn serialize( + bytes: &[u8; N], + serializer: S, + ) -> Result { + serde_with::Bytes::serialize_as(bytes, serializer) + } + + /// Deserialize a fixed-size byte array. + pub fn deserialize<'de, const N: usize, D: Deserializer<'de>>( + deserializer: D, + ) -> Result<[u8; N], D::Error> { + serde_with::Bytes::deserialize_as(deserializer) + } +} From d2246d04845c9390d4be165f247adea4c0d415f2 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Thu, 15 Jan 2026 09:58:33 -0300 Subject: [PATCH 31/46] nit --- crates/integration-tests/tests/block-encoding-length.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/integration-tests/tests/block-encoding-length.rs b/crates/integration-tests/tests/block-encoding-length.rs index 54ef4e18..df84d2da 100644 --- a/crates/integration-tests/tests/block-encoding-length.rs +++ b/crates/integration-tests/tests/block-encoding-length.rs @@ -10,7 +10,7 @@ fn test_execution(zkvm_kind: zkVMKind) { let fixtures = get_fixtures(); let fixture = fixtures .into_iter() - .find(|f| f.name == "rpc_block_22974575.json") + .find(|f| f.name == "rpc_block_22974575") .expect("Fixture rpc_block_22974575.json not found"); let block = fixture.stateless_input.block; let loop_count = 10; From 9f0d16de06b2187f6af7065d226e884984f30125 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Thu, 15 Jan 2026 10:09:30 -0300 Subject: [PATCH 32/46] lints --- .../risc0/Cargo.lock | 696 ++++++++++++-- .../zisk/Cargo.lock | 878 ++++++++++++++++-- .../airbender/Cargo.lock | 2 - .../openvm/Cargo.lock | 178 +++- bin/stateless-validator-reth/pico/Cargo.lock | 170 +++- bin/stateless-validator-reth/risc0/Cargo.lock | 170 +++- bin/stateless-validator-reth/zisk/Cargo.lock | 2 - .../stateless-validator-ethrex/src/guest.rs | 6 +- 8 files changed, 1959 insertions(+), 143 deletions(-) diff --git a/bin/stateless-validator-ethrex/risc0/Cargo.lock b/bin/stateless-validator-ethrex/risc0/Cargo.lock index 12f789a0..2afbd4dd 100644 --- a/bin/stateless-validator-ethrex/risc0/Cargo.lock +++ b/bin/stateless-validator-ethrex/risc0/Cargo.lock @@ -40,6 +40,44 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" +[[package]] +name = "alloy-primitives" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6a0fb18dd5fb43ec5f0f6a20be1ce0287c79825827de5744afaa6c957737c33" +dependencies = [ + "alloy-rlp", + "bytes", + "cfg-if", + "const-hex", + "derive_more 2.0.1", + "foldhash 0.2.0", + "hashbrown 0.16.1", + "indexmap 2.12.1", + "itoa", + "k256", + "keccak-asm", + "paste", + "proptest", + "rand 0.9.2", + "rapidhash", + "ruint", + "rustc-hash", + "serde", + "sha3", + "tiny-keccak", +] + +[[package]] +name = "alloy-rlp" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f70d83b765fdc080dbcd4f4db70d8d23fe4761f2f02ebfa9146b833900634b4" +dependencies = [ + "arrayvec", + "bytes", +] + [[package]] name = "android_system_properties" version = "0.1.5" @@ -112,9 +150,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" dependencies = [ "ark-ec", - "ark-ff", + "ark-ff 0.5.0", "ark-r1cs-std", - "ark-std", + "ark-std 0.5.0", ] [[package]] @@ -126,14 +164,14 @@ dependencies = [ "ahash", "ark-crypto-primitives-macros", "ark-ec", - "ark-ff", + "ark-ff 0.5.0", "ark-relations", - "ark-serialize", + "ark-serialize 0.5.0", "ark-snark", - "ark-std", + "ark-std 0.5.0", "blake2", "derivative", - "digest", + "digest 0.10.7", "fnv", "merlin", "sha2", @@ -157,10 +195,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" dependencies = [ "ahash", - "ark-ff", + "ark-ff 0.5.0", "ark-poly", - "ark-serialize", - "ark-std", + "ark-serialize 0.5.0", + "ark-std 0.5.0", "educe", "fnv", "hashbrown 0.15.5", @@ -171,18 +209,56 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint 0.4.6", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint 0.4.6", + "num-traits", + "paste", + "rustc_version 0.4.1", + "zeroize", +] + [[package]] name = "ark-ff" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", - "ark-std", + "ark-ff-asm 0.5.0", + "ark-ff-macros 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", "arrayvec", - "digest", + "digest 0.10.7", "educe", "itertools 0.13.0", "num-bigint 0.4.6", @@ -191,6 +267,26 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + [[package]] name = "ark-ff-asm" version = "0.5.0" @@ -201,6 +297,31 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "ark-ff-macros" version = "0.5.0" @@ -222,11 +343,11 @@ checksum = "88f1d0f3a534bb54188b8dcc104307db6c56cdae574ddc3212aec0625740fc7e" dependencies = [ "ark-crypto-primitives", "ark-ec", - "ark-ff", + "ark-ff 0.5.0", "ark-poly", "ark-relations", - "ark-serialize", - "ark-std", + "ark-serialize 0.5.0", + "ark-std 0.5.0", ] [[package]] @@ -236,9 +357,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" dependencies = [ "ahash", - "ark-ff", - "ark-serialize", - "ark-std", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", "educe", "fnv", "hashbrown 0.15.5", @@ -251,9 +372,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "941551ef1df4c7a401de7068758db6503598e6f01850bdb2cfdb614a1f9dbea1" dependencies = [ "ark-ec", - "ark-ff", + "ark-ff 0.5.0", "ark-relations", - "ark-std", + "ark-std 0.5.0", "educe", "num-bigint 0.4.6", "num-integer", @@ -267,12 +388,33 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec46ddc93e7af44bcab5230937635b06fb5744464dd6a7e7b083e80ebd274384" dependencies = [ - "ark-ff", - "ark-std", + "ark-ff 0.5.0", + "ark-std 0.5.0", "tracing", "tracing-subscriber 0.2.25", ] +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint 0.4.6", +] + [[package]] name = "ark-serialize" version = "0.5.0" @@ -280,9 +422,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" dependencies = [ "ark-serialize-derive", - "ark-std", + "ark-std 0.5.0", "arrayvec", - "digest", + "digest 0.10.7", "num-bigint 0.4.6", ] @@ -303,10 +445,30 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d368e2848c2d4c129ce7679a7d0d2d612b6a274d3ea6a13bad4445d61b381b88" dependencies = [ - "ark-ff", + "ark-ff 0.5.0", "ark-relations", - "ark-serialize", - "ark-std", + "ark-serialize 0.5.0", + "ark-std 0.5.0", +] + +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", ] [[package]] @@ -342,6 +504,17 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "auto_impl" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "autocfg" version = "1.5.0" @@ -420,7 +593,7 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -456,7 +629,7 @@ name = "bls12_381" version = "0.8.0" source = "git+https://github.com/lambdaclass/bls12_381?branch=expose-fp-struct#219174187bd78154cec35b0809799fc2c991a579" dependencies = [ - "digest", + "digest 0.10.7", "ff", "group", "pairing", @@ -679,6 +852,18 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +[[package]] +name = "const-hex" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bb320cac8a0750d7f25280aa97b09c26edfe161164238ecbbb31092b079e735" +dependencies = [ + "cfg-if", + "cpufeatures", + "proptest", + "serde_core", +] + [[package]] name = "const-oid" version = "0.9.6" @@ -849,14 +1034,38 @@ dependencies = [ "typenum", ] +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + [[package]] name = "darling" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.21.3", + "darling_macro 0.21.3", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.111", ] [[package]] @@ -873,13 +1082,24 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core 0.20.11", + "quote", + "syn 2.0.111", +] + [[package]] name = "darling_macro" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ - "darling_core", + "darling_core 0.21.3", "quote", "syn 2.0.111", ] @@ -971,6 +1191,15 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + [[package]] name = "digest" version = "0.10.7" @@ -1013,7 +1242,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", - "digest", + "digest 0.10.7", "elliptic-curve", "rfc6979", "signature", @@ -1052,7 +1281,7 @@ checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", - "digest", + "digest 0.10.7", "ff", "generic-array", "group", @@ -1125,7 +1354,17 @@ name = "ere-platform-trait" version = "0.0.16" source = "git+https://github.com/eth-act/ere?rev=ec75f8a26657ddbf7efc44cdb3167fff4f55fe27#ec75f8a26657ddbf7efc44cdb3167fff4f55fe27" dependencies = [ - "digest", + "digest 0.10.7", +] + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys", ] [[package]] @@ -1157,8 +1396,56 @@ dependencies = [ "fixed-hash", "impl-rlp", "impl-serde", - "primitive-types", - "uint", + "primitive-types 0.13.1", + "uint 0.10.0", +] + +[[package]] +name = "ethereum_hashing" +version = "0.7.0" +source = "git+https://github.com/jsign/ethereum_hashing?rev=181896944365e4b76dd6407c2d679fb844165dd6#181896944365e4b76dd6407c2d679fb844165dd6" +dependencies = [ + "sha2", +] + +[[package]] +name = "ethereum_serde_utils" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dc1355dbb41fbbd34ec28d4fb2a57d9a70c67ac3c19f6a5ca4d4a176b9e997a" +dependencies = [ + "alloy-primitives", + "hex", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "ethereum_ssz" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dcddb2554d19cde19b099fadddde576929d7a4d0c1cd3512d1fd95cf174375c" +dependencies = [ + "alloy-primitives", + "ethereum_serde_utils", + "itertools 0.13.0", + "serde", + "serde_derive", + "smallvec", + "typenum", +] + +[[package]] +name = "ethereum_ssz_derive" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a657b6b3b7e153637dc6bdc6566ad9279d9ee11a15b12cfb24a2e04360637e9f" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.111", ] [[package]] @@ -1255,7 +1542,7 @@ source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed dependencies = [ "ark-bn254", "ark-ec", - "ark-ff", + "ark-ff 0.5.0", "bitvec", "bls12_381", "bytes", @@ -1348,7 +1635,7 @@ dependencies = [ "anyhow", "bytes", "crossbeam", - "digest", + "digest 0.10.7", "ethereum-types", "ethrex-crypto", "ethrex-rlp", @@ -1397,6 +1684,34 @@ dependencies = [ "regex-syntax", ] +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "fastrlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + [[package]] name = "ff" version = "0.13.1" @@ -1662,6 +1977,8 @@ dependencies = [ "allocator-api2", "equivalent", "foldhash 0.2.0", + "serde", + "serde_core", ] [[package]] @@ -1694,7 +2011,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -1829,6 +2146,15 @@ dependencies = [ "icu_properties", ] +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + [[package]] name = "impl-codec" version = "0.7.1" @@ -1844,7 +2170,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54ed8ad1f3877f7e775b8cbf30ed1bd3209a95401817f19a0eb4402d13f8cf90" dependencies = [ - "rlp", + "rlp 0.6.1", ] [[package]] @@ -1902,6 +2228,15 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.12.1" @@ -1969,6 +2304,16 @@ dependencies = [ "cpufeatures", ] +[[package]] +name = "keccak-asm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" +dependencies = [ + "digest 0.10.7", + "sha3-asm", +] + [[package]] name = "kzg-rs" version = "0.2.7" @@ -2045,6 +2390,12 @@ dependencies = [ "escape8259", ] +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + [[package]] name = "litemap" version = "0.8.1" @@ -2479,6 +2830,16 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" +[[package]] +name = "pest" +version = "2.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9eb05c21a464ea704b53158d358a31e6425db2f63a1a7312268b05fe2b75f7" +dependencies = [ + "memchr", + "ucd-trie", +] + [[package]] name = "pin-project-lite" version = "0.2.16" @@ -2547,6 +2908,17 @@ dependencies = [ "risc0-bigint2", ] +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec 0.6.0", + "uint 0.9.5", +] + [[package]] name = "primitive-types" version = "0.13.1" @@ -2554,10 +2926,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d15600a7d856470b7d278b3fe0e311fe28c2526348549f8ef2ff7db3299c87f5" dependencies = [ "fixed-hash", - "impl-codec", + "impl-codec 0.7.1", "impl-rlp", "impl-serde", - "uint", + "uint 0.10.0", ] [[package]] @@ -2584,11 +2956,16 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bee689443a2bd0a16ab0348b52ee43e3b2d1b1f931c8aa5c9f8de4c86fbe8c40" dependencies = [ + "bit-set", + "bit-vec", "bitflags 2.10.0", "num-traits", "rand 0.9.2", "rand_chacha 0.9.0", "rand_xorshift", + "regex-syntax", + "rusty-fork", + "tempfile", "unarray", ] @@ -2621,6 +2998,12 @@ dependencies = [ "xxhash-rust", ] +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + [[package]] name = "quote" version = "1.0.42" @@ -2668,7 +3051,9 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ + "rand_chacha 0.9.0", "rand_core 0.9.3", + "serde", ] [[package]] @@ -2705,6 +3090,10 @@ name = "rand_core" version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.4", + "serde", +] [[package]] name = "rand_xorshift" @@ -2715,6 +3104,15 @@ dependencies = [ "rand_core 0.9.3", ] +[[package]] +name = "rapidhash" +version = "4.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d8b5b858a440a0bc02625b62dd95131b9201aa9f69f411195dd4a7cfb1de3d7" +dependencies = [ + "rustversion", +] + [[package]] name = "rayon" version = "1.11.0" @@ -2797,7 +3195,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -2827,7 +3225,7 @@ dependencies = [ "risc0-zkp", "risc0-zkvm-platform", "ruint", - "semver", + "semver 1.0.27", "serde", "tracing", ] @@ -2900,9 +3298,9 @@ dependencies = [ "anyhow", "ark-bn254", "ark-ec", - "ark-ff", + "ark-ff 0.5.0", "ark-groth16", - "ark-serialize", + "ark-serialize 0.5.0", "bytemuck", "hex", "num-bigint 0.4.6", @@ -2934,7 +3332,7 @@ dependencies = [ "borsh", "bytemuck", "cfg-if", - "digest", + "digest 0.10.7", "hex", "hex-literal", "metal", @@ -2969,7 +3367,7 @@ dependencies = [ "risc0-zkp", "risc0-zkvm-platform", "rrs-lib", - "semver", + "semver 1.0.27", "serde", "sha2", "stability", @@ -3022,6 +3420,16 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes", + "rustc-hex", +] + [[package]] name = "rlp" version = "0.6.1" @@ -3048,10 +3456,23 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a68df0380e5c9d20ce49534f292a36a7514ae21350726efe1865bdb1fa91d278" dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "ark-ff 0.5.0", "borsh", + "bytes", + "fastrlp 0.3.1", + "fastrlp 0.4.0", + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "parity-scale-codec", + "primitive-types 0.12.2", "proptest", "rand 0.8.5", "rand 0.9.2", + "rlp 0.5.2", "ruint-macro", "serde_core", "valuable", @@ -3076,12 +3497,55 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.27", +] + +[[package]] +name = "rustix" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" +dependencies = [ + "bitflags 2.10.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + [[package]] name = "rustversion" version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +[[package]] +name = "rusty-fork" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + [[package]] name = "ryu" version = "1.0.20" @@ -3144,6 +3608,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + [[package]] name = "semver" version = "1.0.27" @@ -3154,6 +3627,15 @@ dependencies = [ "serde_core", ] +[[package]] +name = "semver-parser" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" +dependencies = [ + "pest", +] + [[package]] name = "serde" version = "1.0.228" @@ -3231,7 +3713,7 @@ version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08a72d8216842fdd57820dc78d840bef99248e35fb2554ff923319e60f2d686b" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", "syn 2.0.111", @@ -3244,7 +3726,7 @@ source = "git+https://github.com/risc0/RustCrypto-hashes?tag=sha2-v0.10.9-riscze dependencies = [ "cfg-if", "cpufeatures", - "digest", + "digest 0.10.7", ] [[package]] @@ -3253,10 +3735,20 @@ version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ - "digest", + "digest 0.10.7", "keccak", ] +[[package]] +name = "sha3-asm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" +dependencies = [ + "cc", + "cfg-if", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -3278,7 +3770,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest", + "digest 0.10.7", "rand_core 0.6.4", ] @@ -3368,6 +3860,22 @@ dependencies = [ "der", ] +[[package]] +name = "ssz_types" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b55bedc9a18ed2860a46d6beb4f4082416ee1d60be0cc364cebdcdddc7afd4" +dependencies = [ + "ethereum_serde_utils", + "ethereum_ssz", + "itertools 0.13.0", + "serde", + "serde_derive", + "smallvec", + "tree_hash", + "typenum", +] + [[package]] name = "stability" version = "0.2.1" @@ -3388,15 +3896,28 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" name = "stateless-validator-common" version = "0.1.0" dependencies = [ + "anyhow", + "ethereum_ssz", + "ethereum_ssz_derive", "rkyv", + "serde", + "serde_with", + "sha2", + "ssz_types", + "tree_hash", + "tree_hash_derive", + "typenum", ] [[package]] name = "stateless-validator-ethrex" version = "0.1.0" dependencies = [ + "anyhow", + "bytes", "ere-io", "ethrex-common", + "ethrex-rlp", "ethrex-vm", "guest", "guest_program", @@ -3506,6 +4027,19 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +[[package]] +name = "tempfile" +version = "3.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" +dependencies = [ + "fastrand", + "getrandom 0.3.4", + "once_cell", + "rustix", + "windows-sys", +] + [[package]] name = "thiserror" version = "2.0.17" @@ -3733,12 +4267,55 @@ dependencies = [ "tracing-log", ] +[[package]] +name = "tree_hash" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee44f4cef85f88b4dea21c0b1f58320bdf35715cf56d840969487cff00613321" +dependencies = [ + "alloy-primitives", + "ethereum_hashing", + "ethereum_ssz", + "smallvec", + "typenum", +] + +[[package]] +name = "tree_hash_derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bee2ea1551f90040ab0e34b6fb7f2fa3bad8acc925837ac654f2c78a13e3089" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "typenum" version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + [[package]] name = "uint" version = "0.10.0" @@ -3821,6 +4398,15 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "wait-timeout" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +dependencies = [ + "libc", +] + [[package]] name = "walkdir" version = "2.5.0" diff --git a/bin/stateless-validator-ethrex/zisk/Cargo.lock b/bin/stateless-validator-ethrex/zisk/Cargo.lock index 29852a2e..31445804 100644 --- a/bin/stateless-validator-ethrex/zisk/Cargo.lock +++ b/bin/stateless-validator-ethrex/zisk/Cargo.lock @@ -40,6 +40,44 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" +[[package]] +name = "alloy-primitives" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6a0fb18dd5fb43ec5f0f6a20be1ce0287c79825827de5744afaa6c957737c33" +dependencies = [ + "alloy-rlp", + "bytes", + "cfg-if", + "const-hex", + "derive_more 2.1.1", + "foldhash 0.2.0", + "hashbrown 0.16.1", + "indexmap 2.12.1", + "itoa", + "k256", + "keccak-asm", + "paste", + "proptest", + "rand 0.9.2", + "rapidhash", + "ruint", + "rustc-hash", + "serde", + "sha3", + "tiny-keccak", +] + +[[package]] +name = "alloy-rlp" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f70d83b765fdc080dbcd4f4db70d8d23fe4761f2f02ebfa9146b833900634b4" +dependencies = [ + "arrayvec", + "bytes", +] + [[package]] name = "android_system_properties" version = "0.1.5" @@ -112,8 +150,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" dependencies = [ "ark-ec", - "ark-ff", - "ark-std", + "ark-ff 0.5.0", + "ark-std 0.5.0", ] [[package]] @@ -123,10 +161,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" dependencies = [ "ahash", - "ark-ff", + "ark-ff 0.5.0", "ark-poly", - "ark-serialize", - "ark-std", + "ark-serialize 0.5.0", + "ark-std 0.5.0", "educe", "fnv", "hashbrown 0.15.5", @@ -137,18 +175,56 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint 0.4.6", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint 0.4.6", + "num-traits", + "paste", + "rustc_version 0.4.1", + "zeroize", +] + [[package]] name = "ark-ff" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", - "ark-std", + "ark-ff-asm 0.5.0", + "ark-ff-macros 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", "arrayvec", - "digest", + "digest 0.10.7", "educe", "itertools 0.13.0", "num-bigint 0.4.6", @@ -157,6 +233,26 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + [[package]] name = "ark-ff-asm" version = "0.5.0" @@ -167,6 +263,31 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "ark-ff-macros" version = "0.5.0" @@ -187,14 +308,35 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" dependencies = [ "ahash", - "ark-ff", - "ark-serialize", - "ark-std", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", "educe", "fnv", "hashbrown 0.15.5", ] +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint 0.4.6", +] + [[package]] name = "ark-serialize" version = "0.5.0" @@ -202,9 +344,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" dependencies = [ "ark-serialize-derive", - "ark-std", + "ark-std 0.5.0", "arrayvec", - "digest", + "digest 0.10.7", "num-bigint 0.4.6", ] @@ -219,6 +361,26 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + [[package]] name = "ark-std" version = "0.5.0" @@ -226,7 +388,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -252,6 +414,17 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "auto_impl" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "autocfg" version = "1.5.0" @@ -320,6 +493,12 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" +[[package]] +name = "bitflags" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" + [[package]] name = "bitvec" version = "1.0.1" @@ -359,11 +538,11 @@ name = "bls12_381" version = "0.8.0" source = "git+https://github.com/lambdaclass/bls12_381?branch=expose-fp-struct#219174187bd78154cec35b0809799fc2c991a579" dependencies = [ - "digest", + "digest 0.10.7", "ff", "group", "pairing", - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -503,6 +682,18 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +[[package]] +name = "const-hex" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bb320cac8a0750d7f25280aa97b09c26edfe161164238ecbbb31092b079e735" +dependencies = [ + "cfg-if", + "cpufeatures", + "proptest", + "serde_core", +] + [[package]] name = "const-oid" version = "0.9.6" @@ -544,6 +735,15 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "convert_case" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -637,7 +837,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array", - "rand_core", + "rand_core 0.6.4", "subtle", "zeroize", ] @@ -652,14 +852,38 @@ dependencies = [ "typenum", ] +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + [[package]] name = "darling" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.21.3", + "darling_macro 0.21.3", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.111", ] [[package]] @@ -676,13 +900,24 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core 0.20.11", + "quote", + "syn 2.0.111", +] + [[package]] name = "darling_macro" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ - "darling_core", + "darling_core 0.21.3", "quote", "syn 2.0.111", ] @@ -720,13 +955,33 @@ dependencies = [ "serde_core", ] +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "derive_more" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" dependencies = [ - "derive_more-impl", + "derive_more-impl 1.0.0", +] + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl 2.1.1", ] [[package]] @@ -735,13 +990,36 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ - "convert_case", + "convert_case 0.6.0", + "proc-macro2", + "quote", + "syn 2.0.111", + "unicode-xid", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "convert_case 0.10.0", "proc-macro2", "quote", + "rustc_version 0.4.1", "syn 2.0.111", "unicode-xid", ] +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + [[package]] name = "digest" version = "0.10.7" @@ -778,7 +1056,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", - "digest", + "digest 0.10.7", "elliptic-curve", "rfc6979", "signature", @@ -811,13 +1089,13 @@ checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", - "digest", + "digest 0.10.7", "ff", "generic-array", "group", "pem-rfc7468", "pkcs8", - "rand_core", + "rand_core 0.6.4", "sec1", "subtle", "zeroize", @@ -862,7 +1140,7 @@ name = "ere-platform-trait" version = "0.0.16" source = "git+https://github.com/eth-act/ere?rev=ec75f8a26657ddbf7efc44cdb3167fff4f55fe27#ec75f8a26657ddbf7efc44cdb3167fff4f55fe27" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -874,6 +1152,16 @@ dependencies = [ "ziskos", ] +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys", +] + [[package]] name = "escape8259" version = "0.5.3" @@ -903,8 +1191,56 @@ dependencies = [ "fixed-hash", "impl-rlp", "impl-serde", - "primitive-types", - "uint", + "primitive-types 0.13.1", + "uint 0.10.0", +] + +[[package]] +name = "ethereum_hashing" +version = "0.7.0" +source = "git+https://github.com/jsign/ethereum_hashing?rev=181896944365e4b76dd6407c2d679fb844165dd6#181896944365e4b76dd6407c2d679fb844165dd6" +dependencies = [ + "sha2", +] + +[[package]] +name = "ethereum_serde_utils" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dc1355dbb41fbbd34ec28d4fb2a57d9a70c67ac3c19f6a5ca4d4a176b9e997a" +dependencies = [ + "alloy-primitives", + "hex", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "ethereum_ssz" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dcddb2554d19cde19b099fadddde576929d7a4d0c1cd3512d1fd95cf174375c" +dependencies = [ + "alloy-primitives", + "ethereum_serde_utils", + "itertools 0.13.0", + "serde", + "serde_derive", + "smallvec", + "typenum", +] + +[[package]] +name = "ethereum_ssz_derive" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a657b6b3b7e153637dc6bdc6566ad9279d9ee11a15b12cfb24a2e04360637e9f" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.111", ] [[package]] @@ -1000,12 +1336,12 @@ source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed dependencies = [ "ark-bn254", "ark-ec", - "ark-ff", + "ark-ff 0.5.0", "bitvec", "bls12_381", "bytes", "datatest-stable", - "derive_more", + "derive_more 1.0.0", "ethrex-common", "ethrex-crypto", "ethrex-rlp", @@ -1094,7 +1430,7 @@ dependencies = [ "anyhow", "bytes", "crossbeam", - "digest", + "digest 0.10.7", "ethereum-types", "ethrex-crypto", "ethrex-rlp", @@ -1117,7 +1453,7 @@ source = "git+https://github.com/lambdaclass/ethrex.git?rev=e6d70854d0fe3b0f29ed dependencies = [ "bincode 1.3.3", "bytes", - "derive_more", + "derive_more 1.0.0", "dyn-clone", "ethereum-types", "ethrex-common", @@ -1143,6 +1479,34 @@ dependencies = [ "regex-syntax", ] +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "fastrlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + [[package]] name = "ff" version = "0.13.1" @@ -1152,7 +1516,7 @@ dependencies = [ "bitvec", "byteorder", "ff_derive", - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -1184,7 +1548,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ "byteorder", - "rand", + "rand 0.8.5", "rustc-hex", "static_assertions", ] @@ -1295,6 +1659,18 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", +] + [[package]] name = "group" version = "0.13.0" @@ -1302,7 +1678,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -1363,6 +1739,8 @@ dependencies = [ "allocator-api2", "equivalent", "foldhash 0.2.0", + "serde", + "serde_core", ] [[package]] @@ -1389,7 +1767,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -1524,6 +1902,15 @@ dependencies = [ "icu_properties", ] +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + [[package]] name = "impl-codec" version = "0.7.1" @@ -1539,7 +1926,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54ed8ad1f3877f7e775b8cbf30ed1bd3209a95401817f19a0eb4402d13f8cf90" dependencies = [ - "rlp", + "rlp 0.6.1", ] [[package]] @@ -1591,6 +1978,15 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.12.1" @@ -1656,6 +2052,16 @@ dependencies = [ "cpufeatures", ] +[[package]] +name = "keccak-asm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" +dependencies = [ + "digest 0.10.7", + "sha3-asm", +] + [[package]] name = "kzg-rs" version = "0.2.7" @@ -1677,8 +2083,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "58b1a1c1102a5a7fbbda117b79fb3a01e033459c738a3c1642269603484fd1c1" dependencies = [ "lambdaworks-math", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "serde", "sha2", "sha3", @@ -1690,10 +2096,10 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "018a95aa873eb49896a858dee0d925c33f3978d073c64b08dd4f2c9b35a017c6" dependencies = [ - "getrandom", + "getrandom 0.2.16", "num-bigint 0.4.6", "num-traits", - "rand", + "rand 0.8.5", "rayon", "serde", "serde_json", @@ -1737,6 +2143,12 @@ dependencies = [ "escape8259", ] +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + [[package]] name = "litemap" version = "0.8.1" @@ -1891,6 +2303,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -1928,7 +2341,7 @@ dependencies = [ "p3-mds", "p3-poseidon2", "p3-symmetric", - "rand", + "rand 0.8.5", "serde", ] @@ -1955,7 +2368,7 @@ dependencies = [ "num-bigint 0.4.6", "num-traits", "p3-util", - "rand", + "rand 0.8.5", "serde", ] @@ -1969,7 +2382,7 @@ dependencies = [ "p3-field", "p3-maybe-rayon", "p3-util", - "rand", + "rand 0.8.5", "serde", "tracing", ] @@ -1992,7 +2405,7 @@ dependencies = [ "p3-matrix", "p3-symmetric", "p3-util", - "rand", + "rand 0.8.5", ] [[package]] @@ -2005,7 +2418,7 @@ dependencies = [ "p3-field", "p3-mds", "p3-symmetric", - "rand", + "rand 0.8.5", "serde", ] @@ -2087,6 +2500,16 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" +[[package]] +name = "pest" +version = "2.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9eb05c21a464ea704b53158d358a31e6425db2f63a1a7312268b05fe2b75f7" +dependencies = [ + "memchr", + "ucd-trie", +] + [[package]] name = "pin-project-lite" version = "0.2.16" @@ -2142,6 +2565,17 @@ dependencies = [ "elliptic-curve", ] +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec 0.6.0", + "uint 0.9.5", +] + [[package]] name = "primitive-types" version = "0.13.1" @@ -2149,10 +2583,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d15600a7d856470b7d278b3fe0e311fe28c2526348549f8ef2ff7db3299c87f5" dependencies = [ "fixed-hash", - "impl-codec", + "impl-codec 0.7.1", "impl-rlp", "impl-serde", - "uint", + "uint 0.10.0", ] [[package]] @@ -2173,6 +2607,25 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "proptest" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee689443a2bd0a16ab0348b52ee43e3b2d1b1f931c8aa5c9f8de4c86fbe8c40" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags", + "num-traits", + "rand 0.9.2", + "rand_chacha 0.9.0", + "rand_xorshift", + "regex-syntax", + "rusty-fork", + "tempfile", + "unarray", +] + [[package]] name = "ptr_meta" version = "0.3.1" @@ -2202,6 +2655,12 @@ dependencies = [ "xxhash-rust", ] +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + [[package]] name = "quote" version = "1.0.42" @@ -2211,6 +2670,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + [[package]] name = "radium" version = "0.7.0" @@ -2233,8 +2698,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.5", + "serde", ] [[package]] @@ -2244,7 +2720,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.5", ] [[package]] @@ -2253,7 +2739,35 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.16", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", + "serde", +] + +[[package]] +name = "rand_xorshift" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" +dependencies = [ + "rand_core 0.9.5", +] + +[[package]] +name = "rapidhash" +version = "4.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d8b5b858a440a0bc02625b62dd95131b9201aa9f69f411195dd4a7cfb1de3d7" +dependencies = [ + "rustversion", ] [[package]] @@ -2338,7 +2852,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -2371,6 +2885,16 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes", + "rustc-hex", +] + [[package]] name = "rlp" version = "0.6.1" @@ -2381,6 +2905,40 @@ dependencies = [ "rustc-hex", ] +[[package]] +name = "ruint" +version = "1.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c141e807189ad38a07276942c6623032d3753c8859c146104ac2e4d68865945a" +dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "ark-ff 0.5.0", + "bytes", + "fastrlp 0.3.1", + "fastrlp 0.4.0", + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "parity-scale-codec", + "primitive-types 0.12.2", + "proptest", + "rand 0.8.5", + "rand 0.9.2", + "rlp 0.5.2", + "ruint-macro", + "serde_core", + "valuable", + "zeroize", +] + +[[package]] +name = "ruint-macro" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" + [[package]] name = "rustc-hash" version = "2.1.1" @@ -2393,12 +2951,55 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.27", +] + +[[package]] +name = "rustix" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + [[package]] name = "rustversion" version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +[[package]] +name = "rusty-fork" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + [[package]] name = "ryu" version = "1.0.20" @@ -2461,6 +3062,30 @@ dependencies = [ "zeroize", ] +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" + +[[package]] +name = "semver-parser" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" +dependencies = [ + "pest", +] + [[package]] name = "serde" version = "1.0.228" @@ -2538,7 +3163,7 @@ version = "3.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", "syn 2.0.111", @@ -2551,7 +3176,7 @@ source = "git+https://github.com/0xPolygonHermez/zisk-patch-hashes.git?tag=patch dependencies = [ "cfg-if", "cpufeatures", - "digest", + "digest 0.10.7", ] [[package]] @@ -2559,10 +3184,20 @@ name = "sha3" version = "0.10.8" source = "git+https://github.com/0xPolygonHermez/zisk-patch-hashes.git?tag=patch-sha3-0.10.8-zisk-0.15.0#08098df5827b672d604e2dc440446b86064b99f2" dependencies = [ - "digest", + "digest 0.10.7", "keccak", ] +[[package]] +name = "sha3-asm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" +dependencies = [ + "cc", + "cfg-if", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -2584,8 +3219,8 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest", - "rand_core", + "digest 0.10.7", + "rand_core 0.6.4", ] [[package]] @@ -2652,7 +3287,7 @@ dependencies = [ "ff", "group", "pairing", - "rand_core", + "rand_core 0.6.4", "sp1-lib", "subtle", ] @@ -2673,6 +3308,22 @@ dependencies = [ "der", ] +[[package]] +name = "ssz_types" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b55bedc9a18ed2860a46d6beb4f4082416ee1d60be0cc364cebdcdddc7afd4" +dependencies = [ + "ethereum_serde_utils", + "ethereum_ssz", + "itertools 0.13.0", + "serde", + "serde_derive", + "smallvec", + "tree_hash", + "typenum", +] + [[package]] name = "stable_deref_trait" version = "1.2.1" @@ -2683,15 +3334,28 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" name = "stateless-validator-common" version = "0.1.0" dependencies = [ + "anyhow", + "ethereum_ssz", + "ethereum_ssz_derive", "rkyv", + "serde", + "serde_with", + "sha2", + "ssz_types", + "tree_hash", + "tree_hash_derive", + "typenum", ] [[package]] name = "stateless-validator-ethrex" version = "0.1.0" dependencies = [ + "anyhow", + "bytes", "ere-io", "ethrex-common", + "ethrex-rlp", "ethrex-vm", "guest", "guest_program", @@ -2748,7 +3412,7 @@ dependencies = [ "byteorder", "crunchy", "lazy_static", - "rand", + "rand 0.8.5", "rustc-hex", ] @@ -2797,6 +3461,19 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +[[package]] +name = "tempfile" +version = "3.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" +dependencies = [ + "fastrand", + "getrandom 0.3.4", + "once_cell", + "rustix", + "windows-sys", +] + [[package]] name = "thiserror" version = "2.0.17" @@ -3006,12 +3683,55 @@ dependencies = [ "tracing-log", ] +[[package]] +name = "tree_hash" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee44f4cef85f88b4dea21c0b1f58320bdf35715cf56d840969487cff00613321" +dependencies = [ + "alloy-primitives", + "ethereum_hashing", + "ethereum_ssz", + "smallvec", + "typenum", +] + +[[package]] +name = "tree_hash_derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bee2ea1551f90040ab0e34b6fb7f2fa3bad8acc925837ac654f2c78a13e3089" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "typenum" version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + [[package]] name = "uint" version = "0.10.0" @@ -3024,6 +3744,12 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + [[package]] name = "unicode-ident" version = "1.0.22" @@ -3100,6 +3826,15 @@ version = "0.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "051eb1abcf10076295e815102942cc58f9d5e3b4560e46e53c21e8ff6f3af7b1" +[[package]] +name = "wait-timeout" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +dependencies = [ + "libc", +] + [[package]] name = "walkdir" version = "2.5.0" @@ -3116,6 +3851,15 @@ version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +dependencies = [ + "wit-bindgen", +] + [[package]] name = "wasm-bindgen" version = "0.2.106" @@ -3257,6 +4001,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + [[package]] name = "writeable" version = "0.6.2" @@ -3402,13 +4152,13 @@ source = "git+https://github.com/0xPolygonHermez/zisk.git?tag=v0.15.0#b3ca745b80 dependencies = [ "bincode 2.0.1", "cfg-if", - "getrandom", + "getrandom 0.2.16", "lazy_static", "lib-c", "num-bigint 0.4.6", "num-integer", "num-traits", - "rand", + "rand 0.8.5", "serde", "static_assertions", "tiny-keccak", diff --git a/bin/stateless-validator-reth/airbender/Cargo.lock b/bin/stateless-validator-reth/airbender/Cargo.lock index d3e14482..883746e6 100644 --- a/bin/stateless-validator-reth/airbender/Cargo.lock +++ b/bin/stateless-validator-reth/airbender/Cargo.lock @@ -3499,8 +3499,6 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" name = "stateless-validator-common" version = "0.1.0" dependencies = [ - "alloy-eips", - "alloy-primitives", "anyhow", "ethereum_ssz", "ethereum_ssz_derive", diff --git a/bin/stateless-validator-reth/openvm/Cargo.lock b/bin/stateless-validator-reth/openvm/Cargo.lock index e89b73f3..f6c827a4 100644 --- a/bin/stateless-validator-reth/openvm/Cargo.lock +++ b/bin/stateless-validator-reth/openvm/Cargo.lock @@ -267,7 +267,10 @@ dependencies = [ "alloy-eips", "alloy-primitives", "alloy-rlp", + "alloy-serde", "derive_more", + "rand 0.8.5", + "serde", "strum", ] @@ -285,7 +288,7 @@ dependencies = [ "alloy-rlp", "alloy-serde", "alloy-sol-types", - "itertools 0.13.0", + "itertools 0.14.0", "serde", "serde_json", "serde_with", @@ -398,7 +401,7 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04950a13cc4209d8e9b78f306e87782466bad8538c94324702d061ff03e211c9" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", "syn 2.0.111", @@ -413,6 +416,12 @@ dependencies = [ "libc", ] +[[package]] +name = "anyhow" +version = "1.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" + [[package]] name = "ark-bls12-381" version = "0.5.0" @@ -1090,14 +1099,38 @@ dependencies = [ "typenum", ] +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + [[package]] name = "darling" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.21.3", + "darling_macro 0.21.3", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.111", ] [[package]] @@ -1115,13 +1148,24 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core 0.20.11", + "quote", + "syn 2.0.111", +] + [[package]] name = "darling_macro" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ - "darling_core", + "darling_core 0.21.3", "quote", "syn 2.0.111", ] @@ -1353,6 +1397,54 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "ethereum_hashing" +version = "0.7.0" +source = "git+https://github.com/jsign/ethereum_hashing?rev=181896944365e4b76dd6407c2d679fb844165dd6#181896944365e4b76dd6407c2d679fb844165dd6" +dependencies = [ + "sha2", +] + +[[package]] +name = "ethereum_serde_utils" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dc1355dbb41fbbd34ec28d4fb2a57d9a70c67ac3c19f6a5ca4d4a176b9e997a" +dependencies = [ + "alloy-primitives", + "hex", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "ethereum_ssz" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dcddb2554d19cde19b099fadddde576929d7a4d0c1cd3512d1fd95cf174375c" +dependencies = [ + "alloy-primitives", + "ethereum_serde_utils", + "itertools 0.13.0", + "serde", + "serde_derive", + "smallvec", + "typenum", +] + +[[package]] +name = "ethereum_ssz_derive" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a657b6b3b7e153637dc6bdc6566ad9279d9ee11a15b12cfb24a2e04360637e9f" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "fastrand" version = "2.3.0" @@ -3113,6 +3205,16 @@ dependencies = [ "url", ] +[[package]] +name = "reth-payload-validator" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +dependencies = [ + "alloy-consensus", + "alloy-rpc-types-engine", + "reth-primitives-traits", +] + [[package]] name = "reth-primitives-traits" version = "1.9.3" @@ -3760,7 +3862,7 @@ version = "3.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", "syn 2.0.111", @@ -3875,6 +3977,22 @@ dependencies = [ "der", ] +[[package]] +name = "ssz_types" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b55bedc9a18ed2860a46d6beb4f4082416ee1d60be0cc364cebdcdddc7afd4" +dependencies = [ + "ethereum_serde_utils", + "ethereum_ssz", + "itertools 0.13.0", + "serde", + "serde_derive", + "smallvec", + "tree_hash", + "typenum", +] + [[package]] name = "stable_deref_trait" version = "1.2.1" @@ -3885,24 +4003,47 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" name = "stateless-validator-common" version = "0.1.0" dependencies = [ + "anyhow", + "ethereum_ssz", + "ethereum_ssz_derive", "serde", + "serde_with", + "sha2", + "ssz_types", + "tree_hash", + "tree_hash_derive", + "typenum", ] [[package]] name = "stateless-validator-reth" version = "0.1.0" dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-genesis", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types-engine", + "anyhow", "ere-io", + "ethereum_ssz", "guest", "once_cell", "reth-chainspec", "reth-ethereum-primitives", "reth-evm-ethereum", + "reth-payload-validator", "reth-primitives-traits", "reth-stateless", "serde", + "serde_with", + "sha2", "sparsestate", + "ssz_types", "stateless-validator-common", + "tree_hash", + "tree_hash_derive", ] [[package]] @@ -4181,6 +4322,31 @@ dependencies = [ "once_cell", ] +[[package]] +name = "tree_hash" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee44f4cef85f88b4dea21c0b1f58320bdf35715cf56d840969487cff00613321" +dependencies = [ + "alloy-primitives", + "ethereum_hashing", + "ethereum_ssz", + "smallvec", + "typenum", +] + +[[package]] +name = "tree_hash_derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bee2ea1551f90040ab0e34b6fb7f2fa3bad8acc925837ac654f2c78a13e3089" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "typenum" version = "1.19.0" diff --git a/bin/stateless-validator-reth/pico/Cargo.lock b/bin/stateless-validator-reth/pico/Cargo.lock index 98245c39..941e8a6d 100644 --- a/bin/stateless-validator-reth/pico/Cargo.lock +++ b/bin/stateless-validator-reth/pico/Cargo.lock @@ -302,7 +302,10 @@ dependencies = [ "alloy-eips", "alloy-primitives", "alloy-rlp", + "alloy-serde", "derive_more 2.1.1", + "rand 0.8.5", + "serde", "strum 0.27.2", ] @@ -433,7 +436,7 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04950a13cc4209d8e9b78f306e87782466bad8538c94324702d061ff03e211c9" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", "syn 2.0.111", @@ -1409,14 +1412,38 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + [[package]] name = "darling" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.21.3", + "darling_macro 0.21.3", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.111", ] [[package]] @@ -1434,13 +1461,24 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core 0.20.11", + "quote", + "syn 2.0.111", +] + [[package]] name = "darling_macro" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ - "darling_core", + "darling_core 0.21.3", "quote", "syn 2.0.111", ] @@ -1823,6 +1861,54 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "ethereum_hashing" +version = "0.7.0" +source = "git+https://github.com/jsign/ethereum_hashing?rev=181896944365e4b76dd6407c2d679fb844165dd6#181896944365e4b76dd6407c2d679fb844165dd6" +dependencies = [ + "sha2", +] + +[[package]] +name = "ethereum_serde_utils" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dc1355dbb41fbbd34ec28d4fb2a57d9a70c67ac3c19f6a5ca4d4a176b9e997a" +dependencies = [ + "alloy-primitives", + "hex", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "ethereum_ssz" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dcddb2554d19cde19b099fadddde576929d7a4d0c1cd3512d1fd95cf174375c" +dependencies = [ + "alloy-primitives", + "ethereum_serde_utils", + "itertools 0.13.0", + "serde", + "serde_derive", + "smallvec", + "typenum", +] + +[[package]] +name = "ethereum_ssz_derive" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a657b6b3b7e153637dc6bdc6566ad9279d9ee11a15b12cfb24a2e04360637e9f" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "eyre" version = "0.6.12" @@ -4153,6 +4239,16 @@ dependencies = [ "url", ] +[[package]] +name = "reth-payload-validator" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +dependencies = [ + "alloy-consensus", + "alloy-rpc-types-engine", + "reth-primitives-traits", +] + [[package]] name = "reth-primitives-traits" version = "1.9.3" @@ -4844,7 +4940,7 @@ version = "3.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", "syn 2.0.111", @@ -4970,6 +5066,22 @@ dependencies = [ "der", ] +[[package]] +name = "ssz_types" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b55bedc9a18ed2860a46d6beb4f4082416ee1d60be0cc364cebdcdddc7afd4" +dependencies = [ + "ethereum_serde_utils", + "ethereum_ssz", + "itertools 0.13.0", + "serde", + "serde_derive", + "smallvec", + "tree_hash", + "typenum", +] + [[package]] name = "stable_deref_trait" version = "1.2.1" @@ -4980,24 +5092,47 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" name = "stateless-validator-common" version = "0.1.0" dependencies = [ + "anyhow", + "ethereum_ssz", + "ethereum_ssz_derive", "serde", + "serde_with", + "sha2", + "ssz_types", + "tree_hash", + "tree_hash_derive", + "typenum", ] [[package]] name = "stateless-validator-reth" version = "0.1.0" dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-genesis", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types-engine", + "anyhow", "ere-io", + "ethereum_ssz", "guest", "once_cell", "reth-chainspec", "reth-ethereum-primitives", "reth-evm-ethereum", + "reth-payload-validator", "reth-primitives-traits", "reth-stateless", "serde", + "serde_with", + "sha2", "sparsestate", + "ssz_types", "stateless-validator-common", + "tree_hash", + "tree_hash_derive", ] [[package]] @@ -5412,6 +5547,31 @@ dependencies = [ "strength_reduce", ] +[[package]] +name = "tree_hash" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee44f4cef85f88b4dea21c0b1f58320bdf35715cf56d840969487cff00613321" +dependencies = [ + "alloy-primitives", + "ethereum_hashing", + "ethereum_ssz", + "smallvec", + "typenum", +] + +[[package]] +name = "tree_hash_derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bee2ea1551f90040ab0e34b6fb7f2fa3bad8acc925837ac654f2c78a13e3089" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "typenum" version = "1.19.0" diff --git a/bin/stateless-validator-reth/risc0/Cargo.lock b/bin/stateless-validator-reth/risc0/Cargo.lock index 8b64ae18..1eee132b 100644 --- a/bin/stateless-validator-reth/risc0/Cargo.lock +++ b/bin/stateless-validator-reth/risc0/Cargo.lock @@ -267,7 +267,10 @@ dependencies = [ "alloy-eips", "alloy-primitives", "alloy-rlp", + "alloy-serde", "derive_more", + "rand 0.8.5", + "serde", "strum", ] @@ -398,7 +401,7 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04950a13cc4209d8e9b78f306e87782466bad8538c94324702d061ff03e211c9" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", "syn 2.0.111", @@ -1202,14 +1205,38 @@ dependencies = [ "typenum", ] +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + [[package]] name = "darling" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.21.3", + "darling_macro 0.21.3", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.111", ] [[package]] @@ -1227,13 +1254,24 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core 0.20.11", + "quote", + "syn 2.0.111", +] + [[package]] name = "darling_macro" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ - "darling_core", + "darling_core 0.21.3", "quote", "syn 2.0.111", ] @@ -1490,6 +1528,54 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "ethereum_hashing" +version = "0.7.0" +source = "git+https://github.com/jsign/ethereum_hashing?rev=181896944365e4b76dd6407c2d679fb844165dd6#181896944365e4b76dd6407c2d679fb844165dd6" +dependencies = [ + "sha2", +] + +[[package]] +name = "ethereum_serde_utils" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dc1355dbb41fbbd34ec28d4fb2a57d9a70c67ac3c19f6a5ca4d4a176b9e997a" +dependencies = [ + "alloy-primitives", + "hex", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "ethereum_ssz" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dcddb2554d19cde19b099fadddde576929d7a4d0c1cd3512d1fd95cf174375c" +dependencies = [ + "alloy-primitives", + "ethereum_serde_utils", + "itertools 0.13.0", + "serde", + "serde_derive", + "smallvec", + "typenum", +] + +[[package]] +name = "ethereum_ssz_derive" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a657b6b3b7e153637dc6bdc6566ad9279d9ee11a15b12cfb24a2e04360637e9f" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "fastrand" version = "2.3.0" @@ -2942,6 +3028,16 @@ dependencies = [ "url", ] +[[package]] +name = "reth-payload-validator" +version = "1.9.3" +source = "git+https://github.com/paradigmxyz/reth?rev=cfde951976bfa9100a6d9f806e06fb539ae25241#cfde951976bfa9100a6d9f806e06fb539ae25241" +dependencies = [ + "alloy-consensus", + "alloy-rpc-types-engine", + "reth-primitives-traits", +] + [[package]] name = "reth-primitives-traits" version = "1.9.3" @@ -3825,7 +3921,7 @@ version = "3.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", "syn 2.0.111", @@ -3933,6 +4029,22 @@ dependencies = [ "der", ] +[[package]] +name = "ssz_types" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b55bedc9a18ed2860a46d6beb4f4082416ee1d60be0cc364cebdcdddc7afd4" +dependencies = [ + "ethereum_serde_utils", + "ethereum_ssz", + "itertools 0.13.0", + "serde", + "serde_derive", + "smallvec", + "tree_hash", + "typenum", +] + [[package]] name = "stability" version = "0.2.1" @@ -3953,24 +4065,47 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" name = "stateless-validator-common" version = "0.1.0" dependencies = [ + "anyhow", + "ethereum_ssz", + "ethereum_ssz_derive", "serde", + "serde_with", + "sha2", + "ssz_types", + "tree_hash", + "tree_hash_derive", + "typenum", ] [[package]] name = "stateless-validator-reth" version = "0.1.0" dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-genesis", + "alloy-primitives", + "alloy-rlp", + "alloy-rpc-types-engine", + "anyhow", "ere-io", + "ethereum_ssz", "guest", "once_cell", "reth-chainspec", "reth-ethereum-primitives", "reth-evm-ethereum", + "reth-payload-validator", "reth-primitives-traits", "reth-stateless", "serde", + "serde_with", + "sha2", "sparsestate", + "ssz_types", "stateless-validator-common", + "tree_hash", + "tree_hash_derive", ] [[package]] @@ -4251,6 +4386,31 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tree_hash" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee44f4cef85f88b4dea21c0b1f58320bdf35715cf56d840969487cff00613321" +dependencies = [ + "alloy-primitives", + "ethereum_hashing", + "ethereum_ssz", + "smallvec", + "typenum", +] + +[[package]] +name = "tree_hash_derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bee2ea1551f90040ab0e34b6fb7f2fa3bad8acc925837ac654f2c78a13e3089" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "typenum" version = "1.19.0" diff --git a/bin/stateless-validator-reth/zisk/Cargo.lock b/bin/stateless-validator-reth/zisk/Cargo.lock index f3f61889..e5d6f51a 100644 --- a/bin/stateless-validator-reth/zisk/Cargo.lock +++ b/bin/stateless-validator-reth/zisk/Cargo.lock @@ -3487,8 +3487,6 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" name = "stateless-validator-common" version = "0.1.0" dependencies = [ - "alloy-eips", - "alloy-primitives", "anyhow", "ethereum_ssz", "ethereum_ssz_derive", diff --git a/crates/stateless-validator-ethrex/src/guest.rs b/crates/stateless-validator-ethrex/src/guest.rs index a9a9ab16..36fd2441 100644 --- a/crates/stateless-validator-ethrex/src/guest.rs +++ b/crates/stateless-validator-ethrex/src/guest.rs @@ -118,12 +118,10 @@ impl Guest for StatelessValidatorEthrexGuest { let res = P::cycle_scope("validation", || execution_program(input)); match res { - Ok(_) => { - return StatelessValidatorOutput::new(new_payload_request_root, true); - } + Ok(_) => StatelessValidatorOutput::new(new_payload_request_root, true), Err(err) => { P::print(&format!("Block {} validation failed: {err}\n", block_num)); - return StatelessValidatorOutput::new(new_payload_request_root, false); + StatelessValidatorOutput::new(new_payload_request_root, false) } } } From f6f9d4ad8a2e1f3b24913557b21a3ab650c669e4 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Thu, 15 Jan 2026 10:09:37 -0300 Subject: [PATCH 33/46] ci check --- .github/workflows/integration-test.yml | 1 + .github/workflows/unit-test.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index 96b94c6e..e29c3be2 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -4,6 +4,7 @@ on: push: branches: - main + - jsign-eip-8025 pull_request: env: diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index ae0fc7fc..275b94d4 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -4,6 +4,7 @@ on: push: branches: - main + - jsign-eip-8025 pull_request: env: From 036fc79e205060e1e0996162145ff09426ce4c0f Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Thu, 15 Jan 2026 15:41:02 -0300 Subject: [PATCH 34/46] refactors --- .../src/stateless_validator.rs | 2 +- .../src/rkyv_wrappers.rs | 24 ++- .../src/execution_payload.rs | 1 - .../src/new_payload_request.rs | 172 +++++++++--------- crates/stateless-validator-reth/src/host.rs | 10 +- 5 files changed, 112 insertions(+), 97 deletions(-) diff --git a/crates/integration-tests/src/stateless_validator.rs b/crates/integration-tests/src/stateless_validator.rs index 035c1b6d..b86d8e0c 100644 --- a/crates/integration-tests/src/stateless_validator.rs +++ b/crates/integration-tests/src/stateless_validator.rs @@ -1,4 +1,4 @@ -//! This module proivdes struct for stateless validator test fixture. +//! This module provides struct for stateless validator test fixture. use std::collections::HashMap; diff --git a/crates/stateless-validator-common/src/rkyv_wrappers.rs b/crates/stateless-validator-common/src/rkyv_wrappers.rs index 2bd01028..dfb579eb 100644 --- a/crates/stateless-validator-common/src/rkyv_wrappers.rs +++ b/crates/stateless-validator-common/src/rkyv_wrappers.rs @@ -3,8 +3,8 @@ //! ssz_types doesn't support rkyv natively, so we provide wrappers that //! serialize them as `Vec` and reconstruct on deserialization. -use alloc::vec::Vec; -use core::ops::Deref; +use alloc::{format, string::String, vec::Vec}; +use core::{fmt, ops::Deref}; use rkyv::{ Archive, Deserialize, Place, Serialize, @@ -16,6 +16,18 @@ use rkyv::{ use ssz_types::{FixedVector, VariableList}; use typenum::Unsigned; +/// Simple error wrapper for ssz_types errors which don't implement std::error::Error. +#[derive(Debug)] +struct SszError(String); + +impl fmt::Display for SszError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", self.0) + } +} + +impl core::error::Error for SszError {} + /// Wrapper to serialize `VariableList` as `Vec`. /// /// On serialization, the inner slice is serialized as a Vec. @@ -70,7 +82,7 @@ where let vec: Vec = Deserialize::, D>::deserialize(archived, deserializer)?; // VariableList::new returns Err if vec.len() > N::to_usize() // This shouldn't happen if data was serialized correctly - Ok(VariableList::new(vec).expect("deserialized VariableList exceeds max length")) + VariableList::new(vec).map_err(|e| ::new(SszError(format!("{e:?}")))) } } @@ -127,7 +139,7 @@ where ) -> Result, D::Error> { let vec: Vec = Deserialize::, D>::deserialize(archived, deserializer)?; // FixedVector::new returns Err if vec.len() != N::to_usize() - Ok(FixedVector::new(vec).expect("deserialized FixedVector has wrong length")) + FixedVector::new(vec).map_err(|e| ::new(SszError(format!("{e:?}")))) } } @@ -224,9 +236,9 @@ where let inner_vec: Vec = Deserialize::, D>::deserialize(inner_archived, deserializer)?; let inner = VariableList::new(inner_vec) - .expect("deserialized inner VariableList exceeds max length"); + .map_err(|e| ::new(SszError(format!("{e:?}"))))?; outer.push(inner); } - Ok(VariableList::new(outer).expect("deserialized outer VariableList exceeds max length")) + VariableList::new(outer).map_err(|e| ::new(SszError(format!("{e:?}")))) } } diff --git a/crates/stateless-validator-ethrex/src/execution_payload.rs b/crates/stateless-validator-ethrex/src/execution_payload.rs index 85f7c319..b1d3aa7a 100644 --- a/crates/stateless-validator-ethrex/src/execution_payload.rs +++ b/crates/stateless-validator-ethrex/src/execution_payload.rs @@ -77,7 +77,6 @@ impl ExecutionPayload { blob_gas_used: self.blob_gas_used, excess_blob_gas: self.excess_blob_gas, parent_beacon_block_root, - // TODO: set the value properly requests_hash, ..Default::default() }; diff --git a/crates/stateless-validator-ethrex/src/new_payload_request.rs b/crates/stateless-validator-ethrex/src/new_payload_request.rs index 234a8b42..a357b06e 100644 --- a/crates/stateless-validator-ethrex/src/new_payload_request.rs +++ b/crates/stateless-validator-ethrex/src/new_payload_request.rs @@ -16,18 +16,18 @@ use crate::execution_payload::{ pub fn get_block_from_new_payload_request(req: NewPayloadRequest) -> Result { match req { NewPayloadRequest::Bellatrix(b) => { - let payload = convert_v1_to_ethrex(b.execution_payload); + let payload: ExecutionPayload = b.execution_payload.into(); validate_execution_payload_v1(&payload).context("V1 payload validation failed")?; payload.into_block(None, None).context("into_block failed") } NewPayloadRequest::Capella(c) => { - let payload = convert_v2_to_ethrex(c.execution_payload); + let payload: ExecutionPayload = c.execution_payload.into(); validate_execution_payload_v2(&payload).context("V2 payload validation failed")?; payload.into_block(None, None).context("into_block failed") } NewPayloadRequest::Deneb(d) => { let parent_beacon_block_root = Some(H256::from(d.parent_beacon_block_root)); - let payload = convert_v3_to_ethrex(d.execution_payload); + let payload: ExecutionPayload = d.execution_payload.into(); validate_execution_payload_v3(&payload).context("V3 payload validation failed")?; payload .into_block(parent_beacon_block_root, None) @@ -36,7 +36,7 @@ pub fn get_block_from_new_payload_request(req: NewPayloadRequest) -> Result { let parent_beacon_block_root = Some(H256::from(e.parent_beacon_block_root)); let requests_hash = Some(H256::from(compute_requests_hash(&e.execution_requests))); - let payload = convert_v3_to_ethrex(e.execution_payload); + let payload: ExecutionPayload = e.execution_payload.into(); validate_execution_payload_v3(&payload).context("V3 payload validation failed")?; payload .into_block(parent_beacon_block_root, requests_hash) @@ -45,96 +45,99 @@ pub fn get_block_from_new_payload_request(req: NewPayloadRequest) -> Result ExecutionPayload { - ExecutionPayload { - parent_hash: H256::from(payload.parent_hash), - fee_recipient: Address::from(payload.fee_recipient), - state_root: H256::from(payload.state_root), - receipts_root: H256::from(payload.receipts_root), - logs_bloom: Bloom::from_slice(&payload.logs_bloom[..]), - prev_randao: H256::from(payload.prev_randao), - block_number: payload.block_number, - gas_limit: payload.gas_limit, - gas_used: payload.gas_used, - timestamp: payload.timestamp, - extra_data: Bytes::from(Vec::from(payload.extra_data)), - base_fee_per_gas: base_fee_to_u64(&payload.base_fee_per_gas), - block_hash: H256::from(payload.block_hash), - transactions: payload - .transactions - .into_iter() - .map(|t| EncodedTransaction(Bytes::from(Vec::from(t)))) - .collect(), - withdrawals: None, - blob_gas_used: None, - excess_blob_gas: None, +impl From for ExecutionPayload { + fn from(payload: ExecutionPayloadV1) -> Self { + ExecutionPayload { + parent_hash: H256::from(payload.parent_hash), + fee_recipient: Address::from(payload.fee_recipient), + state_root: H256::from(payload.state_root), + receipts_root: H256::from(payload.receipts_root), + logs_bloom: Bloom::from_slice(&payload.logs_bloom[..]), + prev_randao: H256::from(payload.prev_randao), + block_number: payload.block_number, + gas_limit: payload.gas_limit, + gas_used: payload.gas_used, + timestamp: payload.timestamp, + extra_data: Bytes::from(Vec::from(payload.extra_data)), + base_fee_per_gas: base_fee_to_u64(&payload.base_fee_per_gas), + block_hash: H256::from(payload.block_hash), + transactions: payload + .transactions + .into_iter() + .map(|t| EncodedTransaction(Bytes::from(Vec::from(t)))) + .collect(), + withdrawals: None, + blob_gas_used: None, + excess_blob_gas: None, + } } } -/// Convert V2 payload (Capella) to ethrex ExecutionPayload. -fn convert_v2_to_ethrex(payload: ExecutionPayloadV2) -> ExecutionPayload { - ExecutionPayload { - parent_hash: H256::from(payload.parent_hash), - fee_recipient: Address::from(payload.fee_recipient), - state_root: H256::from(payload.state_root), - receipts_root: H256::from(payload.receipts_root), - logs_bloom: Bloom::from_slice(&payload.logs_bloom[..]), - prev_randao: H256::from(payload.prev_randao), - block_number: payload.block_number, - gas_limit: payload.gas_limit, - gas_used: payload.gas_used, - timestamp: payload.timestamp, - extra_data: Bytes::from(Vec::from(payload.extra_data)), - base_fee_per_gas: base_fee_to_u64(&payload.base_fee_per_gas), - block_hash: H256::from(payload.block_hash), - transactions: payload - .transactions - .into_iter() - .map(|t| EncodedTransaction(Bytes::from(Vec::from(t)))) - .collect(), - withdrawals: Some( - payload - .withdrawals +impl From for ExecutionPayload { + fn from(payload: ExecutionPayloadV2) -> Self { + ExecutionPayload { + parent_hash: H256::from(payload.parent_hash), + fee_recipient: Address::from(payload.fee_recipient), + state_root: H256::from(payload.state_root), + receipts_root: H256::from(payload.receipts_root), + logs_bloom: Bloom::from_slice(&payload.logs_bloom[..]), + prev_randao: H256::from(payload.prev_randao), + block_number: payload.block_number, + gas_limit: payload.gas_limit, + gas_used: payload.gas_used, + timestamp: payload.timestamp, + extra_data: Bytes::from(Vec::from(payload.extra_data)), + base_fee_per_gas: base_fee_to_u64(&payload.base_fee_per_gas), + block_hash: H256::from(payload.block_hash), + transactions: payload + .transactions .into_iter() - .map(convert_withdrawal) + .map(|t| EncodedTransaction(Bytes::from(Vec::from(t)))) .collect(), - ), - blob_gas_used: None, - excess_blob_gas: None, + withdrawals: Some( + payload + .withdrawals + .into_iter() + .map(convert_withdrawal) + .collect(), + ), + blob_gas_used: None, + excess_blob_gas: None, + } } } -/// Convert V3 payload (Deneb/Electra) to ethrex ExecutionPayload. -fn convert_v3_to_ethrex(payload: ExecutionPayloadV3) -> ExecutionPayload { - ExecutionPayload { - parent_hash: H256::from(payload.parent_hash), - fee_recipient: Address::from(payload.fee_recipient), - state_root: H256::from(payload.state_root), - receipts_root: H256::from(payload.receipts_root), - logs_bloom: Bloom::from_slice(&payload.logs_bloom[..]), - prev_randao: H256::from(payload.prev_randao), - block_number: payload.block_number, - gas_limit: payload.gas_limit, - gas_used: payload.gas_used, - timestamp: payload.timestamp, - extra_data: Bytes::from(Vec::from(payload.extra_data)), - base_fee_per_gas: base_fee_to_u64(&payload.base_fee_per_gas), - block_hash: H256::from(payload.block_hash), - transactions: payload - .transactions - .into_iter() - .map(|t| EncodedTransaction(Bytes::from(Vec::from(t)))) - .collect(), - withdrawals: Some( - payload - .withdrawals +impl From for ExecutionPayload { + fn from(payload: ExecutionPayloadV3) -> Self { + ExecutionPayload { + parent_hash: H256::from(payload.parent_hash), + fee_recipient: Address::from(payload.fee_recipient), + state_root: H256::from(payload.state_root), + receipts_root: H256::from(payload.receipts_root), + logs_bloom: Bloom::from_slice(&payload.logs_bloom[..]), + prev_randao: H256::from(payload.prev_randao), + block_number: payload.block_number, + gas_limit: payload.gas_limit, + gas_used: payload.gas_used, + timestamp: payload.timestamp, + extra_data: Bytes::from(Vec::from(payload.extra_data)), + base_fee_per_gas: base_fee_to_u64(&payload.base_fee_per_gas), + block_hash: H256::from(payload.block_hash), + transactions: payload + .transactions .into_iter() - .map(convert_withdrawal) + .map(|t| EncodedTransaction(Bytes::from(Vec::from(t)))) .collect(), - ), - blob_gas_used: Some(payload.blob_gas_used), - excess_blob_gas: Some(payload.excess_blob_gas), + withdrawals: Some( + payload + .withdrawals + .into_iter() + .map(convert_withdrawal) + .collect(), + ), + blob_gas_used: Some(payload.blob_gas_used), + excess_blob_gas: Some(payload.excess_blob_gas), + } } } @@ -150,5 +153,6 @@ fn convert_withdrawal(w: Withdrawal) -> ethrex_common::types::Withdrawal { /// Convert base_fee_per_gas from 32-byte little-endian to u64. fn base_fee_to_u64(base_fee: &[u8; 32]) -> u64 { + debug_assert!(base_fee[8..].iter().all(|&b| b == 0), "base_fee overflow"); u64::from_le_bytes(base_fee[..8].try_into().unwrap()) } diff --git a/crates/stateless-validator-reth/src/host.rs b/crates/stateless-validator-reth/src/host.rs index f6050c3d..c1c35ecf 100644 --- a/crates/stateless-validator-reth/src/host.rs +++ b/crates/stateless-validator-reth/src/host.rs @@ -30,7 +30,7 @@ impl StatelessValidatorRethInput { /// Construct [`StatelessValidatorRethInput`] given [`StatelessInput`]. pub fn new(stateless_input: &StatelessInput, valid_block: bool) -> anyhow::Result { let signers = recover_signers(&stateless_input.block.body.transactions)?; - let requests = get_requests(stateless_input, &signers, valid_block); + let requests = get_requests(stateless_input, &signers, valid_block)?; let new_payload_request = to_new_payload_request(stateless_input, requests)?; Ok(Self { @@ -284,9 +284,9 @@ fn get_requests( stateless_input: &StatelessInput, signers: &[UncompressedPublicKey], valid_block: bool, -) -> Requests { +) -> anyhow::Result { if !valid_block { - return Requests::default(); + return Ok(Requests::default()); } let genesis = Genesis { @@ -302,12 +302,12 @@ fn get_requests( chain_spec.clone(), evm_config, ) - .unwrap(); + .context("stateless validation failed")?; // This clone doesn't make much sense, but rust-analyzer can't figure out // why isn't required and mark it as error otherwise. Since this is only used // in the host side, we can afford the extra clone. - out.requests.clone() + Ok(out.requests.clone()) } #[cfg(test)] From e6d31573ee612055e049f403895320972b75702e Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Thu, 15 Jan 2026 16:08:06 -0300 Subject: [PATCH 35/46] add block payload validity checks for ethrex --- .../src/execution_payload.rs | 48 ++++++++++++++++++- .../src/new_payload_request.rs | 28 ++++++++--- 2 files changed, 69 insertions(+), 7 deletions(-) diff --git a/crates/stateless-validator-ethrex/src/execution_payload.rs b/crates/stateless-validator-ethrex/src/execution_payload.rs index b1d3aa7a..52fef20e 100644 --- a/crates/stateless-validator-ethrex/src/execution_payload.rs +++ b/crates/stateless-validator-ethrex/src/execution_payload.rs @@ -1,5 +1,5 @@ #![allow(missing_docs)] -use anyhow::Result; +use anyhow::{Context, Result}; use bytes::Bytes; use ethrex_common::{ Address, Bloom, H256, @@ -144,3 +144,49 @@ pub fn validate_execution_payload_v3(payload: &ExecutionPayload) -> Result<()> { Ok(()) } + +pub fn validate_block_payload_v1_v2(payload: &ExecutionPayload, block: &Block) -> Result<()> { + let block_hash = payload.block_hash; + let actual_block_hash = block.hash(); + anyhow::ensure!( + block_hash == actual_block_hash, + "Block hash mismatch: expected {:?}, got {:?}", + block_hash, + actual_block_hash + ); + Ok(()) +} + +pub fn validate_block_payload_v3( + payload: &ExecutionPayload, + block: &Block, + versioned_hashes: &[[u8; 32]], +) -> Result<()> { + validate_block_payload_v1_v2(payload, block) + .context("Block validation against payload for v1/v2 fields failed")?; + + // V3 specific: validate blob hashes + let blob_versioned_hashes: Vec = block + .body + .transactions + .iter() + .flat_map(|tx| tx.blob_versioned_hashes()) + .collect(); + + anyhow::ensure!( + versioned_hashes.len() != blob_versioned_hashes.len(), + "Invalid number of blob_versioned_hashes: expected {}, got {}", + versioned_hashes.len(), + blob_versioned_hashes.len() + ); + for (expected, actual) in versioned_hashes.iter().zip(blob_versioned_hashes.iter()) { + anyhow::ensure!( + H256::from(*expected) == *actual, + "Invalid blob_versioned_hashes: expected {:?}, got {:?}", + H256::from(*expected), + actual + ); + } + + Ok(()) +} diff --git a/crates/stateless-validator-ethrex/src/new_payload_request.rs b/crates/stateless-validator-ethrex/src/new_payload_request.rs index a357b06e..cb76a67d 100644 --- a/crates/stateless-validator-ethrex/src/new_payload_request.rs +++ b/crates/stateless-validator-ethrex/src/new_payload_request.rs @@ -8,8 +8,8 @@ use stateless_validator_common::new_payload_request::{ }; use crate::execution_payload::{ - EncodedTransaction, ExecutionPayload, validate_execution_payload_v1, - validate_execution_payload_v2, validate_execution_payload_v3, + EncodedTransaction, ExecutionPayload, validate_block_payload_v1_v2, validate_block_payload_v3, + validate_execution_payload_v1, validate_execution_payload_v2, validate_execution_payload_v3, }; /// Converts a [`NewPayloadRequest`] into an ethrex [`Block`]. @@ -18,20 +18,36 @@ pub fn get_block_from_new_payload_request(req: NewPayloadRequest) -> Result { let payload: ExecutionPayload = b.execution_payload.into(); validate_execution_payload_v1(&payload).context("V1 payload validation failed")?; - payload.into_block(None, None).context("into_block failed") + let block = payload + .clone() + .into_block(None, None) + .context("into_block failed")?; + validate_block_payload_v1_v2(&payload, &block) + .context("Block/Payload validation failed")?; + Ok(block) } NewPayloadRequest::Capella(c) => { let payload: ExecutionPayload = c.execution_payload.into(); validate_execution_payload_v2(&payload).context("V2 payload validation failed")?; - payload.into_block(None, None).context("into_block failed") + let block = payload + .clone() + .into_block(None, None) + .context("into_block failed")?; + validate_block_payload_v1_v2(&payload, &block) + .context("Block/Payload validation failed")?; + Ok(block) } NewPayloadRequest::Deneb(d) => { let parent_beacon_block_root = Some(H256::from(d.parent_beacon_block_root)); let payload: ExecutionPayload = d.execution_payload.into(); validate_execution_payload_v3(&payload).context("V3 payload validation failed")?; - payload + let block = payload + .clone() .into_block(parent_beacon_block_root, None) - .context("into_block failed") + .context("into_block failed")?; + validate_block_payload_v3(&payload, &block, &d.versioned_hashes) + .context("Block/Payload validation failed")?; + Ok(block) } NewPayloadRequest::ElectraFulu(e) => { let parent_beacon_block_root = Some(H256::from(e.parent_beacon_block_root)); From f59f960f3215237b4507b5fb47f51d258b4775c8 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Thu, 15 Jan 2026 16:53:25 -0300 Subject: [PATCH 36/46] cleanup --- .github/workflows/integration-test.yml | 1 - .github/workflows/unit-test.yml | 1 - 2 files changed, 2 deletions(-) diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index e29c3be2..96b94c6e 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -4,7 +4,6 @@ on: push: branches: - main - - jsign-eip-8025 pull_request: env: diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 275b94d4..ae0fc7fc 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -4,7 +4,6 @@ on: push: branches: - main - - jsign-eip-8025 pull_request: env: From 7ad6c5e6507ea911f13d06110979c72719f9e380 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Thu, 15 Jan 2026 17:35:27 -0300 Subject: [PATCH 37/46] add panic handler in ethrex guest too --- .../stateless-validator-ethrex/src/guest.rs | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/crates/stateless-validator-ethrex/src/guest.rs b/crates/stateless-validator-ethrex/src/guest.rs index 36fd2441..e6ae6ffa 100644 --- a/crates/stateless-validator-ethrex/src/guest.rs +++ b/crates/stateless-validator-ethrex/src/guest.rs @@ -96,6 +96,33 @@ impl Guest for StatelessValidatorEthrexGuest { fn compute(input: GuestInput) -> GuestOutput { let new_payload_request_root = input.new_payload_request.tree_hash_root(); + #[cfg(feature = "std")] + { + let result = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| { + Self::compute_inner::

(input, new_payload_request_root) + })); + + match result { + Ok(output) => output, + Err(_) => { + P::print("Panic occurred during validation\n"); + StatelessValidatorOutput::new(new_payload_request_root, false) + } + } + } + + #[cfg(not(feature = "std"))] + { + Self::compute_inner::

(input, new_payload_request_root) + } + } +} + +impl StatelessValidatorEthrexGuest { + fn compute_inner( + input: GuestInput, + new_payload_request_root: [u8; 32], + ) -> GuestOutput { let block = match get_block_from_new_payload_request(input.new_payload_request) { Ok(block) => block, Err(err) => { From 2304828d41f5d4171d06de485c2eff6b05509d7b Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Thu, 15 Jan 2026 17:57:46 -0300 Subject: [PATCH 38/46] ethereum_hashing patch cleanup --- Cargo.lock | 5 ++++- Cargo.toml | 3 --- bin/stateless-validator-ethrex/risc0/Cargo.lock | 3 ++- bin/stateless-validator-ethrex/risc0/Cargo.toml | 2 +- bin/stateless-validator-ethrex/sp1/Cargo.lock | 3 ++- bin/stateless-validator-ethrex/sp1/Cargo.toml | 2 +- bin/stateless-validator-ethrex/zisk/Cargo.lock | 3 ++- bin/stateless-validator-ethrex/zisk/Cargo.toml | 2 +- bin/stateless-validator-reth/airbender/Cargo.lock | 3 ++- bin/stateless-validator-reth/airbender/Cargo.toml | 2 +- bin/stateless-validator-reth/openvm/Cargo.lock | 3 ++- bin/stateless-validator-reth/openvm/Cargo.toml | 2 +- bin/stateless-validator-reth/pico/Cargo.lock | 3 ++- bin/stateless-validator-reth/pico/Cargo.toml | 2 +- bin/stateless-validator-reth/risc0/Cargo.lock | 3 ++- bin/stateless-validator-reth/risc0/Cargo.toml | 2 +- bin/stateless-validator-reth/sp1/Cargo.lock | 3 ++- bin/stateless-validator-reth/sp1/Cargo.toml | 2 +- bin/stateless-validator-reth/zisk/Cargo.lock | 3 ++- bin/stateless-validator-reth/zisk/Cargo.toml | 2 +- 20 files changed, 31 insertions(+), 22 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 932faf07..bd5dc292 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2039,8 +2039,11 @@ dependencies = [ [[package]] name = "ethereum_hashing" version = "0.7.0" -source = "git+https://github.com/jsign/ethereum_hashing?rev=181896944365e4b76dd6407c2d679fb844165dd6#181896944365e4b76dd6407c2d679fb844165dd6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c853bd72c9e5787f8aafc3df2907c2ed03cff3150c3acd94e2e53a98ab70a8ab" dependencies = [ + "cpufeatures", + "ring", "sha2", ] diff --git a/Cargo.toml b/Cargo.toml index e6725a0e..acf4ca5b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -103,6 +103,3 @@ block-encoding-length = { path = "crates/block-encoding-length", default-feature stateless-validator-common = { path = "crates/stateless-validator-common", default-features = false } stateless-validator-ethrex = { path = "crates/stateless-validator-ethrex", default-features = false } stateless-validator-reth = { path = "crates/stateless-validator-reth", default-features = false } - -[patch.crates-io] -ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "181896944365e4b76dd6407c2d679fb844165dd6" } diff --git a/bin/stateless-validator-ethrex/risc0/Cargo.lock b/bin/stateless-validator-ethrex/risc0/Cargo.lock index 2afbd4dd..2e7a1731 100644 --- a/bin/stateless-validator-ethrex/risc0/Cargo.lock +++ b/bin/stateless-validator-ethrex/risc0/Cargo.lock @@ -1403,8 +1403,9 @@ dependencies = [ [[package]] name = "ethereum_hashing" version = "0.7.0" -source = "git+https://github.com/jsign/ethereum_hashing?rev=181896944365e4b76dd6407c2d679fb844165dd6#181896944365e4b76dd6407c2d679fb844165dd6" +source = "git+https://github.com/jsign/ethereum_hashing?rev=08c88633b700d7447ef840d19ce7b369c44311de#08c88633b700d7447ef840d19ce7b369c44311de" dependencies = [ + "cpufeatures", "sha2", ] diff --git a/bin/stateless-validator-ethrex/risc0/Cargo.toml b/bin/stateless-validator-ethrex/risc0/Cargo.toml index 35e8fa56..3bbe8ad6 100644 --- a/bin/stateless-validator-ethrex/risc0/Cargo.toml +++ b/bin/stateless-validator-ethrex/risc0/Cargo.toml @@ -30,7 +30,7 @@ p256 = { git = "https://github.com/risc0/RustCrypto-elliptic-curves", tag = "p25 crypto-bigint = { git = "https://github.com/risc0/RustCrypto-crypto-bigint", tag = "v0.5.5-risczero.0" } c-kzg = { git = "https://github.com/risc0/c-kzg-4844", tag = "c-kzg/v2.1.1-risczero.0" } substrate-bn = { git = "https://github.com/risc0/paritytech-bn", tag = "v0.6.0-risczero.0" } -ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "181896944365e4b76dd6407c2d679fb844165dd6" } +ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "08c88633b700d7447ef840d19ce7b369c44311de" } # These precompiles require the "unstable" risc0 feature which is not suited # for production environments. diff --git a/bin/stateless-validator-ethrex/sp1/Cargo.lock b/bin/stateless-validator-ethrex/sp1/Cargo.lock index 5506f63d..30011b4f 100644 --- a/bin/stateless-validator-ethrex/sp1/Cargo.lock +++ b/bin/stateless-validator-ethrex/sp1/Cargo.lock @@ -1224,8 +1224,9 @@ dependencies = [ [[package]] name = "ethereum_hashing" version = "0.7.0" -source = "git+https://github.com/jsign/ethereum_hashing?rev=181896944365e4b76dd6407c2d679fb844165dd6#181896944365e4b76dd6407c2d679fb844165dd6" +source = "git+https://github.com/jsign/ethereum_hashing?rev=08c88633b700d7447ef840d19ce7b369c44311de#08c88633b700d7447ef840d19ce7b369c44311de" dependencies = [ + "cpufeatures", "sha2", ] diff --git a/bin/stateless-validator-ethrex/sp1/Cargo.toml b/bin/stateless-validator-ethrex/sp1/Cargo.toml index c56eea0f..64038253 100644 --- a/bin/stateless-validator-ethrex/sp1/Cargo.toml +++ b/bin/stateless-validator-ethrex/sp1/Cargo.toml @@ -24,7 +24,7 @@ p256 = { git = "https://github.com/sp1-patches/elliptic-curves", tag = "patch-p2 ecdsa = { git = "https://github.com/sp1-patches/signatures", tag = "patch-16.9-sp1-4.1.0" } k256 = { git = "https://github.com/sp1-patches/elliptic-curves", tag = "patch-k256-13.4-sp1-5.0.0" } substrate-bn = { git = "https://github.com/sp1-patches/bn", tag = "patch-0.6.0-sp1-5.0.0" } -ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "181896944365e4b76dd6407c2d679fb844165dd6" } +ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "08c88633b700d7447ef840d19ce7b369c44311de" } [patch."https://github.com/lambdaclass/bls12_381"] bls12_381 = { git = "https://github.com/lambdaclass/bls12_381-patch/", branch = "expose-fp-struct" } diff --git a/bin/stateless-validator-ethrex/zisk/Cargo.lock b/bin/stateless-validator-ethrex/zisk/Cargo.lock index 31445804..1936ea56 100644 --- a/bin/stateless-validator-ethrex/zisk/Cargo.lock +++ b/bin/stateless-validator-ethrex/zisk/Cargo.lock @@ -1198,8 +1198,9 @@ dependencies = [ [[package]] name = "ethereum_hashing" version = "0.7.0" -source = "git+https://github.com/jsign/ethereum_hashing?rev=181896944365e4b76dd6407c2d679fb844165dd6#181896944365e4b76dd6407c2d679fb844165dd6" +source = "git+https://github.com/jsign/ethereum_hashing?rev=08c88633b700d7447ef840d19ce7b369c44311de#08c88633b700d7447ef840d19ce7b369c44311de" dependencies = [ + "cpufeatures", "sha2", ] diff --git a/bin/stateless-validator-ethrex/zisk/Cargo.toml b/bin/stateless-validator-ethrex/zisk/Cargo.toml index a42450c1..d40bdefc 100644 --- a/bin/stateless-validator-ethrex/zisk/Cargo.toml +++ b/bin/stateless-validator-ethrex/zisk/Cargo.toml @@ -23,7 +23,7 @@ substrate-bn = { git = "https://github.com/0xPolygonHermez/zisk-patch-bn.git", t sp1_bls12_381 = { git = "https://github.com/0xPolygonHermez/zisk-patch-bls12-381", tag = "patch-0.8.0-zisk-0.15.0" } tiny-keccak = { git = "https://github.com/0xPolygonHermez/zisk-patch-tiny-keccak/", tag = "patch-2.0.2-zisk-0.15.0" } kzg-rs = { git = "https://github.com/0xPolygonHermez/zisk-patch-kzg/", tag = "patch-0.2.7-zisk-0.15.0" } -ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "181896944365e4b76dd6407c2d679fb844165dd6" } +ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "08c88633b700d7447ef840d19ce7b369c44311de" } [features] l2 = ["stateless-validator-ethrex/l2"] diff --git a/bin/stateless-validator-reth/airbender/Cargo.lock b/bin/stateless-validator-reth/airbender/Cargo.lock index 883746e6..b0c59c85 100644 --- a/bin/stateless-validator-reth/airbender/Cargo.lock +++ b/bin/stateless-validator-reth/airbender/Cargo.lock @@ -1339,8 +1339,9 @@ dependencies = [ [[package]] name = "ethereum_hashing" version = "0.7.0" -source = "git+https://github.com/jsign/ethereum_hashing?rev=181896944365e4b76dd6407c2d679fb844165dd6#181896944365e4b76dd6407c2d679fb844165dd6" +source = "git+https://github.com/jsign/ethereum_hashing?rev=08c88633b700d7447ef840d19ce7b369c44311de#08c88633b700d7447ef840d19ce7b369c44311de" dependencies = [ + "cpufeatures", "sha2", ] diff --git a/bin/stateless-validator-reth/airbender/Cargo.toml b/bin/stateless-validator-reth/airbender/Cargo.toml index 674e3836..00e228d0 100644 --- a/bin/stateless-validator-reth/airbender/Cargo.toml +++ b/bin/stateless-validator-reth/airbender/Cargo.toml @@ -25,7 +25,7 @@ stateless-validator-reth = { path = "../../../crates/stateless-validator-reth", [patch.crates-io] radium = { git = "https://github.com/han0110/radium", branch = "feature/riscv32ima" } -ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "181896944365e4b76dd6407c2d679fb844165dd6" } +ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "08c88633b700d7447ef840d19ce7b369c44311de" } [profile.release] codegen-units = 1 diff --git a/bin/stateless-validator-reth/openvm/Cargo.lock b/bin/stateless-validator-reth/openvm/Cargo.lock index f6c827a4..7436d0a8 100644 --- a/bin/stateless-validator-reth/openvm/Cargo.lock +++ b/bin/stateless-validator-reth/openvm/Cargo.lock @@ -1400,8 +1400,9 @@ dependencies = [ [[package]] name = "ethereum_hashing" version = "0.7.0" -source = "git+https://github.com/jsign/ethereum_hashing?rev=181896944365e4b76dd6407c2d679fb844165dd6#181896944365e4b76dd6407c2d679fb844165dd6" +source = "git+https://github.com/jsign/ethereum_hashing?rev=08c88633b700d7447ef840d19ce7b369c44311de#08c88633b700d7447ef840d19ce7b369c44311de" dependencies = [ + "cpufeatures", "sha2", ] diff --git a/bin/stateless-validator-reth/openvm/Cargo.toml b/bin/stateless-validator-reth/openvm/Cargo.toml index b72c59f2..b08f77cc 100644 --- a/bin/stateless-validator-reth/openvm/Cargo.toml +++ b/bin/stateless-validator-reth/openvm/Cargo.toml @@ -65,7 +65,7 @@ openvm-sha2 = { git = "https://github.com/openvm-org//openvm.git", tag = "v1.4.2 openvm-sha256-guest = { git = "https://github.com/openvm-org//openvm.git", tag = "v1.4.2" } [patch.crates-io] -ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "181896944365e4b76dd6407c2d679fb844165dd6" } +ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "08c88633b700d7447ef840d19ce7b369c44311de" } [profile.release] codegen-units = 1 diff --git a/bin/stateless-validator-reth/pico/Cargo.lock b/bin/stateless-validator-reth/pico/Cargo.lock index 941e8a6d..8125290e 100644 --- a/bin/stateless-validator-reth/pico/Cargo.lock +++ b/bin/stateless-validator-reth/pico/Cargo.lock @@ -1864,8 +1864,9 @@ dependencies = [ [[package]] name = "ethereum_hashing" version = "0.7.0" -source = "git+https://github.com/jsign/ethereum_hashing?rev=181896944365e4b76dd6407c2d679fb844165dd6#181896944365e4b76dd6407c2d679fb844165dd6" +source = "git+https://github.com/jsign/ethereum_hashing?rev=08c88633b700d7447ef840d19ce7b369c44311de#08c88633b700d7447ef840d19ce7b369c44311de" dependencies = [ + "cpufeatures", "sha2", ] diff --git a/bin/stateless-validator-reth/pico/Cargo.toml b/bin/stateless-validator-reth/pico/Cargo.toml index afbc662d..8104bbea 100644 --- a/bin/stateless-validator-reth/pico/Cargo.toml +++ b/bin/stateless-validator-reth/pico/Cargo.toml @@ -29,7 +29,7 @@ sha3 = { git = "https://github.com/brevis-network/hashes", tag = "pico-patch-v1. curve25519-dalek = { git = "https://github.com/brevis-network/curve25519-dalek", tag = "pico-patch-v1.0.1-curve25519-dalek-v4.1.3" } ecdsa-core = { git = "https://github.com/brevis-network/signatures", tag = "pico-patch-v1.0.1-ecdsa-0.16.9", package = "ecdsa" } substrate-bn = { git = "https://github.com/brevis-network/bn", tag = "pico-patch-v1.0.1-bn-v0.6.0" } -ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "181896944365e4b76dd6407c2d679fb844165dd6" } +ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "08c88633b700d7447ef840d19ce7b369c44311de" } [profile.release] codegen-units = 1 diff --git a/bin/stateless-validator-reth/risc0/Cargo.lock b/bin/stateless-validator-reth/risc0/Cargo.lock index 1eee132b..2d99bf4f 100644 --- a/bin/stateless-validator-reth/risc0/Cargo.lock +++ b/bin/stateless-validator-reth/risc0/Cargo.lock @@ -1531,8 +1531,9 @@ dependencies = [ [[package]] name = "ethereum_hashing" version = "0.7.0" -source = "git+https://github.com/jsign/ethereum_hashing?rev=181896944365e4b76dd6407c2d679fb844165dd6#181896944365e4b76dd6407c2d679fb844165dd6" +source = "git+https://github.com/jsign/ethereum_hashing?rev=08c88633b700d7447ef840d19ce7b369c44311de#08c88633b700d7447ef840d19ce7b369c44311de" dependencies = [ + "cpufeatures", "sha2", ] diff --git a/bin/stateless-validator-reth/risc0/Cargo.toml b/bin/stateless-validator-reth/risc0/Cargo.toml index f525166c..b6774e0c 100644 --- a/bin/stateless-validator-reth/risc0/Cargo.toml +++ b/bin/stateless-validator-reth/risc0/Cargo.toml @@ -38,7 +38,7 @@ p256 = { git = "https://github.com/risc0/RustCrypto-elliptic-curves", tag = "p25 substrate-bn = { git = "https://github.com/risc0/paritytech-bn", tag = "v0.6.0-risczero.0" } crypto-bigint = { git = "https://github.com/risc0/RustCrypto-crypto-bigint", tag = "v0.5.5-risczero.0" } c-kzg = { git = "https://github.com/risc0/c-kzg-4844", tag = "v2.1.5-risczero.0" } -ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "181896944365e4b76dd6407c2d679fb844165dd6" } +ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "08c88633b700d7447ef840d19ce7b369c44311de" } [profile.release] codegen-units = 1 diff --git a/bin/stateless-validator-reth/sp1/Cargo.lock b/bin/stateless-validator-reth/sp1/Cargo.lock index 7cbb7cd3..8b5aaf3e 100644 --- a/bin/stateless-validator-reth/sp1/Cargo.lock +++ b/bin/stateless-validator-reth/sp1/Cargo.lock @@ -1386,8 +1386,9 @@ dependencies = [ [[package]] name = "ethereum_hashing" version = "0.7.0" -source = "git+https://github.com/jsign/ethereum_hashing?rev=181896944365e4b76dd6407c2d679fb844165dd6#181896944365e4b76dd6407c2d679fb844165dd6" +source = "git+https://github.com/jsign/ethereum_hashing?rev=08c88633b700d7447ef840d19ce7b369c44311de#08c88633b700d7447ef840d19ce7b369c44311de" dependencies = [ + "cpufeatures", "sha2", ] diff --git a/bin/stateless-validator-reth/sp1/Cargo.toml b/bin/stateless-validator-reth/sp1/Cargo.toml index edfac4c6..1df45d0f 100644 --- a/bin/stateless-validator-reth/sp1/Cargo.toml +++ b/bin/stateless-validator-reth/sp1/Cargo.toml @@ -28,7 +28,7 @@ k256 = { git = "https://github.com/sp1-patches/elliptic-curves", tag = "patch-k2 p256 = { git = "https://github.com/sp1-patches/elliptic-curves", tag = "patch-p256-13.2-sp1-5.0.0" } substrate-bn = { git = "https://github.com/sp1-patches/bn", tag = "patch-0.6.0-sp1-5.0.0" } ecdsa = { git = "https://github.com/sp1-patches/signatures", tag = "patch-16.9-sp1-4.1.0" } -ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "181896944365e4b76dd6407c2d679fb844165dd6" } +ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "08c88633b700d7447ef840d19ce7b369c44311de" } [profile.release] codegen-units = 1 diff --git a/bin/stateless-validator-reth/zisk/Cargo.lock b/bin/stateless-validator-reth/zisk/Cargo.lock index e5d6f51a..aecc170b 100644 --- a/bin/stateless-validator-reth/zisk/Cargo.lock +++ b/bin/stateless-validator-reth/zisk/Cargo.lock @@ -1337,8 +1337,9 @@ dependencies = [ [[package]] name = "ethereum_hashing" version = "0.7.0" -source = "git+https://github.com/jsign/ethereum_hashing?rev=181896944365e4b76dd6407c2d679fb844165dd6#181896944365e4b76dd6407c2d679fb844165dd6" +source = "git+https://github.com/jsign/ethereum_hashing?rev=08c88633b700d7447ef840d19ce7b369c44311de#08c88633b700d7447ef840d19ce7b369c44311de" dependencies = [ + "cpufeatures", "sha2", ] diff --git a/bin/stateless-validator-reth/zisk/Cargo.toml b/bin/stateless-validator-reth/zisk/Cargo.toml index 24631c53..a4955717 100644 --- a/bin/stateless-validator-reth/zisk/Cargo.toml +++ b/bin/stateless-validator-reth/zisk/Cargo.toml @@ -31,7 +31,7 @@ ark-ff = { git = "https://github.com/0xPolygonHermez/zisk-patch-ark-algebra.git" ark-bn254 = { git = "https://github.com/0xPolygonHermez/zisk-patch-ark-algebra.git", tag = "patch-0.5.0-zisk-0.15.0" } ark-serialize = { git = "https://github.com/0xPolygonHermez/zisk-patch-ark-algebra.git", tag = "patch-0.5.0-zisk-0.15.0" } aurora-engine-modexp = { git = "https://github.com/0xPolygonHermez/zisk-patch-modexp.git", tag = "patch-1.2.0-zisk-0.15.0" } -ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "181896944365e4b76dd6407c2d679fb844165dd6" } +ethereum_hashing = { git = "https://github.com/jsign/ethereum_hashing", rev = "08c88633b700d7447ef840d19ce7b369c44311de" } [profile.release] codegen-units = 1 From 9d88fdd26e6f07dccbda1a301d155fb781feb958 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Fri, 16 Jan 2026 09:07:16 -0300 Subject: [PATCH 39/46] fix ci Signed-off-by: Ignacio Hagopian --- .github/workflows/integration-test.yml | 2 ++ .github/workflows/unit-test.yml | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index 96b94c6e..180dad5b 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -32,6 +32,8 @@ jobs: exclude: - guest: stateless-validator-ethrex zkvm: airbender + - guest: stateless-validator-reth + zkvm: airbender - guest: stateless-validator-ethrex zkvm: openvm - guest: stateless-validator-ethrex diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index ae0fc7fc..b3442f24 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -89,4 +89,6 @@ jobs: --target riscv32imac-unknown-none-elf \ --exclude integration-tests \ --exclude block-encoding-length \ - --exclude stateless-validator-ethrex + --exclude stateless-validator-ethrex \ + --exclude stateless-validator-reth \ + --exclude stateless-validator-common From 590a815f2a6860f32324049625ebbc26a5230ca2 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Sun, 18 Jan 2026 07:32:58 -0300 Subject: [PATCH 40/46] fix assertion and add payload/block check --- .../stateless-validator-ethrex/src/execution_payload.rs | 2 +- .../stateless-validator-ethrex/src/new_payload_request.rs | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/crates/stateless-validator-ethrex/src/execution_payload.rs b/crates/stateless-validator-ethrex/src/execution_payload.rs index 52fef20e..4cb5c4fa 100644 --- a/crates/stateless-validator-ethrex/src/execution_payload.rs +++ b/crates/stateless-validator-ethrex/src/execution_payload.rs @@ -174,7 +174,7 @@ pub fn validate_block_payload_v3( .collect(); anyhow::ensure!( - versioned_hashes.len() != blob_versioned_hashes.len(), + versioned_hashes.len() == blob_versioned_hashes.len(), "Invalid number of blob_versioned_hashes: expected {}, got {}", versioned_hashes.len(), blob_versioned_hashes.len() diff --git a/crates/stateless-validator-ethrex/src/new_payload_request.rs b/crates/stateless-validator-ethrex/src/new_payload_request.rs index cb76a67d..50479977 100644 --- a/crates/stateless-validator-ethrex/src/new_payload_request.rs +++ b/crates/stateless-validator-ethrex/src/new_payload_request.rs @@ -54,9 +54,13 @@ pub fn get_block_from_new_payload_request(req: NewPayloadRequest) -> Result Date: Sun, 18 Jan 2026 07:33:08 -0300 Subject: [PATCH 41/46] use same prep as reth --- .../tests/stateless-validator-ethrex.rs | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/crates/integration-tests/tests/stateless-validator-ethrex.rs b/crates/integration-tests/tests/stateless-validator-ethrex.rs index 77845181..d7b90e93 100644 --- a/crates/integration-tests/tests/stateless-validator-ethrex.rs +++ b/crates/integration-tests/tests/stateless-validator-ethrex.rs @@ -2,19 +2,36 @@ use ere_dockerized::zkVMKind; use guest::Guest; -use integration_tests::{NoopPlatform, TestCase, get_fixtures}; +use integration_tests::{ + NoopPlatform, TestCase, get_fixtures, stateless_validator::get_stateless_validator_output, +}; use stateless_validator_ethrex::guest::{ StatelessValidatorEthrexGuest, StatelessValidatorEthrexInput, }; +use stateless_validator_reth::guest::{StatelessValidatorRethGuest, StatelessValidatorRethInput}; fn test_execution(zkvm_kind: zkVMKind) { let fixtures = get_fixtures(); let inputs = fixtures.into_iter().map(|fixture| { - let input = - StatelessValidatorEthrexInput::new(&fixture.stateless_input, fixture.success).unwrap(); - let output = StatelessValidatorEthrexGuest::compute::(input.clone()); + let output = if !fixture.success { + let input = StatelessValidatorRethInput::new(&fixture.stateless_input, fixture.success) + .unwrap(); + // For invalid blocks we can't correctly generate the NewPayloadRequest + // from an EL block. This is because to get the Electra requests, we + // need to execute the block successfully first. + StatelessValidatorRethGuest::compute::(input.clone()) + } else { + // For valid blocks (i.e. mainnet), we can rely on testing the output against an independent + // implementation that calculated the NewPayloadRequest root from a CL block. + get_stateless_validator_output( + fixture.stateless_input.block.hash_slow(), + fixture.success, + ) + }; assert_eq!(output.successful_block_validation, fixture.success); + let input = + StatelessValidatorEthrexInput::new(&fixture.stateless_input, fixture.success).unwrap(); TestCase::new::(fixture.name, input, output).output_sha256() }); integration_tests::test_execution("stateless-validator-ethrex", zkvm_kind, inputs); From bfba2ff0bdd71205c50e757b3b50a629246d0eff Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Sun, 18 Jan 2026 10:35:57 -0300 Subject: [PATCH 42/46] change deps --- crates/integration-tests/Cargo.toml | 7 ++++--- crates/integration-tests/src/stateless_validator.rs | 2 +- crates/stateless-validator-ethrex/Cargo.toml | 5 ++++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/crates/integration-tests/Cargo.toml b/crates/integration-tests/Cargo.toml index ab667ce0..2008fb8d 100644 --- a/crates/integration-tests/Cargo.toml +++ b/crates/integration-tests/Cargo.toml @@ -32,9 +32,7 @@ ere-zkvm-interface.workspace = true # local guest.workspace = true -stateless-validator-reth = { workspace = true, default-features = true, features = [ - "host", -] } +stateless-validator-common.workspace = true [dev-dependencies] reth-chainspec.workspace = true @@ -55,3 +53,6 @@ stateless-validator-common = { workspace = true, default-features = true, featur stateless-validator-ethrex = { workspace = true, default-features = true, features = [ "host", ] } +stateless-validator-reth = { workspace = true, default-features = true, features = [ + "host", +] } diff --git a/crates/integration-tests/src/stateless_validator.rs b/crates/integration-tests/src/stateless_validator.rs index b86d8e0c..f6e612cc 100644 --- a/crates/integration-tests/src/stateless_validator.rs +++ b/crates/integration-tests/src/stateless_validator.rs @@ -5,7 +5,7 @@ use std::collections::HashMap; use alloy_primitives::{B256, b256}; use reth_stateless::StatelessInput; use serde::{Deserialize, Serialize}; -use stateless_validator_reth::host::StatelessValidatorOutput; +use stateless_validator_common::guest::StatelessValidatorOutput; /// A stateless validation fixture containing block data and witness information. #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/crates/stateless-validator-ethrex/Cargo.toml b/crates/stateless-validator-ethrex/Cargo.toml index 35f3f71f..9ac0a713 100644 --- a/crates/stateless-validator-ethrex/Cargo.toml +++ b/crates/stateless-validator-ethrex/Cargo.toml @@ -36,7 +36,10 @@ ere-zkvm-interface = { workspace = true, optional = true } # local guest.workspace = true stateless-validator-common = { workspace = true, features = ["rkyv"] } -stateless-validator-reth = { workspace = true, optional = true } +stateless-validator-reth = { workspace = true, default-features = true, optional = true, features = [ + "host", +] } + [features] # guest From 02b04d661a601064bda4bc31d25a79d2a495be02 Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Sun, 18 Jan 2026 10:37:09 -0300 Subject: [PATCH 43/46] remove not needed struct --- .../src/new_payload_request.rs | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/crates/stateless-validator-common/src/new_payload_request.rs b/crates/stateless-validator-common/src/new_payload_request.rs index b1a0c534..2ea8d28d 100644 --- a/crates/stateless-validator-common/src/new_payload_request.rs +++ b/crates/stateless-validator-common/src/new_payload_request.rs @@ -245,20 +245,6 @@ pub struct NewPayloadRequestElectraFulu { pub execution_requests: ExecutionRequests, } -#[derive(Debug, Clone, TreeHash)] -#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] -#[cfg_attr( - feature = "rkyv", - derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize) -)] -pub struct NewPayloadRequestFulu { - pub execution_payload: ExecutionPayloadV3, - #[cfg_attr(feature = "rkyv", rkyv(with = crate::rkyv_wrappers::AsVariableList))] - pub versioned_hashes: VariableList, - pub parent_beacon_block_root: Hash32, - pub execution_requests: ExecutionRequests, -} - #[derive(Debug, Clone)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr( From af4b9a7780a117f9d5877d2d976561a9877bdd8e Mon Sep 17 00:00:00 2001 From: Ignacio Hagopian Date: Sun, 18 Jan 2026 10:41:15 -0300 Subject: [PATCH 44/46] remove l2 feature fields from ethrex input --- crates/stateless-validator-ethrex/src/guest.rs | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/crates/stateless-validator-ethrex/src/guest.rs b/crates/stateless-validator-ethrex/src/guest.rs index e6ae6ffa..a9653741 100644 --- a/crates/stateless-validator-ethrex/src/guest.rs +++ b/crates/stateless-validator-ethrex/src/guest.rs @@ -27,14 +27,6 @@ pub struct StatelessValidatorEthrexInput { pub elasticity_multiplier: u64, /// Configuration for L2 fees used for each block pub fee_configs: Option>, - #[cfg(feature = "l2")] - /// KZG commitment to the blob data - #[serde_as(as = "[_; 48]")] - pub blob_commitment: blobs_bundle::Commitment, - #[cfg(feature = "l2")] - /// KZG opening for a challenge over the blob commitment - #[serde_as(as = "[_; 48]")] - pub blob_proof: blobs_bundle::Proof, } impl Clone for StatelessValidatorEthrexInput { @@ -44,10 +36,6 @@ impl Clone for StatelessValidatorEthrexInput { execution_witness: self.execution_witness.clone(), elasticity_multiplier: self.elasticity_multiplier, fee_configs: self.fee_configs.clone(), - #[cfg(feature = "l2")] - blob_commitment: self.blob_commitment, - #[cfg(feature = "l2")] - blob_proof: self.blob_proof, } } } From f2e8c3a3bfe3d2c7ff86c9951ceb44ee0ea6f6b5 Mon Sep 17 00:00:00 2001 From: jsign Date: Mon, 19 Jan 2026 09:30:21 -0300 Subject: [PATCH 45/46] cleanup Signed-off-by: jsign --- crates/stateless-validator-ethrex/src/guest.rs | 4 ---- crates/stateless-validator-ethrex/src/host.rs | 4 ---- 2 files changed, 8 deletions(-) diff --git a/crates/stateless-validator-ethrex/src/guest.rs b/crates/stateless-validator-ethrex/src/guest.rs index a9653741..44cc0eb1 100644 --- a/crates/stateless-validator-ethrex/src/guest.rs +++ b/crates/stateless-validator-ethrex/src/guest.rs @@ -123,10 +123,6 @@ impl StatelessValidatorEthrexGuest { execution_witness: input.execution_witness, elasticity_multiplier: input.elasticity_multiplier, fee_configs: input.fee_configs, - #[cfg(feature = "l2")] - blob_commitment: input.blob_commitment, - #[cfg(feature = "l2")] - blob_proof: input.blob_proof, }; let block_num = input.blocks[0].header.number; diff --git a/crates/stateless-validator-ethrex/src/host.rs b/crates/stateless-validator-ethrex/src/host.rs index cb91b9d2..9f1558fa 100644 --- a/crates/stateless-validator-ethrex/src/host.rs +++ b/crates/stateless-validator-ethrex/src/host.rs @@ -34,10 +34,6 @@ impl StatelessValidatorEthrexInput { )?, elasticity_multiplier: 2u64, // NOTE: Ethrex doesn't derive this value from chain config. fee_configs: Default::default(), - #[cfg(feature = "l2")] - blob_commitment: [0; 48], - #[cfg(feature = "l2")] - blob_proof: [0; 48], }) } From edfb526b911bfa63bdb52795b25c9c1fae58c87e Mon Sep 17 00:00:00 2001 From: jsign Date: Mon, 19 Jan 2026 11:48:25 -0300 Subject: [PATCH 46/46] bump v0.4.0 Signed-off-by: jsign --- Cargo.lock | 12 ++++++------ Cargo.toml | 2 +- bin/block-encoding-length/airbender/Cargo.lock | 4 ++-- bin/block-encoding-length/openvm/Cargo.lock | 4 ++-- bin/block-encoding-length/pico/Cargo.lock | 4 ++-- bin/block-encoding-length/risc0/Cargo.lock | 4 ++-- bin/block-encoding-length/sp1/Cargo.lock | 4 ++-- bin/block-encoding-length/zisk/Cargo.lock | 4 ++-- bin/stateless-validator-ethrex/risc0/Cargo.lock | 6 +++--- bin/stateless-validator-ethrex/sp1/Cargo.lock | 6 +++--- bin/stateless-validator-ethrex/zisk/Cargo.lock | 6 +++--- bin/stateless-validator-reth/airbender/Cargo.lock | 6 +++--- bin/stateless-validator-reth/openvm/Cargo.lock | 6 +++--- bin/stateless-validator-reth/pico/Cargo.lock | 6 +++--- bin/stateless-validator-reth/risc0/Cargo.lock | 6 +++--- bin/stateless-validator-reth/sp1/Cargo.lock | 6 +++--- bin/stateless-validator-reth/zisk/Cargo.lock | 6 +++--- 17 files changed, 46 insertions(+), 46 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 37b55cd7..e2c645c2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1030,7 +1030,7 @@ dependencies = [ [[package]] name = "block-encoding-length" -version = "0.3.0" +version = "0.4.0" dependencies = [ "alloy-consensus", "alloy-eips", @@ -2703,7 +2703,7 @@ dependencies = [ [[package]] name = "guest" -version = "0.3.0" +version = "0.4.0" dependencies = [ "ere-io", "ere-platform-trait", @@ -3186,7 +3186,7 @@ dependencies = [ [[package]] name = "integration-tests" -version = "0.3.0" +version = "0.4.0" dependencies = [ "alloy-primitives", "block-encoding-length", @@ -6031,7 +6031,7 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stateless-validator-common" -version = "0.3.0" +version = "0.4.0" dependencies = [ "alloy-eips", "alloy-primitives", @@ -6050,7 +6050,7 @@ dependencies = [ [[package]] name = "stateless-validator-ethrex" -version = "0.3.0" +version = "0.4.0" dependencies = [ "alloy-consensus", "alloy-eips", @@ -6074,7 +6074,7 @@ dependencies = [ [[package]] name = "stateless-validator-reth" -version = "0.3.0" +version = "0.4.0" dependencies = [ "alloy-consensus", "alloy-eips", diff --git a/Cargo.toml b/Cargo.toml index 4117eb78..4aa0a4ea 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,7 @@ resolver = "2" edition = "2024" license = "MIT OR Apache-2.0" rust-version = "1.88" -version = "0.3.0" +version = "0.4.0" [workspace.lints.rust] missing_debug_implementations = "warn" diff --git a/bin/block-encoding-length/airbender/Cargo.lock b/bin/block-encoding-length/airbender/Cargo.lock index ab9d35aa..2fe539d3 100644 --- a/bin/block-encoding-length/airbender/Cargo.lock +++ b/bin/block-encoding-length/airbender/Cargo.lock @@ -618,7 +618,7 @@ dependencies = [ [[package]] name = "block-encoding-length" -version = "0.3.0" +version = "0.4.0" dependencies = [ "alloy-consensus", "alloy-eips", @@ -1305,7 +1305,7 @@ dependencies = [ [[package]] name = "guest" -version = "0.3.0" +version = "0.4.0" dependencies = [ "ere-io", "ere-platform-trait", diff --git a/bin/block-encoding-length/openvm/Cargo.lock b/bin/block-encoding-length/openvm/Cargo.lock index 933e157d..a8fff44e 100644 --- a/bin/block-encoding-length/openvm/Cargo.lock +++ b/bin/block-encoding-length/openvm/Cargo.lock @@ -618,7 +618,7 @@ dependencies = [ [[package]] name = "block-encoding-length" -version = "0.3.0" +version = "0.4.0" dependencies = [ "alloy-consensus", "alloy-eips", @@ -1314,7 +1314,7 @@ dependencies = [ [[package]] name = "guest" -version = "0.3.0" +version = "0.4.0" dependencies = [ "ere-io", "ere-platform-trait", diff --git a/bin/block-encoding-length/pico/Cargo.lock b/bin/block-encoding-length/pico/Cargo.lock index fdd51c09..6d3e720e 100644 --- a/bin/block-encoding-length/pico/Cargo.lock +++ b/bin/block-encoding-length/pico/Cargo.lock @@ -799,7 +799,7 @@ dependencies = [ [[package]] name = "block-encoding-length" -version = "0.3.0" +version = "0.4.0" dependencies = [ "alloy-consensus", "alloy-eips", @@ -1902,7 +1902,7 @@ dependencies = [ [[package]] name = "guest" -version = "0.3.0" +version = "0.4.0" dependencies = [ "ere-io", "ere-platform-trait", diff --git a/bin/block-encoding-length/risc0/Cargo.lock b/bin/block-encoding-length/risc0/Cargo.lock index 956a0fa5..42054d2a 100644 --- a/bin/block-encoding-length/risc0/Cargo.lock +++ b/bin/block-encoding-length/risc0/Cargo.lock @@ -812,7 +812,7 @@ dependencies = [ [[package]] name = "block-encoding-length" -version = "0.3.0" +version = "0.4.0" dependencies = [ "alloy-consensus", "alloy-eips", @@ -1604,7 +1604,7 @@ dependencies = [ [[package]] name = "guest" -version = "0.3.0" +version = "0.4.0" dependencies = [ "ere-io", "ere-platform-trait", diff --git a/bin/block-encoding-length/sp1/Cargo.lock b/bin/block-encoding-length/sp1/Cargo.lock index d107e995..4f8a741e 100644 --- a/bin/block-encoding-length/sp1/Cargo.lock +++ b/bin/block-encoding-length/sp1/Cargo.lock @@ -646,7 +646,7 @@ dependencies = [ [[package]] name = "block-encoding-length" -version = "0.3.0" +version = "0.4.0" dependencies = [ "alloy-consensus", "alloy-eips", @@ -1348,7 +1348,7 @@ dependencies = [ [[package]] name = "guest" -version = "0.3.0" +version = "0.4.0" dependencies = [ "ere-io", "ere-platform-trait", diff --git a/bin/block-encoding-length/zisk/Cargo.lock b/bin/block-encoding-length/zisk/Cargo.lock index 0969b5fa..6e2b8388 100644 --- a/bin/block-encoding-length/zisk/Cargo.lock +++ b/bin/block-encoding-length/zisk/Cargo.lock @@ -628,7 +628,7 @@ dependencies = [ [[package]] name = "block-encoding-length" -version = "0.3.0" +version = "0.4.0" dependencies = [ "alloy-consensus", "alloy-eips", @@ -1318,7 +1318,7 @@ dependencies = [ [[package]] name = "guest" -version = "0.3.0" +version = "0.4.0" dependencies = [ "ere-io", "ere-platform-trait", diff --git a/bin/stateless-validator-ethrex/risc0/Cargo.lock b/bin/stateless-validator-ethrex/risc0/Cargo.lock index d4707d64..22381541 100644 --- a/bin/stateless-validator-ethrex/risc0/Cargo.lock +++ b/bin/stateless-validator-ethrex/risc0/Cargo.lock @@ -1923,7 +1923,7 @@ dependencies = [ [[package]] name = "guest" -version = "0.3.0" +version = "0.4.0" dependencies = [ "ere-io", "ere-platform-trait", @@ -3895,7 +3895,7 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stateless-validator-common" -version = "0.3.0" +version = "0.4.0" dependencies = [ "anyhow", "ethereum_ssz", @@ -3912,7 +3912,7 @@ dependencies = [ [[package]] name = "stateless-validator-ethrex" -version = "0.3.0" +version = "0.4.0" dependencies = [ "anyhow", "bytes", diff --git a/bin/stateless-validator-ethrex/sp1/Cargo.lock b/bin/stateless-validator-ethrex/sp1/Cargo.lock index 6758f25a..cbe55d9d 100644 --- a/bin/stateless-validator-ethrex/sp1/Cargo.lock +++ b/bin/stateless-validator-ethrex/sp1/Cargo.lock @@ -1710,7 +1710,7 @@ dependencies = [ [[package]] name = "guest" -version = "0.3.0" +version = "0.4.0" dependencies = [ "ere-io", "ere-platform-trait", @@ -3402,7 +3402,7 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stateless-validator-common" -version = "0.3.0" +version = "0.4.0" dependencies = [ "anyhow", "ethereum_ssz", @@ -3419,7 +3419,7 @@ dependencies = [ [[package]] name = "stateless-validator-ethrex" -version = "0.3.0" +version = "0.4.0" dependencies = [ "anyhow", "bytes", diff --git a/bin/stateless-validator-ethrex/zisk/Cargo.lock b/bin/stateless-validator-ethrex/zisk/Cargo.lock index b25b3e56..6b024873 100644 --- a/bin/stateless-validator-ethrex/zisk/Cargo.lock +++ b/bin/stateless-validator-ethrex/zisk/Cargo.lock @@ -1685,7 +1685,7 @@ dependencies = [ [[package]] name = "guest" -version = "0.3.0" +version = "0.4.0" dependencies = [ "ere-io", "ere-platform-trait", @@ -3333,7 +3333,7 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stateless-validator-common" -version = "0.3.0" +version = "0.4.0" dependencies = [ "anyhow", "ethereum_ssz", @@ -3350,7 +3350,7 @@ dependencies = [ [[package]] name = "stateless-validator-ethrex" -version = "0.3.0" +version = "0.4.0" dependencies = [ "anyhow", "bytes", diff --git a/bin/stateless-validator-reth/airbender/Cargo.lock b/bin/stateless-validator-reth/airbender/Cargo.lock index 7f58f7f1..96a18b0b 100644 --- a/bin/stateless-validator-reth/airbender/Cargo.lock +++ b/bin/stateless-validator-reth/airbender/Cargo.lock @@ -1545,7 +1545,7 @@ dependencies = [ [[package]] name = "guest" -version = "0.3.0" +version = "0.4.0" dependencies = [ "ere-io", "ere-platform-trait", @@ -3498,7 +3498,7 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stateless-validator-common" -version = "0.3.0" +version = "0.4.0" dependencies = [ "anyhow", "ethereum_ssz", @@ -3514,7 +3514,7 @@ dependencies = [ [[package]] name = "stateless-validator-reth" -version = "0.3.0" +version = "0.4.0" dependencies = [ "alloy-consensus", "alloy-eips", diff --git a/bin/stateless-validator-reth/openvm/Cargo.lock b/bin/stateless-validator-reth/openvm/Cargo.lock index c1184541..3cdb675e 100644 --- a/bin/stateless-validator-reth/openvm/Cargo.lock +++ b/bin/stateless-validator-reth/openvm/Cargo.lock @@ -1613,7 +1613,7 @@ dependencies = [ [[package]] name = "guest" -version = "0.3.0" +version = "0.4.0" dependencies = [ "ere-io", "ere-platform-trait", @@ -4002,7 +4002,7 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stateless-validator-common" -version = "0.3.0" +version = "0.4.0" dependencies = [ "anyhow", "ethereum_ssz", @@ -4018,7 +4018,7 @@ dependencies = [ [[package]] name = "stateless-validator-reth" -version = "0.3.0" +version = "0.4.0" dependencies = [ "alloy-consensus", "alloy-eips", diff --git a/bin/stateless-validator-reth/pico/Cargo.lock b/bin/stateless-validator-reth/pico/Cargo.lock index 1cedfdc9..3d9e2609 100644 --- a/bin/stateless-validator-reth/pico/Cargo.lock +++ b/bin/stateless-validator-reth/pico/Cargo.lock @@ -2139,7 +2139,7 @@ dependencies = [ [[package]] name = "guest" -version = "0.3.0" +version = "0.4.0" dependencies = [ "ere-io", "ere-platform-trait", @@ -5091,7 +5091,7 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stateless-validator-common" -version = "0.3.0" +version = "0.4.0" dependencies = [ "anyhow", "ethereum_ssz", @@ -5107,7 +5107,7 @@ dependencies = [ [[package]] name = "stateless-validator-reth" -version = "0.3.0" +version = "0.4.0" dependencies = [ "alloy-consensus", "alloy-eips", diff --git a/bin/stateless-validator-reth/risc0/Cargo.lock b/bin/stateless-validator-reth/risc0/Cargo.lock index 0b68d8e3..9a8a9425 100644 --- a/bin/stateless-validator-reth/risc0/Cargo.lock +++ b/bin/stateless-validator-reth/risc0/Cargo.lock @@ -1774,7 +1774,7 @@ dependencies = [ [[package]] name = "guest" -version = "0.3.0" +version = "0.4.0" dependencies = [ "ere-io", "ere-platform-trait", @@ -4064,7 +4064,7 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stateless-validator-common" -version = "0.3.0" +version = "0.4.0" dependencies = [ "anyhow", "ethereum_ssz", @@ -4080,7 +4080,7 @@ dependencies = [ [[package]] name = "stateless-validator-reth" -version = "0.3.0" +version = "0.4.0" dependencies = [ "alloy-consensus", "alloy-eips", diff --git a/bin/stateless-validator-reth/sp1/Cargo.lock b/bin/stateless-validator-reth/sp1/Cargo.lock index 0fc21e93..2d3653ef 100644 --- a/bin/stateless-validator-reth/sp1/Cargo.lock +++ b/bin/stateless-validator-reth/sp1/Cargo.lock @@ -1598,7 +1598,7 @@ dependencies = [ [[package]] name = "guest" -version = "0.3.0" +version = "0.4.0" dependencies = [ "ere-io", "ere-platform-trait", @@ -3724,7 +3724,7 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stateless-validator-common" -version = "0.3.0" +version = "0.4.0" dependencies = [ "anyhow", "ethereum_ssz", @@ -3740,7 +3740,7 @@ dependencies = [ [[package]] name = "stateless-validator-reth" -version = "0.3.0" +version = "0.4.0" dependencies = [ "alloy-consensus", "alloy-eips", diff --git a/bin/stateless-validator-reth/zisk/Cargo.lock b/bin/stateless-validator-reth/zisk/Cargo.lock index 52e0d559..79e77892 100644 --- a/bin/stateless-validator-reth/zisk/Cargo.lock +++ b/bin/stateless-validator-reth/zisk/Cargo.lock @@ -1543,7 +1543,7 @@ dependencies = [ [[package]] name = "guest" -version = "0.3.0" +version = "0.4.0" dependencies = [ "ere-io", "ere-platform-trait", @@ -3486,7 +3486,7 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stateless-validator-common" -version = "0.3.0" +version = "0.4.0" dependencies = [ "anyhow", "ethereum_ssz", @@ -3502,7 +3502,7 @@ dependencies = [ [[package]] name = "stateless-validator-reth" -version = "0.3.0" +version = "0.4.0" dependencies = [ "alloy-consensus", "alloy-eips",