From 5cd19de0eac9e4cd688be015cc23e79df2abc1e0 Mon Sep 17 00:00:00 2001 From: shana Date: Thu, 16 Oct 2025 11:16:49 -0700 Subject: [PATCH 01/19] Add flashtestation builder tx and registration in block (#282) --- crates/op-rbuilder/src/builders/builder_tx.rs | 9 + crates/op-rbuilder/src/builders/context.rs | 46 +- .../src/builders/flashblocks/builder_tx.rs | 22 +- .../src/builders/standard/builder_tx.rs | 2 +- .../src/flashtestations/builder_tx.rs | 603 ++++++++++++++++++ crates/op-rbuilder/src/flashtestations/mod.rs | 4 + .../src/flashtestations/service.rs | 42 +- 7 files changed, 670 insertions(+), 58 deletions(-) create mode 100644 crates/op-rbuilder/src/flashtestations/builder_tx.rs diff --git a/crates/op-rbuilder/src/builders/builder_tx.rs b/crates/op-rbuilder/src/builders/builder_tx.rs index 0cd8d5e8e..15ecc0d81 100644 --- a/crates/op-rbuilder/src/builders/builder_tx.rs +++ b/crates/op-rbuilder/src/builders/builder_tx.rs @@ -89,6 +89,15 @@ impl From for PayloadBuilderError { } } +impl BuilderTransactionError { + pub fn other(error: E) -> Self + where + E: core::error::Error + Send + Sync + 'static, + { + BuilderTransactionError::Other(Box::new(error)) + } +} + pub trait BuilderTransactions: Debug { fn simulate_builder_txs( &self, diff --git a/crates/op-rbuilder/src/builders/context.rs b/crates/op-rbuilder/src/builders/context.rs index 71f10c833..a18facf5a 100644 --- a/crates/op-rbuilder/src/builders/context.rs +++ b/crates/op-rbuilder/src/builders/context.rs @@ -2,7 +2,7 @@ use alloy_consensus::{Eip658Value, Transaction, conditional::BlockConditionalAtt use alloy_eips::Typed2718; use alloy_evm::Database; use alloy_op_evm::block::receipt_builder::OpReceiptBuilder; -use alloy_primitives::{Bytes, U256}; +use alloy_primitives::{BlockHash, Bytes, U256}; use alloy_rpc_types_eth::Withdrawals; use core::fmt::Debug; use op_alloy_consensus::OpDepositReceipt; @@ -75,41 +75,51 @@ pub struct OpPayloadBuilderCtx { impl OpPayloadBuilderCtx { /// Returns the parent block the payload will be build on. - pub(super) fn parent(&self) -> &SealedHeader { + pub fn parent(&self) -> &SealedHeader { &self.config.parent_header } + /// Returns the parent hash + pub fn parent_hash(&self) -> BlockHash { + self.parent().hash() + } + + /// Returns the timestamp + pub fn timestamp(&self) -> u64 { + self.attributes().timestamp() + } + /// Returns the builder attributes. pub(super) const fn attributes(&self) -> &OpPayloadBuilderAttributes { &self.config.attributes } /// Returns the withdrawals if shanghai is active. - pub(super) fn withdrawals(&self) -> Option<&Withdrawals> { + pub fn withdrawals(&self) -> Option<&Withdrawals> { self.chain_spec .is_shanghai_active_at_timestamp(self.attributes().timestamp()) .then(|| &self.attributes().payload_attributes.withdrawals) } /// Returns the block gas limit to target. - pub(super) fn block_gas_limit(&self) -> u64 { + pub fn block_gas_limit(&self) -> u64 { self.attributes() .gas_limit .unwrap_or(self.evm_env.block_env.gas_limit) } /// Returns the block number for the block. - pub(super) fn block_number(&self) -> u64 { + pub fn block_number(&self) -> u64 { as_u64_saturated!(self.evm_env.block_env.number) } /// Returns the current base fee - pub(super) fn base_fee(&self) -> u64 { + pub fn base_fee(&self) -> u64 { self.evm_env.block_env.basefee } /// Returns the current blob gas price. - pub(super) fn get_blob_gasprice(&self) -> Option { + pub fn get_blob_gasprice(&self) -> Option { self.evm_env .block_env .blob_gasprice() @@ -119,7 +129,7 @@ impl OpPayloadBuilderCtx { /// Returns the blob fields for the header. /// /// This will always return `Some(0)` after ecotone. - pub(super) fn blob_fields(&self) -> (Option, Option) { + pub fn blob_fields(&self) -> (Option, Option) { // OP doesn't support blobs/EIP-4844. // https://specs.optimism.io/protocol/exec-engine.html#ecotone-disable-blob-transactions // Need [Some] or [None] based on hardfork to match block hash. @@ -132,8 +142,8 @@ impl OpPayloadBuilderCtx { /// Returns the extra data for the block. /// - /// After holocene this extracts the extradata from the paylpad - pub(super) fn extra_data(&self) -> Result { + /// After holocene this extracts the extradata from the payload + pub fn extra_data(&self) -> Result { if self.is_holocene_active() { self.attributes() .get_holocene_extra_data( @@ -148,47 +158,47 @@ impl OpPayloadBuilderCtx { } /// Returns the current fee settings for transactions from the mempool - pub(super) fn best_transaction_attributes(&self) -> BestTransactionsAttributes { + pub fn best_transaction_attributes(&self) -> BestTransactionsAttributes { BestTransactionsAttributes::new(self.base_fee(), self.get_blob_gasprice()) } /// Returns the unique id for this payload job. - pub(super) fn payload_id(&self) -> PayloadId { + pub fn payload_id(&self) -> PayloadId { self.attributes().payload_id() } /// Returns true if regolith is active for the payload. - pub(super) fn is_regolith_active(&self) -> bool { + pub fn is_regolith_active(&self) -> bool { self.chain_spec .is_regolith_active_at_timestamp(self.attributes().timestamp()) } /// Returns true if ecotone is active for the payload. - pub(super) fn is_ecotone_active(&self) -> bool { + pub fn is_ecotone_active(&self) -> bool { self.chain_spec .is_ecotone_active_at_timestamp(self.attributes().timestamp()) } /// Returns true if canyon is active for the payload. - pub(super) fn is_canyon_active(&self) -> bool { + pub fn is_canyon_active(&self) -> bool { self.chain_spec .is_canyon_active_at_timestamp(self.attributes().timestamp()) } /// Returns true if holocene is active for the payload. - pub(super) fn is_holocene_active(&self) -> bool { + pub fn is_holocene_active(&self) -> bool { self.chain_spec .is_holocene_active_at_timestamp(self.attributes().timestamp()) } /// Returns true if isthmus is active for the payload. - pub(super) fn is_isthmus_active(&self) -> bool { + pub fn is_isthmus_active(&self) -> bool { self.chain_spec .is_isthmus_active_at_timestamp(self.attributes().timestamp()) } /// Returns the chain id - pub(super) fn chain_id(&self) -> u64 { + pub fn chain_id(&self) -> u64 { self.chain_spec.chain_id() } } diff --git a/crates/op-rbuilder/src/builders/flashblocks/builder_tx.rs b/crates/op-rbuilder/src/builders/flashblocks/builder_tx.rs index 7588dd4e3..b1b169063 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/builder_tx.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/builder_tx.rs @@ -25,7 +25,7 @@ use crate::{ context::OpPayloadBuilderCtx, flashblocks::payload::FlashblocksExtraCtx, }, - flashtestations::service::FlashtestationsBuilderTx, + flashtestations::builder_tx::FlashtestationsBuilderTx, primitives::reth::ExecutionInfo, tx_signer::Signer, }; @@ -172,23 +172,21 @@ impl FlashblocksNumberBuilderTx { ) { Ok(gas_used) } else { - Err(BuilderTransactionError::Other(Box::new( + Err(BuilderTransactionError::other( FlashblockNumberError::LogMismatch( IFlashblockNumber::FlashblockIncremented::SIGNATURE_HASH, ), - ))) + )) } } - ExecutionResult::Revert { output, .. } => { - Err(BuilderTransactionError::Other(Box::new( - IFlashblockNumber::IFlashblockNumberErrors::abi_decode(&output) - .map(FlashblockNumberError::Revert) - .unwrap_or_else(|e| FlashblockNumberError::Unknown(hex::encode(output), e)), - ))) - } - ExecutionResult::Halt { reason, .. } => Err(BuilderTransactionError::Other(Box::new( + ExecutionResult::Revert { output, .. } => Err(BuilderTransactionError::other( + IFlashblockNumber::IFlashblockNumberErrors::abi_decode(&output) + .map(FlashblockNumberError::Revert) + .unwrap_or_else(|e| FlashblockNumberError::Unknown(hex::encode(output), e)), + )), + ExecutionResult::Halt { reason, .. } => Err(BuilderTransactionError::other( FlashblockNumberError::Halt(reason), - ))), + )), } } diff --git a/crates/op-rbuilder/src/builders/standard/builder_tx.rs b/crates/op-rbuilder/src/builders/standard/builder_tx.rs index c19f627d4..75a159ad7 100644 --- a/crates/op-rbuilder/src/builders/standard/builder_tx.rs +++ b/crates/op-rbuilder/src/builders/standard/builder_tx.rs @@ -8,7 +8,7 @@ use crate::{ BuilderTransactionCtx, BuilderTransactionError, BuilderTransactions, builder_tx::BuilderTxBase, context::OpPayloadBuilderCtx, }, - flashtestations::service::FlashtestationsBuilderTx, + flashtestations::builder_tx::FlashtestationsBuilderTx, primitives::reth::ExecutionInfo, tx_signer::Signer, }; diff --git a/crates/op-rbuilder/src/flashtestations/builder_tx.rs b/crates/op-rbuilder/src/flashtestations/builder_tx.rs new file mode 100644 index 000000000..ee5e793cf --- /dev/null +++ b/crates/op-rbuilder/src/flashtestations/builder_tx.rs @@ -0,0 +1,603 @@ +use alloy_consensus::TxEip1559; +use alloy_eips::Encodable2718; +use alloy_evm::Database; +use alloy_op_evm::OpEvm; +use alloy_primitives::{Address, B256, Bytes, TxKind, U256, keccak256, map::foldhash::HashMap}; +use alloy_sol_types::{Error, SolCall, SolEvent, SolInterface, SolValue}; +use core::fmt::Debug; +use op_alloy_consensus::OpTypedTransaction; +use reth_evm::{ConfigureEvm, Evm, EvmError, precompiles::PrecompilesMap}; +use reth_optimism_primitives::OpTransactionSigned; +use reth_primitives::{Log, Recovered}; +use reth_provider::StateProvider; +use reth_revm::{State, database::StateProviderDatabase}; +use revm::{ + DatabaseCommit, + context::result::{ExecutionResult, ResultAndState}, + inspector::NoOpInspector, + state::Account, +}; +use std::sync::OnceLock; +use tracing::{debug, info}; + +use crate::{ + builders::{ + BuilderTransactionCtx, BuilderTransactionError, BuilderTransactions, OpPayloadBuilderCtx, + get_balance, get_nonce, + }, + flashtestations::{ + BlockData, FlashtestationRevertReason, + IBlockBuilderPolicy::{self, BlockBuilderProofVerified}, + IFlashtestationRegistry::{self, TEEServiceRegistered}, + }, + primitives::reth::ExecutionInfo, + tx_signer::Signer, +}; + +pub struct FlashtestationsBuilderTxArgs { + pub attestation: Vec, + pub extra_registration_data: Bytes, + pub tee_service_signer: Signer, + pub funding_key: Signer, + pub funding_amount: U256, + pub registry_address: Address, + pub builder_policy_address: Address, + pub builder_proof_version: u8, + pub enable_block_proofs: bool, + pub registered: bool, +} + +#[derive(Debug, Clone)] +pub struct FlashtestationsBuilderTx { + // Attestation for the builder + attestation: Vec, + // Extra registration data for the builder + extra_registration_data: Bytes, + // TEE service generated key + tee_service_signer: Signer, + // Funding key for the TEE signer + funding_key: Signer, + // Funding amount for the TEE signer + funding_amount: U256, + // Registry address for the attestation + registry_address: Address, + // Builder policy address for the block builder proof + builder_policy_address: Address, + // Builder proof version + builder_proof_version: u8, + // Whether the workload and address has been registered + registered: OnceLock, + // Whether block proofs are enabled + enable_block_proofs: bool, +} + +#[derive(Debug, Default)] +pub struct TxSimulateResult { + pub gas_used: u64, + pub success: bool, + pub state_changes: HashMap, + pub revert_reason: Option, + pub logs: Vec, +} + +impl FlashtestationsBuilderTx { + pub fn new(args: FlashtestationsBuilderTxArgs) -> Self { + Self { + attestation: args.attestation, + extra_registration_data: args.extra_registration_data, + tee_service_signer: args.tee_service_signer, + funding_key: args.funding_key, + funding_amount: args.funding_amount, + registry_address: args.registry_address, + builder_policy_address: args.builder_policy_address, + builder_proof_version: args.builder_proof_version, + registered: OnceLock::new(), + enable_block_proofs: args.enable_block_proofs, + } + } + + fn signed_funding_tx( + &self, + to: Address, + from: Signer, + amount: U256, + base_fee: u64, + chain_id: u64, + nonce: u64, + ) -> Result, secp256k1::Error> { + // Create the EIP-1559 transaction + let tx = OpTypedTransaction::Eip1559(TxEip1559 { + chain_id, + nonce, + gas_limit: 21000, + max_fee_per_gas: base_fee.into(), + max_priority_fee_per_gas: 0, + to: TxKind::Call(to), + value: amount, + ..Default::default() + }); + from.sign_tx(tx) + } + + fn signed_register_tee_service_tx( + &self, + attestation: Vec, + gas_limit: u64, + base_fee: u64, + chain_id: u64, + nonce: u64, + ) -> Result, secp256k1::Error> { + let quote_bytes = Bytes::from(attestation); + let calldata = IFlashtestationRegistry::registerTEEServiceCall { + rawQuote: quote_bytes, + extendedRegistrationData: self.extra_registration_data.clone(), + } + .abi_encode(); + + // Create the EIP-1559 transaction + let tx = OpTypedTransaction::Eip1559(TxEip1559 { + chain_id, + nonce, + gas_limit, + max_fee_per_gas: base_fee.into(), + max_priority_fee_per_gas: 0, + to: TxKind::Call(self.registry_address), + input: calldata.into(), + ..Default::default() + }); + self.tee_service_signer.sign_tx(tx) + } + + fn signed_block_builder_proof_tx( + &self, + block_content_hash: B256, + ctx: &OpPayloadBuilderCtx, + gas_limit: u64, + nonce: u64, + ) -> Result, secp256k1::Error> { + let calldata = IBlockBuilderPolicy::verifyBlockBuilderProofCall { + version: self.builder_proof_version, + blockContentHash: block_content_hash, + } + .abi_encode(); + // Create the EIP-1559 transaction + let tx = OpTypedTransaction::Eip1559(TxEip1559 { + chain_id: ctx.chain_id(), + nonce, + gas_limit, + max_fee_per_gas: ctx.base_fee().into(), + max_priority_fee_per_gas: 0, + to: TxKind::Call(self.builder_policy_address), + input: calldata.into(), + ..Default::default() + }); + self.tee_service_signer.sign_tx(tx) + } + + /// Computes the block content hash according to the formula: + /// keccak256(abi.encode(parentHash, blockNumber, timestamp, transactionHashes)) + /// https://github.com/flashbots/rollup-boost/blob/main/specs/flashtestations.md#block-building-process + fn compute_block_content_hash( + transactions: Vec, + parent_hash: B256, + block_number: u64, + timestamp: u64, + ) -> B256 { + // Create ordered list of transaction hashes + let transaction_hashes: Vec = transactions + .iter() + .map(|tx| { + // RLP encode the transaction and hash it + let mut encoded = Vec::new(); + tx.encode_2718(&mut encoded); + keccak256(&encoded) + }) + .collect(); + + // Create struct and ABI encode + let block_data = BlockData { + parentHash: parent_hash, + blockNumber: U256::from(block_number), + timestamp: U256::from(timestamp), + transactionHashes: transaction_hashes, + }; + + let encoded = block_data.abi_encode(); + keccak256(&encoded) + } + + fn simulate_register_tee_service_tx( + &self, + ctx: &OpPayloadBuilderCtx, + evm: &mut OpEvm< + &mut State>, + NoOpInspector, + PrecompilesMap, + >, + ) -> Result { + let nonce = get_nonce(evm.db_mut(), self.tee_service_signer.address)?; + + let register_tx = self.signed_register_tee_service_tx( + self.attestation.clone(), + ctx.block_gas_limit(), + ctx.base_fee(), + ctx.chain_id(), + nonce, + )?; + let ResultAndState { result, state } = match evm.transact(®ister_tx) { + Ok(res) => res, + Err(err) => { + if err.is_invalid_tx_err() { + return Err(BuilderTransactionError::InvalidTransactionError(Box::new( + err, + ))); + } else { + return Err(BuilderTransactionError::EvmExecutionError(Box::new(err))); + } + } + }; + match result { + ExecutionResult::Success { gas_used, logs, .. } => Ok(TxSimulateResult { + gas_used, + success: true, + state_changes: state, + revert_reason: None, + logs, + }), + ExecutionResult::Revert { output, gas_used } => { + let revert_reason = + IFlashtestationRegistry::IFlashtestationRegistryErrors::abi_decode(&output) + .map(FlashtestationRevertReason::FlashtestationRegistry) + .unwrap_or_else(|e| { + FlashtestationRevertReason::Unknown(hex::encode(output), e) + }); + Ok(TxSimulateResult { + gas_used, + success: false, + state_changes: state, + revert_reason: Some(revert_reason), + logs: vec![], + }) + } + ExecutionResult::Halt { reason, .. } => Ok(TxSimulateResult { + gas_used: 0, + success: false, + state_changes: state, + revert_reason: Some(FlashtestationRevertReason::Halt(reason)), + logs: vec![], + }), + } + } + + fn check_tee_address_registered_log(&self, logs: &[Log], address: Address) -> bool { + for log in logs { + if log.topics().first() == Some(&TEEServiceRegistered::SIGNATURE_HASH) { + if let Ok(decoded) = TEEServiceRegistered::decode_log(log) { + if decoded.teeAddress == address { + return true; + } + }; + } + } + false + } + + fn simulate_verify_block_proof_tx( + &self, + block_content_hash: B256, + ctx: &OpPayloadBuilderCtx, + evm: &mut OpEvm< + &mut State>, + NoOpInspector, + PrecompilesMap, + >, + ) -> Result { + let nonce = get_nonce(evm.db_mut(), self.tee_service_signer.address)?; + + let verify_block_proof_tx = self.signed_block_builder_proof_tx( + block_content_hash, + ctx, + ctx.block_gas_limit(), + nonce, + )?; + let ResultAndState { result, state } = match evm.transact(&verify_block_proof_tx) { + Ok(res) => res, + Err(err) => { + if err.is_invalid_tx_err() { + return Err(BuilderTransactionError::InvalidTransactionError(Box::new( + err, + ))); + } else { + return Err(BuilderTransactionError::EvmExecutionError(Box::new(err))); + } + } + }; + match result { + ExecutionResult::Success { gas_used, logs, .. } => Ok(TxSimulateResult { + gas_used, + success: true, + state_changes: state, + revert_reason: None, + logs, + }), + ExecutionResult::Revert { output, gas_used } => { + let revert_reason = + IBlockBuilderPolicy::IBlockBuilderPolicyErrors::abi_decode(&output) + .map(FlashtestationRevertReason::BlockBuilderPolicy) + .unwrap_or_else(|e| { + FlashtestationRevertReason::Unknown(hex::encode(output), e) + }); + Ok(TxSimulateResult { + gas_used, + success: false, + state_changes: state, + revert_reason: Some(revert_reason), + logs: vec![], + }) + } + ExecutionResult::Halt { reason, .. } => Ok(TxSimulateResult { + gas_used: 0, + success: false, + state_changes: state, + revert_reason: Some(FlashtestationRevertReason::Halt(reason)), + logs: vec![], + }), + } + } + + fn check_verify_block_proof_log(&self, logs: &[Log]) -> bool { + for log in logs { + if log.topics().first() == Some(&BlockBuilderProofVerified::SIGNATURE_HASH) { + return true; + } + } + false + } + + fn fund_tee_service_tx( + &self, + ctx: &OpPayloadBuilderCtx, + evm: &mut OpEvm< + &mut State>, + NoOpInspector, + PrecompilesMap, + >, + ) -> Result, BuilderTransactionError> { + let balance = get_balance(evm.db_mut(), self.tee_service_signer.address)?; + if balance.is_zero() { + let funding_nonce = get_nonce(evm.db_mut(), self.funding_key.address)?; + let funding_tx = self.signed_funding_tx( + self.tee_service_signer.address, + self.funding_key, + self.funding_amount, + ctx.base_fee(), + ctx.chain_id(), + funding_nonce, + )?; + let da_size = + op_alloy_flz::tx_estimated_size_fjord_bytes(funding_tx.encoded_2718().as_slice()); + let ResultAndState { state, .. } = match evm.transact(&funding_tx) { + Ok(res) => res, + Err(err) => { + if err.is_invalid_tx_err() { + return Err(BuilderTransactionError::InvalidTransactionError(Box::new( + err, + ))); + } else { + return Err(BuilderTransactionError::EvmExecutionError(Box::new(err))); + } + } + }; + info!(target: "flashtestations", block_number = ctx.block_number(), tx_hash = ?funding_tx.tx_hash(), "adding funding tx to builder txs"); + evm.db_mut().commit(state); + Ok(Some(BuilderTransactionCtx { + gas_used: 21000, + da_size, + signed_tx: funding_tx, + is_top_of_block: false, + })) + } else { + Ok(None) + } + } + + fn register_tee_service_tx( + &self, + ctx: &OpPayloadBuilderCtx, + evm: &mut OpEvm< + &mut State>, + NoOpInspector, + PrecompilesMap, + >, + ) -> Result<(Option, bool), BuilderTransactionError> { + let TxSimulateResult { + gas_used, + success, + state_changes, + revert_reason, + logs, + } = self.simulate_register_tee_service_tx(ctx, evm)?; + if success { + if !self.check_tee_address_registered_log(&logs, self.tee_service_signer.address) { + Err(BuilderTransactionError::other( + FlashtestationRevertReason::LogMismatch( + self.registry_address, + TEEServiceRegistered::SIGNATURE_HASH, + ), + )) + } else { + let nonce = get_nonce(evm.db_mut(), self.tee_service_signer.address)?; + let register_tx = self.signed_register_tee_service_tx( + self.attestation.clone(), + gas_used * 64 / 63, // Due to EIP-150, 63/64 of available gas is forwarded to external calls so need to add a buffer + ctx.base_fee(), + ctx.chain_id(), + nonce, + )?; + let da_size = op_alloy_flz::tx_estimated_size_fjord_bytes( + register_tx.encoded_2718().as_slice(), + ); + info!(target: "flashtestations", block_number = ctx.block_number(), tx_hash = ?register_tx.tx_hash(), "adding register tee tx to builder txs"); + evm.db_mut().commit(state_changes); + Ok(( + Some(BuilderTransactionCtx { + gas_used, + da_size, + signed_tx: register_tx, + is_top_of_block: false, + }), + false, + )) + } + } else if let Some(FlashtestationRevertReason::FlashtestationRegistry( + IFlashtestationRegistry::IFlashtestationRegistryErrors::TEEServiceAlreadyRegistered(_), + )) = revert_reason + { + Ok((None, true)) + } else { + Err(BuilderTransactionError::other(revert_reason.unwrap_or( + FlashtestationRevertReason::Unknown( + "unknown revert".into(), + Error::Other("unknown revert".into()), + ), + ))) + } + } + + fn verify_block_proof_tx( + &self, + transactions: Vec, + ctx: &OpPayloadBuilderCtx, + evm: &mut OpEvm< + &mut State>, + NoOpInspector, + PrecompilesMap, + >, + ) -> Result, BuilderTransactionError> { + let block_content_hash = Self::compute_block_content_hash( + transactions.clone(), + ctx.parent_hash(), + ctx.block_number(), + ctx.timestamp(), + ); + + let TxSimulateResult { + gas_used, + success, + revert_reason, + logs, + .. + } = self.simulate_verify_block_proof_tx(block_content_hash, ctx, evm)?; + if success { + if !self.check_verify_block_proof_log(&logs) { + Err(BuilderTransactionError::other( + FlashtestationRevertReason::LogMismatch( + self.builder_policy_address, + BlockBuilderProofVerified::SIGNATURE_HASH, + ), + )) + } else { + let nonce = get_nonce(evm.db_mut(), self.tee_service_signer.address)?; + // Due to EIP-150, only 63/64 of available gas is forwarded to external calls so need to add a buffer + let verify_block_proof_tx = self.signed_block_builder_proof_tx( + block_content_hash, + ctx, + gas_used * 64 / 63, + nonce, + )?; + let da_size = op_alloy_flz::tx_estimated_size_fjord_bytes( + verify_block_proof_tx.encoded_2718().as_slice(), + ); + debug!(target: "flashtestations", block_number = ctx.block_number(), tx_hash = ?verify_block_proof_tx.tx_hash(), "adding verify block proof tx to builder txs"); + Ok(Some(BuilderTransactionCtx { + gas_used, + da_size, + signed_tx: verify_block_proof_tx, + is_top_of_block: false, + })) + } + } else { + Err(BuilderTransactionError::other(revert_reason.unwrap_or( + FlashtestationRevertReason::Unknown( + "unknown revert".into(), + Error::Other("unknown revert".into()), + ), + ))) + } + } + + fn set_registered( + &self, + state_provider: impl StateProvider + Clone, + ctx: &OpPayloadBuilderCtx, + ) -> Result<(), BuilderTransactionError> { + let state = StateProviderDatabase::new(state_provider.clone()); + let mut simulation_state = State::builder() + .with_database(state) + .with_bundle_update() + .build(); + let mut evm = ctx + .evm_config + .evm_with_env(&mut simulation_state, ctx.evm_env.clone()); + evm.modify_cfg(|cfg| { + cfg.disable_balance_check = true; + }); + match self.register_tee_service_tx(ctx, &mut evm) { + Ok((_, registered)) => { + if registered { + let _ = self.registered.set(registered); + } + Ok(()) + } + Err(e) => Err(BuilderTransactionError::other(e)), + } + } +} + +impl BuilderTransactions for FlashtestationsBuilderTx { + fn simulate_builder_txs( + &self, + state_provider: impl StateProvider + Clone, + info: &mut ExecutionInfo, + ctx: &OpPayloadBuilderCtx, + db: &mut State, + ) -> Result, BuilderTransactionError> { + // set registered simulating against the committed state + if !self.registered.get().unwrap_or(&false) { + self.set_registered(state_provider.clone(), ctx)?; + } + + let state = StateProviderDatabase::new(state_provider.clone()); + let mut simulation_state = State::builder() + .with_database(state) + .with_bundle_prestate(db.bundle_state.clone()) + .with_bundle_update() + .build(); + + let mut evm = ctx + .evm_config + .evm_with_env(&mut simulation_state, ctx.evm_env.clone()); + evm.modify_cfg(|cfg| { + cfg.disable_balance_check = true; + }); + + let mut builder_txs = Vec::::new(); + + if !self.registered.get().unwrap_or(&false) { + info!(target: "flashtestations", "tee service not registered yet, attempting to register"); + builder_txs.extend(self.fund_tee_service_tx(ctx, &mut evm)?); + let (register_tx, _) = self.register_tee_service_tx(ctx, &mut evm)?; + builder_txs.extend(register_tx); + } + + if self.enable_block_proofs { + // add verify block proof tx + builder_txs.extend(self.verify_block_proof_tx( + info.executed_transactions.clone(), + ctx, + &mut evm, + )?); + } + Ok(builder_txs) + } +} diff --git a/crates/op-rbuilder/src/flashtestations/mod.rs b/crates/op-rbuilder/src/flashtestations/mod.rs index 6f9c2743f..a2a506111 100644 --- a/crates/op-rbuilder/src/flashtestations/mod.rs +++ b/crates/op-rbuilder/src/flashtestations/mod.rs @@ -1,3 +1,4 @@ +use alloy_primitives::{Address, B256}; use alloy_sol_types::{Error, sol}; use op_revm::OpHaltReason; @@ -87,6 +88,8 @@ pub enum FlashtestationRevertReason { FlashtestationRegistry(IFlashtestationRegistry::IFlashtestationRegistryErrors), #[error("block builder policy error: {0:?}")] BlockBuilderPolicy(IBlockBuilderPolicy::IBlockBuilderPolicyErrors), + #[error("contract {0:?} may be invalid, mismatch in log emitted: expected {1:?}")] + LogMismatch(Address, B256), #[error("unknown revert: {0} err: {1}")] Unknown(String, Error), #[error("halt: {0:?}")] @@ -95,5 +98,6 @@ pub enum FlashtestationRevertReason { pub mod args; pub mod attestation; +pub mod builder_tx; pub mod service; pub mod tx_manager; diff --git a/crates/op-rbuilder/src/flashtestations/service.rs b/crates/op-rbuilder/src/flashtestations/service.rs index 237aef7dd..5b9162cda 100644 --- a/crates/op-rbuilder/src/flashtestations/service.rs +++ b/crates/op-rbuilder/src/flashtestations/service.rs @@ -1,10 +1,6 @@ use alloy_primitives::{B256, Bytes, keccak256}; use reth_node_builder::BuilderContext; -use reth_provider::StateProvider; -use reth_revm::State; -use revm::Database; use std::{ - fmt::Debug, fs::{self, OpenOptions}, io::Write, os::unix::fs::OpenOptionsExt, @@ -13,10 +9,7 @@ use std::{ use tracing::{info, warn}; use crate::{ - builders::{ - BuilderTransactionCtx, BuilderTransactionError, BuilderTransactions, OpPayloadBuilderCtx, - }, - primitives::reth::ExecutionInfo, + flashtestations::builder_tx::{FlashtestationsBuilderTx, FlashtestationsBuilderTxArgs}, traits::NodeBounds, tx_signer::{Signer, generate_key_from_seed, generate_signer}, }; @@ -51,7 +44,7 @@ where let registry_address = args .registry_address .expect("registry address required when flashtestations enabled"); - let _builder_policy_address = args + let builder_policy_address = args .builder_policy_address .expect("builder policy address required when flashtestations enabled"); @@ -85,8 +78,7 @@ where info!(target: "flashtestations", "requesting TDX attestation"); let attestation = attestation_provider.get_attestation(report_data).await?; - #[allow(dead_code)] - let (tx_manager, _registered) = if let Some(rpc_url) = args.rpc_url { + let (tx_manager, registered) = if let Some(rpc_url) = args.rpc_url { let tx_manager = TxManager::new( tee_service_signer, funding_key, @@ -112,7 +104,18 @@ where (None, false) }; - let flashtestations_builder_tx = FlashtestationsBuilderTx {}; + let flashtestations_builder_tx = FlashtestationsBuilderTx::new(FlashtestationsBuilderTxArgs { + attestation, + extra_registration_data: ext_data, + tee_service_signer, + funding_key, + funding_amount: args.funding_amount, + registry_address, + builder_policy_address, + builder_proof_version: args.builder_proof_version, + enable_block_proofs: args.enable_block_proofs, + registered, + }); ctx.task_executor() .spawn_critical_with_graceful_shutdown_signal( @@ -193,18 +196,3 @@ fn load_tee_key(path: &Path) -> Option { .inspect_err(|e| warn!("failed to create signer from key: {:?}", e)) .ok() } - -#[derive(Debug, Clone)] -pub struct FlashtestationsBuilderTx {} - -impl BuilderTransactions for FlashtestationsBuilderTx { - fn simulate_builder_txs( - &self, - _state_provider: impl StateProvider + Clone, - _info: &mut ExecutionInfo, - _ctx: &OpPayloadBuilderCtx, - _db: &mut State, - ) -> Result, BuilderTransactionError> { - Ok(vec![]) - } -} From 012577ed0c9b0a8dba315075e35538267549be86 Mon Sep 17 00:00:00 2001 From: shana Date: Thu, 16 Oct 2025 11:34:55 -0700 Subject: [PATCH 02/19] Add flashtestations integration tests (#283) * Add flashtestation builder tx and registration in block * copilot comments * Add flashtestations integration tests * logging improvements * Update crates/op-rbuilder/src/tests/flashtestations.rs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- README.md | 4 +- crates/op-rbuilder/Cargo.toml | 3 + .../src/flashtestations/attestation.rs | 2 +- .../src/flashtestations/builder_tx.rs | 19 +- crates/op-rbuilder/src/tests/flashblocks.rs | 12 +- .../op-rbuilder/src/tests/flashtestations.rs | 450 ++++++++++++++++++ .../framework/artifacts/genesis.json.tmpl | 6 + .../framework/artifacts/quote-output.bin | Bin 597 -> 597 bytes .../tests/framework/artifacts/test-quote.bin | Bin 5006 -> 5006 bytes .../src/tests/framework/instance.rs | 155 +++++- crates/op-rbuilder/src/tests/framework/mod.rs | 23 +- .../op-rbuilder/src/tests/framework/utils.rs | 63 ++- crates/op-rbuilder/src/tests/mod.rs | 17 + 13 files changed, 717 insertions(+), 37 deletions(-) create mode 100644 crates/op-rbuilder/src/tests/flashtestations.rs diff --git a/README.md b/README.md index 599f360c4..2b3092433 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ This will increment the flashblock number before the start of every flashblock a To run op-rbuilder with flashtestations: ```bash -cargo run -p op-rbuilder --bin op-rbuilder --features=flashtestations -- node \ +cargo run -p op-rbuilder --bin op-rbuilder -- node \ --chain /path/to/chain-config.json \ --http \ --authrpc.port 9551 \ @@ -73,7 +73,7 @@ cargo run -p op-rbuilder --bin op-rbuilder --features=flashtestations -- node \ --flashtestations.funding-amount 0.01 \ # amount in ETH to fund the TEE generated key --flashtestations.funding-key secret-key \ # funding key for the TEE key --flashtestations.registry-address 0xFlashtestationsRegistryAddress \ - flashtestations.builder-policy-address 0xBuilderPolicyAddress + --flashtestations.builder-policy-address 0xBuilderPolicyAddress ``` Note that `--rollup.builder-secret-key` must be set and funded in order for the flashtestations key to be funded and submit the attestation on-chain. diff --git a/crates/op-rbuilder/Cargo.toml b/crates/op-rbuilder/Cargo.toml index c674691c4..8ae251460 100644 --- a/crates/op-rbuilder/Cargo.toml +++ b/crates/op-rbuilder/Cargo.toml @@ -192,6 +192,9 @@ testing = [ "ctor", "macros", "rlimit", + "hyper", + "hyper-util", + "http-body-util", ] interop = [] diff --git a/crates/op-rbuilder/src/flashtestations/attestation.rs b/crates/op-rbuilder/src/flashtestations/attestation.rs index 39c99539d..b38dcf5ab 100644 --- a/crates/op-rbuilder/src/flashtestations/attestation.rs +++ b/crates/op-rbuilder/src/flashtestations/attestation.rs @@ -33,7 +33,7 @@ impl RemoteAttestationProvider { let report_data_hex = hex::encode(report_data); let url = format!("{}/{}", self.service_url, report_data_hex); - info!(target: "flashtestations", url = url, "fetching quote in debug mode"); + info!(target: "flashtestations", url = url, "fetching quote from remote attestation provider"); let response = self .client diff --git a/crates/op-rbuilder/src/flashtestations/builder_tx.rs b/crates/op-rbuilder/src/flashtestations/builder_tx.rs index ee5e793cf..716d2520d 100644 --- a/crates/op-rbuilder/src/flashtestations/builder_tx.rs +++ b/crates/op-rbuilder/src/flashtestations/builder_tx.rs @@ -17,7 +17,7 @@ use revm::{ inspector::NoOpInspector, state::Account, }; -use std::sync::OnceLock; +use std::sync::{Arc, atomic::AtomicBool}; use tracing::{debug, info}; use crate::{ @@ -66,7 +66,7 @@ pub struct FlashtestationsBuilderTx { // Builder proof version builder_proof_version: u8, // Whether the workload and address has been registered - registered: OnceLock, + registered: Arc, // Whether block proofs are enabled enable_block_proofs: bool, } @@ -91,7 +91,7 @@ impl FlashtestationsBuilderTx { registry_address: args.registry_address, builder_policy_address: args.builder_policy_address, builder_proof_version: args.builder_proof_version, - registered: OnceLock::new(), + registered: Arc::new(AtomicBool::new(args.registered)), enable_block_proofs: args.enable_block_proofs, } } @@ -178,7 +178,7 @@ impl FlashtestationsBuilderTx { /// keccak256(abi.encode(parentHash, blockNumber, timestamp, transactionHashes)) /// https://github.com/flashbots/rollup-boost/blob/main/specs/flashtestations.md#block-building-process fn compute_block_content_hash( - transactions: Vec, + transactions: &[OpTransactionSigned], parent_hash: B256, block_number: u64, timestamp: u64, @@ -475,7 +475,7 @@ impl FlashtestationsBuilderTx { >, ) -> Result, BuilderTransactionError> { let block_content_hash = Self::compute_block_content_hash( - transactions.clone(), + &transactions, ctx.parent_hash(), ctx.block_number(), ctx.timestamp(), @@ -545,11 +545,12 @@ impl FlashtestationsBuilderTx { match self.register_tee_service_tx(ctx, &mut evm) { Ok((_, registered)) => { if registered { - let _ = self.registered.set(registered); + self.registered + .store(true, std::sync::atomic::Ordering::SeqCst); } Ok(()) } - Err(e) => Err(BuilderTransactionError::other(e)), + Err(e) => Err(e), } } } @@ -563,7 +564,7 @@ impl BuilderTransactions for Flashtestation db: &mut State, ) -> Result, BuilderTransactionError> { // set registered simulating against the committed state - if !self.registered.get().unwrap_or(&false) { + if !self.registered.load(std::sync::atomic::Ordering::SeqCst) { self.set_registered(state_provider.clone(), ctx)?; } @@ -583,7 +584,7 @@ impl BuilderTransactions for Flashtestation let mut builder_txs = Vec::::new(); - if !self.registered.get().unwrap_or(&false) { + if !self.registered.load(std::sync::atomic::Ordering::SeqCst) { info!(target: "flashtestations", "tee service not registered yet, attempting to register"); builder_txs.extend(self.fund_tee_service_tx(ctx, &mut evm)?); let (register_tx, _) = self.register_tee_service_tx(ctx, &mut evm)?; diff --git a/crates/op-rbuilder/src/tests/flashblocks.rs b/crates/op-rbuilder/src/tests/flashblocks.rs index f3e46dae5..781048283 100644 --- a/crates/op-rbuilder/src/tests/flashblocks.rs +++ b/crates/op-rbuilder/src/tests/flashblocks.rs @@ -1,8 +1,7 @@ use alloy_consensus::Transaction; use alloy_eips::Decodable2718; -use alloy_primitives::{Address, TxHash, U256, address, b128, b256}; +use alloy_primitives::{Address, TxHash, U256}; use alloy_provider::Provider; -use alloy_sol_types::SolCall; use macros::rb_test; use op_alloy_consensus::OpTxEnvelope; use std::time::Duration; @@ -10,16 +9,11 @@ use std::time::Duration; use crate::{ args::{FlashblocksArgs, OpRbuilderArgs}, tests::{ - BUILDER_PRIVATE_KEY, BlockTransactionsExt, BundleOpts, ChainDriver, ChainDriverExt, - FUNDED_PRIVATE_KEY, LocalInstance, ONE_ETH, TransactionBuilderExt, - flashblocks_number_contract::FlashblocksNumber, + BlockTransactionsExt, BundleOpts, ChainDriver, FLASHBLOCKS_NUMBER_ADDRESS, LocalInstance, + TransactionBuilderExt, flashblocks_number_contract::FlashblocksNumber, }, - tx_signer::Signer, }; -// If the order of deployment from the signer changes the address will change -const FLASHBLOCKS_NUMBER_ADDRESS: Address = address!("5fbdb2315678afecb367f032d93f642f64180aa3"); - #[rb_test(flashblocks, args = OpRbuilderArgs { chain_block_time: 2000, flashblocks: FlashblocksArgs { diff --git a/crates/op-rbuilder/src/tests/flashtestations.rs b/crates/op-rbuilder/src/tests/flashtestations.rs new file mode 100644 index 000000000..c12deb3ea --- /dev/null +++ b/crates/op-rbuilder/src/tests/flashtestations.rs @@ -0,0 +1,450 @@ +use alloy_consensus::Transaction; +use alloy_network::TransactionResponse; +use alloy_primitives::{Address, U256}; +use alloy_provider::{Provider, RootProvider}; +use macros::{if_flashblocks, if_standard, rb_test}; +use op_alloy_network::Optimism; + +use crate::{ + args::{FlashblocksArgs, OpRbuilderArgs}, + flashtestations::args::FlashtestationsArgs, + tests::{ + BLOCK_BUILDER_POLICY_ADDRESS, BundleOpts, ChainDriver, ChainDriverExt, + FLASHBLOCKS_NUMBER_ADDRESS, FLASHTESTATION_REGISTRY_ADDRESS, LocalInstance, + MOCK_DCAP_ADDRESS, TEE_DEBUG_ADDRESS, TransactionBuilderExt, + flashblocks_number_contract::FlashblocksNumber, + flashtestation_registry::FlashtestationRegistry, flashtestations_signer, + }, +}; + +#[rb_test(args = OpRbuilderArgs { + chain_block_time: 1000, + enable_revert_protection: true, + flashtestations: FlashtestationsArgs { + flashtestations_enabled: true, + registry_address: Some(FLASHTESTATION_REGISTRY_ADDRESS), + builder_policy_address: Some(BLOCK_BUILDER_POLICY_ADDRESS), + funding_key: Some(flashtestations_signer()), + debug: true, + ..Default::default() + }, + ..Default::default() +})] +async fn test_flashtestations_registrations(rbuilder: LocalInstance) -> eyre::Result<()> { + let driver = rbuilder.driver().await?; + let provider = rbuilder.provider().await?; + setup_flashtestation_contracts(&driver, &provider, true).await?; + let block: alloy_rpc_types_eth::Block = + driver.build_new_block_with_current_timestamp(None).await?; + // check the builder tx, funding tx and registration tx is in the block + let num_txs = block.transactions.len(); + assert!(num_txs >= 3, "Expected at least 3 transactions in block"); + println!( + "block transactions {:#?}", + &block.transactions.clone().into_transactions_vec() + ); + let last_3_txs = &block.transactions.into_transactions_vec()[num_txs - 3..]; + // Check builder tx + assert_eq!( + last_3_txs[0].to(), + Some(Address::ZERO), + "builder tx should send to zero address" + ); + // Check funding tx + assert_eq!( + last_3_txs[1].to(), + Some(TEE_DEBUG_ADDRESS), + "funding tx should send to tee address" + ); + assert!( + last_3_txs[1] + .value() + .eq(&rbuilder.args().flashtestations.funding_amount), + "funding tx should have correct amount" + ); + // Check registration tx + assert_eq!( + last_3_txs[2].to(), + Some(FLASHTESTATION_REGISTRY_ADDRESS), + "registration tx should call registry" + ); + let contract = FlashtestationRegistry::new(FLASHTESTATION_REGISTRY_ADDRESS, provider.clone()); + let result = contract.getRegistration(TEE_DEBUG_ADDRESS).call().await?; + assert!(result._1.isValid, "The tee key is not registered"); + + // check builder does not try to register again + let block = driver.build_new_block_with_current_timestamp(None).await?; + let num_txs = block.transactions.len(); + if_flashblocks!( + assert!(num_txs == 3, "Expected at 3 transactions in block"); // deposit + 2 builder tx + ); + if_standard!( + assert!(num_txs == 2, "Expected at 2 transactions in block"); // deposit + builder tx + ); + + Ok(()) +} + +#[rb_test(args = OpRbuilderArgs { + chain_block_time: 1000, + enable_revert_protection: true, + flashtestations: FlashtestationsArgs { + flashtestations_enabled: true, + registry_address: Some(FLASHTESTATION_REGISTRY_ADDRESS), + builder_policy_address: Some(BLOCK_BUILDER_POLICY_ADDRESS), + funding_key: Some(flashtestations_signer()), + debug: true, + enable_block_proofs: true, + ..Default::default() + }, + ..Default::default() +})] +async fn test_flashtestations_block_proofs(rbuilder: LocalInstance) -> eyre::Result<()> { + let driver = rbuilder.driver().await?; + let provider = rbuilder.provider().await?; + setup_flashtestation_contracts(&driver, &provider, true).await?; + driver.build_new_block_with_current_timestamp(None).await?; + + // check registered + let contract = FlashtestationRegistry::new(FLASHTESTATION_REGISTRY_ADDRESS, provider.clone()); + let result = contract.getRegistration(TEE_DEBUG_ADDRESS).call().await?; + assert!(result._1.isValid, "The tee key is not registered"); + + // check that only the builder tx and block proof is in the block + let (tx_hash, block) = driver.build_new_block_with_valid_transaction().await?; + let txs = block.transactions.into_transactions_vec(); + + if_flashblocks!( + assert_eq!(txs.len(), 5, "Expected at 4 transactions in block"); // deposit + valid tx + 2 builder tx + end of block proof + // Check builder tx + assert_eq!( + txs[1].to(), + Some(Address::ZERO), + "builder tx should send to zero address" + ); + ); + if_standard!( + assert_eq!(txs.len(), 4, "Expected at 4 transactions in block"); // deposit + valid tx + builder tx + end of block proof + ); + let last_3_txs = &txs[txs.len() - 3..]; + // Check valid transaction + assert_eq!( + last_3_txs[0].inner.tx_hash(), + tx_hash, + "tx hash for valid transaction should match" + ); + // Check builder tx + assert_eq!( + last_3_txs[1].to(), + Some(Address::ZERO), + "builder tx should send to zero address" + ); + // Check builder proof + assert_eq!( + last_3_txs[2].to(), + Some(BLOCK_BUILDER_POLICY_ADDRESS), + "builder tx should send to zero address" + ); + Ok(()) +} + +#[rb_test(flashblocks, args = OpRbuilderArgs { + chain_block_time: 1000, + enable_revert_protection: true, + flashblocks: FlashblocksArgs { + flashblocks_number_contract_address: Some(FLASHBLOCKS_NUMBER_ADDRESS), + ..Default::default() + }, + flashtestations: FlashtestationsArgs { + flashtestations_enabled: true, + registry_address: Some(FLASHTESTATION_REGISTRY_ADDRESS), + builder_policy_address: Some(BLOCK_BUILDER_POLICY_ADDRESS), + funding_key: Some(flashtestations_signer()), + debug: true, + enable_block_proofs: true, + ..Default::default() + }, + ..Default::default() +})] +async fn test_flashtestations_with_number_contract(rbuilder: LocalInstance) -> eyre::Result<()> { + let driver = rbuilder.driver().await?; + let provider = rbuilder.provider().await?; + setup_flashblock_number_contract(&driver, &provider, true).await?; + setup_flashtestation_contracts(&driver, &provider, true).await?; + let tx = driver + .create_transaction() + .random_valid_transfer() + .with_bundle(BundleOpts::default().with_flashblock_number_min(4)) + .send() + .await?; + let block = driver.build_new_block_with_current_timestamp(None).await?; + // 1 deposit tx, 1 fallback builder tx, 4 flashblocks number tx, valid tx, funding tx, registration tx, block proof + let txs = block.transactions.into_transactions_vec(); + assert_eq!(txs.len(), 10, "Expected at 10 transactions in block"); + // Check builder tx + assert_eq!( + txs[1].to(), + Some(Address::ZERO), + "fallback builder tx should send to zero address" + ); + // flashblocks number contract + for i in 2..6 { + assert_eq!( + txs[i].to(), + Some(FLASHBLOCKS_NUMBER_ADDRESS), + "builder tx should send to flashblocks number contract" + ); + } + // check regular tx + assert_eq!( + txs[6].tx_hash(), + *tx.tx_hash(), + "bundle tx was not in block" + ); + // check funding, registration and block proof tx + assert_eq!( + txs[7].to(), + Some(TEE_DEBUG_ADDRESS), + "funding tx should send to tee address" + ); + assert_eq!( + txs[8].to(), + Some(FLASHTESTATION_REGISTRY_ADDRESS), + "registration tx should call registry" + ); + assert_eq!( + txs[9].to(), + Some(BLOCK_BUILDER_POLICY_ADDRESS), + "block proof tx should call block policy address" + ); + + // add a user transaction to ensure the flashblock number builder tx is top of block + let tx = driver + .create_transaction() + .random_valid_transfer() + .with_bundle(BundleOpts::default().with_flashblock_number_min(4)) + .send() + .await?; + let block = driver.build_new_block_with_current_timestamp(None).await?; + // check the flashblocks number tx and block proof is in the block + let txs = block.transactions.into_transactions_vec(); + assert_eq!(txs.len(), 8, "Expected at 5 transactions in block"); + // Check builder tx + assert_eq!( + txs[1].to(), + Some(Address::ZERO), + "fallback builder tx should send to zero address" + ); + // flashblocks number contract + for i in 2..6 { + assert_eq!( + txs[i].to(), + Some(FLASHBLOCKS_NUMBER_ADDRESS), + "builder tx should send to flashblocks number contract" + ); + } + // user tx + assert_eq!( + txs[6].tx_hash(), + *tx.tx_hash(), + "bundle tx was not in block" + ); + // block proof + assert_eq!( + txs[7].to(), + Some(BLOCK_BUILDER_POLICY_ADDRESS), + "block proof tx should call block policy address" + ); + + let contract = FlashtestationRegistry::new(FLASHTESTATION_REGISTRY_ADDRESS, provider.clone()); + let result = contract.getRegistration(TEE_DEBUG_ADDRESS).call().await?; + assert!(result._1.isValid, "The tee key is not registered"); + // Verify flashblock number incremented correctly + let contract = FlashblocksNumber::new(FLASHBLOCKS_NUMBER_ADDRESS, provider.clone()); + let current_number = contract.getFlashblockNumber().call().await?; + assert!( + current_number.gt(&U256::from(8)), // contract deployments incremented the number but we built at least 2 full blocks + "Flashblock number not incremented" + ); + Ok(()) +} + +async fn setup_flashtestation_contracts( + driver: &ChainDriver, + provider: &RootProvider, + authorize_workload: bool, +) -> eyre::Result<()> { + // deploy the mock contract and register a mock quote + let mock_dcap_deploy_tx = driver + .create_transaction() + .deploy_mock_dcap_contract() + .with_bundle(BundleOpts::default()) + .send() + .await?; + + // Add test quote + let mock_quote_tx = driver + .create_transaction() + .add_mock_quote() + .with_to(MOCK_DCAP_ADDRESS) + .with_bundle(BundleOpts::default()) + .send() + .await?; + + // deploy the flashtestations registry contract + let flashtestations_registry_tx = driver + .create_transaction() + .deploy_flashtestation_registry_contract() + .with_bundle(BundleOpts::default()) + .send() + .await?; + + // init the flashtestation registry contract + let init_registry = driver + .create_transaction() + .init_flashtestation_registry_contract(MOCK_DCAP_ADDRESS) + .with_to(FLASHTESTATION_REGISTRY_ADDRESS) + .with_bundle(BundleOpts::default()) + .send() + .await?; + + // deploy the block builder policy contract + let block_builder_policy_tx = driver + .create_transaction() + .deploy_builder_policy_contract() + .with_bundle(BundleOpts::default()) + .send() + .await?; + + // init the builder block policy contract + let init_builder_policy = driver + .create_transaction() + .init_builder_policy_contract(FLASHTESTATION_REGISTRY_ADDRESS) + .with_to(BLOCK_BUILDER_POLICY_ADDRESS) + .with_bundle(BundleOpts::default()) + .send() + .await?; + + // include the deployment and initialization in a block + driver.build_new_block_with_current_timestamp(None).await?; + + if authorize_workload { + // add the workload id to the block builder policy + let add_workload = driver + .create_transaction() + .add_workload_to_policy() + .with_to(BLOCK_BUILDER_POLICY_ADDRESS) + .with_bundle(BundleOpts::default()) + .send() + .await?; + driver.build_new_block_with_current_timestamp(None).await?; + provider + .get_transaction_receipt(*add_workload.tx_hash()) + .await? + .expect("add workload to builder policy tx not mined"); + } + + // Verify mock dcap contract deployment + let receipt = provider + .get_transaction_receipt(*mock_dcap_deploy_tx.tx_hash()) + .await? + .expect("mock dcap contract deployment not mined"); + let mock_dcap_address = receipt + .inner + .contract_address + .expect("contract receipt does not contain flashblock number contract address"); + assert_eq!( + mock_dcap_address, MOCK_DCAP_ADDRESS, + "mock dcap contract address mismatch" + ); + // verify mock quote added + provider + .get_transaction_receipt(*mock_quote_tx.tx_hash()) + .await? + .expect("add mock quote not mined"); + // verify flashtestations registry contract deployment + let receipt = provider + .get_transaction_receipt(*flashtestations_registry_tx.tx_hash()) + .await?; + let flashtestations_registry_address = receipt + .expect("flashtestations registry contract deployment not mined") + .inner + .contract_address + .expect("contract receipt does not contain flashtestations registry contract address"); + assert_eq!( + flashtestations_registry_address, FLASHTESTATION_REGISTRY_ADDRESS, + "flashtestations registry contract address mismatch" + ); + // verify flashtestations registry contract initialization + provider + .get_transaction_receipt(*init_registry.tx_hash()) + .await? + .expect("init registry tx not mined"); + + // verify block builder policy contract deployment + let receipt = provider + .get_transaction_receipt(*block_builder_policy_tx.tx_hash()) + .await?; + let block_builder_policy_address = receipt + .expect("block builder policy contract deployment not mined") + .inner + .contract_address + .expect("contract receipt does not contain block builder policy contract address"); + assert_eq!( + block_builder_policy_address, BLOCK_BUILDER_POLICY_ADDRESS, + "block builder policy contract address mismatch" + ); + // verify block builder policy contract initialization + provider + .get_transaction_receipt(*init_builder_policy.tx_hash()) + .await? + .expect("init builder policy tx not mined"); + + Ok(()) +} + +async fn setup_flashblock_number_contract( + driver: &ChainDriver, + provider: &RootProvider, + authorize_builder: bool, +) -> eyre::Result<()> { + // Deploy flashblocks number contract + let deploy_tx = driver + .create_transaction() + .deploy_flashblock_number_contract() + .with_bundle(BundleOpts::default()) + .send() + .await?; + + // Initialize contract + let init_tx = driver + .create_transaction() + .init_flashblock_number_contract(authorize_builder) + .with_to(FLASHBLOCKS_NUMBER_ADDRESS) + .with_bundle(BundleOpts::default()) + .send() + .await?; + driver.build_new_block_with_current_timestamp(None).await?; + + // Verify contract deployment + let receipt = provider + .get_transaction_receipt(*deploy_tx.tx_hash()) + .await? + .expect("flashblock number contract deployment not mined"); + let contract_address = receipt + .inner + .contract_address + .expect("contract receipt does not contain flashblock number contract address"); + assert_eq!( + contract_address, FLASHBLOCKS_NUMBER_ADDRESS, + "Flashblocks number contract address mismatch" + ); + + // Verify initialization + provider + .get_transaction_receipt(*init_tx.tx_hash()) + .await? + .expect("init tx not mined"); + + Ok(()) +} diff --git a/crates/op-rbuilder/src/tests/framework/artifacts/genesis.json.tmpl b/crates/op-rbuilder/src/tests/framework/artifacts/genesis.json.tmpl index dddb61d7a..39a6f53e2 100644 --- a/crates/op-rbuilder/src/tests/framework/artifacts/genesis.json.tmpl +++ b/crates/op-rbuilder/src/tests/framework/artifacts/genesis.json.tmpl @@ -869,6 +869,12 @@ "fabb0ac9d68b0b445fb7357272ff202c5651694a": { "balance": "0x21e19e0c9bab2400000" }, + "23618e81e3f5cdf7f54c3d65f7fbc0abf5b21e8f": { + "balance": "0x21e19e0c9bab2400000" + }, + "a0ee7a142d267c1f36714e4a8f75612f20a79720": { + "balance": "0x21e19e0c9bab2400000" + }, "fb1bffc9d739b8d520daf37df666da4c687191ea": { "code": "0x6080604052600436106101dc5760003560e01c8063affed0e011610102578063e19a9dd911610095578063f08a032311610064578063f08a032314611647578063f698da2514611698578063f8dc5dd9146116c3578063ffa1ad741461173e57610231565b8063e19a9dd91461139b578063e318b52b146113ec578063e75235b81461147d578063e86637db146114a857610231565b8063cc2f8452116100d1578063cc2f8452146110e8578063d4d9bdcd146111b5578063d8d11f78146111f0578063e009cfde1461132a57610231565b8063affed0e014610d94578063b4faba0914610dbf578063b63e800d14610ea7578063c4ca3a9c1461101757610231565b80635624b25b1161017a5780636a761202116101495780636a761202146109945780637d83297414610b50578063934f3a1114610bbf578063a0e67e2b14610d2857610231565b80635624b25b146107fb5780635ae6bd37146108b9578063610b592514610908578063694e80c31461095957610231565b80632f54bf6e116101b65780632f54bf6e146104d35780633408e4701461053a578063468721a7146105655780635229073f1461067a57610231565b80630d582f131461029e57806312fb68e0146102f95780632d9ad53d1461046c57610231565b36610231573373ffffffffffffffffffffffffffffffffffffffff167f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d346040518082815260200191505060405180910390a2005b34801561023d57600080fd5b5060007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b905080548061027257600080f35b36600080373360601b365260008060143601600080855af13d6000803e80610299573d6000fd5b3d6000f35b3480156102aa57600080fd5b506102f7600480360360408110156102c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117ce565b005b34801561030557600080fd5b5061046a6004803603608081101561031c57600080fd5b81019080803590602001909291908035906020019064010000000081111561034357600080fd5b82018360208201111561035557600080fd5b8035906020019184600183028401116401000000008311171561037757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103da57600080fd5b8201836020820111156103ec57600080fd5b8035906020019184600183028401116401000000008311171561040e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611bbe565b005b34801561047857600080fd5b506104bb6004803603602081101561048f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612440565b60405180821515815260200191505060405180910390f35b3480156104df57600080fd5b50610522600480360360208110156104f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612512565b60405180821515815260200191505060405180910390f35b34801561054657600080fd5b5061054f6125e4565b6040518082815260200191505060405180910390f35b34801561057157600080fd5b506106626004803603608081101561058857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156105cf57600080fd5b8201836020820111156105e157600080fd5b8035906020019184600183028401116401000000008311171561060357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506125f1565b60405180821515815260200191505060405180910390f35b34801561068657600080fd5b506107776004803603608081101561069d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156106e457600080fd5b8201836020820111156106f657600080fd5b8035906020019184600183028401116401000000008311171561071857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506126fc565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107bf5780820151818401526020810190506107a4565b50505050905090810190601f1680156107ec5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561080757600080fd5b5061083e6004803603604081101561081e57600080fd5b810190808035906020019092919080359060200190929190505050612732565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561087e578082015181840152602081019050610863565b50505050905090810190601f1680156108ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108c557600080fd5b506108f2600480360360208110156108dc57600080fd5b81019080803590602001909291905050506127b9565b6040518082815260200191505060405180910390f35b34801561091457600080fd5b506109576004803603602081101561092b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127d1565b005b34801561096557600080fd5b506109926004803603602081101561097c57600080fd5b8101908080359060200190929190505050612b63565b005b610b3860048036036101408110156109ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109f257600080fd5b820183602082011115610a0457600080fd5b80359060200191846001830284011164010000000083111715610a2657600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610ab257600080fd5b820183602082011115610ac457600080fd5b80359060200191846001830284011164010000000083111715610ae657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612c9d565b60405180821515815260200191505060405180910390f35b348015610b5c57600080fd5b50610ba960048036036040811015610b7357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612edc565b6040518082815260200191505060405180910390f35b348015610bcb57600080fd5b50610d2660048036036060811015610be257600080fd5b810190808035906020019092919080359060200190640100000000811115610c0957600080fd5b820183602082011115610c1b57600080fd5b80359060200191846001830284011164010000000083111715610c3d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ca057600080fd5b820183602082011115610cb257600080fd5b80359060200191846001830284011164010000000083111715610cd457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612f01565b005b348015610d3457600080fd5b50610d3d612f90565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d80578082015181840152602081019050610d65565b505050509050019250505060405180910390f35b348015610da057600080fd5b50610da9613139565b6040518082815260200191505060405180910390f35b348015610dcb57600080fd5b50610ea560048036036040811015610de257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610e1f57600080fd5b820183602082011115610e3157600080fd5b80359060200191846001830284011164010000000083111715610e5357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061313f565b005b348015610eb357600080fd5b506110156004803603610100811015610ecb57600080fd5b8101908080359060200190640100000000811115610ee857600080fd5b820183602082011115610efa57600080fd5b80359060200191846020830284011164010000000083111715610f1c57600080fd5b909192939192939080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610f6757600080fd5b820183602082011115610f7957600080fd5b80359060200191846001830284011164010000000083111715610f9b57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613161565b005b34801561102357600080fd5b506110d26004803603608081101561103a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561108157600080fd5b82018360208201111561109357600080fd5b803590602001918460018302840111640100000000831117156110b557600080fd5b9091929391929390803560ff16906020019092919050505061331f565b6040518082815260200191505060405180910390f35b3480156110f457600080fd5b506111416004803603604081101561110b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613447565b60405180806020018373ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019060200280838360005b838110156111a0578082015181840152602081019050611185565b50505050905001935050505060405180910390f35b3480156111c157600080fd5b506111ee600480360360208110156111d857600080fd5b8101908080359060200190929190505050613639565b005b3480156111fc57600080fd5b50611314600480360361014081101561121457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561125b57600080fd5b82018360208201111561126d57600080fd5b8035906020019184600183028401116401000000008311171561128f57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506137d8565b6040518082815260200191505060405180910390f35b34801561133657600080fd5b506113996004803603604081101561134d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613805565b005b3480156113a757600080fd5b506113ea600480360360208110156113be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b96565b005b3480156113f857600080fd5b5061147b6004803603606081101561140f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c1a565b005b34801561148957600080fd5b5061149261428c565b6040518082815260200191505060405180910390f35b3480156114b457600080fd5b506115cc60048036036101408110156114cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561151357600080fd5b82018360208201111561152557600080fd5b8035906020019184600183028401116401000000008311171561154757600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614296565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561160c5780820151818401526020810190506115f1565b50505050905090810190601f1680156116395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561165357600080fd5b506116966004803603602081101561166a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061443e565b005b3480156116a457600080fd5b506116ad61449f565b6040518082815260200191505060405180910390f35b3480156116cf57600080fd5b5061173c600480360360608110156116e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061451d565b005b34801561174a57600080fd5b50611753614950565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611793578082015181840152602081019050611778565b50505050905090810190601f1680156117c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6117d6614989565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156118405750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561187857503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919060010191905055507f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2682604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414611bba57611bb981612b63565b5b5050565b611bd2604182614a2c90919063ffffffff16565b82511015611c48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808060008060005b8681101561243457611c648882614a66565b80945081955082965050505060008460ff16141561206d578260001c9450611c96604188614a2c90919063ffffffff16565b8260001c1015611d0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8751611d2760208460001c614a9590919063ffffffff16565b1115611d9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006020838a01015190508851611dd182611dc360208760001c614a9590919063ffffffff16565b614a9590919063ffffffff16565b1115611e45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60606020848b010190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168773ffffffffffffffffffffffffffffffffffffffff166320c13b0b8d846040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611ee7578082015181840152602081019050611ecc565b50505050905090810190601f168015611f145780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611f4d578082015181840152602081019050611f32565b50505050905090810190601f168015611f7a5780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015611f9957600080fd5b505afa158015611fad573d6000803e3d6000fd5b505050506040513d6020811015611fc357600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612066576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b50506122b2565b60018460ff161415612181578260001c94508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061210a57506000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c81526020019081526020016000205414155b61217c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6122b1565b601e8460ff1611156122495760018a60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012060048603858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612238573d6000803e3d6000fd5b5050506020604051035194506122b0565b60018a85858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156122a3573d6000803e3d6000fd5b5050506020604051035194505b5b5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161180156123795750600073ffffffffffffffffffffffffffffffffffffffff16600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156123b25750600173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b612424576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8495508080600101915050611c52565b50505050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff161415801561250b5750600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125dd5750600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000804690508091505090565b60007fb648d3644f584ed1c2232d53c46d87e693586486ad0d1175f8656013110b714e3386868686604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183600181111561266b57fe5b8152602001828103825284818151815260200191508051906020019080838360005b838110156126a857808201518184015260208101905061268d565b50505050905090810190601f1680156126d55780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a16126f285858585614ab4565b9050949350505050565b6000606061270c868686866125f1565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060006020830267ffffffffffffffff8111801561275057600080fd5b506040519080825280601f01601f1916602001820160405280156127835781602001600182028036833780820191505090505b50905060005b838110156127ae57808501548060208302602085010152508080600101915050612789565b508091505092915050565b60076020528060005260406000206000915090505481565b6127d9614989565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156128435750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6128b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b612b6b614989565b600354811115612be3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001811015612c5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806004819055507f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c936004546040518082815260200191505060405180910390a150565b6000606060055433600454604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405160208183030381529060405290507f66753cd2356569ee081232e3be8909b950e0a76c1f8460c3a5e3c2be32b11bed8d8d8d8d8d8d8d8d8d8d8d8c604051808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115612d5057fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200184810384528e8e82818152602001925080828437600081840152601f19601f820116905080830192505050848103835286818151815260200191508051906020019080838360005b83811015612e0a578082015181840152602081019050612def565b50505050905090810190601f168015612e375780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015612e70578082015181840152602081019050612e55565b50505050905090810190601f168015612e9d5780820380516001836020036101000a031916815260200191505b509f5050505050505050505050505050505060405180910390a1612eca8d8d8d8d8d8d8d8d8d8d8d614c9a565b9150509b9a5050505050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b6000600454905060008111612f7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612f8a84848484611bbe565b50505050565b6060600060035467ffffffffffffffff81118015612fad57600080fd5b50604051908082528060200260200182016040528015612fdc5781602001602082028036833780820191505090505b50905060008060026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613130578083838151811061308757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508180600101925050613046565b82935050505090565b60055481565b600080825160208401855af4806000523d6020523d600060403e60403d016000fd5b6131ac8a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050896151d7565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146131ea576131e9846156d7565b5b6132388787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050615706565b60008211156132525761325082600060018685615941565b505b3373ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b8960405180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281038252878782818152602001925060200280828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a250505050505050505050565b6000805a9050613376878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050865a615b47565b61337f57600080fd5b60005a8203905080604051602001808281526020019150506040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561340c5780820151818401526020810190506133f1565b50505050905090810190601f1680156134395780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b606060008267ffffffffffffffff8111801561346257600080fd5b506040519080825280602002602001820160405280156134915781602001602082028036833780820191505090505b509150600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156135645750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561356f57508482105b1561362a578084838151811061358157fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081806001019250506134fa565b80925081845250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff16600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561373b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16817ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c60405160405180910390a350565b60006137ed8c8c8c8c8c8c8c8c8c8c8c614296565b8051906020012090509b9a5050505050505050505050565b61380d614989565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156138775750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6138e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146139e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613b9e614989565b60007f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b90508181557f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa282604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613c22614989565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613c8c5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015613cc457503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b613d36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015613ea15750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b613f13576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614013576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a17f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b6000600454905090565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d60405180838380828437808301925050509250505060405180910390208c8c8c8c8c8c8c604051602001808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189815260200188600181111561432757fe5b81526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019b505050505050505050505050604051602081830303815290604052805190602001209050601960f81b600160f81b6143b361449f565b8360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040529150509b9a5050505050505050505050565b614446614989565b61444f816156d7565b7f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b6144cd6125e4565b30604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405160208183030381529060405280519060200120905090565b614525614989565b8060016003540310156145a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561460a5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61467c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461477c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008154809291906001900391905055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1806004541461494b5761494a81612b63565b5b505050565b6040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614a2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b565b600080831415614a3f5760009050614a60565b6000828402905082848281614a5057fe5b0414614a5b57600080fd5b809150505b92915050565b60008060008360410260208101860151925060408101860151915060ff60418201870151169350509250925092565b600080828401905083811015614aaa57600080fd5b8091505092915050565b6000600173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015614b7f5750600073ffffffffffffffffffffffffffffffffffffffff16600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b614bf1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b614bfe858585855a615b47565b90508015614c4e573373ffffffffffffffffffffffffffffffffffffffff167f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb860405160405180910390a2614c92565b3373ffffffffffffffffffffffffffffffffffffffff167facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37560405160405180910390a25b949350505050565b6000806000614cb48e8e8e8e8e8e8e8e8e8e600554614296565b905060056000815480929190600101919050555080805190602001209150614cdd828286612f01565b506000614ce8615b93565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614614ece578073ffffffffffffffffffffffffffffffffffffffff166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b8152600401808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115614d8b57fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018473ffffffffffffffffffffffffffffffffffffffff16815260200183810383528d8d82818152602001925080828437600081840152601f19601f820116905080830192505050838103825285818151815260200191508051906020019080838360005b83811015614e5d578082015181840152602081019050614e42565b50505050905090810190601f168015614e8a5780820380516001836020036101000a031916815260200191505b509e505050505050505050505050505050600060405180830381600087803b158015614eb557600080fd5b505af1158015614ec9573d6000803e3d6000fd5b505050505b6101f4614ef56109c48b01603f60408d0281614ee657fe5b04615bc490919063ffffffff16565b015a1015614f6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60005a9050614fd48f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e60008d14614fc9578e614fcf565b6109c45a035b615b47565b9350614fe95a82615bde90919063ffffffff16565b90508380614ff8575060008a14155b80615004575060008814155b615076576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808911156150905761508d828b8b8b8b615941565b90505b84156150da577f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e8482604051808381526020018281526020019250505060405180910390a161511a565b7f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d238482604051808381526020018281526020019250505060405180910390a15b5050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146151c6578073ffffffffffffffffffffffffffffffffffffffff16639327136883856040518363ffffffff1660e01b815260040180838152602001821515815260200192505050600060405180830381600087803b1580156151ad57600080fd5b505af11580156151c1573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b60006004541461524f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b81518111156152c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600181101561533d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006001905060005b835181101561564357600084828151811061535d57fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156153d15750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561540957503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561544157508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b6154b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146155b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550809250508080600101915050615346565b506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550825160038190555081600481905550505050565b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b90508181555050565b600073ffffffffffffffffffffffffffffffffffffffff1660016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461593d576158ca8260008360015a615b47565b61593c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461597e5782615980565b325b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415615a98576159ea3a86106159c7573a6159c9565b855b6159dc888a614a9590919063ffffffff16565b614a2c90919063ffffffff16565b91508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050615a93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b615b3d565b615abd85615aaf888a614a9590919063ffffffff16565b614a2c90919063ffffffff16565b9150615aca848284615bfe565b615b3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5095945050505050565b6000600180811115615b5557fe5b836001811115615b6157fe5b1415615b7a576000808551602087018986f49050615b8a565b600080855160208701888a87f190505b95945050505050565b6000807f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b9050805491505090565b600081831015615bd45781615bd6565b825b905092915050565b600082821115615bed57600080fd5b600082840390508091505092915050565b60008063a9059cbb8484604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050602060008251602084016000896127105a03f13d60008114615ca55760208114615cad5760009350615cb8565b819350615cb8565b600051158215171593505b505050939250505056fea2646970667358221220047fac33099ca576d1c4f1ac6a8abdb0396e42ad6a397d2cb2f4dc1624cc0c5b64736f6c63430007060033", "balance": "0x0", diff --git a/crates/op-rbuilder/src/tests/framework/artifacts/quote-output.bin b/crates/op-rbuilder/src/tests/framework/artifacts/quote-output.bin index 84b2c09b7eddca45fc903018179882d6a9ba4ac8..70a42bbf551977f685c409f3e180f7414160aa2e 100644 GIT binary patch delta 72 zcmcc0a+PI+D3e3hN6$~`51;A&ahBJ8cJJMBC3m+kM=!ZCwtZK&nN(N1>CSQH15X*Y V1)pkCx32zmgC(|gNdW^A000Yv9+Ut8 delta 31 ncmcc0a+PI+D3eIR%*ukJ5<+*Z7Ez?F;E8pvXKiS diff --git a/crates/op-rbuilder/src/tests/framework/artifacts/test-quote.bin b/crates/op-rbuilder/src/tests/framework/artifacts/test-quote.bin index 057f9ed2d79147c67882abdb43fc9a927869e19d..aea0077d4f1f781b044dc52df472195762f46c16 100644 GIT binary patch delta 146 zcmeBE?^EAk!Bp?KR{NNhLgdeF%E7kn|7Ld7R(iM}z2wH&_FdU#QeEw)JI9$1JZ0Dx ze5y&^y871*me|%M1q?{wi~s|}P5zUbf0|!SQdr~PBvU?p!>kv6=8m&V3hkzwC-JCE u-ty!o1K*Uu13J$`+&0bJe_3|kMM-u|^<-O}iwdl7_srfDuz3&DB>@14MLk;p delta 105 zcmV-v0G9ubCypnuI06)KnR#%<7!uq%0StWswGIsz+, pool_observer: TransactionPoolObserver, + attestation_server: Option, } impl LocalInstance { @@ -92,6 +100,15 @@ impl LocalInstance { args.builder_signer = Some(signer); args.rollup_args.enable_tx_conditional = true; + let attestation_server = if args.flashtestations.flashtestations_enabled { + let server = spawn_attestation_provider().await?; + args.flashtestations.quote_provider = Some(server.url()); + tracing::info!("Started attestation server at {}", server.url()); + Some(server) + } else { + None + }; + let builder_config = BuilderConfig::::try_from(args.clone()) .expect("Failed to convert rollup args to builder config"); let da_config = builder_config.da_config.clone(); @@ -168,6 +185,7 @@ impl LocalInstance { _node_handle: node_handle, task_manager: Some(task_manager), pool_observer: TransactionPoolObserver::new(pool_monitor, reverted_cache_clone), + attestation_server, }) } @@ -244,6 +262,10 @@ impl LocalInstance { &self.pool_observer } + pub const fn attestation_server(&self) -> &Option { + &self.attestation_server + } + pub async fn driver(&self) -> eyre::Result> { ChainDriver::::local(self).await } @@ -349,6 +371,13 @@ fn pool_component(args: &OpRbuilderArgs) -> OpPoolBuilder { ) } +async fn spawn_attestation_provider() -> eyre::Result { + let quote = include_bytes!("./artifacts/test-quote.bin"); + let mut service = AttestationServer::new(TEE_DEBUG_ADDRESS, Bytes::new(), quote.into()); + service.start().await?; + Ok(service) +} + /// A utility for listening to flashblocks WebSocket messages during tests. /// /// This provides a reusable way to capture and inspect flashblocks that are produced @@ -443,3 +472,119 @@ impl FlashblocksListener { self.handle.await? } } + +/// A utility service to spawn a server that returns a mock quote for an attestation request +pub struct AttestationServer { + tee_address: Address, + extra_registration_data: Bytes, + mock_attestation: Bytes, + server_handle: Option>, + shutdown_tx: Option>, + port: u16, + error_on_request: bool, +} + +impl AttestationServer { + pub fn new( + tee_address: Address, + extra_registration_data: Bytes, + mock_attestation: Bytes, + ) -> Self { + AttestationServer { + tee_address, + extra_registration_data, + mock_attestation, + server_handle: None, + shutdown_tx: None, + port: 0, + error_on_request: false, + } + } + + pub fn set_error(&mut self, error: bool) { + self.error_on_request = error; + } + + pub async fn start(&mut self) -> eyre::Result { + self.port = get_available_port(); + let addr = SocketAddr::from(([127, 0, 0, 1], self.port)); + let listener = TcpListener::bind(addr).await?; + + let mock_attestation = self.mock_attestation.clone(); + // Concatenate tee_address bytes and extra_registration_data bytes, then hex encode + let combined = [ + self.tee_address.as_slice(), // 20 bytes address + keccak256(self.extra_registration_data.clone()).as_slice(), // 32 byte hash + &[0u8; 12], // padding to 64 bytes + ] + .concat(); + let set_error = self.error_on_request; + + let (shutdown_tx, mut shutdown_rx) = oneshot::channel::<()>(); + self.shutdown_tx = Some(shutdown_tx); + + // Create the service + self.server_handle = Some(tokio::spawn(async move { + loop { + let mock_attestation = mock_attestation.clone(); + let expected_path = format!("/{}", hex::encode(&combined)); + tokio::select! { + // Handle shutdown signal + _ = &mut shutdown_rx => { + break; + } + result = listener.accept() => { + let (stream, _) = result.expect("failed to accept attestation request"); + + tokio::task::spawn(async move { + let service = service_fn(move |req: Request| { + let response = + if set_error { + Response::builder() + .status(StatusCode::INTERNAL_SERVER_ERROR) + .body(Full::new(HyperBytes::new())) + .unwrap() + } + else if req.uri().path() == expected_path { + Response::builder() + .header("content-type", "application/octet-stream") + .body(Full::new(mock_attestation.clone().into())) + .unwrap() + } else { + Response::builder() + .status(StatusCode::NOT_FOUND) + .body(Full::new(HyperBytes::new())) + .unwrap() + }; + async { Ok::<_, hyper::Error>(response) } + }); + + let io = TokioIo::new(stream); + if let Err(err) = http1::Builder::new().serve_connection(io, service).await { + tracing::error!(message = "Error serving attestations", error = %err); + } + }); + } + } + } + })); + + // Give the spawned task a chance to start + tokio::task::yield_now().await; + + Ok(self.port) + } + + pub fn url(&self) -> String { + format!("http://127.0.0.1:{}", self.port) + } +} + +impl Drop for AttestationServer { + fn drop(&mut self) { + if let Some(tx) = self.shutdown_tx.take() { + let _ = tx.send(()); + } + tracing::info!("AttestationServer dropped, terminating server"); + } +} diff --git a/crates/op-rbuilder/src/tests/framework/mod.rs b/crates/op-rbuilder/src/tests/framework/mod.rs index 4e3171fb9..26e24f0de 100644 --- a/crates/op-rbuilder/src/tests/framework/mod.rs +++ b/crates/op-rbuilder/src/tests/framework/mod.rs @@ -6,6 +6,7 @@ mod instance; mod txs; mod utils; +use alloy_primitives::{B256, b256}; pub use apis::*; pub use contracts::*; pub use driver::*; @@ -14,11 +15,18 @@ pub use instance::*; pub use txs::*; pub use utils::*; +// anvil default key[1] pub const BUILDER_PRIVATE_KEY: &str = "0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d"; - +// anvil default key[0] pub const FUNDED_PRIVATE_KEY: &str = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"; +// anvil default key[8] +pub const FLASHBLOCKS_DEPLOY_KEY: &str = + "0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97"; +// anvil default key[9] +pub const FLASHTESTATION_DEPLOY_KEY: &str = + "0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6"; pub const DEFAULT_GAS_LIMIT: u64 = 10_000_000; @@ -27,6 +35,19 @@ pub const DEFAULT_JWT_TOKEN: &str = pub const ONE_ETH: u128 = 1_000_000_000_000_000_000; +// flashtestations constants +pub const TEE_DEBUG_ADDRESS: alloy_primitives::Address = + alloy_primitives::address!("6Af149F267e1e62dFc431F2de6deeEC7224746f4"); + +pub const WORKLOAD_ID: B256 = + b256!("f724e7d117f5655cf33beefdfc7d31e930278fcb65cf6d1de632595e97ca82b2"); + +pub const SOURCE_LOCATORS: &[&str] = &[ + "https://github.com/flashbots/flashbots-images/commit/53d431f58a0d1a76f6711518ef8d876ce8181fc2", +]; + +pub const COMMIT_HASH: &str = "53d431f58a0d1a76f6711518ef8d876ce8181fc2"; + /// This gets invoked before any tests, when the cargo test framework loads the test library. /// It injects itself into #[ctor::ctor] diff --git a/crates/op-rbuilder/src/tests/framework/utils.rs b/crates/op-rbuilder/src/tests/framework/utils.rs index 764b3fa31..35a5f2a51 100644 --- a/crates/op-rbuilder/src/tests/framework/utils.rs +++ b/crates/op-rbuilder/src/tests/framework/utils.rs @@ -1,6 +1,7 @@ use crate::{ tests::{ - BUILDER_PRIVATE_KEY, Protocol, block_builder_policy::BlockBuilderPolicy, + BUILDER_PRIVATE_KEY, COMMIT_HASH, FLASHBLOCKS_DEPLOY_KEY, FLASHTESTATION_DEPLOY_KEY, + Protocol, SOURCE_LOCATORS, WORKLOAD_ID, block_builder_policy::BlockBuilderPolicy, flashblocks_number_contract::FlashblocksNumber, flashtestation_registry::FlashtestationRegistry, framework::driver::ChainDriver, mock_dcap_attestation::MockAutomataDcapAttestationFee, @@ -37,6 +38,7 @@ pub trait TransactionBuilderExt { fn init_flashtestation_registry_contract(self, dcap_address: Address) -> Self; fn deploy_builder_policy_contract(self) -> Self; fn init_builder_policy_contract(self, registry_address: Address) -> Self; + fn add_workload_to_policy(self) -> Self; fn deploy_mock_dcap_contract(self) -> Self; fn add_mock_quote(self) -> Self; } @@ -62,11 +64,12 @@ impl TransactionBuilderExt for TransactionBuilder { self.with_create() .with_input(FlashblocksNumber::BYTECODE.clone()) .with_gas_limit(2_000_000) // deployment costs ~1.6 million gas + .with_signer(flashblocks_number_signer()) } fn init_flashblock_number_contract(self, register_builder: bool) -> Self { let builder_signer = builder_signer(); - let owner = funded_signer(); + let owner = flashblocks_number_signer(); let init_data = FlashblocksNumber::initializeCall { _owner: owner.address, @@ -79,16 +82,18 @@ impl TransactionBuilderExt for TransactionBuilder { .abi_encode(); self.with_input(init_data.into()) + .with_signer(flashblocks_number_signer()) } fn deploy_flashtestation_registry_contract(self) -> Self { self.with_create() .with_input(FlashtestationRegistry::BYTECODE.clone()) - .with_gas_limit(1_000_000) + .with_gas_limit(5_000_000) + .with_signer(flashtestations_signer()) } fn init_flashtestation_registry_contract(self, dcap_address: Address) -> Self { - let owner = funded_signer(); + let owner = flashtestations_signer(); let init_data = FlashtestationRegistry::initializeCall { owner: owner.address, @@ -96,17 +101,18 @@ impl TransactionBuilderExt for TransactionBuilder { } .abi_encode(); - self.with_input(init_data.into()) + self.with_input(init_data.into()).with_signer(owner) } fn deploy_builder_policy_contract(self) -> Self { self.with_create() .with_input(BlockBuilderPolicy::BYTECODE.clone()) - .with_gas_limit(1_000_000) + .with_gas_limit(3_000_000) + .with_signer(flashtestations_signer()) } fn init_builder_policy_contract(self, registry_address: Address) -> Self { - let owner = funded_signer(); + let owner = flashtestations_signer(); let init_data = BlockBuilderPolicy::initializeCall { _initialOwner: owner.address, @@ -115,12 +121,29 @@ impl TransactionBuilderExt for TransactionBuilder { .abi_encode(); self.with_input(init_data.into()) + .with_signer(flashtestations_signer()) + } + + fn add_workload_to_policy(self) -> Self { + let workload = BlockBuilderPolicy::addWorkloadToPolicyCall { + workloadId: WORKLOAD_ID, + commitHash: COMMIT_HASH.to_string(), + sourceLocators: SOURCE_LOCATORS + .iter() + .map(|source| source.to_string()) + .collect(), + } + .abi_encode(); + + self.with_input(workload.into()) + .with_signer(flashtestations_signer()) } fn deploy_mock_dcap_contract(self) -> Self { self.with_create() .with_input(MockAutomataDcapAttestationFee::BYTECODE.clone()) .with_gas_limit(1_000_000) + .with_signer(flashtestations_signer()) } fn add_mock_quote(self) -> Self { @@ -133,7 +156,9 @@ impl TransactionBuilderExt for TransactionBuilder { _output: include_bytes!("./artifacts/quote-output.bin").into(), } .abi_encode(); - self.with_input(quote.into()).with_gas_limit(500_000) + self.with_input(quote.into()) + .with_gas_limit(500_000) + .with_signer(flashtestations_signer()) } } @@ -163,7 +188,7 @@ pub trait ChainDriverExt { &self, ) -> impl Future)>>; - fn build_new_block_with_reverrting_transaction( + fn build_new_block_with_reverting_transaction( &self, ) -> impl Future)>>; } @@ -226,7 +251,7 @@ impl ChainDriverExt for ChainDriver

{ Ok((*tx.tx_hash(), self.build_new_block().await?)) } - async fn build_new_block_with_reverrting_transaction( + async fn build_new_block_with_reverting_transaction( &self, ) -> eyre::Result<(TxHash, Block)> { let tx = self @@ -337,3 +362,21 @@ pub fn funded_signer() -> Signer { ) .expect("Failed to create signer from hardcoded funded private key") } + +pub fn flashblocks_number_signer() -> Signer { + Signer::try_from_secret( + FLASHBLOCKS_DEPLOY_KEY + .parse() + .expect("invalid hardcoded flashblocks number deployer private key"), + ) + .expect("Failed to create signer from hardcoded flashblocks number deployer private key") +} + +pub fn flashtestations_signer() -> Signer { + Signer::try_from_secret( + FLASHTESTATION_DEPLOY_KEY + .parse() + .expect("invalid hardcoded flashtestations deployer private key"), + ) + .expect("Failed to create signer from hardcoded flashtestations deployer private key") +} diff --git a/crates/op-rbuilder/src/tests/mod.rs b/crates/op-rbuilder/src/tests/mod.rs index f32eccb61..cb5646f84 100644 --- a/crates/op-rbuilder/src/tests/mod.rs +++ b/crates/op-rbuilder/src/tests/mod.rs @@ -5,6 +5,9 @@ pub use framework::*; #[cfg(test)] mod flashblocks; +#[cfg(test)] +mod flashtestations; + #[cfg(test)] mod data_availability; @@ -22,3 +25,17 @@ mod smoke; #[cfg(test)] mod txpool; + +// If the order of deployment from the signer changes the address will change +#[cfg(test)] +const FLASHBLOCKS_NUMBER_ADDRESS: alloy_primitives::Address = + alloy_primitives::address!("95bd8d42f30351685e96c62eddc0d0613bf9a87a"); +#[cfg(test)] +const MOCK_DCAP_ADDRESS: alloy_primitives::Address = + alloy_primitives::address!("700b6a60ce7eaaea56f065753d8dcb9653dbad35"); +#[cfg(test)] +const FLASHTESTATION_REGISTRY_ADDRESS: alloy_primitives::Address = + alloy_primitives::address!("b19b36b1456e65e3a6d514d3f715f204bd59f431"); +#[cfg(test)] +const BLOCK_BUILDER_POLICY_ADDRESS: alloy_primitives::Address = + alloy_primitives::address!("e1aa25618fa0c7a1cfdab5d6b456af611873b629"); From fa24368a67751d57c22f5161f5cab05920342c20 Mon Sep 17 00:00:00 2001 From: noot <36753753+noot@users.noreply.github.com> Date: Fri, 17 Oct 2025 14:14:55 -0400 Subject: [PATCH 03/19] chore: add unused_async lint, deny unreachable_pub (#299) --- Cargo.toml | 5 ++++- crates/op-rbuilder/src/bin/tester/main.rs | 2 +- crates/op-rbuilder/src/tests/framework/apis.rs | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index e381d195c..d832946a8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -40,7 +40,10 @@ codegen-units = 1 incremental = false [workspace.lints.rust] -unreachable_pub = "warn" +unreachable_pub = "deny" + +[workspace.lints.clippy] +unused_async = "warn" [workspace.dependencies] reth = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } diff --git a/crates/op-rbuilder/src/bin/tester/main.rs b/crates/op-rbuilder/src/bin/tester/main.rs index 9345a8c02..52c4812ef 100644 --- a/crates/op-rbuilder/src/bin/tester/main.rs +++ b/crates/op-rbuilder/src/bin/tester/main.rs @@ -50,7 +50,7 @@ async fn main() -> eyre::Result<()> { let cli = Cli::parse(); match cli.command { - Commands::Genesis { output } => generate_genesis(output).await, + Commands::Genesis { output } => generate_genesis(output), Commands::Run { validation, .. } => run_system(validation).await, Commands::Deposit { address, amount } => { let engine_api = EngineApi::with_http("http://localhost:4444"); diff --git a/crates/op-rbuilder/src/tests/framework/apis.rs b/crates/op-rbuilder/src/tests/framework/apis.rs index 6ad0b98a0..5638293b0 100644 --- a/crates/op-rbuilder/src/tests/framework/apis.rs +++ b/crates/op-rbuilder/src/tests/framework/apis.rs @@ -205,7 +205,7 @@ pub trait BlockApi { ) -> RpcResult>; } -pub async fn generate_genesis(output: Option) -> eyre::Result<()> { +pub fn generate_genesis(output: Option) -> eyre::Result<()> { // Read the template file let template = include_str!("artifacts/genesis.json.tmpl"); From a3ff8ea7ad1e5d439a919b016bcf5ee8023edff4 Mon Sep 17 00:00:00 2001 From: noot <36753753+noot@users.noreply.github.com> Date: Mon, 20 Oct 2025 11:57:07 -0400 Subject: [PATCH 04/19] refactor: clean up flashblocks context in payload builder (#297) --- crates/op-rbuilder/src/builders/context.rs | 10 +- .../src/builders/flashblocks/payload.rs | 315 ++++++++++-------- 2 files changed, 178 insertions(+), 147 deletions(-) diff --git a/crates/op-rbuilder/src/builders/context.rs b/crates/op-rbuilder/src/builders/context.rs index a18facf5a..032e97e69 100644 --- a/crates/op-rbuilder/src/builders/context.rs +++ b/crates/op-rbuilder/src/builders/context.rs @@ -74,6 +74,14 @@ pub struct OpPayloadBuilderCtx { } impl OpPayloadBuilderCtx { + pub(super) fn with_cancel(self, cancel: CancellationToken) -> Self { + Self { cancel, ..self } + } + + pub(super) fn with_extra_ctx(self, extra_ctx: ExtraCtx) -> Self { + Self { extra_ctx, ..self } + } + /// Returns the parent block the payload will be build on. pub fn parent(&self) -> &SealedHeader { &self.config.parent_header @@ -340,7 +348,7 @@ impl OpPayloadBuilderCtx { let tx_da_limit = self.da_config.max_da_tx_size(); let mut evm = self.evm_config.evm_with_env(&mut *db, self.evm_env.clone()); - info!( + debug!( target: "payload_builder", message = "Executing best transactions", block_da_limit = ?block_da_limit, diff --git a/crates/op-rbuilder/src/builders/flashblocks/payload.rs b/crates/op-rbuilder/src/builders/flashblocks/payload.rs index 6a46e4c76..8acb810bc 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/payload.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/payload.rs @@ -18,6 +18,7 @@ use alloy_consensus::{ use alloy_eips::{Encodable2718, eip7685::EMPTY_REQUESTS_HASH, merge::BEACON_NONCE}; use alloy_primitives::{Address, B256, U256, map::foldhash::HashMap}; use core::time::Duration; +use eyre::WrapErr as _; use reth::payload::PayloadBuilderAttributes; use reth_basic_payload_builder::BuildOutcome; use reth_chain_state::{ExecutedBlock, ExecutedBlockWithTrieUpdates, ExecutedTrieUpdates}; @@ -68,12 +69,12 @@ type NextBestFlashblocksTxs = BestFlashblocksTxs< >; #[derive(Debug, Default)] -struct ExtraExecutionInfo { +pub(super) struct ExtraExecutionInfo { /// Index of the last consumed flashblock - pub last_flashblock_index: usize, + last_flashblock_index: usize, } -#[derive(Debug, Default)] +#[derive(Debug, Default, Clone)] pub struct FlashblocksExtraCtx { /// Current flashblock index flashblock_index: u64, @@ -91,6 +92,17 @@ pub struct FlashblocksExtraCtx { calculate_state_root: bool, } +impl FlashblocksExtraCtx { + fn next(self, target_gas_for_batch: u64, target_da_for_batch: Option) -> Self { + Self { + flashblock_index: self.flashblock_index + 1, + target_gas_for_batch, + target_da_for_batch, + ..self + } + } +} + impl OpPayloadBuilderCtx { /// Returns the current flashblock index pub(crate) fn flashblock_index(&self) -> u64 { @@ -102,18 +114,6 @@ impl OpPayloadBuilderCtx { self.extra_ctx.target_flashblock_count } - /// Increments the flashblock index - pub(crate) fn increment_flashblock_index(&mut self) -> u64 { - self.extra_ctx.flashblock_index += 1; - self.extra_ctx.flashblock_index - } - - /// Sets the target flashblock count - pub(crate) fn set_target_flashblock_count(&mut self, target_flashblock_count: u64) -> u64 { - self.extra_ctx.target_flashblock_count = target_flashblock_count; - self.extra_ctx.target_flashblock_count - } - /// Returns if the flashblock is the first fallback block pub(crate) fn is_first_flashblock(&self) -> bool { self.flashblock_index() == 0 @@ -213,43 +213,16 @@ where Client: ClientBounds, BuilderTx: BuilderTransactions + Send + Sync, { - /// Constructs an Optimism payload from the transactions sent via the - /// Payload attributes by the sequencer. If the `no_tx_pool` argument is passed in - /// the payload attributes, the transaction pool will be ignored and the only transactions - /// included in the payload will be those sent through the attributes. - /// - /// Given build arguments including an Optimism client, transaction pool, - /// and configuration, this function creates a transaction payload. Returns - /// a result indicating success with the payload or an error in case of failure. - async fn build_payload( + fn get_op_payload_builder_ctx( &self, - args: BuildArguments, OpBuiltPayload>, - best_payload: BlockCell, - ) -> Result<(), PayloadBuilderError> { - let block_build_start_time = Instant::now(); - let BuildArguments { - mut cached_reads, - config, - cancel: block_cancel, - } = args; - - // We log only every 100th block to reduce usage - let span = if cfg!(feature = "telemetry") - && config.parent_header.number % self.config.sampling_ratio == 0 - { - span!(Level::INFO, "build_payload") - } else { - tracing::Span::none() - }; - let _entered = span.enter(); - span.record( - "payload_id", - config.attributes.payload_attributes.id.to_string(), - ); - + config: reth_basic_payload_builder::PayloadConfig< + OpPayloadBuilderAttributes, + >, + cancel: CancellationToken, + extra_ctx: FlashblocksExtraCtx, + ) -> eyre::Result> { let chain_spec = self.client.chain_spec(); let timestamp = config.attributes.timestamp(); - let calculate_state_root = self.config.specific.calculate_state_root; let block_env_attributes = OpNextBlockEnvAttributes { timestamp, suggested_fee_recipient: config.attributes.suggested_fee_recipient(), @@ -266,7 +239,7 @@ where config .attributes .get_holocene_extra_data(chain_spec.base_fee_params_at_timestamp(timestamp)) - .map_err(PayloadBuilderError::other)? + .wrap_err("failed to get holocene extra data for flashblocks payload builder")? } else { Default::default() }, @@ -275,35 +248,74 @@ where let evm_env = self .evm_config .next_evm_env(&config.parent_header, &block_env_attributes) - .map_err(PayloadBuilderError::other)?; + .wrap_err("failed to create next evm env")?; - let mut ctx = OpPayloadBuilderCtx:: { + Ok(OpPayloadBuilderCtx:: { evm_config: self.evm_config.clone(), - chain_spec: self.client.chain_spec(), + chain_spec, config, evm_env, block_env_attributes, - // Here we use parent token because child token handing is only for proper flashblocks - cancel: block_cancel.clone(), + cancel, da_config: self.config.da_config.clone(), builder_signer: self.config.builder_signer, metrics: Default::default(), - extra_ctx: FlashblocksExtraCtx { - flashblock_index: 0, - target_flashblock_count: self.config.flashblocks_per_block(), - target_gas_for_batch: 0, - target_da_for_batch: None, - gas_per_batch: 0, - da_per_batch: None, - calculate_state_root, - }, + extra_ctx, max_gas_per_txn: self.config.max_gas_per_txn, address_gas_limiter: self.address_gas_limiter.clone(), + }) + } + + /// Constructs an Optimism payload from the transactions sent via the + /// Payload attributes by the sequencer. If the `no_tx_pool` argument is passed in + /// the payload attributes, the transaction pool will be ignored and the only transactions + /// included in the payload will be those sent through the attributes. + /// + /// Given build arguments including an Optimism client, transaction pool, + /// and configuration, this function creates a transaction payload. Returns + /// a result indicating success with the payload or an error in case of failure. + async fn build_payload( + &self, + args: BuildArguments, OpBuiltPayload>, + best_payload: BlockCell, + ) -> Result<(), PayloadBuilderError> { + let block_build_start_time = Instant::now(); + let BuildArguments { + mut cached_reads, + config, + cancel: block_cancel, + } = args; + + // We log only every 100th block to reduce usage + let span = if cfg!(feature = "telemetry") + && config.parent_header.number % self.config.sampling_ratio == 0 + { + span!(Level::INFO, "build_payload") + } else { + tracing::Span::none() }; + let _entered = span.enter(); + span.record( + "payload_id", + config.attributes.payload_attributes.id.to_string(), + ); + + let timestamp = config.attributes.timestamp(); + let calculate_state_root = self.config.specific.calculate_state_root; + let ctx = self + .get_op_payload_builder_ctx( + config.clone(), + block_cancel.clone(), + FlashblocksExtraCtx { + target_flashblock_count: self.config.flashblocks_per_block(), + calculate_state_root, + ..Default::default() + }, + ) + .map_err(|e| PayloadBuilderError::Other(e.into()))?; let state_provider = self.client.state_by_block_hash(ctx.parent().hash())?; let db = StateProviderDatabase::new(&state_provider); - self.address_gas_limiter.refresh(ctx.block_number()); // 1. execute the pre steps and seal an early block with that @@ -348,8 +360,15 @@ where calculate_state_root || ctx.attributes().no_tx_pool, // need to calculate state root for CL sync )?; - best_payload.set(payload.clone()); - self.send_payload_to_engine(payload); + self.send_payload_to_engine(payload.clone()); + best_payload.set(payload); + + info!( + target: "payload_builder", + message = "Fallback block built", + payload_id = fb_payload.payload_id.to_string(), + ); + // not emitting flashblock if no_tx_pool in FCU, it's just syncing if !ctx.attributes().no_tx_pool { let flashblock_byte_size = self @@ -361,12 +380,6 @@ where .record(flashblock_byte_size as f64); } - info!( - target: "payload_builder", - message = "Fallback block built", - payload_id = fb_payload.payload_id.to_string(), - ); - if ctx.attributes().no_tx_pool { info!( target: "payload_builder", @@ -393,11 +406,10 @@ where // We adjust our flashblocks timings based on time_drift if dynamic adjustment enable let (flashblocks_per_block, first_flashblock_offset) = self.calculate_flashblocks(timestamp); - ctx.set_target_flashblock_count(flashblocks_per_block); info!( target: "payload_builder", message = "Performed flashblocks timing derivation", - flashblocks_per_block = ctx.target_flashblock_count(), + flashblocks_per_block, first_flashblock_offset = first_flashblock_offset.as_millis(), flashblocks_interval = self.config.specific.interval.as_millis(), ); @@ -409,12 +421,12 @@ where ctx.metrics .first_flashblock_time_offset .record(first_flashblock_offset.as_millis() as f64); - let gas_per_batch = ctx.block_gas_limit() / ctx.target_flashblock_count(); + let gas_per_batch = ctx.block_gas_limit() / flashblocks_per_block; let target_gas_for_batch = gas_per_batch; let da_per_batch = ctx .da_config .max_da_block_size() - .map(|da_limit| da_limit / ctx.target_flashblock_count()); + .map(|da_limit| da_limit / flashblocks_per_block); // Check that builder tx won't affect fb limit too much if let Some(da_limit) = da_per_batch { // We error if we can't insert any tx aside from builder tx in flashblock @@ -424,16 +436,26 @@ where ); } } - let mut total_da_per_batch = da_per_batch; + let mut target_da_for_batch = da_per_batch; // Account for already included builder tx - ctx.extra_ctx.target_gas_for_batch = target_gas_for_batch.saturating_sub(builder_tx_gas); - if let Some(da_limit) = total_da_per_batch.as_mut() { + if let Some(da_limit) = target_da_for_batch.as_mut() { *da_limit = da_limit.saturating_sub(builder_tx_da_size); } - ctx.extra_ctx.target_da_for_batch = total_da_per_batch; - ctx.extra_ctx.gas_per_batch = gas_per_batch; - ctx.extra_ctx.da_per_batch = da_per_batch; + let extra_ctx = FlashblocksExtraCtx { + flashblock_index: 1, + target_flashblock_count: flashblocks_per_block, + target_gas_for_batch: target_gas_for_batch.saturating_sub(builder_tx_gas), + target_da_for_batch, + gas_per_batch, + da_per_batch, + calculate_state_root, + }; + + let mut fb_cancel = block_cancel.child_token(); + let mut ctx = self + .get_op_payload_builder_ctx(config, fb_cancel.clone(), extra_ctx) + .map_err(|e| PayloadBuilderError::Other(e.into()))?; // Create best_transaction iterator let mut best_txs = BestFlashblocksTxs::new(BestPayloadTransactions::new( @@ -442,8 +464,6 @@ where )); let interval = self.config.specific.interval; let (tx, mut rx) = mpsc::channel((self.config.flashblocks_per_block() + 1) as usize); - let mut fb_cancel = block_cancel.child_token(); - ctx.cancel = fb_cancel.clone(); tokio::spawn({ let block_cancel = block_cancel.clone(); @@ -493,9 +513,20 @@ where }; let _entered = fb_span.enter(); + if ctx.flashblock_index() > ctx.target_flashblock_count() { + self.record_flashblocks_metrics( + &ctx, + &info, + flashblocks_per_block, + &span, + "Payload building complete, target flashblock count reached", + ); + return Ok(()); + } + // build first flashblock immediately - match self.build_next_flashblock( - &mut ctx, + let next_flashblocks_ctx = match self.build_next_flashblock( + &ctx, &mut info, &mut state, &state_provider, @@ -504,22 +535,32 @@ where &best_payload, &fb_span, ) { - Ok(()) => {} + Ok(Some(next_flashblocks_ctx)) => next_flashblocks_ctx, + Ok(None) => { + self.record_flashblocks_metrics( + &ctx, + &info, + flashblocks_per_block, + &span, + "Payload building complete, job cancelled or target flashblock count reached", + ); + return Ok(()); + } Err(err) => { error!( target: "payload_builder", - "Failed to build flashblock {}, flashblock {}: {}", - ctx.block_number(), + "Failed to build flashblock {} for block number {}: {}", ctx.flashblock_index(), + ctx.block_number(), err ); - return Err(err); + return Err(PayloadBuilderError::Other(err.into())); } - } + }; tokio::select! { Some(fb_cancel) = rx.recv() => { - ctx.cancel = fb_cancel; + ctx = ctx.with_cancel(fb_cancel).with_extra_ctx(next_flashblocks_ctx); }, _ = block_cancel.cancelled() => { self.record_flashblocks_metrics( @@ -541,7 +582,7 @@ where P: StateRootProvider + HashedPostStateProvider + StorageRootProvider, >( &self, - ctx: &mut OpPayloadBuilderCtx, + ctx: &OpPayloadBuilderCtx, info: &mut ExecutionInfo, state: &mut State, state_provider: impl reth::providers::StateProvider + Clone, @@ -549,33 +590,18 @@ where block_cancel: &CancellationToken, best_payload: &BlockCell, span: &tracing::Span, - ) -> Result<(), PayloadBuilderError> { - // fallback block is index 0, so we need to increment here - ctx.increment_flashblock_index(); - - // TODO: remove this - if ctx.flashblock_index() > ctx.target_flashblock_count() { - info!( - target: "payload_builder", - target = ctx.target_flashblock_count(), - flashblock_index = ctx.flashblock_index(), - block_number = ctx.block_number(), - "Skipping flashblock reached target", - ); - return Ok(()); - }; - - // Continue with flashblock building + ) -> eyre::Result> { + let flashblock_index = ctx.flashblock_index(); let mut target_gas_for_batch = ctx.extra_ctx.target_gas_for_batch; - let mut target_da_per_batch = ctx.extra_ctx.target_da_for_batch; + let mut target_da_for_batch = ctx.extra_ctx.target_da_for_batch; info!( target: "payload_builder", block_number = ctx.block_number(), - flashblock_index = ctx.flashblock_index(), + flashblock_index, target_gas = target_gas_for_batch, gas_used = info.cumulative_gas_used, - target_da = target_da_per_batch, + target_da = target_da_for_batch, da_used = info.cumulative_da_bytes_used, block_gas_used = ctx.block_gas_limit(), "Building flashblock", @@ -599,7 +625,7 @@ where target_gas_for_batch = target_gas_for_batch.saturating_sub(builder_tx_gas); // saturating sub just in case, we will log an error if da_limit too small for builder_tx_da_size - if let Some(da_limit) = target_da_per_batch.as_mut() { + if let Some(da_limit) = target_da_for_batch.as_mut() { *da_limit = da_limit.saturating_sub(builder_tx_da_size); } @@ -609,7 +635,7 @@ where self.pool .best_transactions_with_attributes(ctx.best_transaction_attributes()), ), - ctx.flashblock_index(), + flashblock_index, ); let transaction_pool_fetch_time = best_txs_start_time.elapsed(); ctx.metrics @@ -625,8 +651,9 @@ where state, best_txs, target_gas_for_batch.min(ctx.block_gas_limit()), - target_da_per_batch, - )?; + target_da_for_batch, + ) + .wrap_err("failed to execute best transactions")?; // Extract last transactions let new_transactions = info.executed_transactions[info.extra.last_flashblock_index..] .to_vec() @@ -645,7 +672,7 @@ where span, "Payload building complete, channel closed or job cancelled", ); - return Ok(()); + return Ok(None); } let payload_tx_simulation_time = tx_execution_start_time.elapsed(); @@ -656,15 +683,11 @@ where .payload_tx_simulation_gauge .set(payload_tx_simulation_time); - match self + if let Err(e) = self .builder_tx .add_builder_txs(&state_provider, info, ctx, state, false) { - Ok(builder_txs) => builder_txs, - Err(e) => { - error!(target: "payload_builder", "Error simulating builder txs: {}", e); - vec![] - } + error!(target: "payload_builder", "Error simulating builder txs: {}", e); }; let total_block_built_duration = Instant::now(); @@ -682,17 +705,13 @@ where .total_block_built_gauge .set(total_block_built_duration); - // Handle build errors with match pattern match build_result { Err(err) => { - // Track invalid/bad block ctx.metrics.invalid_blocks_count.increment(1); - error!(target: "payload_builder", "Failed to build block {}, flashblock {}: {}", ctx.block_number(), ctx.flashblock_index(), err); - // Return the error - return Err(err); + Err(err).wrap_err("failed to build payload") } Ok((new_payload, mut fb_payload)) => { - fb_payload.index = ctx.flashblock_index(); + fb_payload.index = flashblock_index; fb_payload.base = None; // If main token got canceled in here that means we received get_payload and we should drop everything and now update best_payload @@ -705,12 +724,14 @@ where span, "Payload building complete, channel closed or job cancelled", ); - return Ok(()); + return Ok(None); } let flashblock_byte_size = self .ws_pub .publish(&fb_payload) - .map_err(PayloadBuilderError::other)?; + .wrap_err("failed to publish flashblock via websocket")?; + self.send_payload_to_engine(new_payload.clone()); + best_payload.set(new_payload); // Record flashblock build duration ctx.metrics @@ -723,11 +744,9 @@ where .flashblock_num_tx_histogram .record(info.executed_transactions.len() as f64); - best_payload.set(new_payload.clone()); - self.send_payload_to_engine(new_payload); // Update bundle_state for next iteration if let Some(da_limit) = ctx.extra_ctx.da_per_batch { - if let Some(da) = target_da_per_batch.as_mut() { + if let Some(da) = target_da_for_batch.as_mut() { *da += da_limit; } else { error!( @@ -736,20 +755,25 @@ where } } - ctx.extra_ctx.target_gas_for_batch += ctx.extra_ctx.gas_per_batch; - ctx.extra_ctx.target_da_for_batch = target_da_per_batch; + let target_gas_for_batch = + ctx.extra_ctx.target_gas_for_batch + ctx.extra_ctx.gas_per_batch; + let next_extra_ctx = ctx + .extra_ctx + .clone() + .next(target_gas_for_batch, target_da_for_batch); info!( target: "payload_builder", message = "Flashblock built", - flashblock_index = ctx.flashblock_index(), + flashblock_index = flashblock_index, current_gas = info.cumulative_gas_used, current_da = info.cumulative_da_bytes_used, target_flashblocks = ctx.target_flashblock_count(), ); + + Ok(Some(next_extra_ctx)) } } - Ok(()) } /// Do some logging and metric recording when we stop build flashblocks @@ -780,7 +804,6 @@ where message = message, flashblocks_per_block = flashblocks_per_block, flashblock_index = ctx.flashblock_index(), - config_flashblocks_per_block = self.config.flashblocks_per_block(), ); span.record("flashblock_count", ctx.flashblock_index()); @@ -804,7 +827,6 @@ where } } } - /// Calculate number of flashblocks. /// If dynamic is enabled this function will take time drift into the account. pub(super) fn calculate_flashblocks(&self, timestamp: u64) -> (u64, Duration) { @@ -815,6 +837,7 @@ where self.config.specific.interval - self.config.specific.leeway_time, ); } + // We use this system time to determine remining time to build a block // Things to consider: // FCU(a) - FCU with attributes @@ -907,13 +930,13 @@ where .map_err(PayloadBuilderError::other)? .apply_pre_execution_changes()?; - // 3. execute sequencer transactions + // 2. execute sequencer transactions let info = ctx.execute_sequencer_transactions(state)?; Ok(info) } -fn build_block( +pub(super) fn build_block( state: &mut State, ctx: &OpPayloadBuilderCtx, info: &mut ExecutionInfo, @@ -960,7 +983,7 @@ where .expect("Number is in range"); // TODO: maybe recreate state with bundle in here - // // calculate the state root + // calculate the state root let state_root_start_time = Instant::now(); let mut state_root = B256::ZERO; let mut trie_output = TrieUpdates::default(); @@ -1068,7 +1091,7 @@ where }, trie: ExecutedTrieUpdates::Present(Arc::new(trie_output)), }; - info!(target: "payload_builder", message = "Executed block created"); + debug!(target: "payload_builder", message = "Executed block created"); let sealed_block = Arc::new(block.seal_slow()); debug!(target: "payload_builder", ?sealed_block, "sealed built block"); From ab3278d81f9f2848526890b4105a7c231f359ae2 Mon Sep 17 00:00:00 2001 From: Anton Date: Mon, 20 Oct 2025 20:34:42 +0200 Subject: [PATCH 05/19] release: 0.2.7 (#300) * chore: push all the tags * release: 0.2.7 --- .github/workflows/checks_docker.yaml | 2 +- .github/workflows/op_rbuilder_checks.yaml | 2 +- .github/workflows/op_rbuilder_release.yaml | 24 +++++++++++++++++-- .../workflows/tdx_quote_provider_release.yaml | 2 +- Cargo.lock | 2 +- Cargo.toml | 2 +- 6 files changed, 27 insertions(+), 7 deletions(-) diff --git a/.github/workflows/checks_docker.yaml b/.github/workflows/checks_docker.yaml index 212afe6dc..78770bd3f 100644 --- a/.github/workflows/checks_docker.yaml +++ b/.github/workflows/checks_docker.yaml @@ -10,7 +10,7 @@ on: jobs: build-docker: name: Build Docker image - runs-on: warp-ubuntu-latest-x64-32x + runs-on: warp-ubuntu-latest-x64-16x steps: - name: Checkout sources diff --git a/.github/workflows/op_rbuilder_checks.yaml b/.github/workflows/op_rbuilder_checks.yaml index b30b8fd8a..524360de6 100644 --- a/.github/workflows/op_rbuilder_checks.yaml +++ b/.github/workflows/op_rbuilder_checks.yaml @@ -13,7 +13,7 @@ env: jobs: lint_and_test: name: Lint and test - runs-on: warp-ubuntu-latest-x64-32x + runs-on: warp-ubuntu-latest-x64-16x env: # Set features for the Makefile FEATURES: ${{ matrix.features }} diff --git a/.github/workflows/op_rbuilder_release.yaml b/.github/workflows/op_rbuilder_release.yaml index 11f5a131c..a20f03d71 100644 --- a/.github/workflows/op_rbuilder_release.yaml +++ b/.github/workflows/op_rbuilder_release.yaml @@ -73,7 +73,7 @@ jobs: matrix: configs: - target: x86_64-unknown-linux-gnu - runner: warp-ubuntu-latest-x64-32x + runner: warp-ubuntu-latest-x64-16x - target: aarch64-unknown-linux-gnu runner: warp-ubuntu-latest-arm64-32x # Paused until docker is pre-installed https://github.com/actions/runner-images/blob/main/images/macos/macos-14-arm64-Readme.md @@ -228,7 +228,7 @@ jobs: labels: ${{ steps.meta.outputs.labels }} platforms: ${{ matrix.configs.platform }} push: true - tags: ghcr.io/${{ github.repository }}:${{ env.VERSION }}-${{ env.PLATFORM }} + tags: ${{ steps.meta.outputs.tags }} build-args: | FEATURES=${{ github.event.inputs.features || '' }} RBUILDER_BIN=op-rbuilder @@ -299,3 +299,23 @@ jobs: - name: inspect image run: | docker buildx imagetools inspect ghcr.io/${{ github.repository }}:${{ env.VERSION }} + + compare-builds: + name: Compare raw vs. container binary + needs: + - extract-version + - publish-container-image + runs-on: ${{ matrix.configs.runner }} + env: + VERSION: ${{ needs.extract-version.outputs.VERSION }} + permissions: + contents: read + packages: write + strategy: + matrix: + configs: + - platform: linux/amd64 + runner: warp-ubuntu-latest-x64-16x + - platform: linux/arm64 + runner: warp-ubuntu-latest-arm64-16x + steps: diff --git a/.github/workflows/tdx_quote_provider_release.yaml b/.github/workflows/tdx_quote_provider_release.yaml index 6cbe644ba..0506f7c6f 100644 --- a/.github/workflows/tdx_quote_provider_release.yaml +++ b/.github/workflows/tdx_quote_provider_release.yaml @@ -58,7 +58,7 @@ jobs: matrix: configs: - target: x86_64-unknown-linux-gnu - runner: warp-ubuntu-latest-x64-32x + runner: warp-ubuntu-latest-x64-16x - target: aarch64-unknown-linux-gnu runner: warp-ubuntu-latest-arm64-32x # Paused until docker is pre-installed https://github.com/actions/runner-images/blob/main/images/macos/macos-14-arm64-Readme.md diff --git a/Cargo.lock b/Cargo.lock index 344473b20..8deee3cb7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6293,7 +6293,7 @@ dependencies = [ [[package]] name = "op-rbuilder" -version = "0.2.6" +version = "0.2.7" dependencies = [ "alloy-consensus", "alloy-contract", diff --git a/Cargo.toml b/Cargo.toml index d832946a8..b31e0019a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace.package] -version = "0.2.6" +version = "0.2.7" edition = "2024" rust-version = "1.86" license = "MIT OR Apache-2.0" From 4b934e45b500bbcd6a0472c55ae5b29cb15dd62a Mon Sep 17 00:00:00 2001 From: Anton Date: Mon, 20 Oct 2025 21:59:38 +0200 Subject: [PATCH 06/19] fix: remove incomplete step (#301) * chore: push all the tags * release: 0.2.7 * chore: update gh-runners * fix: remove incomplete step * fix: remove incomplete step --- .github/workflows/op_rbuilder_release.yaml | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/.github/workflows/op_rbuilder_release.yaml b/.github/workflows/op_rbuilder_release.yaml index a20f03d71..37303146a 100644 --- a/.github/workflows/op_rbuilder_release.yaml +++ b/.github/workflows/op_rbuilder_release.yaml @@ -299,23 +299,3 @@ jobs: - name: inspect image run: | docker buildx imagetools inspect ghcr.io/${{ github.repository }}:${{ env.VERSION }} - - compare-builds: - name: Compare raw vs. container binary - needs: - - extract-version - - publish-container-image - runs-on: ${{ matrix.configs.runner }} - env: - VERSION: ${{ needs.extract-version.outputs.VERSION }} - permissions: - contents: read - packages: write - strategy: - matrix: - configs: - - platform: linux/amd64 - runner: warp-ubuntu-latest-x64-16x - - platform: linux/arm64 - runner: warp-ubuntu-latest-arm64-16x - steps: From 663b98101bd5ae2ca8535753af956d6802c9214f Mon Sep 17 00:00:00 2001 From: shana Date: Wed, 22 Oct 2025 12:20:13 -0700 Subject: [PATCH 07/19] Add permit flashtestations tx calls from builder (#285) * Add permit flashtestations tx calls from builder * move simumlation calls to builder tx * refactor contract simulation * refactor flashtestations builder tx * fix test comments * comments --- crates/op-rbuilder/src/builders/builder_tx.rs | 304 +++++-- .../src/builders/flashblocks/builder_tx.rs | 147 ++-- .../src/builders/flashblocks/payload.rs | 21 +- .../src/builders/flashblocks/service.rs | 17 +- crates/op-rbuilder/src/builders/mod.rs | 4 +- .../src/builders/standard/builder_tx.rs | 33 +- .../src/builders/standard/service.rs | 6 +- .../op-rbuilder/src/flashtestations/args.rs | 8 + .../src/flashtestations/builder_tx.rs | 772 +++++++++--------- crates/op-rbuilder/src/flashtestations/mod.rs | 55 +- .../src/flashtestations/service.rs | 27 +- .../op-rbuilder/src/tests/flashtestations.rs | 388 ++++++--- crates/op-rbuilder/src/tests/mod.rs | 4 +- 13 files changed, 1103 insertions(+), 683 deletions(-) diff --git a/crates/op-rbuilder/src/builders/builder_tx.rs b/crates/op-rbuilder/src/builders/builder_tx.rs index 15ecc0d81..89b219978 100644 --- a/crates/op-rbuilder/src/builders/builder_tx.rs +++ b/crates/op-rbuilder/src/builders/builder_tx.rs @@ -1,29 +1,48 @@ use alloy_consensus::TxEip1559; use alloy_eips::{Encodable2718, eip7623::TOTAL_COST_FLOOR_PER_TOKEN}; use alloy_evm::Database; +use alloy_op_evm::OpEvm; use alloy_primitives::{ - Address, B256, Log, TxKind, U256, - map::foldhash::{HashSet, HashSetExt}, + Address, B256, Bytes, TxKind, U256, + map::foldhash::{HashMap, HashSet, HashSetExt}, }; +use alloy_sol_types::{ContractError, Revert, SolCall, SolError, SolInterface}; use core::fmt::Debug; use op_alloy_consensus::OpTypedTransaction; -use op_revm::OpTransactionError; -use reth_evm::{ConfigureEvm, Evm, eth::receipt_builder::ReceiptBuilderCtx}; +use op_alloy_rpc_types::OpTransactionRequest; +use op_revm::{OpHaltReason, OpTransactionError}; +use reth_evm::{ + ConfigureEvm, Evm, EvmError, InvalidTxError, eth::receipt_builder::ReceiptBuilderCtx, + precompiles::PrecompilesMap, +}; use reth_node_api::PayloadBuilderError; use reth_optimism_primitives::OpTransactionSigned; use reth_primitives::Recovered; use reth_provider::{ProviderError, StateProvider}; use reth_revm::{State, database::StateProviderDatabase}; +use reth_rpc_api::eth::{EthTxEnvError, transaction::TryIntoTxEnv}; use revm::{ - DatabaseCommit, - context::result::{EVMError, ResultAndState}, + DatabaseCommit, DatabaseRef, + context::{ + ContextTr, + result::{EVMError, ExecutionResult, ResultAndState}, + }, + inspector::NoOpInspector, + state::Account, }; -use tracing::warn; +use tracing::{trace, warn}; use crate::{ builders::context::OpPayloadBuilderCtx, primitives::reth::ExecutionInfo, tx_signer::Signer, }; +#[derive(Debug, Default)] +pub struct SimulationSuccessResult { + pub gas_used: u64, + pub output: T::Return, + pub state_changes: HashMap, +} + #[derive(Debug, Clone)] pub struct BuilderTransactionCtx { pub gas_used: u64, @@ -46,6 +65,14 @@ impl BuilderTransactionCtx { } } +#[derive(Debug, thiserror::Error)] +pub enum InvalidContractDataError { + #[error("did not find expected logs expected {0:?} but got {1:?}")] + InvalidLogs(Vec, Vec), + #[error("could not decode output from contract call")] + OutputAbiDecodeError, +} + /// Possible error variants during construction of builder txs. #[derive(Debug, thiserror::Error)] pub enum BuilderTransactionError { @@ -55,6 +82,15 @@ pub enum BuilderTransactionError { /// Signature signing fails #[error("failed to sign transaction: {0}")] SigningError(secp256k1::Error), + /// Invalid contract errors indicating the contract is incorrect + #[error("contract {0} may be incorrect, invalid contract data: {1}")] + InvalidContract(Address, InvalidContractDataError), + /// Transaction halted execution + #[error("transaction to {0} halted {1:?}")] + TransactionHalted(Address, OpHaltReason), + /// Transaction reverted + #[error("transaction to {0} reverted {1}")] + TransactionReverted(Address, Revert), /// Invalid tx errors during evm execution. #[error("invalid transaction error {0}")] InvalidTransactionError(Box), @@ -78,6 +114,12 @@ impl From> for BuilderTransactionErr } } +impl From for BuilderTransactionError { + fn from(error: EthTxEnvError) -> Self { + BuilderTransactionError::EvmExecutionError(Box::new(error)) + } +} + impl From for PayloadBuilderError { fn from(error: BuilderTransactionError) -> Self { match error { @@ -90,24 +132,46 @@ impl From for PayloadBuilderError { } impl BuilderTransactionError { - pub fn other(error: E) -> Self - where - E: core::error::Error + Send + Sync + 'static, - { + pub fn other(error: impl core::error::Error + Send + Sync + 'static) -> Self { BuilderTransactionError::Other(Box::new(error)) } + + pub fn msg(msg: impl core::fmt::Display) -> Self { + Self::Other(msg.to_string().into()) + } } -pub trait BuilderTransactions: Debug { - fn simulate_builder_txs( +pub trait BuilderTransactions { + // Simulates and returns the signed builder transactions. The simulation modifies and commit + // changes to the db so call new_simulation_state to simulate on a new copy of the state + fn simulate_builder_txs( &self, state_provider: impl StateProvider + Clone, info: &mut ExecutionInfo, ctx: &OpPayloadBuilderCtx, - db: &mut State, + db: &mut State, + top_of_block: bool, ) -> Result, BuilderTransactionError>; - fn add_builder_txs( + fn simulate_builder_txs_with_state_copy( + &self, + state_provider: impl StateProvider + Clone, + info: &mut ExecutionInfo, + ctx: &OpPayloadBuilderCtx, + db: &State, + top_of_block: bool, + ) -> Result, BuilderTransactionError> { + let mut simulation_state = self.new_simulation_state(state_provider.clone(), db); + self.simulate_builder_txs( + state_provider, + info, + ctx, + &mut simulation_state, + top_of_block, + ) + } + + fn add_builder_txs( &self, state_provider: impl StateProvider + Clone, info: &mut ExecutionInfo, @@ -116,14 +180,20 @@ pub trait BuilderTransactions: Debug { top_of_block: bool, ) -> Result, BuilderTransactionError> { { + let builder_txs = self.simulate_builder_txs_with_state_copy( + state_provider, + info, + builder_ctx, + db, + top_of_block, + )?; + let mut evm = builder_ctx .evm_config .evm_with_env(&mut *db, builder_ctx.evm_env.clone()); let mut invalid: HashSet

= HashSet::new(); - let builder_txs = - self.simulate_builder_txs(state_provider, info, builder_ctx, evm.db_mut())?; for builder_tx in builder_txs.iter() { if builder_tx.is_top_of_block != top_of_block { // don't commit tx if the buidler tx is not being added in the intended @@ -135,12 +205,29 @@ pub trait BuilderTransactions: Debug { continue; } - let ResultAndState { result, state } = evm - .transact(&builder_tx.signed_tx) - .map_err(|err| BuilderTransactionError::EvmExecutionError(Box::new(err)))?; + let ResultAndState { result, state } = match evm.transact(&builder_tx.signed_tx) { + Ok(res) => res, + Err(err) => { + if let Some(err) = err.as_invalid_tx_err() { + if err.is_nonce_too_low() { + // if the nonce is too low, we can skip this transaction + trace!(target: "payload_builder", %err, ?builder_tx.signed_tx, "skipping nonce too low builder transaction"); + } else { + // if the transaction is invalid, we can skip it and all of its + // descendants + trace!(target: "payload_builder", %err, ?builder_tx.signed_tx, "skipping invalid builder transaction and its descendants"); + invalid.insert(builder_tx.signed_tx.signer()); + } + + continue; + } + // this is an error that we should treat as fatal for this attempt + return Err(BuilderTransactionError::EvmExecutionError(Box::new(err))); + } + }; if !result.is_success() { - warn!(target: "payload_builder", tx_hash = ?builder_tx.signed_tx.tx_hash(), "builder tx reverted"); + warn!(target: "payload_builder", tx_hash = ?builder_tx.signed_tx.tx_hash(), result = ?result, "builder tx reverted"); invalid.insert(builder_tx.signed_tx.signer()); continue; } @@ -174,49 +261,152 @@ pub trait BuilderTransactions: Debug { } } - fn simulate_builder_txs_state( + // Creates a copy of the state to simulate against + fn new_simulation_state( &self, - state_provider: impl StateProvider + Clone, - builder_txs: Vec<&BuilderTransactionCtx>, - ctx: &OpPayloadBuilderCtx, - db: &mut State, - ) -> Result>, BuilderTransactionError> { - let state = StateProviderDatabase::new(state_provider.clone()); - let mut simulation_state = State::builder() + state_provider: impl StateProvider, + db: &State, + ) -> State> { + let state = StateProviderDatabase::new(state_provider); + + State::builder() .with_database(state) .with_cached_prestate(db.cache.clone()) .with_bundle_update() - .build(); - let mut evm = ctx - .evm_config - .evm_with_env(&mut simulation_state, ctx.evm_env.clone()); + .build() + } - for builder_tx in builder_txs { + fn sign_tx( + &self, + to: Address, + from: Signer, + gas_used: u64, + calldata: Bytes, + ctx: &OpPayloadBuilderCtx, + db: impl DatabaseRef, + ) -> Result, BuilderTransactionError> { + let nonce = get_nonce(db, from.address)?; + // Create the EIP-1559 transaction + let tx = OpTypedTransaction::Eip1559(TxEip1559 { + chain_id: ctx.chain_id(), + nonce, + // Due to EIP-150, 63/64 of available gas is forwarded to external calls so need to add a buffer + gas_limit: gas_used * 64 / 63, + max_fee_per_gas: ctx.base_fee().into(), + to: TxKind::Call(to), + input: calldata, + ..Default::default() + }); + Ok(from.sign_tx(tx)?) + } + + fn commit_txs( + &self, + signed_txs: Vec>, + ctx: &OpPayloadBuilderCtx, + db: &mut State, + ) -> Result<(), BuilderTransactionError> { + let mut evm = ctx.evm_config.evm_with_env(&mut *db, ctx.evm_env.clone()); + for signed_tx in signed_txs { let ResultAndState { state, .. } = evm - .transact(&builder_tx.signed_tx) + .transact(&signed_tx) .map_err(|err| BuilderTransactionError::EvmExecutionError(Box::new(err)))?; - - evm.db_mut().commit(state); + evm.db_mut().commit(state) } + Ok(()) + } - Ok(simulation_state) + fn simulate_call( + &self, + tx: OpTransactionRequest, + expected_logs: Vec, + evm: &mut OpEvm, + ) -> Result, BuilderTransactionError> { + let tx_env = tx.try_into_tx_env(evm.cfg(), evm.block())?; + let to = tx_env.base.kind.into_to().unwrap_or_default(); + + let ResultAndState { result, state } = match evm.transact(tx_env) { + Ok(res) => res, + Err(err) => { + if err.is_invalid_tx_err() { + return Err(BuilderTransactionError::InvalidTransactionError(Box::new( + err, + ))); + } else { + return Err(BuilderTransactionError::EvmExecutionError(Box::new(err))); + } + } + }; + + match result { + ExecutionResult::Success { + output, + gas_used, + logs, + .. + } => { + let topics: HashSet = logs + .into_iter() + .flat_map(|log| log.topics().to_vec()) + .collect(); + if !expected_logs + .iter() + .all(|expected_topic| topics.contains(expected_topic)) + { + return Err(BuilderTransactionError::InvalidContract( + to, + InvalidContractDataError::InvalidLogs( + expected_logs, + topics.into_iter().collect(), + ), + )); + } + let return_output = T::abi_decode_returns(&output.into_data()).map_err(|_| { + BuilderTransactionError::InvalidContract( + to, + InvalidContractDataError::OutputAbiDecodeError, + ) + })?; + Ok(SimulationSuccessResult:: { + gas_used, + output: return_output, + state_changes: state, + }) + } + ExecutionResult::Revert { output, .. } => { + let revert = ContractError::::abi_decode(&output) + .map(|reason| Revert::from(format!("{reason:?}"))) + .or_else(|_| Revert::abi_decode(&output)) + .unwrap_or_else(|_| { + Revert::from(format!("unknown revert: {}", hex::encode(&output))) + }); + Err(BuilderTransactionError::TransactionReverted(to, revert)) + } + ExecutionResult::Halt { reason, .. } => { + Err(BuilderTransactionError::TransactionHalted(to, reason)) + } + } } } #[derive(Debug, Clone)] -pub(super) struct BuilderTxBase { +pub(super) struct BuilderTxBase { pub signer: Option, + _marker: std::marker::PhantomData, } -impl BuilderTxBase { +impl BuilderTxBase { pub(super) fn new(signer: Option) -> Self { - Self { signer } + Self { + signer, + _marker: std::marker::PhantomData, + } } - pub(super) fn simulate_builder_tx( + pub(super) fn simulate_builder_tx( &self, ctx: &OpPayloadBuilderCtx, - db: &mut State, + db: impl DatabaseRef, ) -> Result, BuilderTransactionError> { match self.signer { Some(signer) => { @@ -258,18 +448,15 @@ impl BuilderTxBase { std::cmp::max(zero_cost + nonzero_cost + 21_000, floor_gas) } - fn signed_builder_tx( + fn signed_builder_tx( &self, ctx: &OpPayloadBuilderCtx, - db: &mut State, + db: impl DatabaseRef, signer: Signer, gas_used: u64, message: Vec, ) -> Result, BuilderTransactionError> { - let nonce = db - .load_cache_account(signer.address) - .map(|acc| acc.account_info().unwrap_or_default().nonce) - .map_err(|_| BuilderTransactionError::AccountLoadFailed(signer.address))?; + let nonce = get_nonce(db, signer.address)?; // Create the EIP-1559 transaction let tx = OpTypedTransaction::Eip1559(TxEip1559 { @@ -292,24 +479,17 @@ impl BuilderTxBase { } } -pub fn get_nonce( - db: &mut State, - address: Address, -) -> Result { - db.load_cache_account(address) - .map(|acc| acc.account_info().unwrap_or_default().nonce) +pub fn get_nonce(db: impl DatabaseRef, address: Address) -> Result { + db.basic_ref(address) + .map(|acc| acc.unwrap_or_default().nonce) .map_err(|_| BuilderTransactionError::AccountLoadFailed(address)) } pub fn get_balance( - db: &mut State, + db: impl DatabaseRef, address: Address, ) -> Result { - db.load_cache_account(address) - .map(|acc| acc.account_info().unwrap_or_default().balance) + db.basic_ref(address) + .map(|acc| acc.unwrap_or_default().balance) .map_err(|_| BuilderTransactionError::AccountLoadFailed(address)) } - -pub fn log_exists(logs: &[Log], topic: &B256) -> bool { - logs.iter().any(|log| log.topics().first() == Some(topic)) -} diff --git a/crates/op-rbuilder/src/builders/flashblocks/builder_tx.rs b/crates/op-rbuilder/src/builders/flashblocks/builder_tx.rs index b1b169063..04afc64d9 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/builder_tx.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/builder_tx.rs @@ -2,7 +2,7 @@ use alloy_consensus::TxEip1559; use alloy_eips::Encodable2718; use alloy_evm::{Database, Evm}; use alloy_op_evm::OpEvm; -use alloy_primitives::{Address, B256, TxKind}; +use alloy_primitives::{Address, TxKind}; use alloy_sol_types::{Error, SolCall, SolEvent, SolInterface, sol}; use core::fmt::Debug; use op_alloy_consensus::OpTypedTransaction; @@ -11,8 +11,9 @@ use reth_evm::{ConfigureEvm, precompiles::PrecompilesMap}; use reth_optimism_primitives::OpTransactionSigned; use reth_primitives::Recovered; use reth_provider::StateProvider; -use reth_revm::{State, database::StateProviderDatabase}; +use reth_revm::State; use revm::{ + DatabaseRef, context::result::{ExecutionResult, ResultAndState}, inspector::NoOpInspector, }; @@ -21,9 +22,10 @@ use tracing::warn; use crate::{ builders::{ BuilderTransactionCtx, BuilderTransactionError, BuilderTransactions, - builder_tx::{BuilderTxBase, get_nonce, log_exists}, + InvalidContractDataError, + builder_tx::{BuilderTxBase, get_nonce}, context::OpPayloadBuilderCtx, - flashblocks::payload::FlashblocksExtraCtx, + flashblocks::payload::{FlashblocksExecutionInfo, FlashblocksExtraCtx}, }, flashtestations::builder_tx::FlashtestationsBuilderTx, primitives::reth::ExecutionInfo, @@ -53,8 +55,6 @@ sol!( pub(super) enum FlashblockNumberError { #[error("flashblocks number contract tx reverted: {0:?}")] Revert(IFlashblockNumber::IFlashblockNumberErrors), - #[error("contract may be invalid, mismatch in log emitted: expected {0:?}")] - LogMismatch(B256), #[error("unknown revert: {0} err: {1}")] Unknown(String, Error), #[error("halt: {0:?}")] @@ -64,14 +64,17 @@ pub(super) enum FlashblockNumberError { // This will be the end of block transaction of a regular block #[derive(Debug, Clone)] pub(super) struct FlashblocksBuilderTx { - pub base_builder_tx: BuilderTxBase, - pub flashtestations_builder_tx: Option, + pub base_builder_tx: BuilderTxBase, + pub flashtestations_builder_tx: + Option>, } impl FlashblocksBuilderTx { pub(super) fn new( signer: Option, - flashtestations_builder_tx: Option, + flashtestations_builder_tx: Option< + FlashtestationsBuilderTx, + >, ) -> Self { let base_builder_tx = BuilderTxBase::new(signer); Self { @@ -81,40 +84,46 @@ impl FlashblocksBuilderTx { } } -impl BuilderTransactions for FlashblocksBuilderTx { - fn simulate_builder_txs( +impl BuilderTransactions for FlashblocksBuilderTx { + fn simulate_builder_txs( &self, state_provider: impl StateProvider + Clone, - info: &mut ExecutionInfo, + info: &mut ExecutionInfo, ctx: &OpPayloadBuilderCtx, - db: &mut State, + db: &mut State, + top_of_block: bool, ) -> Result, BuilderTransactionError> { let mut builder_txs = Vec::::new(); if ctx.is_first_flashblock() { - let flashblocks_builder_tx = self.base_builder_tx.simulate_builder_tx(ctx, db)?; + let flashblocks_builder_tx = self.base_builder_tx.simulate_builder_tx(ctx, &mut *db)?; builder_txs.extend(flashblocks_builder_tx.clone()); } if ctx.is_last_flashblock() { - let base_tx = self.base_builder_tx.simulate_builder_tx(ctx, db)?; + let base_tx = self.base_builder_tx.simulate_builder_tx(ctx, &mut *db)?; builder_txs.extend(base_tx.clone()); if let Some(flashtestations_builder_tx) = &self.flashtestations_builder_tx { + // Commit state that is included to get the correct nonce + if let Some(builder_tx) = base_tx { + self.commit_txs(vec![builder_tx.signed_tx], ctx, &mut *db)?; + } // We only include flashtestations txs in the last flashblock - let mut simulation_state = self.simulate_builder_txs_state::( - state_provider.clone(), - base_tx.iter().collect(), - ctx, - db, - )?; - let flashtestations_builder_txs = flashtestations_builder_tx.simulate_builder_txs( + match flashtestations_builder_tx.simulate_builder_txs( state_provider, info, ctx, - &mut simulation_state, - )?; - builder_txs.extend(flashtestations_builder_txs); + db, + top_of_block, + ) { + Ok(flashtestations_builder_txs) => { + builder_txs.extend(flashtestations_builder_txs) + } + Err(e) => { + warn!(target: "flashtestations", error = ?e, "failed to add flashtestations builder tx") + } + } } } Ok(builder_txs) @@ -126,15 +135,18 @@ impl BuilderTransactions for FlashblocksBuilderTx { pub(super) struct FlashblocksNumberBuilderTx { pub signer: Option, pub flashblock_number_address: Address, - pub base_builder_tx: BuilderTxBase, - pub flashtestations_builder_tx: Option, + pub base_builder_tx: BuilderTxBase, + pub flashtestations_builder_tx: + Option>, } impl FlashblocksNumberBuilderTx { pub(super) fn new( signer: Option, flashblock_number_address: Address, - flashtestations_builder_tx: Option, + flashtestations_builder_tx: Option< + FlashtestationsBuilderTx, + >, ) -> Self { let base_builder_tx = BuilderTxBase::new(signer); Self { @@ -145,14 +157,11 @@ impl FlashblocksNumberBuilderTx { } } + // TODO: remove and clean up in favour of simulate_call() fn estimate_flashblock_number_tx_gas( &self, ctx: &OpPayloadBuilderCtx, - evm: &mut OpEvm< - State>, - NoOpInspector, - PrecompilesMap, - >, + evm: &mut OpEvm, signer: &Signer, nonce: u64, ) -> Result { @@ -166,15 +175,17 @@ impl FlashblocksNumberBuilderTx { match result { ExecutionResult::Success { gas_used, logs, .. } => { - if log_exists( - &logs, - &IFlashblockNumber::FlashblockIncremented::SIGNATURE_HASH, - ) { + if logs.iter().any(|log| { + log.topics().first() + == Some(&IFlashblockNumber::FlashblockIncremented::SIGNATURE_HASH) + }) { Ok(gas_used) } else { - Err(BuilderTransactionError::other( - FlashblockNumberError::LogMismatch( - IFlashblockNumber::FlashblockIncremented::SIGNATURE_HASH, + Err(BuilderTransactionError::InvalidContract( + self.flashblock_number_address, + InvalidContractDataError::InvalidLogs( + vec![IFlashblockNumber::FlashblockIncremented::SIGNATURE_HASH], + vec![], ), )) } @@ -213,33 +224,29 @@ impl FlashblocksNumberBuilderTx { } } -impl BuilderTransactions for FlashblocksNumberBuilderTx { - fn simulate_builder_txs( +impl BuilderTransactions + for FlashblocksNumberBuilderTx +{ + fn simulate_builder_txs( &self, state_provider: impl StateProvider + Clone, - info: &mut ExecutionInfo, + info: &mut ExecutionInfo, ctx: &OpPayloadBuilderCtx, - db: &mut State, + db: &mut State, + top_of_block: bool, ) -> Result, BuilderTransactionError> { let mut builder_txs = Vec::::new(); - let state = StateProviderDatabase::new(state_provider.clone()); - let simulation_state = State::builder() - .with_database(state) - .with_cached_prestate(db.cache.clone()) - .with_bundle_update() - .build(); if ctx.is_first_flashblock() { // fallback block builder tx - builder_txs.extend(self.base_builder_tx.simulate_builder_tx(ctx, db)?); + builder_txs.extend(self.base_builder_tx.simulate_builder_tx(ctx, &mut *db)?); } else { // we increment the flashblock number for the next flashblock so we don't increment in the last flashblock if let Some(signer) = &self.signer { - let mut evm = ctx - .evm_config - .evm_with_env(simulation_state, ctx.evm_env.clone()); + let mut evm = ctx.evm_config.evm_with_env(&mut *db, ctx.evm_env.clone()); evm.modify_cfg(|cfg| { cfg.disable_balance_check = true; + cfg.disable_block_gas_limit = true; }); let nonce = get_nonce(evm.db_mut(), signer.address)?; @@ -268,7 +275,7 @@ impl BuilderTransactions for FlashblocksNumberBuilderTx { Err(e) => { warn!(target: "builder_tx", error = ?e, "Flashblocks number contract tx simulation failed, defaulting to fallback builder tx"); self.base_builder_tx - .simulate_builder_tx(ctx, db)? + .simulate_builder_tx(ctx, &mut *db)? .map(|tx| tx.set_top_of_block()) } }; @@ -279,21 +286,29 @@ impl BuilderTransactions for FlashblocksNumberBuilderTx { if ctx.is_last_flashblock() { if let Some(flashtestations_builder_tx) = &self.flashtestations_builder_tx { - let flashblocks_builder_txs = builder_txs.clone(); - let mut simulation_state = self.simulate_builder_txs_state::( - state_provider.clone(), - flashblocks_builder_txs.iter().collect(), - ctx, - db, - )?; + // Commit state that should be included to compute the correct nonce + let flashblocks_builder_txs = builder_txs + .iter() + .filter(|tx| tx.is_top_of_block == top_of_block) + .map(|tx| tx.signed_tx.clone()) + .collect(); + self.commit_txs(flashblocks_builder_txs, ctx, &mut *db)?; + // We only include flashtestations txs in the last flashblock - let flashtestations_builder_txs = flashtestations_builder_tx.simulate_builder_txs( + match flashtestations_builder_tx.simulate_builder_txs( state_provider, info, ctx, - &mut simulation_state, - )?; - builder_txs.extend(flashtestations_builder_txs); + db, + top_of_block, + ) { + Ok(flashtestations_builder_txs) => { + builder_txs.extend(flashtestations_builder_txs) + } + Err(e) => { + warn!(target: "flashtestations", error = ?e, "failed to add flashtestations builder tx") + } + } } } diff --git a/crates/op-rbuilder/src/builders/flashblocks/payload.rs b/crates/op-rbuilder/src/builders/flashblocks/payload.rs index 8acb810bc..e350260bd 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/payload.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/payload.rs @@ -68,8 +68,8 @@ type NextBestFlashblocksTxs = BestFlashblocksTxs< >, >; -#[derive(Debug, Default)] -pub(super) struct ExtraExecutionInfo { +#[derive(Debug, Default, Clone)] +pub(super) struct FlashblocksExecutionInfo { /// Index of the last consumed flashblock last_flashblock_index: usize, } @@ -211,7 +211,7 @@ impl OpPayloadBuilder where Pool: PoolBounds, Client: ClientBounds, - BuilderTx: BuilderTransactions + Send + Sync, + BuilderTx: BuilderTransactions + Send + Sync, { fn get_op_payload_builder_ctx( &self, @@ -526,7 +526,7 @@ where // build first flashblock immediately let next_flashblocks_ctx = match self.build_next_flashblock( - &ctx, + &mut ctx, &mut info, &mut state, &state_provider, @@ -582,8 +582,8 @@ where P: StateRootProvider + HashedPostStateProvider + StorageRootProvider, >( &self, - ctx: &OpPayloadBuilderCtx, - info: &mut ExecutionInfo, + ctx: &mut OpPayloadBuilderCtx, + info: &mut ExecutionInfo, state: &mut State, state_provider: impl reth::providers::StateProvider + Clone, best_txs: &mut NextBestFlashblocksTxs, @@ -780,7 +780,7 @@ where fn record_flashblocks_metrics( &self, ctx: &OpPayloadBuilderCtx, - info: &ExecutionInfo, + info: &ExecutionInfo, flashblocks_per_block: u64, span: &tracing::Span, message: &str, @@ -895,7 +895,8 @@ impl PayloadBuilder for OpPayloadBuilder + Clone + Send + Sync, + BuilderTx: + BuilderTransactions + Clone + Send + Sync, { type Attributes = OpPayloadBuilderAttributes; type BuiltPayload = OpBuiltPayload; @@ -919,7 +920,7 @@ struct FlashblocksMetadata { fn execute_pre_steps( state: &mut State, ctx: &OpPayloadBuilderCtx, -) -> Result, PayloadBuilderError> +) -> Result, PayloadBuilderError> where DB: Database + std::fmt::Debug, ExtraCtx: std::fmt::Debug + Default, @@ -939,7 +940,7 @@ where pub(super) fn build_block( state: &mut State, ctx: &OpPayloadBuilderCtx, - info: &mut ExecutionInfo, + info: &mut ExecutionInfo, calculate_state_root: bool, ) -> Result<(OpBuiltPayload, FlashblocksPayloadV1), PayloadBuilderError> where diff --git a/crates/op-rbuilder/src/builders/flashblocks/service.rs b/crates/op-rbuilder/src/builders/flashblocks/service.rs index 46ee8ae88..584252dfd 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/service.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/service.rs @@ -5,7 +5,7 @@ use crate::{ builder_tx::BuilderTransactions, flashblocks::{ builder_tx::{FlashblocksBuilderTx, FlashblocksNumberBuilderTx}, - payload::FlashblocksExtraCtx, + payload::{FlashblocksExecutionInfo, FlashblocksExtraCtx}, }, generator::BlockPayloadJobGenerator, }, @@ -32,7 +32,12 @@ impl FlashblocksServiceBuilder { where Node: NodeBounds, Pool: PoolBounds, - BuilderTx: BuilderTransactions + Unpin + Clone + Send + Sync + 'static, + BuilderTx: BuilderTransactions + + Unpin + + Clone + + Send + + Sync + + 'static, { let once_lock = Arc::new(std::sync::OnceLock::new()); @@ -84,8 +89,12 @@ where _: OpEvmConfig, ) -> eyre::Result::Payload>> { let signer = self.0.builder_signer; - let flashtestations_builder_tx = if self.0.flashtestations_config.flashtestations_enabled { - match bootstrap_flashtestations(self.0.flashtestations_config.clone(), ctx).await { + let flashtestations_builder_tx = if let Some(builder_key) = signer + && self.0.flashtestations_config.flashtestations_enabled + { + match bootstrap_flashtestations(self.0.flashtestations_config.clone(), builder_key, ctx) + .await + { Ok(builder_tx) => Some(builder_tx), Err(e) => { tracing::warn!(error = %e, "Failed to bootstrap flashtestations, builder will not include flashtestations txs"); diff --git a/crates/op-rbuilder/src/builders/mod.rs b/crates/op-rbuilder/src/builders/mod.rs index 9dbd949ce..c733d1116 100644 --- a/crates/op-rbuilder/src/builders/mod.rs +++ b/crates/op-rbuilder/src/builders/mod.rs @@ -22,8 +22,8 @@ mod generator; mod standard; pub use builder_tx::{ - BuilderTransactionCtx, BuilderTransactionError, BuilderTransactions, get_balance, get_nonce, - log_exists, + BuilderTransactionCtx, BuilderTransactionError, BuilderTransactions, InvalidContractDataError, + SimulationSuccessResult, get_balance, get_nonce, }; pub use context::OpPayloadBuilderCtx; pub use flashblocks::FlashblocksBuilder; diff --git a/crates/op-rbuilder/src/builders/standard/builder_tx.rs b/crates/op-rbuilder/src/builders/standard/builder_tx.rs index 75a159ad7..ececc887e 100644 --- a/crates/op-rbuilder/src/builders/standard/builder_tx.rs +++ b/crates/op-rbuilder/src/builders/standard/builder_tx.rs @@ -2,6 +2,8 @@ use alloy_evm::Database; use core::fmt::Debug; use reth_provider::StateProvider; use reth_revm::State; +use revm::DatabaseRef; +use tracing::warn; use crate::{ builders::{ @@ -34,30 +36,33 @@ impl StandardBuilderTx { } impl BuilderTransactions for StandardBuilderTx { - fn simulate_builder_txs( + fn simulate_builder_txs( &self, state_provider: impl StateProvider + Clone, - info: &mut ExecutionInfo, + info: &mut ExecutionInfo, ctx: &OpPayloadBuilderCtx, - db: &mut State, + db: &mut State, + top_of_block: bool, ) -> Result, BuilderTransactionError> { let mut builder_txs = Vec::::new(); - let standard_builder_tx = self.base_builder_tx.simulate_builder_tx(ctx, db)?; + let standard_builder_tx = self.base_builder_tx.simulate_builder_tx(ctx, &mut *db)?; builder_txs.extend(standard_builder_tx.clone()); if let Some(flashtestations_builder_tx) = &self.flashtestations_builder_tx { - let mut simulation_state = self.simulate_builder_txs_state::<()>( - state_provider.clone(), - standard_builder_tx.iter().collect(), - ctx, - db, - )?; - let flashtestations_builder_txs = flashtestations_builder_tx.simulate_builder_txs( + if let Some(builder_tx) = standard_builder_tx { + self.commit_txs(vec![builder_tx.signed_tx], ctx, db)?; + } + match flashtestations_builder_tx.simulate_builder_txs( state_provider, info, ctx, - &mut simulation_state, - )?; - builder_txs.extend(flashtestations_builder_txs); + db, + top_of_block, + ) { + Ok(flashtestations_builder_txs) => builder_txs.extend(flashtestations_builder_txs), + Err(e) => { + warn!(target: "flashtestations", error = ?e, "failed to add flashtestations builder tx") + } + } } Ok(builder_txs) } diff --git a/crates/op-rbuilder/src/builders/standard/service.rs b/crates/op-rbuilder/src/builders/standard/service.rs index c713b69cb..faf252b15 100644 --- a/crates/op-rbuilder/src/builders/standard/service.rs +++ b/crates/op-rbuilder/src/builders/standard/service.rs @@ -72,8 +72,10 @@ where evm_config: OpEvmConfig, ) -> eyre::Result::Payload>> { let signer = self.0.builder_signer; - let flashtestations_builder_tx = if self.0.flashtestations_config.flashtestations_enabled { - match bootstrap_flashtestations::(self.0.flashtestations_config.clone(), ctx) + let flashtestations_builder_tx = if let Some(builder_key) = signer + && self.0.flashtestations_config.flashtestations_enabled + { + match bootstrap_flashtestations(self.0.flashtestations_config.clone(), builder_key, ctx) .await { Ok(builder_tx) => Some(builder_tx), diff --git a/crates/op-rbuilder/src/flashtestations/args.rs b/crates/op-rbuilder/src/flashtestations/args.rs index 598a8a8f0..fa3601bda 100644 --- a/crates/op-rbuilder/src/flashtestations/args.rs +++ b/crates/op-rbuilder/src/flashtestations/args.rs @@ -100,6 +100,14 @@ pub struct FlashtestationsArgs { default_value = "1" )] pub builder_proof_version: u8, + + /// Use permit for the flashtestation builder tx + #[arg( + long = "flashtestations.use-permit", + env = "FLASHTESTATIONS_USE_PERMIT", + default_value = "false" + )] + pub flashtestations_use_permit: bool, } impl Default for FlashtestationsArgs { diff --git a/crates/op-rbuilder/src/flashtestations/builder_tx.rs b/crates/op-rbuilder/src/flashtestations/builder_tx.rs index 716d2520d..9e7f3086e 100644 --- a/crates/op-rbuilder/src/flashtestations/builder_tx.rs +++ b/crates/op-rbuilder/src/flashtestations/builder_tx.rs @@ -2,32 +2,31 @@ use alloy_consensus::TxEip1559; use alloy_eips::Encodable2718; use alloy_evm::Database; use alloy_op_evm::OpEvm; -use alloy_primitives::{Address, B256, Bytes, TxKind, U256, keccak256, map::foldhash::HashMap}; -use alloy_sol_types::{Error, SolCall, SolEvent, SolInterface, SolValue}; +use alloy_primitives::{Address, B256, Bytes, Signature, TxKind, U256, keccak256}; +use alloy_rpc_types_eth::TransactionInput; +use alloy_sol_types::{SolCall, SolEvent, SolValue}; use core::fmt::Debug; use op_alloy_consensus::OpTypedTransaction; +use op_alloy_rpc_types::OpTransactionRequest; use reth_evm::{ConfigureEvm, Evm, EvmError, precompiles::PrecompilesMap}; use reth_optimism_primitives::OpTransactionSigned; -use reth_primitives::{Log, Recovered}; use reth_provider::StateProvider; use reth_revm::{State, database::StateProviderDatabase}; use revm::{ - DatabaseCommit, - context::result::{ExecutionResult, ResultAndState}, - inspector::NoOpInspector, - state::Account, + DatabaseCommit, DatabaseRef, context::result::ResultAndState, inspector::NoOpInspector, }; use std::sync::{Arc, atomic::AtomicBool}; -use tracing::{debug, info}; +use tracing::{debug, info, warn}; use crate::{ builders::{ BuilderTransactionCtx, BuilderTransactionError, BuilderTransactions, OpPayloadBuilderCtx, - get_balance, get_nonce, + SimulationSuccessResult, get_balance, get_nonce, }, flashtestations::{ - BlockData, FlashtestationRevertReason, + BlockData, IBlockBuilderPolicy::{self, BlockBuilderProofVerified}, + IERC20Permit, IFlashtestationRegistry::{self, TEEServiceRegistered}, }, primitives::reth::ExecutionInfo, @@ -45,10 +44,16 @@ pub struct FlashtestationsBuilderTxArgs { pub builder_proof_version: u8, pub enable_block_proofs: bool, pub registered: bool, + pub use_permit: bool, + pub builder_key: Signer, } #[derive(Debug, Clone)] -pub struct FlashtestationsBuilderTx { +pub struct FlashtestationsBuilderTx +where + ExtraCtx: Debug + Default, + Extra: Debug + Default, +{ // Attestation for the builder attestation: Vec, // Extra registration data for the builder @@ -69,18 +74,19 @@ pub struct FlashtestationsBuilderTx { registered: Arc, // Whether block proofs are enabled enable_block_proofs: bool, + // Whether to use permit for the flashtestation builder tx + use_permit: bool, + // Builder key for the flashtestation permit tx + builder_signer: Signer, + // Extra context and data + _marker: std::marker::PhantomData<(ExtraCtx, Extra)>, } -#[derive(Debug, Default)] -pub struct TxSimulateResult { - pub gas_used: u64, - pub success: bool, - pub state_changes: HashMap, - pub revert_reason: Option, - pub logs: Vec, -} - -impl FlashtestationsBuilderTx { +impl FlashtestationsBuilderTx +where + ExtraCtx: Debug + Default, + Extra: Debug + Default, +{ pub fn new(args: FlashtestationsBuilderTxArgs) -> Self { Self { attestation: args.attestation, @@ -93,87 +99,12 @@ impl FlashtestationsBuilderTx { builder_proof_version: args.builder_proof_version, registered: Arc::new(AtomicBool::new(args.registered)), enable_block_proofs: args.enable_block_proofs, + use_permit: args.use_permit, + builder_signer: args.builder_key, + _marker: std::marker::PhantomData, } } - fn signed_funding_tx( - &self, - to: Address, - from: Signer, - amount: U256, - base_fee: u64, - chain_id: u64, - nonce: u64, - ) -> Result, secp256k1::Error> { - // Create the EIP-1559 transaction - let tx = OpTypedTransaction::Eip1559(TxEip1559 { - chain_id, - nonce, - gas_limit: 21000, - max_fee_per_gas: base_fee.into(), - max_priority_fee_per_gas: 0, - to: TxKind::Call(to), - value: amount, - ..Default::default() - }); - from.sign_tx(tx) - } - - fn signed_register_tee_service_tx( - &self, - attestation: Vec, - gas_limit: u64, - base_fee: u64, - chain_id: u64, - nonce: u64, - ) -> Result, secp256k1::Error> { - let quote_bytes = Bytes::from(attestation); - let calldata = IFlashtestationRegistry::registerTEEServiceCall { - rawQuote: quote_bytes, - extendedRegistrationData: self.extra_registration_data.clone(), - } - .abi_encode(); - - // Create the EIP-1559 transaction - let tx = OpTypedTransaction::Eip1559(TxEip1559 { - chain_id, - nonce, - gas_limit, - max_fee_per_gas: base_fee.into(), - max_priority_fee_per_gas: 0, - to: TxKind::Call(self.registry_address), - input: calldata.into(), - ..Default::default() - }); - self.tee_service_signer.sign_tx(tx) - } - - fn signed_block_builder_proof_tx( - &self, - block_content_hash: B256, - ctx: &OpPayloadBuilderCtx, - gas_limit: u64, - nonce: u64, - ) -> Result, secp256k1::Error> { - let calldata = IBlockBuilderPolicy::verifyBlockBuilderProofCall { - version: self.builder_proof_version, - blockContentHash: block_content_hash, - } - .abi_encode(); - // Create the EIP-1559 transaction - let tx = OpTypedTransaction::Eip1559(TxEip1559 { - chain_id: ctx.chain_id(), - nonce, - gas_limit, - max_fee_per_gas: ctx.base_fee().into(), - max_priority_fee_per_gas: 0, - to: TxKind::Call(self.builder_policy_address), - input: calldata.into(), - ..Default::default() - }); - self.tee_service_signer.sign_tx(tx) - } - /// Computes the block content hash according to the formula: /// keccak256(abi.encode(parentHash, blockNumber, timestamp, transactionHashes)) /// https://github.com/flashbots/rollup-boost/blob/main/specs/flashtestations.md#block-building-process @@ -206,174 +137,25 @@ impl FlashtestationsBuilderTx { keccak256(&encoded) } - fn simulate_register_tee_service_tx( - &self, - ctx: &OpPayloadBuilderCtx, - evm: &mut OpEvm< - &mut State>, - NoOpInspector, - PrecompilesMap, - >, - ) -> Result { - let nonce = get_nonce(evm.db_mut(), self.tee_service_signer.address)?; - - let register_tx = self.signed_register_tee_service_tx( - self.attestation.clone(), - ctx.block_gas_limit(), - ctx.base_fee(), - ctx.chain_id(), - nonce, - )?; - let ResultAndState { result, state } = match evm.transact(®ister_tx) { - Ok(res) => res, - Err(err) => { - if err.is_invalid_tx_err() { - return Err(BuilderTransactionError::InvalidTransactionError(Box::new( - err, - ))); - } else { - return Err(BuilderTransactionError::EvmExecutionError(Box::new(err))); - } - } - }; - match result { - ExecutionResult::Success { gas_used, logs, .. } => Ok(TxSimulateResult { - gas_used, - success: true, - state_changes: state, - revert_reason: None, - logs, - }), - ExecutionResult::Revert { output, gas_used } => { - let revert_reason = - IFlashtestationRegistry::IFlashtestationRegistryErrors::abi_decode(&output) - .map(FlashtestationRevertReason::FlashtestationRegistry) - .unwrap_or_else(|e| { - FlashtestationRevertReason::Unknown(hex::encode(output), e) - }); - Ok(TxSimulateResult { - gas_used, - success: false, - state_changes: state, - revert_reason: Some(revert_reason), - logs: vec![], - }) - } - ExecutionResult::Halt { reason, .. } => Ok(TxSimulateResult { - gas_used: 0, - success: false, - state_changes: state, - revert_reason: Some(FlashtestationRevertReason::Halt(reason)), - logs: vec![], - }), - } - } - - fn check_tee_address_registered_log(&self, logs: &[Log], address: Address) -> bool { - for log in logs { - if log.topics().first() == Some(&TEEServiceRegistered::SIGNATURE_HASH) { - if let Ok(decoded) = TEEServiceRegistered::decode_log(log) { - if decoded.teeAddress == address { - return true; - } - }; - } - } - false - } - - fn simulate_verify_block_proof_tx( + // TODO: deprecate in favour of permit calls + fn fund_tee_service_tx( &self, - block_content_hash: B256, ctx: &OpPayloadBuilderCtx, - evm: &mut OpEvm< - &mut State>, - NoOpInspector, - PrecompilesMap, - >, - ) -> Result { - let nonce = get_nonce(evm.db_mut(), self.tee_service_signer.address)?; - - let verify_block_proof_tx = self.signed_block_builder_proof_tx( - block_content_hash, - ctx, - ctx.block_gas_limit(), - nonce, - )?; - let ResultAndState { result, state } = match evm.transact(&verify_block_proof_tx) { - Ok(res) => res, - Err(err) => { - if err.is_invalid_tx_err() { - return Err(BuilderTransactionError::InvalidTransactionError(Box::new( - err, - ))); - } else { - return Err(BuilderTransactionError::EvmExecutionError(Box::new(err))); - } - } - }; - match result { - ExecutionResult::Success { gas_used, logs, .. } => Ok(TxSimulateResult { - gas_used, - success: true, - state_changes: state, - revert_reason: None, - logs, - }), - ExecutionResult::Revert { output, gas_used } => { - let revert_reason = - IBlockBuilderPolicy::IBlockBuilderPolicyErrors::abi_decode(&output) - .map(FlashtestationRevertReason::BlockBuilderPolicy) - .unwrap_or_else(|e| { - FlashtestationRevertReason::Unknown(hex::encode(output), e) - }); - Ok(TxSimulateResult { - gas_used, - success: false, - state_changes: state, - revert_reason: Some(revert_reason), - logs: vec![], - }) - } - ExecutionResult::Halt { reason, .. } => Ok(TxSimulateResult { - gas_used: 0, - success: false, - state_changes: state, - revert_reason: Some(FlashtestationRevertReason::Halt(reason)), - logs: vec![], - }), - } - } - - fn check_verify_block_proof_log(&self, logs: &[Log]) -> bool { - for log in logs { - if log.topics().first() == Some(&BlockBuilderProofVerified::SIGNATURE_HASH) { - return true; - } - } - false - } - - fn fund_tee_service_tx( - &self, - ctx: &OpPayloadBuilderCtx, - evm: &mut OpEvm< - &mut State>, - NoOpInspector, - PrecompilesMap, - >, + evm: &mut OpEvm<&mut State, NoOpInspector, PrecompilesMap>, ) -> Result, BuilderTransactionError> { - let balance = get_balance(evm.db_mut(), self.tee_service_signer.address)?; + let balance = get_balance(evm.db(), self.tee_service_signer.address)?; if balance.is_zero() { - let funding_nonce = get_nonce(evm.db_mut(), self.funding_key.address)?; - let funding_tx = self.signed_funding_tx( - self.tee_service_signer.address, - self.funding_key, - self.funding_amount, - ctx.base_fee(), - ctx.chain_id(), - funding_nonce, - )?; + let funding_nonce = get_nonce(evm.db(), self.funding_key.address)?; + let tx = OpTypedTransaction::Eip1559(TxEip1559 { + chain_id: ctx.chain_id(), + nonce: funding_nonce, + gas_limit: 21000, + max_fee_per_gas: ctx.base_fee().into(), + to: TxKind::Call(self.tee_service_signer.address), + value: self.funding_amount, + ..Default::default() + }); + let funding_tx = self.funding_key.sign_tx(tx)?; let da_size = op_alloy_flz::tx_estimated_size_fjord_bytes(funding_tx.encoded_2718().as_slice()); let ResultAndState { state, .. } = match evm.transact(&funding_tx) { @@ -401,79 +183,54 @@ impl FlashtestationsBuilderTx { } } - fn register_tee_service_tx( + // TODO: deprecate in favour of permit calls + fn register_tee_service_tx( &self, ctx: &OpPayloadBuilderCtx, - evm: &mut OpEvm< - &mut State>, - NoOpInspector, - PrecompilesMap, - >, - ) -> Result<(Option, bool), BuilderTransactionError> { - let TxSimulateResult { + evm: &mut OpEvm<&mut State, NoOpInspector, PrecompilesMap>, + ) -> Result { + let calldata = IFlashtestationRegistry::registerTEEServiceCall { + rawQuote: self.attestation.clone().into(), + extendedRegistrationData: self.extra_registration_data.clone(), + }; + let SimulationSuccessResult { gas_used, - success, state_changes, - revert_reason, - logs, - } = self.simulate_register_tee_service_tx(ctx, evm)?; - if success { - if !self.check_tee_address_registered_log(&logs, self.tee_service_signer.address) { - Err(BuilderTransactionError::other( - FlashtestationRevertReason::LogMismatch( - self.registry_address, - TEEServiceRegistered::SIGNATURE_HASH, - ), - )) - } else { - let nonce = get_nonce(evm.db_mut(), self.tee_service_signer.address)?; - let register_tx = self.signed_register_tee_service_tx( - self.attestation.clone(), - gas_used * 64 / 63, // Due to EIP-150, 63/64 of available gas is forwarded to external calls so need to add a buffer - ctx.base_fee(), - ctx.chain_id(), - nonce, - )?; - let da_size = op_alloy_flz::tx_estimated_size_fjord_bytes( - register_tx.encoded_2718().as_slice(), - ); - info!(target: "flashtestations", block_number = ctx.block_number(), tx_hash = ?register_tx.tx_hash(), "adding register tee tx to builder txs"); - evm.db_mut().commit(state_changes); - Ok(( - Some(BuilderTransactionCtx { - gas_used, - da_size, - signed_tx: register_tx, - is_top_of_block: false, - }), - false, - )) - } - } else if let Some(FlashtestationRevertReason::FlashtestationRegistry( - IFlashtestationRegistry::IFlashtestationRegistryErrors::TEEServiceAlreadyRegistered(_), - )) = revert_reason - { - Ok((None, true)) - } else { - Err(BuilderTransactionError::other(revert_reason.unwrap_or( - FlashtestationRevertReason::Unknown( - "unknown revert".into(), - Error::Other("unknown revert".into()), - ), - ))) - } + .. + } = self.flashtestation_call( + self.registry_address, + calldata.clone(), + vec![TEEServiceRegistered::SIGNATURE_HASH], + ctx, + evm, + )?; + let signed_tx = self.sign_tx( + self.registry_address, + self.tee_service_signer, + gas_used, + calldata.abi_encode().into(), + ctx, + evm.db(), + )?; + let da_size = + op_alloy_flz::tx_estimated_size_fjord_bytes(signed_tx.encoded_2718().as_slice()); + // commit the register transaction state so the block proof transaction can succeed + evm.db_mut().commit(state_changes); + Ok(BuilderTransactionCtx { + gas_used, + da_size, + signed_tx, + is_top_of_block: false, + }) } - fn verify_block_proof_tx( + // TODO: remove in favour of permit calls + fn verify_block_proof_tx( &self, transactions: Vec, ctx: &OpPayloadBuilderCtx, - evm: &mut OpEvm< - &mut State>, - NoOpInspector, - PrecompilesMap, - >, - ) -> Result, BuilderTransactionError> { + evm: &mut OpEvm, + ) -> Result { let block_content_hash = Self::compute_block_content_hash( &transactions, ctx.parent_hash(), @@ -481,52 +238,36 @@ impl FlashtestationsBuilderTx { ctx.timestamp(), ); - let TxSimulateResult { + let calldata = IBlockBuilderPolicy::verifyBlockBuilderProofCall { + blockContentHash: block_content_hash, + version: self.builder_proof_version, + }; + let SimulationSuccessResult { gas_used, .. } = self.flashtestation_call( + self.builder_policy_address, + calldata.clone(), + vec![BlockBuilderProofVerified::SIGNATURE_HASH], + ctx, + evm, + )?; + let signed_tx = self.sign_tx( + self.builder_policy_address, + self.tee_service_signer, gas_used, - success, - revert_reason, - logs, - .. - } = self.simulate_verify_block_proof_tx(block_content_hash, ctx, evm)?; - if success { - if !self.check_verify_block_proof_log(&logs) { - Err(BuilderTransactionError::other( - FlashtestationRevertReason::LogMismatch( - self.builder_policy_address, - BlockBuilderProofVerified::SIGNATURE_HASH, - ), - )) - } else { - let nonce = get_nonce(evm.db_mut(), self.tee_service_signer.address)?; - // Due to EIP-150, only 63/64 of available gas is forwarded to external calls so need to add a buffer - let verify_block_proof_tx = self.signed_block_builder_proof_tx( - block_content_hash, - ctx, - gas_used * 64 / 63, - nonce, - )?; - let da_size = op_alloy_flz::tx_estimated_size_fjord_bytes( - verify_block_proof_tx.encoded_2718().as_slice(), - ); - debug!(target: "flashtestations", block_number = ctx.block_number(), tx_hash = ?verify_block_proof_tx.tx_hash(), "adding verify block proof tx to builder txs"); - Ok(Some(BuilderTransactionCtx { - gas_used, - da_size, - signed_tx: verify_block_proof_tx, - is_top_of_block: false, - })) - } - } else { - Err(BuilderTransactionError::other(revert_reason.unwrap_or( - FlashtestationRevertReason::Unknown( - "unknown revert".into(), - Error::Other("unknown revert".into()), - ), - ))) - } + calldata.abi_encode().into(), + ctx, + evm.db(), + )?; + let da_size = + op_alloy_flz::tx_estimated_size_fjord_bytes(signed_tx.encoded_2718().as_slice()); + Ok(BuilderTransactionCtx { + gas_used, + da_size, + signed_tx, + is_top_of_block: false, + }) } - fn set_registered( + fn set_registered( &self, state_provider: impl StateProvider + Clone, ctx: &OpPayloadBuilderCtx, @@ -542,62 +283,287 @@ impl FlashtestationsBuilderTx { evm.modify_cfg(|cfg| { cfg.disable_balance_check = true; }); - match self.register_tee_service_tx(ctx, &mut evm) { - Ok((_, registered)) => { - if registered { - self.registered - .store(true, std::sync::atomic::Ordering::SeqCst); - } - Ok(()) - } - Err(e) => Err(e), + let calldata = IFlashtestationRegistry::getRegistrationStatusCall { + teeAddress: self.tee_service_signer.address, + }; + let SimulationSuccessResult { output, .. } = + self.flashtestation_contract_read(self.registry_address, calldata, ctx, &mut evm)?; + if output.isValid { + self.registered + .store(true, std::sync::atomic::Ordering::SeqCst); + } + Ok(()) + } + + fn get_permit_nonce( + &self, + contract_address: Address, + ctx: &OpPayloadBuilderCtx, + evm: &mut OpEvm, + ) -> Result { + let calldata = IERC20Permit::noncesCall { + owner: self.tee_service_signer.address, + }; + let SimulationSuccessResult { output, .. } = + self.flashtestation_contract_read(contract_address, calldata, ctx, evm)?; + Ok(output) + } + + fn registration_permit_signature( + &self, + permit_nonce: U256, + ctx: &OpPayloadBuilderCtx, + evm: &mut OpEvm, + ) -> Result { + let struct_hash_calldata = IFlashtestationRegistry::computeStructHashCall { + rawQuote: self.attestation.clone().into(), + extendedRegistrationData: self.extra_registration_data.clone(), + nonce: permit_nonce, + deadline: U256::from(ctx.timestamp()), + }; + let SimulationSuccessResult { output, .. } = self.flashtestation_contract_read( + self.registry_address, + struct_hash_calldata, + ctx, + evm, + )?; + let typed_data_hash_calldata = + IFlashtestationRegistry::hashTypedDataV4Call { structHash: output }; + let SimulationSuccessResult { output, .. } = self.flashtestation_contract_read( + self.registry_address, + typed_data_hash_calldata, + ctx, + evm, + )?; + let signature = self.tee_service_signer.sign_message(output)?; + Ok(signature) + } + + fn signed_registration_permit_tx( + &self, + ctx: &OpPayloadBuilderCtx, + evm: &mut OpEvm<&mut State, NoOpInspector, PrecompilesMap>, + ) -> Result { + let permit_nonce = self.get_permit_nonce(self.registry_address, ctx, evm)?; + let signature = self.registration_permit_signature(permit_nonce, ctx, evm)?; + let calldata = IFlashtestationRegistry::permitRegisterTEEServiceCall { + rawQuote: self.attestation.clone().into(), + extendedRegistrationData: self.extra_registration_data.clone(), + nonce: permit_nonce, + deadline: U256::from(ctx.timestamp()), + signature: signature.as_bytes().into(), + }; + let SimulationSuccessResult { + gas_used, + state_changes, + .. + } = self.flashtestation_call( + self.registry_address, + calldata.clone(), + vec![TEEServiceRegistered::SIGNATURE_HASH], + ctx, + evm, + )?; + let signed_tx = self.sign_tx( + self.registry_address, + self.builder_signer, + gas_used, + calldata.abi_encode().into(), + ctx, + evm.db(), + )?; + let da_size = + op_alloy_flz::tx_estimated_size_fjord_bytes(signed_tx.encoded_2718().as_slice()); + // commit the register transaction state so the block proof transaction can succeed + evm.db_mut().commit(state_changes); + Ok(BuilderTransactionCtx { + gas_used, + da_size, + signed_tx, + is_top_of_block: false, + }) + } + + fn block_proof_permit_signature( + &self, + permit_nonce: U256, + block_content_hash: B256, + ctx: &OpPayloadBuilderCtx, + evm: &mut OpEvm, + ) -> Result { + let struct_hash_calldata = IBlockBuilderPolicy::computeStructHashCall { + version: self.builder_proof_version, + blockContentHash: block_content_hash, + nonce: permit_nonce, + }; + let SimulationSuccessResult { output, .. } = self.flashtestation_contract_read( + self.builder_policy_address, + struct_hash_calldata, + ctx, + evm, + )?; + let typed_data_hash_calldata = + IBlockBuilderPolicy::getHashedTypeDataV4Call { structHash: output }; + let SimulationSuccessResult { output, .. } = self.flashtestation_contract_read( + self.builder_policy_address, + typed_data_hash_calldata, + ctx, + evm, + )?; + let signature = self.tee_service_signer.sign_message(output)?; + Ok(signature) + } + + fn signed_block_proof_permit_tx( + &self, + transactions: &[OpTransactionSigned], + ctx: &OpPayloadBuilderCtx, + evm: &mut OpEvm, + ) -> Result { + let permit_nonce = self.get_permit_nonce(self.builder_policy_address, ctx, evm)?; + let block_content_hash = Self::compute_block_content_hash( + transactions, + ctx.parent_hash(), + ctx.block_number(), + ctx.timestamp(), + ); + let signature = + self.block_proof_permit_signature(permit_nonce, block_content_hash, ctx, evm)?; + let calldata = IBlockBuilderPolicy::permitVerifyBlockBuilderProofCall { + blockContentHash: block_content_hash, + nonce: permit_nonce, + version: self.builder_proof_version, + eip712Sig: signature.as_bytes().into(), + }; + let SimulationSuccessResult { gas_used, .. } = self.flashtestation_call( + self.builder_policy_address, + calldata.clone(), + vec![BlockBuilderProofVerified::SIGNATURE_HASH], + ctx, + evm, + )?; + let signed_tx = self.sign_tx( + self.builder_policy_address, + self.builder_signer, + gas_used, + calldata.abi_encode().into(), + ctx, + evm.db(), + )?; + let da_size = + op_alloy_flz::tx_estimated_size_fjord_bytes(signed_tx.encoded_2718().as_slice()); + Ok(BuilderTransactionCtx { + gas_used, + da_size, + signed_tx, + is_top_of_block: false, + }) + } + + fn flashtestation_contract_read( + &self, + contract_address: Address, + calldata: T, + ctx: &OpPayloadBuilderCtx, + evm: &mut OpEvm, + ) -> Result, BuilderTransactionError> { + self.flashtestation_call(contract_address, calldata, vec![], ctx, evm) + } + + fn flashtestation_call( + &self, + contract_address: Address, + calldata: T, + expected_topics: Vec, + ctx: &OpPayloadBuilderCtx, + evm: &mut OpEvm, + ) -> Result, BuilderTransactionError> { + let tx_req = OpTransactionRequest::default() + .gas_limit(ctx.block_gas_limit()) + .max_fee_per_gas(ctx.base_fee().into()) + .to(contract_address) + .from(self.tee_service_signer.address) // use tee key as signer for simulations + .nonce(get_nonce(evm.db(), self.tee_service_signer.address)?) + .input(TransactionInput::new(calldata.abi_encode().into())); + if contract_address == self.registry_address { + self.simulate_call::( + tx_req, + expected_topics, + evm, + ) + } else if contract_address == self.builder_policy_address { + self.simulate_call::( + tx_req, + expected_topics, + evm, + ) + } else { + Err(BuilderTransactionError::msg( + "invalid contract address for flashtestations", + )) } } } -impl BuilderTransactions for FlashtestationsBuilderTx { - fn simulate_builder_txs( +impl BuilderTransactions + for FlashtestationsBuilderTx +where + ExtraCtx: Debug + Default, + Extra: Debug + Default, +{ + fn simulate_builder_txs( &self, state_provider: impl StateProvider + Clone, info: &mut ExecutionInfo, ctx: &OpPayloadBuilderCtx, - db: &mut State, + db: &mut State, + _top_of_block: bool, ) -> Result, BuilderTransactionError> { - // set registered simulating against the committed state + // set registered by simulating against the committed state if !self.registered.load(std::sync::atomic::Ordering::SeqCst) { - self.set_registered(state_provider.clone(), ctx)?; + self.set_registered(state_provider, ctx)?; } - let state = StateProviderDatabase::new(state_provider.clone()); - let mut simulation_state = State::builder() - .with_database(state) - .with_bundle_prestate(db.bundle_state.clone()) - .with_bundle_update() - .build(); - - let mut evm = ctx - .evm_config - .evm_with_env(&mut simulation_state, ctx.evm_env.clone()); + let mut evm = ctx.evm_config.evm_with_env(&mut *db, ctx.evm_env.clone()); evm.modify_cfg(|cfg| { cfg.disable_balance_check = true; + cfg.disable_block_gas_limit = true; }); let mut builder_txs = Vec::::new(); if !self.registered.load(std::sync::atomic::Ordering::SeqCst) { info!(target: "flashtestations", "tee service not registered yet, attempting to register"); - builder_txs.extend(self.fund_tee_service_tx(ctx, &mut evm)?); - let (register_tx, _) = self.register_tee_service_tx(ctx, &mut evm)?; - builder_txs.extend(register_tx); + let register_tx = if self.use_permit { + self.signed_registration_permit_tx(ctx, &mut evm)? + } else { + builder_txs.extend(self.fund_tee_service_tx(ctx, &mut evm)?); + self.register_tee_service_tx(ctx, &mut evm)? + }; + builder_txs.push(register_tx); } + // don't return on error for block proof as previous txs in builder_txs will not be returned if self.enable_block_proofs { - // add verify block proof tx - builder_txs.extend(self.verify_block_proof_tx( - info.executed_transactions.clone(), - ctx, - &mut evm, - )?); + if self.use_permit { + debug!(target: "flashtestations", "adding permit verify block proof tx"); + match self.signed_block_proof_permit_tx(&info.executed_transactions, ctx, &mut evm) + { + Ok(block_proof_tx) => builder_txs.push(block_proof_tx), + Err(e) => { + warn!(target: "flashtestations", error = ?e, "failed to add permit block proof transaction") + } + } + } else { + // add verify block proof tx + match self.verify_block_proof_tx(info.executed_transactions.clone(), ctx, &mut evm) + { + Ok(block_proof_tx) => builder_txs.push(block_proof_tx), + Err(e) => { + warn!(target: "flashtestations", error = ?e, "failed to add block proof transaction") + } + }; + } } Ok(builder_txs) } diff --git a/crates/op-rbuilder/src/flashtestations/mod.rs b/crates/op-rbuilder/src/flashtestations/mod.rs index a2a506111..f80a2e0c1 100644 --- a/crates/op-rbuilder/src/flashtestations/mod.rs +++ b/crates/op-rbuilder/src/flashtestations/mod.rs @@ -1,6 +1,4 @@ -use alloy_primitives::{Address, B256}; -use alloy_sol_types::{Error, sol}; -use op_revm::OpHaltReason; +use alloy_sol_types::sol; // https://github.com/flashbots/flashtestations/commit/7cc7f68492fe672a823dd2dead649793aac1f216 sol!( @@ -9,6 +7,25 @@ sol!( interface IFlashtestationRegistry { function registerTEEService(bytes calldata rawQuote, bytes calldata extendedRegistrationData) external; + function permitRegisterTEEService( + bytes calldata rawQuote, + bytes calldata extendedRegistrationData, + uint256 nonce, + uint256 deadline, + bytes calldata signature + ) external payable; + + function computeStructHash( + bytes calldata rawQuote, + bytes calldata extendedRegistrationData, + uint256 nonce, + uint256 deadline + ) external pure returns (bytes32); + + function hashTypedDataV4(bytes32 structHash) external view returns (bytes32); + + function getRegistrationStatus(address teeAddress) external view returns (bool isValid, bytes32 quoteHash); + /// @notice Emitted when a TEE service is registered /// @param teeAddress The address of the TEE service /// @param rawQuote The raw quote from the TEE device @@ -46,6 +63,20 @@ sol!( interface IBlockBuilderPolicy { function verifyBlockBuilderProof(uint8 version, bytes32 blockContentHash) external; + function permitVerifyBlockBuilderProof( + uint8 version, + bytes32 blockContentHash, + uint256 nonce, + bytes calldata eip712Sig + ) external; + + function computeStructHash(uint8 version, bytes32 blockContentHash, uint256 nonce) + external + pure + returns (bytes32); + + function getHashedTypeDataV4(bytes32 structHash) external view returns (bytes32); + /// @notice Emitted when a block builder proof is successfully verified /// @param caller The address that called the verification function (TEE address) /// @param workloadId The workload identifier of the TEE @@ -72,6 +103,10 @@ sol!( error EmptySourceLocators(); } + interface IERC20Permit { + function nonces(address owner) external view returns (uint256); + } + struct BlockData { bytes32 parentHash; uint256 blockNumber; @@ -82,20 +117,6 @@ sol!( type WorkloadId is bytes32; ); -#[derive(Debug, thiserror::Error)] -pub enum FlashtestationRevertReason { - #[error("flashtestation registry error: {0:?}")] - FlashtestationRegistry(IFlashtestationRegistry::IFlashtestationRegistryErrors), - #[error("block builder policy error: {0:?}")] - BlockBuilderPolicy(IBlockBuilderPolicy::IBlockBuilderPolicyErrors), - #[error("contract {0:?} may be invalid, mismatch in log emitted: expected {1:?}")] - LogMismatch(Address, B256), - #[error("unknown revert: {0} err: {1}")] - Unknown(String, Error), - #[error("halt: {0:?}")] - Halt(OpHaltReason), -} - pub mod args; pub mod attestation; pub mod builder_tx; diff --git a/crates/op-rbuilder/src/flashtestations/service.rs b/crates/op-rbuilder/src/flashtestations/service.rs index 5b9162cda..747fd2abd 100644 --- a/crates/op-rbuilder/src/flashtestations/service.rs +++ b/crates/op-rbuilder/src/flashtestations/service.rs @@ -8,24 +8,27 @@ use std::{ }; use tracing::{info, warn}; -use crate::{ - flashtestations::builder_tx::{FlashtestationsBuilderTx, FlashtestationsBuilderTxArgs}, - traits::NodeBounds, - tx_signer::{Signer, generate_key_from_seed, generate_signer}, -}; - use super::{ args::FlashtestationsArgs, attestation::{AttestationConfig, get_attestation_provider}, tx_manager::TxManager, }; +use crate::{ + flashtestations::builder_tx::{FlashtestationsBuilderTx, FlashtestationsBuilderTxArgs}, + traits::NodeBounds, + tx_signer::{Signer, generate_key_from_seed, generate_signer}, +}; +use std::fmt::Debug; -pub async fn bootstrap_flashtestations( +pub async fn bootstrap_flashtestations( args: FlashtestationsArgs, + builder_key: Signer, ctx: &BuilderContext, -) -> eyre::Result +) -> eyre::Result> where Node: NodeBounds, + ExtraCtx: Debug + Default, + Extra: Debug + Default, { let tee_service_signer = load_or_generate_tee_key( &args.flashtestations_key_path, @@ -78,7 +81,11 @@ where info!(target: "flashtestations", "requesting TDX attestation"); let attestation = attestation_provider.get_attestation(report_data).await?; - let (tx_manager, registered) = if let Some(rpc_url) = args.rpc_url { + // TODO: support permit with an external rpc, skip this step if using permit signatures + // since the permit txs are signed by the builder key and will result in nonce issues + let (tx_manager, registered) = if let Some(rpc_url) = args.rpc_url + && !args.flashtestations_use_permit + { let tx_manager = TxManager::new( tee_service_signer, funding_key, @@ -115,6 +122,8 @@ where builder_proof_version: args.builder_proof_version, enable_block_proofs: args.enable_block_proofs, registered, + use_permit: args.flashtestations_use_permit, + builder_key, }); ctx.task_executor() diff --git a/crates/op-rbuilder/src/tests/flashtestations.rs b/crates/op-rbuilder/src/tests/flashtestations.rs index c12deb3ea..544eb5d89 100644 --- a/crates/op-rbuilder/src/tests/flashtestations.rs +++ b/crates/op-rbuilder/src/tests/flashtestations.rs @@ -12,8 +12,11 @@ use crate::{ BLOCK_BUILDER_POLICY_ADDRESS, BundleOpts, ChainDriver, ChainDriverExt, FLASHBLOCKS_NUMBER_ADDRESS, FLASHTESTATION_REGISTRY_ADDRESS, LocalInstance, MOCK_DCAP_ADDRESS, TEE_DEBUG_ADDRESS, TransactionBuilderExt, + block_builder_policy::{BlockBuilderPolicy, IFlashtestationRegistry::RegisteredTEE}, + builder_signer, flashblocks_number_contract::FlashblocksNumber, - flashtestation_registry::FlashtestationRegistry, flashtestations_signer, + flashtestation_registry::FlashtestationRegistry, + flashtestations_signer, }, }; @@ -33,53 +36,15 @@ use crate::{ async fn test_flashtestations_registrations(rbuilder: LocalInstance) -> eyre::Result<()> { let driver = rbuilder.driver().await?; let provider = rbuilder.provider().await?; - setup_flashtestation_contracts(&driver, &provider, true).await?; - let block: alloy_rpc_types_eth::Block = - driver.build_new_block_with_current_timestamp(None).await?; - // check the builder tx, funding tx and registration tx is in the block - let num_txs = block.transactions.len(); - assert!(num_txs >= 3, "Expected at least 3 transactions in block"); - println!( - "block transactions {:#?}", - &block.transactions.clone().into_transactions_vec() - ); - let last_3_txs = &block.transactions.into_transactions_vec()[num_txs - 3..]; - // Check builder tx - assert_eq!( - last_3_txs[0].to(), - Some(Address::ZERO), - "builder tx should send to zero address" - ); - // Check funding tx - assert_eq!( - last_3_txs[1].to(), - Some(TEE_DEBUG_ADDRESS), - "funding tx should send to tee address" - ); - assert!( - last_3_txs[1] - .value() - .eq(&rbuilder.args().flashtestations.funding_amount), - "funding tx should have correct amount" - ); - // Check registration tx - assert_eq!( - last_3_txs[2].to(), - Some(FLASHTESTATION_REGISTRY_ADDRESS), - "registration tx should call registry" - ); - let contract = FlashtestationRegistry::new(FLASHTESTATION_REGISTRY_ADDRESS, provider.clone()); - let result = contract.getRegistration(TEE_DEBUG_ADDRESS).call().await?; - assert!(result._1.isValid, "The tee key is not registered"); - + setup_flashtestation_contracts(&driver, &provider, true, true).await?; // check builder does not try to register again let block = driver.build_new_block_with_current_timestamp(None).await?; let num_txs = block.transactions.len(); if_flashblocks!( - assert!(num_txs == 3, "Expected at 3 transactions in block"); // deposit + 2 builder tx + assert!(num_txs == 3, "Expected 3 transactions in block"); // deposit + 2 builder tx ); if_standard!( - assert!(num_txs == 2, "Expected at 2 transactions in block"); // deposit + builder tx + assert!(num_txs == 2, "Expected 2 transactions in block"); // deposit + builder tx ); Ok(()) @@ -102,20 +67,12 @@ async fn test_flashtestations_registrations(rbuilder: LocalInstance) -> eyre::Re async fn test_flashtestations_block_proofs(rbuilder: LocalInstance) -> eyre::Result<()> { let driver = rbuilder.driver().await?; let provider = rbuilder.provider().await?; - setup_flashtestation_contracts(&driver, &provider, true).await?; - driver.build_new_block_with_current_timestamp(None).await?; - - // check registered - let contract = FlashtestationRegistry::new(FLASHTESTATION_REGISTRY_ADDRESS, provider.clone()); - let result = contract.getRegistration(TEE_DEBUG_ADDRESS).call().await?; - assert!(result._1.isValid, "The tee key is not registered"); - + setup_flashtestation_contracts(&driver, &provider, true, true).await?; // check that only the builder tx and block proof is in the block let (tx_hash, block) = driver.build_new_block_with_valid_transaction().await?; let txs = block.transactions.into_transactions_vec(); - if_flashblocks!( - assert_eq!(txs.len(), 5, "Expected at 4 transactions in block"); // deposit + valid tx + 2 builder tx + end of block proof + assert_eq!(txs.len(), 5, "Expected 5 transactions in block"); // deposit + valid tx + 2 builder tx + end of block proof // Check builder tx assert_eq!( txs[1].to(), @@ -124,7 +81,7 @@ async fn test_flashtestations_block_proofs(rbuilder: LocalInstance) -> eyre::Res ); ); if_standard!( - assert_eq!(txs.len(), 4, "Expected at 4 transactions in block"); // deposit + valid tx + builder tx + end of block proof + assert_eq!(txs.len(), 4, "Expected 4 transactions in block"); // deposit + valid tx + builder tx + end of block proof ); let last_3_txs = &txs[txs.len() - 3..]; // Check valid transaction @@ -148,6 +105,116 @@ async fn test_flashtestations_block_proofs(rbuilder: LocalInstance) -> eyre::Res Ok(()) } +#[rb_test(args = OpRbuilderArgs { + chain_block_time: 1000, + enable_revert_protection: true, + flashtestations: FlashtestationsArgs { + flashtestations_enabled: true, + registry_address: Some(FLASHTESTATION_REGISTRY_ADDRESS), + builder_policy_address: Some(BLOCK_BUILDER_POLICY_ADDRESS), + funding_key: Some(flashtestations_signer()), + debug: true, + enable_block_proofs: true, + ..Default::default() + }, + ..Default::default() +})] +async fn test_flashtestations_invalid_quote(rbuilder: LocalInstance) -> eyre::Result<()> { + let driver = rbuilder.driver().await?; + let provider = rbuilder.provider().await?; + setup_flashtestation_contracts(&driver, &provider, false, false).await?; + // verify not registered + let contract = FlashtestationRegistry::new(FLASHTESTATION_REGISTRY_ADDRESS, provider.clone()); + let result = contract + .getRegistrationStatus(TEE_DEBUG_ADDRESS) + .call() + .await?; + assert!( + !result.isValid, + "The tee key is registered for invalid quote" + ); + // check that only regular builder tx is in the block + let (tx_hash, block) = driver.build_new_block_with_valid_transaction().await?; + let txs = block.transactions.into_transactions_vec(); + + if_flashblocks!( + assert_eq!(txs.len(), 4, "Expected 4 transactions in block"); // deposit + valid tx + 2 builder tx + // Check builder tx + assert_eq!( + txs[1].to(), + Some(Address::ZERO), + "builder tx should send to zero address" + ); + ); + if_standard!( + assert_eq!(txs.len(), 3, "Expected 3 transactions in block"); // deposit + valid tx + builder tx + ); + let last_txs = &txs[txs.len() - 2..]; + // Check user transaction + assert_eq!( + last_txs[0].inner.tx_hash(), + tx_hash, + "tx hash for user transaction should match" + ); + // Check builder tx + assert_eq!( + last_txs[1].to(), + Some(Address::ZERO), + "builder tx should send to zero address" + ); + Ok(()) +} + +#[rb_test(args = OpRbuilderArgs { + chain_block_time: 1000, + enable_revert_protection: true, + flashtestations: FlashtestationsArgs { + flashtestations_enabled: true, + registry_address: Some(FLASHTESTATION_REGISTRY_ADDRESS), + builder_policy_address: Some(BLOCK_BUILDER_POLICY_ADDRESS), + funding_key: Some(flashtestations_signer()), + debug: true, + enable_block_proofs: true, + ..Default::default() + }, + ..Default::default() +})] +async fn test_flashtestations_unauthorized_workload(rbuilder: LocalInstance) -> eyre::Result<()> { + let driver = rbuilder.driver().await?; + let provider = rbuilder.provider().await?; + setup_flashtestation_contracts(&driver, &provider, true, false).await?; + // check that only the regular builder tx is in the block + let (tx_hash, block) = driver.build_new_block_with_valid_transaction().await?; + let txs = block.transactions.into_transactions_vec(); + + if_flashblocks!( + assert_eq!(txs.len(), 4, "Expected 4 transactions in block"); // deposit + valid tx + 2 builder tx + // Check builder tx + assert_eq!( + txs[1].to(), + Some(Address::ZERO), + "builder tx should send to zero address" + ); + ); + if_standard!( + assert_eq!(txs.len(), 3, "Expected 3 transactions in block"); // deposit + valid tx + builder tx + ); + let last_txs = &txs[txs.len() - 2..]; + // Check user transaction + assert_eq!( + last_txs[0].inner.tx_hash(), + tx_hash, + "tx hash for user transaction should match" + ); + // Check builder tx + assert_eq!( + last_txs[1].to(), + Some(Address::ZERO), + "builder tx should send to zero address" + ); + Ok(()) +} + #[rb_test(flashblocks, args = OpRbuilderArgs { chain_block_time: 1000, enable_revert_protection: true, @@ -170,7 +237,7 @@ async fn test_flashtestations_with_number_contract(rbuilder: LocalInstance) -> e let driver = rbuilder.driver().await?; let provider = rbuilder.provider().await?; setup_flashblock_number_contract(&driver, &provider, true).await?; - setup_flashtestation_contracts(&driver, &provider, true).await?; + setup_flashtestation_contracts(&driver, &provider, true, true).await?; let tx = driver .create_transaction() .random_valid_transfer() @@ -178,9 +245,9 @@ async fn test_flashtestations_with_number_contract(rbuilder: LocalInstance) -> e .send() .await?; let block = driver.build_new_block_with_current_timestamp(None).await?; - // 1 deposit tx, 1 fallback builder tx, 4 flashblocks number tx, valid tx, funding tx, registration tx, block proof + // 1 deposit tx, 1 fallback builder tx, 4 flashblocks number tx, valid tx, block proof let txs = block.transactions.into_transactions_vec(); - assert_eq!(txs.len(), 10, "Expected at 10 transactions in block"); + assert_eq!(txs.len(), 8, "Expected 8 transactions in block"); // Check builder tx assert_eq!( txs[1].to(), @@ -192,7 +259,8 @@ async fn test_flashtestations_with_number_contract(rbuilder: LocalInstance) -> e assert_eq!( txs[i].to(), Some(FLASHBLOCKS_NUMBER_ADDRESS), - "builder tx should send to flashblocks number contract" + "builder tx should send to flashblocks number contract at index {}", + i ); } // check regular tx @@ -201,24 +269,138 @@ async fn test_flashtestations_with_number_contract(rbuilder: LocalInstance) -> e *tx.tx_hash(), "bundle tx was not in block" ); - // check funding, registration and block proof tx + // check block proof tx assert_eq!( txs[7].to(), - Some(TEE_DEBUG_ADDRESS), - "funding tx should send to tee address" + Some(BLOCK_BUILDER_POLICY_ADDRESS), + "block proof tx should call block policy address" + ); + // Verify flashblock number incremented correctly + let contract = FlashblocksNumber::new(FLASHBLOCKS_NUMBER_ADDRESS, provider.clone()); + let current_number = contract.getFlashblockNumber().call().await?; + assert!( + current_number.gt(&U256::from(8)), // contract deployments incremented the number but we built at least 2 full blocks + "Flashblock number not incremented" + ); + Ok(()) +} + +#[rb_test(args = OpRbuilderArgs { + chain_block_time: 1000, + enable_revert_protection: true, + flashtestations: FlashtestationsArgs { + flashtestations_enabled: true, + registry_address: Some(FLASHTESTATION_REGISTRY_ADDRESS), + builder_policy_address: Some(BLOCK_BUILDER_POLICY_ADDRESS), + funding_key: Some(flashtestations_signer()), + debug: true, + flashtestations_use_permit: true, + ..Default::default() + }, + ..Default::default() +})] +async fn test_flashtestations_permit_registration(rbuilder: LocalInstance) -> eyre::Result<()> { + let driver = rbuilder.driver().await?; + let provider = rbuilder.provider().await?; + setup_flashtestation_contracts(&driver, &provider, true, true).await?; + // check builder does not try to register again + let block = driver.build_new_block_with_current_timestamp(None).await?; + let num_txs = block.transactions.len(); + if_flashblocks!( + assert!(num_txs == 3, "Expected 3 transactions in block"); // deposit + 2 builder tx + ); + if_standard!( + assert!(num_txs == 2, "Expected 2 transactions in block"); // deposit + builder tx ); + // check that the tee signer did not send any transactions + let balance = provider.get_balance(TEE_DEBUG_ADDRESS).await?; + assert!(balance.is_zero()); + let nonce = provider.get_transaction_count(TEE_DEBUG_ADDRESS).await?; + assert_eq!(nonce, 0); + Ok(()) +} + +#[rb_test(args = OpRbuilderArgs { + chain_block_time: 1000, + enable_revert_protection: true, + flashtestations: FlashtestationsArgs { + flashtestations_enabled: true, + registry_address: Some(FLASHTESTATION_REGISTRY_ADDRESS), + builder_policy_address: Some(BLOCK_BUILDER_POLICY_ADDRESS), + funding_key: Some(flashtestations_signer()), + debug: true, + enable_block_proofs: true, + flashtestations_use_permit: true, + ..Default::default() + }, + ..Default::default() +})] +async fn test_flashtestations_permit_block_proof(rbuilder: LocalInstance) -> eyre::Result<()> { + let driver = rbuilder.driver().await?; + let provider = rbuilder.provider().await?; + setup_flashtestation_contracts(&driver, &provider, true, true).await?; + // check builder does not try to register again + let block = driver.build_new_block_with_current_timestamp(None).await?; + let num_txs = block.transactions.len(); + if_flashblocks!( + assert!(num_txs == 4, "Expected 4 transactions in block"); // deposit + 2 builder tx + 1 block proof + ); + if_standard!( + assert!(num_txs == 3, "Expected 3 transactions in block"); // deposit + 2 builder tx + ); + let last_2_txs = &block.transactions.into_transactions_vec()[num_txs - 2..]; + // Check builder tx assert_eq!( - txs[8].to(), - Some(FLASHTESTATION_REGISTRY_ADDRESS), - "registration tx should call registry" + last_2_txs[0].to(), + Some(Address::ZERO), + "builder tx should send to zero address" ); + // check builder proof assert_eq!( - txs[9].to(), + last_2_txs[1].to(), Some(BLOCK_BUILDER_POLICY_ADDRESS), - "block proof tx should call block policy address" + "builder tx should send to flashtestations builder policy address" + ); + assert_eq!( + last_2_txs[1].from(), + builder_signer().address, + "block proof tx should come from builder address" ); + // check that the tee signer did not send any transactions + let balance = provider.get_balance(TEE_DEBUG_ADDRESS).await?; + assert!(balance.is_zero()); + let nonce = provider.get_transaction_count(TEE_DEBUG_ADDRESS).await?; + assert_eq!(nonce, 0); + + Ok(()) +} - // add a user transaction to ensure the flashblock number builder tx is top of block +#[rb_test(flashblocks, args = OpRbuilderArgs { + chain_block_time: 1000, + enable_revert_protection: true, + flashblocks: FlashblocksArgs { + flashblocks_number_contract_address: Some(FLASHBLOCKS_NUMBER_ADDRESS), + ..Default::default() + }, + flashtestations: FlashtestationsArgs { + flashtestations_enabled: true, + registry_address: Some(FLASHTESTATION_REGISTRY_ADDRESS), + builder_policy_address: Some(BLOCK_BUILDER_POLICY_ADDRESS), + funding_key: Some(flashtestations_signer()), + debug: true, + flashtestations_use_permit: true, + enable_block_proofs: true, + ..Default::default() + }, + ..Default::default() +})] +async fn test_flashtestations_permit_with_flashblocks_number_contract( + rbuilder: LocalInstance, +) -> eyre::Result<()> { + let driver = rbuilder.driver().await?; + let provider = rbuilder.provider().await?; + setup_flashtestation_contracts(&driver, &provider, true, true).await?; + setup_flashblock_number_contract(&driver, &provider, true).await?; let tx = driver .create_transaction() .random_valid_transfer() @@ -226,44 +408,47 @@ async fn test_flashtestations_with_number_contract(rbuilder: LocalInstance) -> e .send() .await?; let block = driver.build_new_block_with_current_timestamp(None).await?; - // check the flashblocks number tx and block proof is in the block + // check the builder tx, funding tx and registration tx is in the block + let num_txs = block.transactions.len(); let txs = block.transactions.into_transactions_vec(); - assert_eq!(txs.len(), 8, "Expected at 5 transactions in block"); + // // 1 deposit tx, 1 regular builder tx, 4 flashblocks number tx, 1 user tx, 1 block proof tx + assert_eq!(num_txs, 8, "Expected 8 transactions in block"); // Check builder tx assert_eq!( txs[1].to(), Some(Address::ZERO), - "fallback builder tx should send to zero address" + "builder tx should send to zero address" ); // flashblocks number contract for i in 2..6 { assert_eq!( txs[i].to(), Some(FLASHBLOCKS_NUMBER_ADDRESS), - "builder tx should send to flashblocks number contract" + "builder tx should send to flashblocks number contract at index {}", + i ); } // user tx assert_eq!( txs[6].tx_hash(), *tx.tx_hash(), - "bundle tx was not in block" + "user tx should be in correct position in block" ); - // block proof assert_eq!( txs[7].to(), Some(BLOCK_BUILDER_POLICY_ADDRESS), - "block proof tx should call block policy address" + "builder tx should send verify block builder proof tx" ); - - let contract = FlashtestationRegistry::new(FLASHTESTATION_REGISTRY_ADDRESS, provider.clone()); - let result = contract.getRegistration(TEE_DEBUG_ADDRESS).call().await?; - assert!(result._1.isValid, "The tee key is not registered"); + // check that the tee signer did not send any transactions + let balance = provider.get_balance(TEE_DEBUG_ADDRESS).await?; + assert!(balance.is_zero()); + let nonce = provider.get_transaction_count(TEE_DEBUG_ADDRESS).await?; + assert_eq!(nonce, 0); // Verify flashblock number incremented correctly let contract = FlashblocksNumber::new(FLASHBLOCKS_NUMBER_ADDRESS, provider.clone()); let current_number = contract.getFlashblockNumber().call().await?; assert!( - current_number.gt(&U256::from(8)), // contract deployments incremented the number but we built at least 2 full blocks + current_number.gt(&U256::from(4)), // contract deployments incremented the number but we built at least 1 full block "Flashblock number not incremented" ); Ok(()) @@ -272,6 +457,7 @@ async fn test_flashtestations_with_number_contract(rbuilder: LocalInstance) -> e async fn setup_flashtestation_contracts( driver: &ChainDriver, provider: &RootProvider, + add_quote: bool, authorize_workload: bool, ) -> eyre::Result<()> { // deploy the mock contract and register a mock quote @@ -282,15 +468,6 @@ async fn setup_flashtestation_contracts( .send() .await?; - // Add test quote - let mock_quote_tx = driver - .create_transaction() - .add_mock_quote() - .with_to(MOCK_DCAP_ADDRESS) - .with_bundle(BundleOpts::default()) - .send() - .await?; - // deploy the flashtestations registry contract let flashtestations_registry_tx = driver .create_transaction() @@ -328,6 +505,30 @@ async fn setup_flashtestation_contracts( // include the deployment and initialization in a block driver.build_new_block_with_current_timestamp(None).await?; + if add_quote { + // Add test quote + let mock_quote_tx = driver + .create_transaction() + .add_mock_quote() + .with_to(MOCK_DCAP_ADDRESS) + .with_bundle(BundleOpts::default()) + .send() + .await?; + driver.build_new_block_with_current_timestamp(None).await?; + provider + .get_transaction_receipt(*mock_quote_tx.tx_hash()) + .await? + .expect("add mock quote not mined"); + // verify registered + let registry_contract = + FlashtestationRegistry::new(FLASHTESTATION_REGISTRY_ADDRESS, provider.clone()); + let registration = registry_contract + .getRegistration(TEE_DEBUG_ADDRESS) + .call() + .await?; + assert!(registration._0, "The tee key is not registered"); + } + if authorize_workload { // add the workload id to the block builder policy let add_workload = driver @@ -342,6 +543,14 @@ async fn setup_flashtestation_contracts( .get_transaction_receipt(*add_workload.tx_hash()) .await? .expect("add workload to builder policy tx not mined"); + // verify workload id added + let policy_contract = + BlockBuilderPolicy::new(BLOCK_BUILDER_POLICY_ADDRESS, provider.clone()); + let is_allowed = policy_contract + .isAllowedPolicy(TEE_DEBUG_ADDRESS) + .call() + .await?; + assert!(is_allowed.allowed, "The policy is not allowed") } // Verify mock dcap contract deployment @@ -357,11 +566,6 @@ async fn setup_flashtestation_contracts( mock_dcap_address, MOCK_DCAP_ADDRESS, "mock dcap contract address mismatch" ); - // verify mock quote added - provider - .get_transaction_receipt(*mock_quote_tx.tx_hash()) - .await? - .expect("add mock quote not mined"); // verify flashtestations registry contract deployment let receipt = provider .get_transaction_receipt(*flashtestations_registry_tx.tx_hash()) diff --git a/crates/op-rbuilder/src/tests/mod.rs b/crates/op-rbuilder/src/tests/mod.rs index cb5646f84..17be8d09e 100644 --- a/crates/op-rbuilder/src/tests/mod.rs +++ b/crates/op-rbuilder/src/tests/mod.rs @@ -35,7 +35,7 @@ const MOCK_DCAP_ADDRESS: alloy_primitives::Address = alloy_primitives::address!("700b6a60ce7eaaea56f065753d8dcb9653dbad35"); #[cfg(test)] const FLASHTESTATION_REGISTRY_ADDRESS: alloy_primitives::Address = - alloy_primitives::address!("b19b36b1456e65e3a6d514d3f715f204bd59f431"); + alloy_primitives::address!("a15bb66138824a1c7167f5e85b957d04dd34e468"); #[cfg(test)] const BLOCK_BUILDER_POLICY_ADDRESS: alloy_primitives::Address = - alloy_primitives::address!("e1aa25618fa0c7a1cfdab5d6b456af611873b629"); + alloy_primitives::address!("8ce361602b935680e8dec218b820ff5056beb7af"); From b601bcda0e0527a5be0007b4ed138ceae0de863a Mon Sep 17 00:00:00 2001 From: shana Date: Thu, 23 Oct 2025 10:11:24 -0700 Subject: [PATCH 08/19] Remove non permit flashtestation calls (#302) --- .../src/builders/flashblocks/service.rs | 2 +- .../src/builders/standard/service.rs | 2 +- .../op-rbuilder/src/flashtestations/args.rs | 29 +-- .../src/flashtestations/builder_tx.rs | 183 +----------------- .../src/flashtestations/service.rs | 52 +---- .../src/flashtestations/tx_manager.rs | 153 +++++++-------- .../op-rbuilder/src/tests/flashtestations.rs | 98 +--------- 7 files changed, 93 insertions(+), 426 deletions(-) diff --git a/crates/op-rbuilder/src/builders/flashblocks/service.rs b/crates/op-rbuilder/src/builders/flashblocks/service.rs index 584252dfd..fe23fdbfc 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/service.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/service.rs @@ -92,7 +92,7 @@ where let flashtestations_builder_tx = if let Some(builder_key) = signer && self.0.flashtestations_config.flashtestations_enabled { - match bootstrap_flashtestations(self.0.flashtestations_config.clone(), builder_key, ctx) + match bootstrap_flashtestations(self.0.flashtestations_config.clone(), builder_key) .await { Ok(builder_tx) => Some(builder_tx), diff --git a/crates/op-rbuilder/src/builders/standard/service.rs b/crates/op-rbuilder/src/builders/standard/service.rs index faf252b15..39484e861 100644 --- a/crates/op-rbuilder/src/builders/standard/service.rs +++ b/crates/op-rbuilder/src/builders/standard/service.rs @@ -75,7 +75,7 @@ where let flashtestations_builder_tx = if let Some(builder_key) = signer && self.0.flashtestations_config.flashtestations_enabled { - match bootstrap_flashtestations(self.0.flashtestations_config.clone(), builder_key, ctx) + match bootstrap_flashtestations(self.0.flashtestations_config.clone(), builder_key) .await { Ok(builder_tx) => Some(builder_tx), diff --git a/crates/op-rbuilder/src/flashtestations/args.rs b/crates/op-rbuilder/src/flashtestations/args.rs index fa3601bda..7856bb012 100644 --- a/crates/op-rbuilder/src/flashtestations/args.rs +++ b/crates/op-rbuilder/src/flashtestations/args.rs @@ -1,8 +1,8 @@ -use alloy_primitives::{Address, U256, utils::parse_ether}; +use alloy_primitives::Address; use clap::Parser; use reth_optimism_cli::commands::Commands; -use crate::{args::Cli, tx_signer::Signer}; +use crate::args::Cli; /// Parameters for Flashtestations configuration /// The names in the struct are prefixed with `flashtestations` @@ -52,23 +52,6 @@ pub struct FlashtestationsArgs { #[arg(long = "flashtestations.rpc-url", env = "FLASHTESTATIONS_RPC_URL")] pub rpc_url: Option, - /// Funding key for the TEE key - #[arg( - long = "flashtestations.funding-key", - env = "FLASHTESTATIONS_FUNDING_KEY", - required_if_eq("flashtestations_enabled", "true") - )] - pub funding_key: Option, - - /// Funding amount for the generated signer - #[arg( - long = "flashtestations.funding-amount", - env = "FLASHTESTATIONS_FUNDING_AMOUNT", - default_value = "1", - value_parser = parse_ether - )] - pub funding_amount: U256, - /// Enable end of block TEE proof #[arg( long = "flashtestations.enable-block-proofs", @@ -100,14 +83,6 @@ pub struct FlashtestationsArgs { default_value = "1" )] pub builder_proof_version: u8, - - /// Use permit for the flashtestation builder tx - #[arg( - long = "flashtestations.use-permit", - env = "FLASHTESTATIONS_USE_PERMIT", - default_value = "false" - )] - pub flashtestations_use_permit: bool, } impl Default for FlashtestationsArgs { diff --git a/crates/op-rbuilder/src/flashtestations/builder_tx.rs b/crates/op-rbuilder/src/flashtestations/builder_tx.rs index 9e7f3086e..005dcab58 100644 --- a/crates/op-rbuilder/src/flashtestations/builder_tx.rs +++ b/crates/op-rbuilder/src/flashtestations/builder_tx.rs @@ -1,27 +1,23 @@ -use alloy_consensus::TxEip1559; use alloy_eips::Encodable2718; use alloy_evm::Database; use alloy_op_evm::OpEvm; -use alloy_primitives::{Address, B256, Bytes, Signature, TxKind, U256, keccak256}; +use alloy_primitives::{Address, B256, Bytes, Signature, U256, keccak256}; use alloy_rpc_types_eth::TransactionInput; use alloy_sol_types::{SolCall, SolEvent, SolValue}; use core::fmt::Debug; -use op_alloy_consensus::OpTypedTransaction; use op_alloy_rpc_types::OpTransactionRequest; -use reth_evm::{ConfigureEvm, Evm, EvmError, precompiles::PrecompilesMap}; +use reth_evm::{ConfigureEvm, Evm, precompiles::PrecompilesMap}; use reth_optimism_primitives::OpTransactionSigned; use reth_provider::StateProvider; use reth_revm::{State, database::StateProviderDatabase}; -use revm::{ - DatabaseCommit, DatabaseRef, context::result::ResultAndState, inspector::NoOpInspector, -}; +use revm::{DatabaseCommit, DatabaseRef, inspector::NoOpInspector}; use std::sync::{Arc, atomic::AtomicBool}; use tracing::{debug, info, warn}; use crate::{ builders::{ BuilderTransactionCtx, BuilderTransactionError, BuilderTransactions, OpPayloadBuilderCtx, - SimulationSuccessResult, get_balance, get_nonce, + SimulationSuccessResult, get_nonce, }, flashtestations::{ BlockData, @@ -37,14 +33,11 @@ pub struct FlashtestationsBuilderTxArgs { pub attestation: Vec, pub extra_registration_data: Bytes, pub tee_service_signer: Signer, - pub funding_key: Signer, - pub funding_amount: U256, pub registry_address: Address, pub builder_policy_address: Address, pub builder_proof_version: u8, pub enable_block_proofs: bool, pub registered: bool, - pub use_permit: bool, pub builder_key: Signer, } @@ -60,10 +53,6 @@ where extra_registration_data: Bytes, // TEE service generated key tee_service_signer: Signer, - // Funding key for the TEE signer - funding_key: Signer, - // Funding amount for the TEE signer - funding_amount: U256, // Registry address for the attestation registry_address: Address, // Builder policy address for the block builder proof @@ -74,8 +63,6 @@ where registered: Arc, // Whether block proofs are enabled enable_block_proofs: bool, - // Whether to use permit for the flashtestation builder tx - use_permit: bool, // Builder key for the flashtestation permit tx builder_signer: Signer, // Extra context and data @@ -92,14 +79,11 @@ where attestation: args.attestation, extra_registration_data: args.extra_registration_data, tee_service_signer: args.tee_service_signer, - funding_key: args.funding_key, - funding_amount: args.funding_amount, registry_address: args.registry_address, builder_policy_address: args.builder_policy_address, builder_proof_version: args.builder_proof_version, registered: Arc::new(AtomicBool::new(args.registered)), enable_block_proofs: args.enable_block_proofs, - use_permit: args.use_permit, builder_signer: args.builder_key, _marker: std::marker::PhantomData, } @@ -137,136 +121,6 @@ where keccak256(&encoded) } - // TODO: deprecate in favour of permit calls - fn fund_tee_service_tx( - &self, - ctx: &OpPayloadBuilderCtx, - evm: &mut OpEvm<&mut State, NoOpInspector, PrecompilesMap>, - ) -> Result, BuilderTransactionError> { - let balance = get_balance(evm.db(), self.tee_service_signer.address)?; - if balance.is_zero() { - let funding_nonce = get_nonce(evm.db(), self.funding_key.address)?; - let tx = OpTypedTransaction::Eip1559(TxEip1559 { - chain_id: ctx.chain_id(), - nonce: funding_nonce, - gas_limit: 21000, - max_fee_per_gas: ctx.base_fee().into(), - to: TxKind::Call(self.tee_service_signer.address), - value: self.funding_amount, - ..Default::default() - }); - let funding_tx = self.funding_key.sign_tx(tx)?; - let da_size = - op_alloy_flz::tx_estimated_size_fjord_bytes(funding_tx.encoded_2718().as_slice()); - let ResultAndState { state, .. } = match evm.transact(&funding_tx) { - Ok(res) => res, - Err(err) => { - if err.is_invalid_tx_err() { - return Err(BuilderTransactionError::InvalidTransactionError(Box::new( - err, - ))); - } else { - return Err(BuilderTransactionError::EvmExecutionError(Box::new(err))); - } - } - }; - info!(target: "flashtestations", block_number = ctx.block_number(), tx_hash = ?funding_tx.tx_hash(), "adding funding tx to builder txs"); - evm.db_mut().commit(state); - Ok(Some(BuilderTransactionCtx { - gas_used: 21000, - da_size, - signed_tx: funding_tx, - is_top_of_block: false, - })) - } else { - Ok(None) - } - } - - // TODO: deprecate in favour of permit calls - fn register_tee_service_tx( - &self, - ctx: &OpPayloadBuilderCtx, - evm: &mut OpEvm<&mut State, NoOpInspector, PrecompilesMap>, - ) -> Result { - let calldata = IFlashtestationRegistry::registerTEEServiceCall { - rawQuote: self.attestation.clone().into(), - extendedRegistrationData: self.extra_registration_data.clone(), - }; - let SimulationSuccessResult { - gas_used, - state_changes, - .. - } = self.flashtestation_call( - self.registry_address, - calldata.clone(), - vec![TEEServiceRegistered::SIGNATURE_HASH], - ctx, - evm, - )?; - let signed_tx = self.sign_tx( - self.registry_address, - self.tee_service_signer, - gas_used, - calldata.abi_encode().into(), - ctx, - evm.db(), - )?; - let da_size = - op_alloy_flz::tx_estimated_size_fjord_bytes(signed_tx.encoded_2718().as_slice()); - // commit the register transaction state so the block proof transaction can succeed - evm.db_mut().commit(state_changes); - Ok(BuilderTransactionCtx { - gas_used, - da_size, - signed_tx, - is_top_of_block: false, - }) - } - - // TODO: remove in favour of permit calls - fn verify_block_proof_tx( - &self, - transactions: Vec, - ctx: &OpPayloadBuilderCtx, - evm: &mut OpEvm, - ) -> Result { - let block_content_hash = Self::compute_block_content_hash( - &transactions, - ctx.parent_hash(), - ctx.block_number(), - ctx.timestamp(), - ); - - let calldata = IBlockBuilderPolicy::verifyBlockBuilderProofCall { - blockContentHash: block_content_hash, - version: self.builder_proof_version, - }; - let SimulationSuccessResult { gas_used, .. } = self.flashtestation_call( - self.builder_policy_address, - calldata.clone(), - vec![BlockBuilderProofVerified::SIGNATURE_HASH], - ctx, - evm, - )?; - let signed_tx = self.sign_tx( - self.builder_policy_address, - self.tee_service_signer, - gas_used, - calldata.abi_encode().into(), - ctx, - evm.db(), - )?; - let da_size = - op_alloy_flz::tx_estimated_size_fjord_bytes(signed_tx.encoded_2718().as_slice()); - Ok(BuilderTransactionCtx { - gas_used, - da_size, - signed_tx, - is_top_of_block: false, - }) - } - fn set_registered( &self, state_provider: impl StateProvider + Clone, @@ -534,35 +388,18 @@ where if !self.registered.load(std::sync::atomic::Ordering::SeqCst) { info!(target: "flashtestations", "tee service not registered yet, attempting to register"); - let register_tx = if self.use_permit { - self.signed_registration_permit_tx(ctx, &mut evm)? - } else { - builder_txs.extend(self.fund_tee_service_tx(ctx, &mut evm)?); - self.register_tee_service_tx(ctx, &mut evm)? - }; + let register_tx = self.signed_registration_permit_tx(ctx, &mut evm)?; builder_txs.push(register_tx); } // don't return on error for block proof as previous txs in builder_txs will not be returned if self.enable_block_proofs { - if self.use_permit { - debug!(target: "flashtestations", "adding permit verify block proof tx"); - match self.signed_block_proof_permit_tx(&info.executed_transactions, ctx, &mut evm) - { - Ok(block_proof_tx) => builder_txs.push(block_proof_tx), - Err(e) => { - warn!(target: "flashtestations", error = ?e, "failed to add permit block proof transaction") - } + debug!(target: "flashtestations", "adding permit verify block proof tx"); + match self.signed_block_proof_permit_tx(&info.executed_transactions, ctx, &mut evm) { + Ok(block_proof_tx) => builder_txs.push(block_proof_tx), + Err(e) => { + warn!(target: "flashtestations", error = ?e, "failed to add permit block proof transaction") } - } else { - // add verify block proof tx - match self.verify_block_proof_tx(info.executed_transactions.clone(), ctx, &mut evm) - { - Ok(block_proof_tx) => builder_txs.push(block_proof_tx), - Err(e) => { - warn!(target: "flashtestations", error = ?e, "failed to add block proof transaction") - } - }; } } Ok(builder_txs) diff --git a/crates/op-rbuilder/src/flashtestations/service.rs b/crates/op-rbuilder/src/flashtestations/service.rs index 747fd2abd..3bd5b8540 100644 --- a/crates/op-rbuilder/src/flashtestations/service.rs +++ b/crates/op-rbuilder/src/flashtestations/service.rs @@ -1,5 +1,4 @@ use alloy_primitives::{B256, Bytes, keccak256}; -use reth_node_builder::BuilderContext; use std::{ fs::{self, OpenOptions}, io::Write, @@ -15,18 +14,15 @@ use super::{ }; use crate::{ flashtestations::builder_tx::{FlashtestationsBuilderTx, FlashtestationsBuilderTxArgs}, - traits::NodeBounds, tx_signer::{Signer, generate_key_from_seed, generate_signer}, }; use std::fmt::Debug; -pub async fn bootstrap_flashtestations( +pub async fn bootstrap_flashtestations( args: FlashtestationsArgs, builder_key: Signer, - ctx: &BuilderContext, ) -> eyre::Result> where - Node: NodeBounds, ExtraCtx: Debug + Default, Extra: Debug + Default, { @@ -41,9 +37,6 @@ where tee_service_signer.address ); - let funding_key = args - .funding_key - .expect("funding key required when flashtestations enabled"); let registry_address = args .registry_address .expect("registry address required when flashtestations enabled"); @@ -81,70 +74,41 @@ where info!(target: "flashtestations", "requesting TDX attestation"); let attestation = attestation_provider.get_attestation(report_data).await?; - // TODO: support permit with an external rpc, skip this step if using permit signatures - // since the permit txs are signed by the builder key and will result in nonce issues - let (tx_manager, registered) = if let Some(rpc_url) = args.rpc_url - && !args.flashtestations_use_permit - { + // Use an external rpc when the builder is not the same as the builder actively building blocks onchain + let registered = if let Some(rpc_url) = args.rpc_url { let tx_manager = TxManager::new( tee_service_signer, - funding_key, + builder_key, rpc_url.clone(), registry_address, ); // Submit report onchain by registering the key of the tee service match tx_manager - .fund_and_register_tee_service( - attestation.clone(), - ext_data.clone(), - args.funding_amount, - ) + .register_tee_service(attestation.clone(), ext_data.clone()) .await { - Ok(_) => (Some(tx_manager), true), + Ok(_) => true, Err(e) => { warn!(error = %e, "Failed to register tee service via rpc"); - (Some(tx_manager), false) + false } } } else { - (None, false) + false }; let flashtestations_builder_tx = FlashtestationsBuilderTx::new(FlashtestationsBuilderTxArgs { attestation, extra_registration_data: ext_data, tee_service_signer, - funding_key, - funding_amount: args.funding_amount, registry_address, builder_policy_address, builder_proof_version: args.builder_proof_version, enable_block_proofs: args.enable_block_proofs, registered, - use_permit: args.flashtestations_use_permit, builder_key, }); - ctx.task_executor() - .spawn_critical_with_graceful_shutdown_signal( - "flashtestations clean up task", - |shutdown| { - Box::pin(async move { - let graceful_guard = shutdown.await; - if let Some(tx_manager) = tx_manager { - if let Err(e) = tx_manager.clean_up().await { - warn!( - error = %e, - "Failed to complete clean up for flashtestations service", - ); - } - } - drop(graceful_guard) - }) - }, - ); - Ok(flashtestations_builder_tx) } diff --git a/crates/op-rbuilder/src/flashtestations/tx_manager.rs b/crates/op-rbuilder/src/flashtestations/tx_manager.rs index a49f50a36..d6412bf6d 100644 --- a/crates/op-rbuilder/src/flashtestations/tx_manager.rs +++ b/crates/op-rbuilder/src/flashtestations/tx_manager.rs @@ -1,6 +1,6 @@ use alloy_json_rpc::RpcError; use alloy_network::ReceiptResponse; -use alloy_primitives::{Address, Bytes, TxHash, TxKind, U256}; +use alloy_primitives::{Address, B256, Bytes, TxHash, TxKind, U256}; use alloy_rpc_types_eth::TransactionRequest; use alloy_sol_types::SolCall; use alloy_transport::{TransportError, TransportErrorKind, TransportResult}; @@ -14,7 +14,13 @@ use alloy_signer_local::PrivateKeySigner; use op_alloy_network::Optimism; use tracing::{debug, info, warn}; -use crate::{flashtestations::IFlashtestationRegistry, tx_signer::Signer}; +use crate::{ + flashtestations::{ + IERC20Permit::{self}, + IFlashtestationRegistry, + }, + tx_signer::Signer, +}; #[derive(Debug, thiserror::Error)] pub enum TxManagerError { @@ -28,12 +34,14 @@ pub enum TxManagerError { TxRpcError(RpcError), #[error("signer error: {0}")] SignerError(ecdsa::Error), + #[error("error signing message: {0}")] + SignatureError(secp256k1::Error), } #[derive(Debug, Clone)] pub struct TxManager { tee_service_signer: Signer, - funding_signer: Signer, + builder_signer: Signer, rpc_url: String, registry_address: Address, } @@ -41,78 +49,27 @@ pub struct TxManager { impl TxManager { pub fn new( tee_service_signer: Signer, - funding_signer: Signer, + builder_signer: Signer, rpc_url: String, registry_address: Address, ) -> Self { Self { tee_service_signer, - funding_signer, + builder_signer, rpc_url, registry_address, } } - pub async fn fund_address( - &self, - from: Signer, - to: Address, - amount: U256, - ) -> Result<(), TxManagerError> { - let funding_wallet = PrivateKeySigner::from_bytes(&from.secret.secret_bytes().into()) - .map_err(TxManagerError::SignerError)?; - let provider = ProviderBuilder::new() - .disable_recommended_fillers() - .fetch_chain_id() - .with_gas_estimation() - .with_cached_nonce_management() - .wallet(funding_wallet) - .network::() - .connect(self.rpc_url.as_str()) - .await?; - - // Create funding transaction - let funding_tx = TransactionRequest { - from: Some(from.address), - to: Some(TxKind::Call(to)), - value: Some(amount), - gas: Some(21_000), // Standard gas for ETH transfer - ..Default::default() - }; - - // Send funding transaction - match Self::process_pending_tx(provider.send_transaction(funding_tx.into()).await).await { - Ok(tx_hash) => { - info!(target: "flashtestations", tx_hash = %tx_hash, "funding transaction confirmed successfully"); - Ok(()) - } - Err(e) => { - warn!(target: "flashtestations", error = %e, "funding transaction failed"); - Err(e) - } - } - } - - pub async fn fund_and_register_tee_service( + pub async fn register_tee_service( &self, attestation: Vec, extra_registration_data: Bytes, - funding_amount: U256, ) -> Result<(), TxManagerError> { info!(target: "flashtestations", "funding TEE address at {}", self.tee_service_signer.address); - self.fund_address( - self.funding_signer, - self.tee_service_signer.address, - funding_amount, - ) - .await - .unwrap_or_else(|e| { - warn!(target: "flashtestations", error = %e, "Failed to fund TEE address, attempting to register without funding"); - }); - let quote_bytes = Bytes::from(attestation); let wallet = - PrivateKeySigner::from_bytes(&self.tee_service_signer.secret.secret_bytes().into()) + PrivateKeySigner::from_bytes(&self.builder_signer.secret.secret_bytes().into()) .map_err(TxManagerError::SignerError)?; let provider = ProviderBuilder::new() .disable_recommended_fillers() @@ -126,9 +83,63 @@ impl TxManager { info!(target: "flashtestations", "submitting quote to registry at {}", self.registry_address); - let calldata = IFlashtestationRegistry::registerTEEServiceCall { + // Get permit nonce + let nonce_call = IERC20Permit::noncesCall { + owner: self.tee_service_signer.address, + }; + let nonce_tx = TransactionRequest { + to: Some(TxKind::Call(self.registry_address)), + input: nonce_call.abi_encode().into(), + ..Default::default() + }; + let nonce = U256::from_be_slice(provider.call(nonce_tx.into()).await?.as_ref()); + + // Set deadline 1 hour from now + let deadline = U256::from( + std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_secs() + + 3600, + ); + + // Call computeStructHash to get the struct hash + let struct_hash_call = IFlashtestationRegistry::computeStructHashCall { + rawQuote: quote_bytes.clone(), + extendedRegistrationData: extra_registration_data.clone(), + nonce, + deadline, + }; + let struct_hash_tx = TransactionRequest { + to: Some(TxKind::Call(self.registry_address)), + input: struct_hash_call.abi_encode().into(), + ..Default::default() + }; + let struct_hash = B256::from_slice(provider.call(struct_hash_tx.into()).await?.as_ref()); + + // Get typed data hash + let typed_hash_call = IFlashtestationRegistry::hashTypedDataV4Call { + structHash: struct_hash, + }; + let typed_hash_tx = TransactionRequest { + to: Some(TxKind::Call(self.registry_address)), + input: typed_hash_call.abi_encode().into(), + ..Default::default() + }; + let message_hash = B256::from_slice(provider.call(typed_hash_tx.into()).await?.as_ref()); + + // Sign the hash + let signature = self + .tee_service_signer + .sign_message(message_hash) + .map_err(TxManagerError::SignatureError)?; + + let calldata = IFlashtestationRegistry::permitRegisterTEEServiceCall { rawQuote: quote_bytes, extendedRegistrationData: extra_registration_data, + nonce, + deadline, + signature: signature.as_bytes().into(), } .abi_encode(); let tx = TransactionRequest { @@ -149,30 +160,6 @@ impl TxManager { } } - pub async fn clean_up(&self) -> Result<(), TxManagerError> { - info!(target: "flashtestations", "sending funds back from TEE generated key to funding address"); - let provider = ProviderBuilder::new() - .disable_recommended_fillers() - .network::() - .connect(self.rpc_url.as_str()) - .await?; - let balance = provider - .get_balance(self.tee_service_signer.address) - .await?; - let gas_estimate = 21_000u128; - let gas_price = provider.get_gas_price().await?; - let gas_cost = U256::from(gas_estimate * gas_price); - if balance.gt(&gas_cost) { - self.fund_address( - self.tee_service_signer, - self.funding_signer.address, - balance.saturating_sub(gas_cost), - ) - .await?; - } - Ok(()) - } - /// Processes a pending transaction and logs whether the transaction succeeded or not async fn process_pending_tx( pending_tx_result: TransportResult>, diff --git a/crates/op-rbuilder/src/tests/flashtestations.rs b/crates/op-rbuilder/src/tests/flashtestations.rs index 544eb5d89..c0cc02508 100644 --- a/crates/op-rbuilder/src/tests/flashtestations.rs +++ b/crates/op-rbuilder/src/tests/flashtestations.rs @@ -12,11 +12,9 @@ use crate::{ BLOCK_BUILDER_POLICY_ADDRESS, BundleOpts, ChainDriver, ChainDriverExt, FLASHBLOCKS_NUMBER_ADDRESS, FLASHTESTATION_REGISTRY_ADDRESS, LocalInstance, MOCK_DCAP_ADDRESS, TEE_DEBUG_ADDRESS, TransactionBuilderExt, - block_builder_policy::{BlockBuilderPolicy, IFlashtestationRegistry::RegisteredTEE}, - builder_signer, + block_builder_policy::BlockBuilderPolicy, builder_signer, flashblocks_number_contract::FlashblocksNumber, flashtestation_registry::FlashtestationRegistry, - flashtestations_signer, }, }; @@ -27,92 +25,6 @@ use crate::{ flashtestations_enabled: true, registry_address: Some(FLASHTESTATION_REGISTRY_ADDRESS), builder_policy_address: Some(BLOCK_BUILDER_POLICY_ADDRESS), - funding_key: Some(flashtestations_signer()), - debug: true, - ..Default::default() - }, - ..Default::default() -})] -async fn test_flashtestations_registrations(rbuilder: LocalInstance) -> eyre::Result<()> { - let driver = rbuilder.driver().await?; - let provider = rbuilder.provider().await?; - setup_flashtestation_contracts(&driver, &provider, true, true).await?; - // check builder does not try to register again - let block = driver.build_new_block_with_current_timestamp(None).await?; - let num_txs = block.transactions.len(); - if_flashblocks!( - assert!(num_txs == 3, "Expected 3 transactions in block"); // deposit + 2 builder tx - ); - if_standard!( - assert!(num_txs == 2, "Expected 2 transactions in block"); // deposit + builder tx - ); - - Ok(()) -} - -#[rb_test(args = OpRbuilderArgs { - chain_block_time: 1000, - enable_revert_protection: true, - flashtestations: FlashtestationsArgs { - flashtestations_enabled: true, - registry_address: Some(FLASHTESTATION_REGISTRY_ADDRESS), - builder_policy_address: Some(BLOCK_BUILDER_POLICY_ADDRESS), - funding_key: Some(flashtestations_signer()), - debug: true, - enable_block_proofs: true, - ..Default::default() - }, - ..Default::default() -})] -async fn test_flashtestations_block_proofs(rbuilder: LocalInstance) -> eyre::Result<()> { - let driver = rbuilder.driver().await?; - let provider = rbuilder.provider().await?; - setup_flashtestation_contracts(&driver, &provider, true, true).await?; - // check that only the builder tx and block proof is in the block - let (tx_hash, block) = driver.build_new_block_with_valid_transaction().await?; - let txs = block.transactions.into_transactions_vec(); - if_flashblocks!( - assert_eq!(txs.len(), 5, "Expected 5 transactions in block"); // deposit + valid tx + 2 builder tx + end of block proof - // Check builder tx - assert_eq!( - txs[1].to(), - Some(Address::ZERO), - "builder tx should send to zero address" - ); - ); - if_standard!( - assert_eq!(txs.len(), 4, "Expected 4 transactions in block"); // deposit + valid tx + builder tx + end of block proof - ); - let last_3_txs = &txs[txs.len() - 3..]; - // Check valid transaction - assert_eq!( - last_3_txs[0].inner.tx_hash(), - tx_hash, - "tx hash for valid transaction should match" - ); - // Check builder tx - assert_eq!( - last_3_txs[1].to(), - Some(Address::ZERO), - "builder tx should send to zero address" - ); - // Check builder proof - assert_eq!( - last_3_txs[2].to(), - Some(BLOCK_BUILDER_POLICY_ADDRESS), - "builder tx should send to zero address" - ); - Ok(()) -} - -#[rb_test(args = OpRbuilderArgs { - chain_block_time: 1000, - enable_revert_protection: true, - flashtestations: FlashtestationsArgs { - flashtestations_enabled: true, - registry_address: Some(FLASHTESTATION_REGISTRY_ADDRESS), - builder_policy_address: Some(BLOCK_BUILDER_POLICY_ADDRESS), - funding_key: Some(flashtestations_signer()), debug: true, enable_block_proofs: true, ..Default::default() @@ -172,7 +84,6 @@ async fn test_flashtestations_invalid_quote(rbuilder: LocalInstance) -> eyre::Re flashtestations_enabled: true, registry_address: Some(FLASHTESTATION_REGISTRY_ADDRESS), builder_policy_address: Some(BLOCK_BUILDER_POLICY_ADDRESS), - funding_key: Some(flashtestations_signer()), debug: true, enable_block_proofs: true, ..Default::default() @@ -226,7 +137,6 @@ async fn test_flashtestations_unauthorized_workload(rbuilder: LocalInstance) -> flashtestations_enabled: true, registry_address: Some(FLASHTESTATION_REGISTRY_ADDRESS), builder_policy_address: Some(BLOCK_BUILDER_POLICY_ADDRESS), - funding_key: Some(flashtestations_signer()), debug: true, enable_block_proofs: true, ..Default::default() @@ -292,9 +202,7 @@ async fn test_flashtestations_with_number_contract(rbuilder: LocalInstance) -> e flashtestations_enabled: true, registry_address: Some(FLASHTESTATION_REGISTRY_ADDRESS), builder_policy_address: Some(BLOCK_BUILDER_POLICY_ADDRESS), - funding_key: Some(flashtestations_signer()), debug: true, - flashtestations_use_permit: true, ..Default::default() }, ..Default::default() @@ -327,10 +235,8 @@ async fn test_flashtestations_permit_registration(rbuilder: LocalInstance) -> ey flashtestations_enabled: true, registry_address: Some(FLASHTESTATION_REGISTRY_ADDRESS), builder_policy_address: Some(BLOCK_BUILDER_POLICY_ADDRESS), - funding_key: Some(flashtestations_signer()), debug: true, enable_block_proofs: true, - flashtestations_use_permit: true, ..Default::default() }, ..Default::default() @@ -386,9 +292,7 @@ async fn test_flashtestations_permit_block_proof(rbuilder: LocalInstance) -> eyr flashtestations_enabled: true, registry_address: Some(FLASHTESTATION_REGISTRY_ADDRESS), builder_policy_address: Some(BLOCK_BUILDER_POLICY_ADDRESS), - funding_key: Some(flashtestations_signer()), debug: true, - flashtestations_use_permit: true, enable_block_proofs: true, ..Default::default() }, From 8f08b2ececf93c6b2236c282626cc2e99e20b796 Mon Sep 17 00:00:00 2001 From: noot <36753753+noot@users.noreply.github.com> Date: Mon, 27 Oct 2025 17:04:19 -0400 Subject: [PATCH 09/19] feat: implement p2p layer and broadcast flashblocks (#275) --- Cargo.lock | 3029 +++++++++++------ Cargo.toml | 5 +- crates/op-rbuilder/Cargo.toml | 8 +- crates/op-rbuilder/src/args/op.rs | 47 + crates/op-rbuilder/src/builders/builder_tx.rs | 4 +- crates/op-rbuilder/src/builders/context.rs | 4 +- .../src/builders/flashblocks/config.rs | 25 + .../src/builders/flashblocks/mod.rs | 2 + .../src/builders/flashblocks/p2p.rs | 60 + .../src/builders/flashblocks/payload.rs | 82 +- .../builders/flashblocks/payload_handler.rs | 64 + .../src/builders/flashblocks/service.rs | 84 +- .../src/builders/flashblocks/wspub.rs | 25 +- crates/op-rbuilder/src/builders/mod.rs | 2 + crates/op-rbuilder/src/metrics.rs | 14 +- crates/op-rbuilder/src/tests/flashblocks.rs | 5 + crates/p2p/Cargo.toml | 28 + crates/p2p/src/behaviour.rs | 106 + crates/p2p/src/lib.rs | 574 ++++ crates/p2p/src/outgoing.rs | 95 + 20 files changed, 3177 insertions(+), 1086 deletions(-) create mode 100644 crates/op-rbuilder/src/builders/flashblocks/p2p.rs create mode 100644 crates/op-rbuilder/src/builders/flashblocks/payload_handler.rs create mode 100644 crates/p2p/Cargo.toml create mode 100644 crates/p2p/src/behaviour.rs create mode 100644 crates/p2p/src/lib.rs create mode 100644 crates/p2p/src/outgoing.rs diff --git a/Cargo.lock b/Cargo.lock index 8deee3cb7..a48285d7b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,15 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] - [[package]] name = "adler2" version = "2.0.1" @@ -59,7 +50,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", "version_check", "zerocopy", @@ -97,9 +88,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy" -version = "1.0.25" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "992a9d0732a0e0e1a34d61a6553ad28f761c9049bb46572d3916f172348d2cb7" +checksum = "b17c19591d57add4f0c47922877a48aae1f47074e3433436545f8948353b3bbb" dependencies = [ "alloy-consensus", "alloy-contract", @@ -120,11 +111,11 @@ dependencies = [ [[package]] name = "alloy-chains" -version = "0.2.7" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a379c0d821498c996ceb9e7519fc2dab8286c35a203c1fb95f80ecd66e07cf2f" +checksum = "bf01dd83a1ca5e4807d0ca0223c9615e211ce5db0a9fd1443c2778cacf89b546" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "num_enum", "serde", @@ -138,7 +129,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a0dd3ed764953a6b20458b2b7abbfdc93d20d14b38babe1a70fe631a443a9f1" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-serde", "alloy-trie", @@ -155,7 +146,7 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -166,7 +157,7 @@ checksum = "9556182afa73cddffa91e64a5aa9508d5e8c912b3a15f26998d2388a824d2c7b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-serde", "arbitrary", @@ -181,43 +172,43 @@ checksum = "b19d7092c96defc3d132ee0d8969ca1b79ef512b5eda5c66e3065266b253adf2" dependencies = [ "alloy-consensus", "alloy-dyn-abi", - "alloy-json-abi 1.3.1", + "alloy-json-abi 1.4.1", "alloy-network", "alloy-network-primitives", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-provider", "alloy-rpc-types-eth", - "alloy-sol-types 1.3.1", + "alloy-sol-types 1.4.1", "alloy-transport", "futures", "futures-util", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "alloy-core" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe6c56d58fbfa9f0f6299376e8ce33091fc6494239466814c3f54b55743cb09" +checksum = "5ca96214615ec8cf3fa2a54b32f486eb49100ca7fe7eb0b8c1137cd316e7250a" dependencies = [ "alloy-dyn-abi", - "alloy-json-abi 1.3.1", - "alloy-primitives 1.3.1", + "alloy-json-abi 1.4.1", + "alloy-primitives 1.4.1", "alloy-rlp", - "alloy-sol-types 1.3.1", + "alloy-sol-types 1.4.1", ] [[package]] name = "alloy-dyn-abi" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f56873f3cac7a2c63d8e98a4314b8311aa96adb1a0f82ae923eb2119809d2c" +checksum = "3fdff496dd4e98a81f4861e66f7eaf5f2488971848bb42d9c892f871730245c8" dependencies = [ - "alloy-json-abi 1.3.1", - "alloy-primitives 1.3.1", - "alloy-sol-type-parser 1.3.1", - "alloy-sol-types 1.3.1", + "alloy-json-abi 1.4.1", + "alloy-primitives 1.4.1", + "alloy-sol-type-parser 1.4.1", + "alloy-sol-types 1.4.1", "derive_more", "itoa", "serde", @@ -231,13 +222,13 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "741bdd7499908b3aa0b159bba11e71c8cddd009a2c2eb7a06e825f1ec87900a5" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "arbitrary", "crc", "rand 0.8.5", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -246,7 +237,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b82752a889170df67bbb36d42ca63c531eb16274f0d7299ae2a680facba17bd" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "arbitrary", "rand 0.8.5", @@ -259,14 +250,14 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d4769c6ffddca380b0070d71c8b7f30bed375543fe76bb2f74ec0acf4b7cd16" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "arbitrary", "k256", "rand 0.8.5", "serde", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -278,7 +269,7 @@ dependencies = [ "alloy-eip2124", "alloy-eip2930", "alloy-eip7702", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-serde", "arbitrary", @@ -291,27 +282,30 @@ dependencies = [ "serde", "serde_with", "sha2 0.10.9", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "alloy-evm" -version = "0.21.1" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e536feefca2ba96c75798ac75a31046e8adfcefecdb6653803361045cc65b9" +checksum = "06a5f67ee74999aa4fe576a83be1996bdf74a30fce3d248bf2007d6fc7dae8aa" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-hardforks", - "alloy-primitives 1.3.1", + "alloy-op-hardforks", + "alloy-primitives 1.4.1", + "alloy-rpc-types-engine", "alloy-rpc-types-eth", - "alloy-sol-types 1.3.1", + "alloy-sol-types 1.4.1", "auto_impl", "derive_more", "op-alloy-consensus", + "op-alloy-rpc-types-engine", "op-revm", "revm", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -321,7 +315,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a272533715aefc900f89d51db00c96e6fd4f517ea081a12fea482a352c8c815c" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-serde", "alloy-trie", "serde", @@ -336,7 +330,7 @@ checksum = "889eb3949b58368a09d4f16931c660275ef5fb08e5fbd4a96573b19c7085c41f" dependencies = [ "alloy-chains", "alloy-eip2124", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "auto_impl", "dyn-clone", "serde", @@ -344,24 +338,24 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6beff64ad0aa6ad1019a3db26fef565aefeb011736150ab73ed3366c3cfd1b" +checksum = "4584e3641181ff073e9d5bec5b3b8f78f9749d9fb108a1cfbc4399a4a139c72a" dependencies = [ - "alloy-primitives 0.8.25", - "alloy-sol-type-parser 0.8.25", + "alloy-primitives 0.8.26", + "alloy-sol-type-parser 0.8.26", "serde", "serde_json", ] [[package]] name = "alloy-json-abi" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "125a1c373261b252e53e04d6e92c37d881833afc1315fceab53fd46045695640" +checksum = "5513d5e6bd1cba6bdcf5373470f559f320c05c8c59493b6e98912fbe6733943f" dependencies = [ - "alloy-primitives 1.3.1", - "alloy-sol-type-parser 1.3.1", + "alloy-primitives 1.4.1", + "alloy-sol-type-parser 1.4.1", "serde", "serde_json", ] @@ -372,12 +366,12 @@ version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d91676d242c0ced99c0dd6d0096d7337babe9457cc43407d26aa6367fcf90553" dependencies = [ - "alloy-primitives 1.3.1", - "alloy-sol-types 1.3.1", + "alloy-primitives 1.4.1", + "alloy-sol-types 1.4.1", "http", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", ] @@ -392,19 +386,19 @@ dependencies = [ "alloy-eips", "alloy-json-rpc", "alloy-network-primitives", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-any", "alloy-rpc-types-eth", "alloy-serde", "alloy-signer", - "alloy-sol-types 1.3.1", + "alloy-sol-types 1.4.1", "async-trait", "auto_impl", "derive_more", "futures-utils-wasm", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -415,22 +409,22 @@ checksum = "223612259a080160ce839a4e5df0125ca403a1d5e7206cc911cea54af5d769aa" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-serde", "serde", ] [[package]] name = "alloy-op-evm" -version = "0.21.1" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f09c7785a3f2df462e4bb898e8b682b43de488d9d44bf2e5264e0bba44af21" +checksum = "17aaeb600740c181bf29c9f138f9b228d115ea74fa6d0f0343e1952f1a766968" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-evm", "alloy-op-hardforks", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "auto_impl", "op-alloy-consensus", "op-revm", @@ -445,24 +439,24 @@ checksum = "599c1d7dfbccb66603cb93fde00980d12848d32fe5e814f50562104a92df6487" dependencies = [ "alloy-chains", "alloy-hardforks", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "auto_impl", ] [[package]] name = "alloy-primitives" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c77490fe91a0ce933a1f219029521f20fc28c2c0ca95d53fa4da9c00b8d9d4e" +checksum = "777d58b30eb9a4db0e5f59bc30e8c2caef877fee7dc8734cf242a51a60f22e05" dependencies = [ "alloy-rlp", "bytes", "cfg-if", "const-hex", "derive_more", - "foldhash", + "foldhash 0.1.5", "hashbrown 0.15.5", - "indexmap 2.10.0", + "indexmap 2.11.4", "itoa", "k256", "keccak-asm", @@ -478,9 +472,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9485c56de23438127a731a6b4c87803d49faf1a7068dcd1d8768aca3a9edb9" +checksum = "355bf68a433e0fd7f7d33d5a9fc2583fde70bf5c530f63b80845f8da5505cf28" dependencies = [ "alloy-rlp", "arbitrary", @@ -488,16 +482,16 @@ dependencies = [ "cfg-if", "const-hex", "derive_more", - "foldhash", - "getrandom 0.3.3", - "hashbrown 0.15.5", - "indexmap 2.10.0", + "foldhash 0.2.0", + "getrandom 0.3.4", + "hashbrown 0.16.0", + "indexmap 2.11.4", "itoa", "k256", "keccak-asm", "paste", "proptest", - "proptest-derive", + "proptest-derive 0.6.0", "rand 0.9.2", "ruint", "rustc-hash 2.1.1", @@ -518,14 +512,14 @@ dependencies = [ "alloy-json-rpc", "alloy-network", "alloy-network-primitives", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-pubsub", "alloy-rpc-client", "alloy-rpc-types-engine", "alloy-rpc-types-eth", "alloy-rpc-types-txpool", "alloy-signer", - "alloy-sol-types 1.3.1", + "alloy-sol-types 1.4.1", "alloy-transport", "alloy-transport-http", "alloy-transport-ipc", @@ -543,7 +537,7 @@ dependencies = [ "reqwest", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", "url", @@ -557,7 +551,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eee7e3d343814ec0dfea69bd1820042a133a9d0b9ac5faf1e6eb133b43366315" dependencies = [ "alloy-json-rpc", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-transport", "auto_impl", "bimap", @@ -601,7 +595,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1154b12d470bef59951c62676e106f4ce5de73b987d86b9faa935acebb138ded" dependencies = [ "alloy-json-rpc", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-pubsub", "alloy-transport", "alloy-transport-http", @@ -626,7 +620,7 @@ version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47ab76bf97648a1c6ad8fb00f0d594618942b5a9e008afbfb5c8a8fca800d574" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "alloy-rpc-types-eth", "alloy-serde", @@ -640,7 +634,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af8ae38824376e855d73d4060462d86c32afe548af632597ccfd161bdd0fc628" dependencies = [ "alloy-genesis", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "serde", "serde_json", ] @@ -651,7 +645,7 @@ version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "456cfc2c1677260edbd7ce3eddb7de419cb46de0e9826c43401f42b0286a779a" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-eth", "alloy-serde", "serde", @@ -675,7 +669,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfa4edd92c3124ec19b9d572dc7923d070fe5c2efb677519214affd6156a4463" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "derive_more", "ethereum_ssz", @@ -683,7 +677,7 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", "tree_hash", "tree_hash_derive", ] @@ -694,7 +688,7 @@ version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a0ac29dd005c33e3f7e09087accc80843315303685c3f7a1b888002cd27785b" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "derive_more", "serde", "serde_with", @@ -708,7 +702,7 @@ checksum = "1d9d173854879bcf26c7d71c1c3911972a3314df526f4349ffe488e676af577d" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-serde", "derive_more", @@ -730,16 +724,16 @@ dependencies = [ "alloy-consensus-any", "alloy-eips", "alloy-network-primitives", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-serde", - "alloy-sol-types 1.3.1", + "alloy-sol-types 1.4.1", "arbitrary", "itertools 0.14.0", "serde", "serde_json", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -750,7 +744,7 @@ checksum = "d3820683ece7cdc31e44d87c88c0ff9b972a1a2fd1f2124cc72ce5c928e64f0d" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-eth", "alloy-serde", "serde", @@ -763,12 +757,12 @@ version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c331c8e48665607682e8a9549a2347c13674d4fbcbdc342e7032834eba2424f4" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-eth", "alloy-serde", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -777,7 +771,7 @@ version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e2f66afe1e76ca4485e593980056f061b2bdae2055486a062fca050ff111a52" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-eth", "alloy-serde", "serde", @@ -789,7 +783,7 @@ version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8468f1a7f9ee3bae73c24eead0239abea720dbf7779384b9c7e20d51bfb6b0" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "arbitrary", "serde", "serde_json", @@ -801,13 +795,13 @@ version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33387c90b0a5021f45a5a77c2ce6c49b8f6980e66a318181468fb24cea771670" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "async-trait", "auto_impl", "either", "elliptic-curve", "k256", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -818,22 +812,22 @@ checksum = "b55d9e795c85e36dcea08786d2e7ae9b73cb554b6bea6ac4c212def24e1b4d03" dependencies = [ "alloy-consensus", "alloy-network", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-signer", "async-trait", "k256", "rand 0.8.5", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "alloy-sol-macro" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10ae8e9a91d328ae954c22542415303919aabe976fe7a92eb06db1b68fd59f2" +checksum = "e68b32b6fa0d09bb74b4cefe35ccc8269d711c26629bc7cd98a47eeb12fe353f" dependencies = [ - "alloy-sol-macro-expander 0.8.25", - "alloy-sol-macro-input 0.8.25", + "alloy-sol-macro-expander 0.8.26", + "alloy-sol-macro-input 0.8.26", "proc-macro-error2", "proc-macro2", "quote", @@ -842,12 +836,12 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d20d867dcf42019d4779519a1ceb55eba8d7f3d0e4f0a89bcba82b8f9eb01e48" +checksum = "f3ce480400051b5217f19d6e9a82d9010cdde20f1ae9c00d53591e4a1afbb312" dependencies = [ - "alloy-sol-macro-expander 1.3.1", - "alloy-sol-macro-input 1.3.1", + "alloy-sol-macro-expander 1.4.1", + "alloy-sol-macro-input 1.4.1", "proc-macro-error2", "proc-macro2", "quote", @@ -856,46 +850,46 @@ dependencies = [ [[package]] name = "alloy-sol-macro-expander" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83ad5da86c127751bc607c174d6c9fe9b85ef0889a9ca0c641735d77d4f98f26" +checksum = "2afe6879ac373e58fd53581636f2cce843998ae0b058ebe1e4f649195e2bd23c" dependencies = [ - "alloy-sol-macro-input 0.8.25", + "alloy-sol-macro-input 0.8.26", "const-hex", "heck", - "indexmap 2.10.0", + "indexmap 2.11.4", "proc-macro-error2", "proc-macro2", "quote", "syn 2.0.106", - "syn-solidity 0.8.25", + "syn-solidity 0.8.26", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-expander" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b74e91b0b553c115d14bd0ed41898309356dc85d0e3d4b9014c4e7715e48c8ad" +checksum = "6d792e205ed3b72f795a8044c52877d2e6b6e9b1d13f431478121d8d4eaa9028" dependencies = [ - "alloy-json-abi 1.3.1", - "alloy-sol-macro-input 1.3.1", + "alloy-json-abi 1.4.1", + "alloy-sol-macro-input 1.4.1", "const-hex", "heck", - "indexmap 2.10.0", + "indexmap 2.11.4", "proc-macro-error2", "proc-macro2", "quote", "syn 2.0.106", - "syn-solidity 1.3.1", + "syn-solidity 1.4.1", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3d30f0d3f9ba3b7686f3ff1de9ee312647aac705604417a2f40c604f409a9e" +checksum = "c3ba01aee235a8c699d07e5be97ba215607564e71be72f433665329bec307d28" dependencies = [ "const-hex", "dunce", @@ -904,16 +898,16 @@ dependencies = [ "proc-macro2", "quote", "syn 2.0.106", - "syn-solidity 0.8.25", + "syn-solidity 0.8.26", ] [[package]] name = "alloy-sol-macro-input" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84194d31220803f5f62d0a00f583fd3a062b36382e2bea446f1af96727754565" +checksum = "0bd1247a8f90b465ef3f1207627547ec16940c35597875cdc09c49d58b19693c" dependencies = [ - "alloy-json-abi 1.3.1", + "alloy-json-abi 1.4.1", "const-hex", "dunce", "heck", @@ -922,14 +916,14 @@ dependencies = [ "quote", "serde_json", "syn 2.0.106", - "syn-solidity 1.3.1", + "syn-solidity 1.4.1", ] [[package]] name = "alloy-sol-type-parser" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d162f8524adfdfb0e4bd0505c734c985f3e2474eb022af32eef0d52a4f3935c" +checksum = "4c13fc168b97411e04465f03e632f31ef94cad1c7c8951bf799237fd7870d535" dependencies = [ "serde", "winnow", @@ -937,9 +931,9 @@ dependencies = [ [[package]] name = "alloy-sol-type-parser" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe8c27b3cf6b2bb8361904732f955bc7c05e00be5f469cec7e2280b6167f3ff0" +checksum = "954d1b2533b9b2c7959652df3076954ecb1122a28cc740aa84e7b0a49f6ac0a9" dependencies = [ "serde", "winnow", @@ -947,26 +941,26 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d43d5e60466a440230c07761aa67671d4719d46f43be8ea6e7ed334d8db4a9ab" +checksum = "6e960c4b52508ef2ae1e37cae5058e905e9ae099b107900067a503f8c454036f" dependencies = [ - "alloy-json-abi 0.8.25", - "alloy-primitives 0.8.25", - "alloy-sol-macro 0.8.25", + "alloy-json-abi 0.8.26", + "alloy-primitives 0.8.26", + "alloy-sol-macro 0.8.26", "const-hex", "serde", ] [[package]] name = "alloy-sol-types" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5383d34ea00079e6dd89c652bcbdb764db160cef84e6250926961a0b2295d04" +checksum = "70319350969a3af119da6fb3e9bddb1bce66c9ea933600cb297c8b1850ad2a3c" dependencies = [ - "alloy-json-abi 1.3.1", - "alloy-primitives 1.3.1", - "alloy-sol-macro 1.3.1", + "alloy-json-abi 1.4.1", + "alloy-primitives 1.4.1", + "alloy-sol-macro 1.4.1", "serde", ] @@ -977,7 +971,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "702002659778d89a94cd4ff2044f6b505460df6c162e2f47d1857573845b0ace" dependencies = [ "alloy-json-rpc", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "auto_impl", "base64 0.22.1", "derive_more", @@ -986,7 +980,7 @@ dependencies = [ "parking_lot", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tower 0.5.2", "tracing", @@ -1053,7 +1047,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3412d52bb97c6c6cc27ccc28d4e6e8cf605469101193b50b0bd5813b1f990b5" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "arbitrary", "arrayvec", @@ -1061,7 +1055,7 @@ dependencies = [ "derive_more", "nybbles", "proptest", - "proptest-derive", + "proptest-derive 0.5.1", "serde", "smallvec", "tracing", @@ -1073,19 +1067,13 @@ version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7bf39928a5e70c9755d6811a2928131b53ba785ad37c8bf85c90175b5d43b818" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "darling 0.21.3", "proc-macro2", "quote", "syn 2.0.106", ] -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -1097,9 +1085,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.20" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -1112,9 +1100,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" @@ -1147,9 +1135,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.99" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "aquamarine" @@ -1485,8 +1473,8 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" dependencies = [ - "asn1-rs-derive", - "asn1-rs-impl", + "asn1-rs-derive 0.4.0", + "asn1-rs-impl 0.1.0", "displaydoc", "nom", "num-traits", @@ -1495,6 +1483,22 @@ dependencies = [ "time", ] +[[package]] +name = "asn1-rs" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56624a96882bb8c26d61312ae18cb45868e5a9992ea73c58e45c3101e56a1e60" +dependencies = [ + "asn1-rs-derive 0.6.0", + "asn1-rs-impl 0.2.0", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror 2.0.17", + "time", +] + [[package]] name = "asn1-rs-derive" version = "0.4.0" @@ -1507,6 +1511,18 @@ dependencies = [ "synstructure 0.12.6", ] +[[package]] +name = "asn1-rs-derive" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "synstructure 0.13.2", +] + [[package]] name = "asn1-rs-impl" version = "0.1.0" @@ -1518,6 +1534,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "asn1-rs-impl" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "asn1_der" version = "0.7.6" @@ -1526,18 +1553,33 @@ checksum = "155a5a185e42c6b77ac7b88a15143d930a9e9727a5b7b77eed417404ab15c247" [[package]] name = "async-compression" -version = "0.4.27" +version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddb939d66e4ae03cee6091612804ba446b12878410cfa17f785f4dd67d4014e8" +checksum = "5a89bce6054c720275ac2432fbba080a66a2106a44a1b804553930ca6909f4e0" dependencies = [ - "brotli", - "flate2", + "compression-codecs", + "compression-core", "futures-core", - "memchr", "pin-project-lite", "tokio", - "zstd", - "zstd-safe", +] + +[[package]] +name = "async-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" +dependencies = [ + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix 1.1.2", + "slab", + "windows-sys 0.61.2", ] [[package]] @@ -1595,12 +1637,37 @@ dependencies = [ "rustc_version 0.4.1", ] +[[package]] +name = "asynchronous-codec" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a860072022177f903e59730004fb5dc13db9275b79bb2aef7ba8ce831956c233" +dependencies = [ + "bytes", + "futures-sink", + "futures-util", + "memchr", + "pin-project-lite", +] + [[package]] name = "atomic-waker" version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +[[package]] +name = "attohttpc" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e2cdb6d5ed835199484bb92bb8b3edd526effe995c61732580439c1a67e2e9" +dependencies = [ + "base64 0.22.1", + "http", + "log", + "url", +] + [[package]] name = "aurora-engine-modexp" version = "1.2.0" @@ -1680,11 +1747,11 @@ dependencies = [ [[package]] name = "axum" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5" +checksum = "8a18ed336352031311f4e0b4dd2ff392d4fbb370777c9d18d7fc9d7359f73871" dependencies = [ - "axum-core 0.5.2", + "axum-core 0.5.5", "bytes", "form_urlencoded", "futures-util", @@ -1699,8 +1766,7 @@ dependencies = [ "mime", "percent-encoding", "pin-project-lite", - "rustversion", - "serde", + "serde_core", "serde_json", "serde_path_to_error", "serde_urlencoded", @@ -1734,9 +1800,9 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.5.2" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6" +checksum = "59446ce19cd142f8833f856eb31f3eb097812d1479ab224f54d72428ca21ea22" dependencies = [ "bytes", "futures-core", @@ -1745,7 +1811,6 @@ dependencies = [ "http-body-util", "mime", "pin-project-lite", - "rustversion", "sync_wrapper", "tower-layer", "tower-service", @@ -1768,21 +1833,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "backtrace" -version = "0.3.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets 0.52.6", -] - [[package]] name = "base-x" version = "0.2.11" @@ -1795,6 +1845,16 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base256emoji" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e9430d9a245a77c92176e649af6e275f20839a48389859d1661e9a128d077c" +dependencies = [ + "const-str", + "match-lookup", +] + [[package]] name = "base64" version = "0.21.7" @@ -1843,7 +1903,7 @@ version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "cexpr", "clang-sys", "itertools 0.12.1", @@ -1862,29 +1922,29 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.70.1" +version = "0.71.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" +checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "cexpr", "clang-sys", - "itertools 0.13.0", + "itertools 0.10.5", "proc-macro2", "quote", "regex", - "rustc-hash 1.1.0", + "rustc-hash 2.1.1", "shlex", "syn 2.0.106", ] [[package]] name = "bindgen" -version = "0.71.1" +version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" +checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "cexpr", "clang-sys", "itertools 0.13.0", @@ -1935,18 +1995,18 @@ checksum = "2d7e60934ceec538daadb9d8432424ed043a904d8e0243f3c6446bce549a46ac" [[package]] name = "bitfield" -version = "0.19.1" +version = "0.19.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db1bcd90f88eabbf0cadbfb87a45bceeaebcd3b4bc9e43da379cd2ef0162590d" +checksum = "6bf79f42d21f18b5926a959280215903e659760da994835d27c3a0c5ff4f898f" dependencies = [ "bitfield-macros", ] [[package]] name = "bitfield-macros" -version = "0.19.1" +version = "0.19.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3787a07661997bfc05dd3431e379c0188573f78857080cf682e1393ab8e4d64c" +checksum = "6115af052c7914c0cbb97195e5c72cb61c511527250074f5c041d1048b0d8b16" dependencies = [ "proc-macro2", "quote", @@ -1961,9 +2021,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.2" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a65b545ab31d687cff52899d4890855fec459eb6afe0da6417b8a18da87aa29" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" dependencies = [ "serde", ] @@ -1981,6 +2041,15 @@ dependencies = [ "wyz", ] +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + [[package]] name = "block-buffer" version = "0.9.0" @@ -2010,9 +2079,9 @@ dependencies = [ [[package]] name = "blst" -version = "0.3.15" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fd49896f12ac9b6dcd7a5998466b9b58263a695a3dd1ecc1aaca2e12a90b080" +checksum = "dcdb4c7013139a150f9fc55d123186dbfaba0d912817466282c73ac49e71fb45" dependencies = [ "cc", "glob", @@ -2026,11 +2095,11 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c340fe0f0b267787095cbe35240c6786ff19da63ec7b69367ba338eace8169b" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "boa_interner", "boa_macros", "boa_string", - "indexmap 2.10.0", + "indexmap 2.11.4", "num-bigint", "rustc-hash 2.1.1", ] @@ -2042,7 +2111,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f620c3f06f51e65c0504ddf04978be1b814ac6586f0b45f6019801ab5efd37f9" dependencies = [ "arrayvec", - "bitflags 2.9.2", + "bitflags 2.9.4", "boa_ast", "boa_gc", "boa_interner", @@ -2056,7 +2125,7 @@ dependencies = [ "fast-float2", "hashbrown 0.15.5", "icu_normalizer 1.5.0", - "indexmap 2.10.0", + "indexmap 2.11.4", "intrusive-collections", "itertools 0.13.0", "num-bigint", @@ -2076,7 +2145,7 @@ dependencies = [ "static_assertions", "tap", "thin-vec", - "thiserror 2.0.16", + "thiserror 2.0.17", "time", ] @@ -2102,7 +2171,7 @@ dependencies = [ "boa_gc", "boa_macros", "hashbrown 0.15.5", - "indexmap 2.10.0", + "indexmap 2.11.4", "once_cell", "phf", "rustc-hash 2.1.1", @@ -2127,7 +2196,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cc142dac798cdc6e2dbccfddeb50f36d2523bb977a976e19bdb3ae19b740804" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "boa_ast", "boa_interner", "boa_macros", @@ -2190,7 +2259,7 @@ dependencies = [ "serde_json", "serde_repr", "serde_urlencoded", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-util", "tower-service", @@ -2268,18 +2337,18 @@ checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" [[package]] name = "bytemuck" -version = "1.23.2" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.10.1" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" +checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", @@ -2303,9 +2372,9 @@ dependencies = [ [[package]] name = "c-kzg" -version = "2.1.4" +version = "2.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "137a2a2878ed823ef1bd73e5441e245602aae5360022113b8ad259ca4b5b8727" +checksum = "e00bf4b112b07b505472dbefd19e37e53307e2bfed5a79e0cc161d58ccd0e687" dependencies = [ "arbitrary", "blst", @@ -2319,11 +2388,11 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.11" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d07aa9a93b00c76f71bc35d598bed923f6d4f3a9ca5c24b7737ae1a292841c0" +checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -2343,7 +2412,7 @@ checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" dependencies = [ "camino", "cargo-platform", - "semver 1.0.26", + "semver 1.0.27", "serde", "serde_json", ] @@ -2356,10 +2425,10 @@ checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" dependencies = [ "camino", "cargo-platform", - "semver 1.0.26", + "semver 1.0.27", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -2385,7 +2454,7 @@ checksum = "975982cdb7ad6a142be15bdf84aea7ec6a9e5d4d797c004d43185b24cfe4e684" dependencies = [ "clap", "heck", - "indexmap 2.10.0", + "indexmap 2.11.4", "log", "proc-macro2", "quote", @@ -2396,6 +2465,15 @@ dependencies = [ "toml", ] +[[package]] +name = "cbor4ii" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "472931dd4dfcc785075b09be910147f9c6258883fc4591d0dac6116392b2daa6" +dependencies = [ + "serde", +] + [[package]] name = "cc" version = "1.2.15" @@ -2434,19 +2512,42 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "chacha20poly1305" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +dependencies = [ + "aead", + "chacha20", + "cipher", + "poly1305", + "zeroize", +] + [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "serde", "wasm-bindgen", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -2457,6 +2558,7 @@ checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", + "zeroize", ] [[package]] @@ -2472,9 +2574,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.45" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc0e74a703892159f5ae7d3aac52c8e6c392f5ae5f359c70b5881d60aaac318" +checksum = "f4512b90fa68d3a9932cea5184017c5d200f5921df706d45e853537dea51508f" dependencies = [ "clap_builder", "clap_derive", @@ -2482,9 +2584,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.44" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8" +checksum = "0025e98baa12e766c67ba13ff4695a887a1eba19569aad00a472546795bd6730" dependencies = [ "anstream", "anstyle", @@ -2494,9 +2596,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.45" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" dependencies = [ "heck", "proc-macro2", @@ -2506,9 +2608,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] name = "cmake" @@ -2525,7 +2627,7 @@ version = "0.3.0" source = "git+https://github.com/automata-network/coco-provider-sdk#3a832b8cf5e88ef71649ab56e4efd67067b26b7c" dependencies = [ "bincode", - "bitfield 0.19.1", + "bitfield 0.19.3", "cbindgen", "iocuddle", "libc", @@ -2556,11 +2658,11 @@ dependencies = [ [[package]] name = "comfy-table" -version = "7.1.4" +version = "7.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a65ebfec4fb190b6f90e944a817d60499ee0744e582530e2c9900a22e591d9a" +checksum = "b03b7db8e0b4b2fdad6c551e634134e99ec000e5c8c3b6856c65e8bbaded7a3b" dependencies = [ - "crossterm", + "crossterm 0.29.0", "unicode-segmentation", "unicode-width 0.2.0", ] @@ -2579,6 +2681,26 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "compression-codecs" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef8a506ec4b81c460798f572caead636d57d3d7e940f998160f52bd254bf2d23" +dependencies = [ + "brotli", + "compression-core", + "flate2", + "memchr", + "zstd", + "zstd-safe", +] + +[[package]] +name = "compression-core" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb" + [[package]] name = "concat-kdf" version = "0.1.0" @@ -2599,15 +2721,14 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.15.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dccd746bf9b1038c0507b7cec21eb2b11222db96a2902c96e8c185d6d20fb9c4" +checksum = "3bb320cac8a0750d7f25280aa97b09c26edfe161164238ecbbb31092b079e735" dependencies = [ "cfg-if", "cpufeatures", - "hex", "proptest", - "serde", + "serde_core", ] [[package]] @@ -2616,11 +2737,17 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const-str" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" + [[package]] name = "const_format" -version = "0.2.34" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" dependencies = [ "const_format_proc_macros", ] @@ -2759,7 +2886,7 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "crossterm_winapi", "mio", "parking_lot", @@ -2769,6 +2896,20 @@ dependencies = [ "winapi", ] +[[package]] +name = "crossterm" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" +dependencies = [ + "bitflags 2.9.4", + "crossterm_winapi", + "document-features", + "parking_lot", + "rustix 1.1.2", + "winapi", +] + [[package]] name = "crossterm_winapi" version = "0.9.1" @@ -2988,7 +3129,7 @@ name = "dcap-rs" version = "0.1.0" source = "git+https://github.com/automata-network/dcap-rs.git?rev=d847b8f75a493640c4881bdf67775250b6baefab#d847b8f75a493640c4881bdf67775250b6baefab" dependencies = [ - "alloy-sol-types 0.8.25", + "alloy-sol-types 0.8.26", "chrono", "hex", "p256", @@ -2997,7 +3138,7 @@ dependencies = [ "sha2 0.10.9", "sha3", "time", - "x509-parser", + "x509-parser 0.15.1", ] [[package]] @@ -3034,7 +3175,21 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" dependencies = [ - "asn1-rs", + "asn1-rs 0.5.2", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "der-parser" +version = "10.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6" +dependencies = [ + "asn1-rs 0.7.1", "displaydoc", "nom", "num-bigint", @@ -3044,12 +3199,12 @@ dependencies = [ [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" dependencies = [ "powerfmt", - "serde", + "serde_core", ] [[package]] @@ -3193,7 +3348,7 @@ dependencies = [ "libc", "option-ext", "redox_users 0.5.2", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -3268,12 +3423,27 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aac81fa3e28d21450aa4d2ac065992ba96a1d7303efbce51a95f4fd175b67562" +[[package]] +name = "document-features" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" +dependencies = [ + "litrs", +] + [[package]] name = "dotenvy" version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" +[[package]] +name = "dtoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" + [[package]] name = "dtor" version = "0.0.6" @@ -3478,12 +3648,12 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -3534,7 +3704,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3dc1355dbb41fbbd34ec28d4fb2a57d9a70c67ac3c19f6a5ca4d4a176b9e997a" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "hex", "serde", "serde_derive", @@ -3543,11 +3713,11 @@ dependencies = [ [[package]] name = "ethereum_ssz" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ca8ba45b63c389c6e115b095ca16381534fdcc03cf58176a3f8554db2dbe19b" +checksum = "0dcddb2554d19cde19b099fadddde576929d7a4d0c1cd3512d1fd95cf174375c" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "ethereum_serde_utils", "itertools 0.13.0", "serde", @@ -3558,9 +3728,9 @@ dependencies = [ [[package]] name = "ethereum_ssz_derive" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd55d08012b4e0dfcc92b8d6081234df65f2986ad34cc76eeed69c5e2ce7506" +checksum = "a657b6b3b7e153637dc6bdc6566ad9279d9ee11a15b12cfb24a2e04360637e9f" dependencies = [ "darling 0.20.11", "proc-macro2", @@ -3661,14 +3831,14 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "filetime" -version = "0.2.25" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" dependencies = [ "cfg-if", "libc", "libredox", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -3685,9 +3855,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.1.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" +checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" dependencies = [ "crc32fast", "miniz_oxide", @@ -3705,6 +3875,12 @@ 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" @@ -3722,9 +3898,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] @@ -3765,6 +3941,16 @@ dependencies = [ "futures-util", ] +[[package]] +name = "futures-bounded" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91f328e7fb845fc832912fb6a34f40cf6d1888c92f974d1893a54e97b5ff542e" +dependencies = [ + "futures-timer", + "futures-util", +] + [[package]] name = "futures-channel" version = "0.3.31" @@ -3790,6 +3976,7 @@ dependencies = [ "futures-core", "futures-task", "futures-util", + "num_cpus", ] [[package]] @@ -3798,6 +3985,16 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +[[package]] +name = "futures-lite" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" +dependencies = [ + "futures-core", + "pin-project-lite", +] + [[package]] name = "futures-macro" version = "0.3.31" @@ -3809,6 +4006,17 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "futures-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" +dependencies = [ + "futures-io", + "rustls", + "rustls-pki-types", +] + [[package]] name = "futures-sink" version = "0.3.31" @@ -3855,25 +4063,11 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" -[[package]] -name = "generator" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d18470a76cb7f8ff746cf1f7470914f900252ec36bbc40b569d74b1258446827" -dependencies = [ - "cc", - "cfg-if", - "libc", - "log", - "rustversion", - "windows 0.61.3", -] - [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "serde", "typenum", @@ -3890,21 +4084,21 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "js-sys", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasip2", "wasm-bindgen", ] @@ -3918,19 +4112,13 @@ dependencies = [ "polyval", ] -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - [[package]] name = "git2" version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2deb07a133b1520dc1a5690e9bd08950108873d7ed5de38dcc74d3b5ebffa110" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "libc", "libgit2-sys", "log", @@ -3991,12 +4179,12 @@ dependencies = [ [[package]] name = "gmp-mpfr-sys" -version = "1.6.5" +version = "1.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66d61197a68f6323b9afa616cf83d55d69191e1bf364d4eb7d35ae18defe776" +checksum = "60f8970a75c006bb2f8ae79c6768a116dd215fa8346a87aed99bf9d82ca43394" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -4022,7 +4210,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.10.0", + "indexmap 2.11.4", "slab", "tokio", "tokio-util", @@ -4064,7 +4252,17 @@ checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", - "foldhash", + "foldhash 0.1.5", + "serde", +] + +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +dependencies = [ + "foldhash 0.2.0", "serde", ] @@ -4104,9 +4302,6 @@ name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -dependencies = [ - "serde", -] [[package]] name = "hex-conservative" @@ -4136,7 +4331,8 @@ dependencies = [ "rand 0.9.2", "ring", "serde", - "thiserror 2.0.16", + "socket2 0.5.10", + "thiserror 2.0.17", "tinyvec", "tokio", "tracing", @@ -4160,7 +4356,7 @@ dependencies = [ "resolv-conf", "serde", "smallvec", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", ] @@ -4258,9 +4454,9 @@ checksum = "91f255a4535024abf7640cb288260811fc14794f62b063652ed349f9a6c2348e" [[package]] name = "humantime" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" [[package]] name = "humantime-serde" @@ -4326,7 +4522,7 @@ dependencies = [ "tokio", "tokio-rustls", "tower-service", - "webpki-roots 1.0.2", + "webpki-roots 1.0.3", ] [[package]] @@ -4360,9 +4556,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" dependencies = [ "base64 0.22.1", "bytes", @@ -4376,7 +4572,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.0", + "socket2 0.6.1", "system-configuration", "tokio", "tower-service", @@ -4401,9 +4597,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.63" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -4411,7 +4607,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.61.2", + "windows-core 0.62.2", ] [[package]] @@ -4635,9 +4831,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -4654,6 +4850,16 @@ dependencies = [ "icu_properties 2.0.1", ] +[[package]] +name = "if-addrs" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cabb0019d51a643781ff15c9c8a3e5dedc365c47211270f4e8f82812fedd8f0a" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "if-addrs" version = "0.13.4" @@ -4664,6 +4870,50 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "if-watch" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf9d64cfcf380606e64f9a0bcf493616b65331199f984151a6fa11a7b3cde38" +dependencies = [ + "async-io", + "core-foundation 0.9.4", + "fnv", + "futures", + "if-addrs 0.10.2", + "ipnet", + "log", + "netlink-packet-core", + "netlink-packet-route", + "netlink-proto", + "netlink-sys", + "rtnetlink", + "system-configuration", + "tokio", + "windows 0.53.0", +] + +[[package]] +name = "igd-next" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "516893339c97f6011282d5825ac94fc1c7aad5cad26bdc2d0cee068c0bf97f97" +dependencies = [ + "async-trait", + "attohttpc", + "bytes", + "futures", + "http", + "http-body-util", + "hyper", + "hyper-util", + "log", + "rand 0.9.2", + "tokio", + "url", + "xmltree", +] + [[package]] name = "impl-codec" version = "0.6.0" @@ -4722,14 +4972,15 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.10.0" +version = "2.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "arbitrary", "equivalent", - "hashbrown 0.15.5", + "hashbrown 0.16.0", "serde", + "serde_core", ] [[package]] @@ -4744,7 +4995,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "inotify-sys", "libc", ] @@ -4805,17 +5056,6 @@ dependencies = [ "memoffset", ] -[[package]] -name = "io-uring" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" -dependencies = [ - "bitflags 2.9.2", - "cfg-if", - "libc", -] - [[package]] name = "iocuddle" version = "0.1.1" @@ -4922,19 +5162,19 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "libc", ] [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" dependencies = [ "once_cell", "wasm-bindgen", @@ -4989,7 +5229,7 @@ dependencies = [ "rustls-pki-types", "rustls-platform-verifier", "soketto", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-rustls", "tokio-util", @@ -5015,7 +5255,7 @@ dependencies = [ "rustc-hash 2.1.1", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tower 0.5.2", "tracing", @@ -5041,7 +5281,7 @@ dependencies = [ "rustc-hash 2.1.1", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tower 0.5.2", @@ -5065,7 +5305,7 @@ dependencies = [ "rustls-platform-verifier", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tower 0.5.2", "url", @@ -5088,7 +5328,7 @@ dependencies = [ "rustls-platform-verifier", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tower 0.5.2", "url", @@ -5137,7 +5377,7 @@ dependencies = [ "serde", "serde_json", "soketto", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", @@ -5164,7 +5404,7 @@ dependencies = [ "serde", "serde_json", "soketto", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", @@ -5180,7 +5420,7 @@ dependencies = [ "http", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -5192,7 +5432,7 @@ dependencies = [ "http", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -5304,9 +5544,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.175" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libgit2-sys" @@ -5322,12 +5562,12 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-targets 0.53.3", + "windows-link 0.2.1", ] [[package]] @@ -5336,6 +5576,149 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" +[[package]] +name = "libp2p" +version = "0.56.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce71348bf5838e46449ae240631117b487073d5f347c06d434caddcb91dceb5a" +dependencies = [ + "bytes", + "either", + "futures", + "futures-timer", + "getrandom 0.2.16", + "libp2p-allow-block-list", + "libp2p-autonat", + "libp2p-connection-limits", + "libp2p-core", + "libp2p-dns", + "libp2p-identify", + "libp2p-identity", + "libp2p-mdns", + "libp2p-metrics", + "libp2p-noise", + "libp2p-ping", + "libp2p-quic", + "libp2p-request-response", + "libp2p-swarm", + "libp2p-tcp", + "libp2p-upnp", + "libp2p-yamux", + "multiaddr", + "pin-project", + "rw-stream-sink", + "thiserror 2.0.17", +] + +[[package]] +name = "libp2p-allow-block-list" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d16ccf824ee859ca83df301e1c0205270206223fd4b1f2e512a693e1912a8f4a" +dependencies = [ + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", +] + +[[package]] +name = "libp2p-autonat" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fab5e25c49a7d48dac83d95d8f3bac0a290d8a5df717012f6e34ce9886396c0b" +dependencies = [ + "async-trait", + "asynchronous-codec", + "either", + "futures", + "futures-bounded", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-request-response", + "libp2p-swarm", + "quick-protobuf", + "quick-protobuf-codec", + "rand 0.8.5", + "rand_core 0.6.4", + "thiserror 2.0.17", + "tracing", + "web-time", +] + +[[package]] +name = "libp2p-connection-limits" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18b8b607cf3bfa2f8c57db9c7d8569a315d5cc0a282e6bfd5ebfc0a9840b2a0" +dependencies = [ + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", +] + +[[package]] +name = "libp2p-core" +version = "0.43.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d28e2d2def7c344170f5c6450c0dbe3dfef655610dbfde2f6ac28a527abbe36" +dependencies = [ + "either", + "fnv", + "futures", + "futures-timer", + "libp2p-identity", + "multiaddr", + "multihash", + "multistream-select", + "parking_lot", + "pin-project", + "quick-protobuf", + "rand 0.8.5", + "rw-stream-sink", + "thiserror 2.0.17", + "tracing", + "unsigned-varint 0.8.0", + "web-time", +] + +[[package]] +name = "libp2p-dns" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b770c1c8476736ca98c578cba4b505104ff8e842c2876b528925f9766379f9a" +dependencies = [ + "async-trait", + "futures", + "hickory-resolver", + "libp2p-core", + "libp2p-identity", + "parking_lot", + "smallvec", + "tracing", +] + +[[package]] +name = "libp2p-identify" +version = "0.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ab792a8b68fdef443a62155b01970c81c3aadab5e659621b063ef252a8e65e8" +dependencies = [ + "asynchronous-codec", + "either", + "futures", + "futures-bounded", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "quick-protobuf", + "quick-protobuf-codec", + "smallvec", + "thiserror 2.0.17", + "tracing", +] + [[package]] name = "libp2p-identity" version = "0.2.12" @@ -5349,32 +5732,261 @@ dependencies = [ "k256", "multihash", "quick-protobuf", + "rand 0.8.5", "sha2 0.10.9", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", "zeroize", ] +[[package]] +name = "libp2p-mdns" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c66872d0f1ffcded2788683f76931be1c52e27f343edb93bc6d0bcd8887be443" +dependencies = [ + "futures", + "hickory-proto", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "smallvec", + "socket2 0.5.10", + "tokio", + "tracing", +] + +[[package]] +name = "libp2p-metrics" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "805a555148522cb3414493a5153451910cb1a146c53ffbf4385708349baf62b7" +dependencies = [ + "futures", + "libp2p-core", + "libp2p-identify", + "libp2p-identity", + "libp2p-ping", + "libp2p-swarm", + "pin-project", + "prometheus-client", + "web-time", +] + +[[package]] +name = "libp2p-noise" +version = "0.46.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc73eacbe6462a0eb92a6527cac6e63f02026e5407f8831bde8293f19217bfbf" +dependencies = [ + "asynchronous-codec", + "bytes", + "futures", + "libp2p-core", + "libp2p-identity", + "multiaddr", + "multihash", + "quick-protobuf", + "rand 0.8.5", + "snow", + "static_assertions", + "thiserror 2.0.17", + "tracing", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "libp2p-ping" +version = "0.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74bb7fcdfd9fead4144a3859da0b49576f171a8c8c7c0bfc7c541921d25e60d3" +dependencies = [ + "futures", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "tracing", + "web-time", +] + +[[package]] +name = "libp2p-quic" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dc448b2de9f4745784e3751fe8bc6c473d01b8317edd5ababcb0dec803d843f" +dependencies = [ + "futures", + "futures-timer", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-tls", + "quinn", + "rand 0.8.5", + "ring", + "rustls", + "socket2 0.5.10", + "thiserror 2.0.17", + "tokio", + "tracing", +] + +[[package]] +name = "libp2p-request-response" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9f1cca83488b90102abac7b67d5c36fc65bc02ed47620228af7ed002e6a1478" +dependencies = [ + "async-trait", + "cbor4ii", + "futures", + "futures-bounded", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "serde", + "smallvec", + "tracing", +] + +[[package]] +name = "libp2p-stream" +version = "0.4.0-alpha" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6bd8025c80205ec2810cfb28b02f362ab48a01bee32c50ab5f12761e033464" +dependencies = [ + "futures", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "tracing", +] + +[[package]] +name = "libp2p-swarm" +version = "0.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aa762e5215919a34e31c35d4b18bf2e18566ecab7f8a3d39535f4a3068f8b62" +dependencies = [ + "either", + "fnv", + "futures", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm-derive", + "lru 0.12.5", + "multistream-select", + "rand 0.8.5", + "smallvec", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "libp2p-swarm-derive" +version = "0.35.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd297cf53f0cb3dee4d2620bb319ae47ef27c702684309f682bdb7e55a18ae9c" +dependencies = [ + "heck", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "libp2p-tcp" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65b4e030c52c46c8d01559b2b8ca9b7c4185f10576016853129ca1fe5cd1a644" +dependencies = [ + "futures", + "futures-timer", + "if-watch", + "libc", + "libp2p-core", + "socket2 0.5.10", + "tokio", + "tracing", +] + +[[package]] +name = "libp2p-tls" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96ff65a82e35375cbc31ebb99cacbbf28cb6c4fefe26bf13756ddcf708d40080" +dependencies = [ + "futures", + "futures-rustls", + "libp2p-core", + "libp2p-identity", + "rcgen", + "ring", + "rustls", + "rustls-webpki", + "thiserror 2.0.17", + "x509-parser 0.17.0", + "yasna", +] + +[[package]] +name = "libp2p-upnp" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4757e65fe69399c1a243bbb90ec1ae5a2114b907467bf09f3575e899815bb8d3" +dependencies = [ + "futures", + "futures-timer", + "igd-next", + "libp2p-core", + "libp2p-swarm", + "tokio", + "tracing", +] + +[[package]] +name = "libp2p-yamux" +version = "0.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f15df094914eb4af272acf9adaa9e287baa269943f32ea348ba29cfb9bfc60d8" +dependencies = [ + "either", + "futures", + "libp2p-core", + "thiserror 2.0.17", + "tracing", + "yamux 0.12.1", + "yamux 0.13.7", +] + [[package]] name = "libproc" -version = "0.14.10" +version = "0.14.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78a09b56be5adbcad5aa1197371688dc6bb249a26da3bca2011ee2fb987ebfb" +checksum = "a54ad7278b8bc5301d5ffd2a94251c004feb971feba96c971ea4063645990757" dependencies = [ - "bindgen 0.70.1", + "bindgen 0.72.1", "errno", "libc", ] [[package]] name = "libredox" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "libc", - "redox_syscall 0.5.17", + "redox_syscall 0.5.18", ] [[package]] @@ -5459,9 +6071,9 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.9.4" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" @@ -5475,35 +6087,27 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +[[package]] +name = "litrs" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" + [[package]] name = "lock_api" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", "serde", ] [[package]] name = "log" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" - -[[package]] -name = "loom" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "tracing", - "tracing-subscriber 0.3.20", -] +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "lru" @@ -5556,9 +6160,9 @@ checksum = "08ab2867e3eeeca90e844d1940eab391c9dc5228783db2ed999acbc0a9ed375a" [[package]] name = "mach2" -version = "0.4.3" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d640282b302c0bb0a2a8e0233ead9035e3bed871f0b7e81fe4a1ec829765db44" +checksum = "6a1b95cd5421ec55b445b5ae102f5ea0e768de1f82bd3001e11f426c269c3aea" dependencies = [ "libc", ] @@ -5578,10 +6182,21 @@ dependencies = [ name = "macros" version = "0.1.0" dependencies = [ - "paste", + "paste", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "match-lookup" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1265724d8cb29dbbc2b0f06fffb8bf1a8c0cf73a78eede9ba73a4a66c52a981e" +dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 1.0.109", ] [[package]] @@ -5617,15 +6232,15 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.5" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "memmap2" -version = "0.9.7" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "483758ad303d734cec05e5c12b41d7e93e6a6390c5e9dae6bdeb7c1259012d28" +checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" dependencies = [ "libc", ] @@ -5672,7 +6287,7 @@ dependencies = [ "hyper", "hyper-rustls", "hyper-util", - "indexmap 2.10.0", + "indexmap 2.11.4", "ipnet", "metrics", "metrics-util 0.19.1", @@ -5693,30 +6308,30 @@ dependencies = [ "hyper", "hyper-rustls", "hyper-util", - "indexmap 2.10.0", + "indexmap 2.11.4", "ipnet", "metrics", "metrics-util 0.20.0", "quanta", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", ] [[package]] name = "metrics-process" -version = "2.4.0" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a82c8add4382f29a122fa64fff1891453ed0f6b2867d971e7d60cb8dfa322ff" +checksum = "f615e08e049bd14a44c4425415782efb9bcd479fc1e19ddeb971509074c060d0" dependencies = [ "libc", "libproc", "mach2", "metrics", "once_cell", - "procfs", + "procfs 0.18.0", "rlimit", - "windows 0.58.0", + "windows 0.62.2", ] [[package]] @@ -5729,7 +6344,7 @@ dependencies = [ "crossbeam-epoch", "crossbeam-utils", "hashbrown 0.15.5", - "indexmap 2.10.0", + "indexmap 2.11.4", "metrics", "ordered-float", "quanta", @@ -5799,6 +6414,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", + "simd-adler32", ] [[package]] @@ -5809,7 +6425,7 @@ checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", "log", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "windows-sys 0.59.0", ] @@ -5836,23 +6452,22 @@ dependencies = [ [[package]] name = "moka" -version = "0.12.10" +version = "0.12.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" +checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077" dependencies = [ "async-lock", "crossbeam-channel", "crossbeam-epoch", "crossbeam-utils", + "equivalent", "event-listener", "futures-util", - "loom", "parking_lot", "portable-atomic", "rustc_version 0.4.1", "smallvec", "tagptr", - "thiserror 1.0.69", "uuid", ] @@ -5877,17 +6492,18 @@ dependencies = [ "percent-encoding", "serde", "static_assertions", - "unsigned-varint", + "unsigned-varint 0.8.0", "url", ] [[package]] name = "multibase" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" +checksum = "8694bb4835f452b0e3bb06dbebb1d6fc5385b6ca1caf2e55fd165c042390ec77" dependencies = [ "base-x", + "base256emoji", "data-encoding", "data-encoding-macro", ] @@ -5899,7 +6515,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" dependencies = [ "core2", - "unsigned-varint", + "unsigned-varint 0.8.0", +] + +[[package]] +name = "multistream-select" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea0df8e5eec2298a62b326ee4f0d7fe1a6b90a09dfcf9df37b38f947a8c42f19" +dependencies = [ + "bytes", + "futures", + "log", + "pin-project", + "smallvec", + "unsigned-varint 0.7.2", ] [[package]] @@ -5928,6 +6558,70 @@ dependencies = [ "tempfile", ] +[[package]] +name = "netlink-packet-core" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" +dependencies = [ + "anyhow", + "byteorder", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-route" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053998cea5a306971f88580d0829e90f270f940befd7cf928da179d4187a5a66" +dependencies = [ + "anyhow", + "bitflags 1.3.2", + "byteorder", + "libc", + "netlink-packet-core", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-utils" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" +dependencies = [ + "anyhow", + "byteorder", + "paste", + "thiserror 1.0.69", +] + +[[package]] +name = "netlink-proto" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72452e012c2f8d612410d89eea01e2d9b56205274abb35d53f60200b2ec41d60" +dependencies = [ + "bytes", + "futures", + "log", + "netlink-packet-core", + "netlink-sys", + "thiserror 2.0.17", +] + +[[package]] +name = "netlink-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" +dependencies = [ + "bytes", + "futures", + "libc", + "log", + "tokio", +] + [[package]] name = "nibble_vec" version = "0.1.0" @@ -5937,6 +6631,23 @@ dependencies = [ "smallvec", ] +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + [[package]] name = "nom" version = "7.1.3" @@ -5953,7 +6664,7 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "fsevent-sys", "inotify", "kqueue", @@ -5982,11 +6693,11 @@ dependencies = [ [[package]] name = "nu-ansi-term" -version = "0.50.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -6124,9 +6835,9 @@ dependencies = [ [[package]] name = "nybbles" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63cb50036b1ad148038105af40aaa70ff24d8a14fbc44ae5c914e1348533d12e" +checksum = "2c4b5ecbd0beec843101bffe848217f770e8b8da81d8355b7d6e226f2199b3dc" dependencies = [ "alloy-rlp", "arbitrary", @@ -6139,32 +6850,23 @@ dependencies = [ [[package]] name = "objc2-core-foundation" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", ] [[package]] name = "objc2-io-kit" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71c1c64d6120e51cd86033f67176b1cb66780c2efe34dec55176f77befd93c0a" +checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" dependencies = [ "libc", "objc2-core-foundation", ] -[[package]] -name = "object" -version = "0.36.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" -dependencies = [ - "memchr", -] - [[package]] name = "oid" version = "0.2.1" @@ -6180,7 +6882,16 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ - "asn1-rs", + "asn1-rs 0.5.2", +] + +[[package]] +name = "oid-registry" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f40cff3dde1b6087cc5d5f5d4d65712f34016a03ed60e9c08dcc392736b5b7" +dependencies = [ + "asn1-rs 0.7.1", ] [[package]] @@ -6208,7 +6919,7 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-network", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-eth", "alloy-serde", @@ -6216,7 +6927,7 @@ dependencies = [ "derive_more", "serde", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -6233,7 +6944,7 @@ checksum = "f80108e3b36901200a4c5df1db1ee9ef6ce685b59ea79d7be1713c845e3765da" dependencies = [ "alloy-consensus", "alloy-network", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-provider", "alloy-rpc-types-eth", "alloy-signer", @@ -6247,7 +6958,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8eb878fc5ea95adb5abe55fb97475b3eb0dcc77dfcd6f61bd626a68ae0bdba1" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "jsonrpsee 0.26.0", ] @@ -6260,14 +6971,14 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-network-primitives", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-eth", "alloy-serde", "derive_more", "op-alloy-consensus", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -6278,7 +6989,7 @@ checksum = "14e50c94013a1d036a529df259151991dbbd6cf8dc215e3b68b784f95eec60e6" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-engine", "alloy-serde", @@ -6288,7 +6999,7 @@ dependencies = [ "op-alloy-consensus", "serde", "snap", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -6302,7 +7013,7 @@ dependencies = [ "alloy-json-rpc", "alloy-network", "alloy-op-evm", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-provider", "alloy-rpc-client", "alloy-rpc-types-beacon", @@ -6310,7 +7021,7 @@ dependencies = [ "alloy-rpc-types-eth", "alloy-serde", "alloy-signer-local", - "alloy-sol-types 1.3.1", + "alloy-sol-types 1.4.1", "alloy-transport", "alloy-transport-http", "anyhow", @@ -6345,6 +7056,7 @@ dependencies = [ "op-alloy-rpc-types-engine", "op-revm", "opentelemetry 0.29.1", + "p2p", "parking_lot", "rand 0.9.2", "reqwest", @@ -6424,9 +7136,9 @@ dependencies = [ [[package]] name = "op-revm" -version = "10.1.0" +version = "10.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9ba4f4693811e73449193c8bd656d3978f265871916882e6a51a487e4f96217" +checksum = "826f43a5b1613c224f561847c152bfbaefcb593a9ae2c612ff4dc4661c6e625f" dependencies = [ "auto_impl", "revm", @@ -6445,7 +7157,7 @@ version = "0.10.73" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "cfg-if", "foreign-types", "libc", @@ -6493,7 +7205,7 @@ dependencies = [ "futures-sink", "js-sys", "pin-project-lite", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", ] @@ -6507,7 +7219,7 @@ dependencies = [ "futures-sink", "js-sys", "pin-project-lite", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", ] @@ -6555,7 +7267,7 @@ dependencies = [ "prost", "reqwest", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tonic", "tracing", @@ -6575,7 +7287,7 @@ dependencies = [ "opentelemetry_sdk 0.29.0", "prost", "reqwest", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", ] @@ -6627,7 +7339,7 @@ dependencies = [ "percent-encoding", "rand 0.8.5", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tracing", @@ -6647,7 +7359,7 @@ dependencies = [ "percent-encoding", "rand 0.9.2", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", ] @@ -6678,6 +7390,25 @@ dependencies = [ "sha2 0.10.9", ] +[[package]] +name = "p2p" +version = "0.2.7" +dependencies = [ + "derive_more", + "eyre", + "futures", + "futures-util", + "hex", + "libp2p", + "libp2p-stream", + "multiaddr", + "serde", + "serde_json", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "page_size" version = "0.6.0" @@ -6726,9 +7457,9 @@ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", @@ -6736,15 +7467,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.17", + "redox_syscall 0.5.18", "smallvec", - "windows-targets 0.52.6", + "windows-link 0.2.1", ] [[package]] @@ -6780,12 +7511,12 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pem" -version = "3.0.5" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" dependencies = [ "base64 0.22.1", - "serde", + "serde_core", ] [[package]] @@ -6799,18 +7530,17 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" +checksum = "989e7521a040efde50c3ab6bbadafbe15ab6dc042686926be59ac35d74607df4" dependencies = [ "memchr", - "thiserror 2.0.16", "ucd-trie", ] @@ -6959,12 +7689,37 @@ dependencies = [ "crunchy", ] +[[package]] +name = "polling" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix 1.1.2", + "windows-sys 0.61.2", +] + [[package]] name = "pollster" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug", + "universal-hash", +] + [[package]] name = "polyval" version = "0.6.2" @@ -6985,9 +7740,9 @@ checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" dependencies = [ "zerovec 0.11.4", ] @@ -7049,11 +7804,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit", + "toml_edit 0.23.7", ] [[package]] @@ -7093,34 +7848,78 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc5b72d8145275d844d4b5f6d4e1eef00c8cd889edb6035c21675d1bb1f45c9f" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "chrono", "flate2", "hex", - "procfs-core", + "procfs-core 0.17.0", "rustix 0.38.44", ] +[[package]] +name = "procfs" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25485360a54d6861439d60facef26de713b1e126bf015ec8f98239467a2b82f7" +dependencies = [ + "bitflags 2.9.4", + "procfs-core 0.18.0", + "rustix 1.1.2", +] + [[package]] name = "procfs-core" version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "239df02d8349b06fc07398a3a1697b06418223b1c7725085e801e7c0fc6a12ec" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "chrono", "hex", ] +[[package]] +name = "procfs-core" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6401bf7b6af22f78b563665d15a22e9aef27775b79b149a66ca022468a4e405" +dependencies = [ + "bitflags 2.9.4", + "hex", +] + +[[package]] +name = "prometheus-client" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf41c1a7c32ed72abe5082fb19505b969095c12da9f5732a4bc9878757fd087c" +dependencies = [ + "dtoa", + "itoa", + "parking_lot", + "prometheus-client-derive-encode", +] + +[[package]] +name = "prometheus-client-derive-encode" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "proptest" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fcdab19deb5195a31cf7726a210015ff1496ba1464fd42cb4f537b8b01b471f" +checksum = "2bb0be07becd10686a0bb407298fb425360a5c44a663774406340c59a22de4ce" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.9.2", + "bitflags 2.9.4", "lazy_static", "num-traits", "rand 0.9.2", @@ -7153,6 +7952,17 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "proptest-derive" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "095a99f75c69734802359b682be8daaf8980296731f6470434ea2c652af1dd30" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "prost" version = "0.13.5" @@ -7182,7 +7992,7 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "memchr", "unicase", ] @@ -7197,7 +8007,7 @@ dependencies = [ "libc", "once_cell", "raw-cpuid", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "web-sys", "winapi", ] @@ -7217,21 +8027,35 @@ dependencies = [ "byteorder", ] +[[package]] +name = "quick-protobuf-codec" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15a0580ab32b169745d7a39db2ba969226ca16738931be152a3209b409de2474" +dependencies = [ + "asynchronous-codec", + "bytes", + "quick-protobuf", + "thiserror 1.0.69", + "unsigned-varint 0.8.0", +] + [[package]] name = "quinn" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", "cfg_aliases", + "futures-io", "pin-project-lite", "quinn-proto", "quinn-udp", "rustc-hash 2.1.1", "rustls", - "socket2 0.5.10", - "thiserror 2.0.16", + "socket2 0.6.1", + "thiserror 2.0.17", "tokio", "tracing", "web-time", @@ -7239,12 +8063,12 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.12" +version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ "bytes", - "getrandom 0.3.3", + "getrandom 0.3.4", "lru-slab", "rand 0.9.2", "ring", @@ -7252,7 +8076,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.16", + "thiserror 2.0.17", "tinyvec", "tracing", "web-time", @@ -7260,23 +8084,23 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.13" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.5.10", + "socket2 0.6.1", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] @@ -7361,7 +8185,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "serde", ] @@ -7389,10 +8213,10 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eabd94c2f37801c20583fc49dd5cd6b0ba68c716787c2dd6ed18571e1e63117b" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "cassowary", "compact_str", - "crossterm", + "crossterm 0.28.1", "indoc", "instability", "itertools 0.13.0", @@ -7406,11 +8230,11 @@ dependencies = [ [[package]] name = "raw-cpuid" -version = "11.5.0" +version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" +checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", ] [[package]] @@ -7433,6 +8257,19 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "rcgen" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2" +dependencies = [ + "pem", + "ring", + "rustls-pki-types", + "time", + "yasna", +] + [[package]] name = "recvmsg" version = "1.0.0" @@ -7450,11 +8287,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.17" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", ] [[package]] @@ -7476,23 +8313,23 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.16", "libredox", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "ref-cast" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", @@ -7501,9 +8338,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", @@ -7513,9 +8350,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -7524,9 +8361,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.5" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "regress" @@ -7540,9 +8377,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.23" +version = "0.12.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" dependencies = [ "base64 0.22.1", "bytes", @@ -7584,14 +8421,14 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 1.0.2", + "webpki-roots 1.0.3", ] [[package]] name = "resolv-conf" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3" +checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799" [[package]] name = "reth" @@ -7646,7 +8483,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "futures-core", "futures-util", "metrics", @@ -7670,7 +8507,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "futures-core", "futures-util", "metrics", @@ -7694,7 +8531,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "derive_more", "metrics", "parking_lot", @@ -7720,7 +8557,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-signer", "alloy-signer-local", "derive_more", @@ -7754,7 +8591,7 @@ dependencies = [ "alloy-eips", "alloy-evm", "alloy-genesis", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-trie", "auto_impl", "derive_more", @@ -7774,7 +8611,7 @@ dependencies = [ "alloy-eips", "alloy-evm", "alloy-genesis", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-trie", "auto_impl", "derive_more", @@ -7806,12 +8643,12 @@ dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "backon", "clap", "comfy-table", - "crossterm", + "crossterm 0.28.1", "eyre", "fdlimit", "futures", @@ -7889,7 +8726,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "cfg-if", "eyre", "libc", @@ -7897,7 +8734,7 @@ dependencies = [ "reth-fs-util 1.8.2", "secp256k1 0.30.0", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tikv-jemallocator", ] @@ -7909,7 +8746,7 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-genesis", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-trie", "bytes", "modular-bitfield", @@ -7927,7 +8764,7 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-genesis", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-trie", "arbitrary", "bytes", @@ -7982,11 +8819,11 @@ version = "1.8.1" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "auto_impl", "reth-execution-types 1.8.1", "reth-primitives-traits 1.8.1", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -7995,11 +8832,11 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "auto_impl", "reth-execution-types 1.8.2", "reth-primitives-traits 1.8.2", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -8034,7 +8871,7 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-json-rpc", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-provider", "alloy-rpc-types-engine", "alloy-transport", @@ -8057,7 +8894,7 @@ name = "reth-db" version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "derive_more", "eyre", "metrics", @@ -8075,7 +8912,7 @@ dependencies = [ "strum 0.27.2", "sysinfo 0.33.1", "tempfile", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -8085,7 +8922,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-genesis", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "arbitrary", "bytes", "derive_more", @@ -8113,7 +8950,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-genesis", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "boyer-moore-magiclen", "eyre", "reth-chainspec 1.8.2", @@ -8132,7 +8969,7 @@ dependencies = [ "reth-trie-db", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", ] @@ -8142,7 +8979,7 @@ version = "1.8.1" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "reth-primitives-traits 1.8.1", ] @@ -8152,7 +8989,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "arbitrary", "bytes", "modular-bitfield", @@ -8166,7 +9003,7 @@ name = "reth-discv4" version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "discv5", "enr", @@ -8181,7 +9018,7 @@ dependencies = [ "schnellru", "secp256k1 0.30.0", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tracing", @@ -8192,7 +9029,7 @@ name = "reth-discv5" version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "derive_more", "discv5", @@ -8206,7 +9043,7 @@ dependencies = [ "reth-metrics 1.8.2", "reth-network-peers 1.8.2", "secp256k1 0.30.0", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", ] @@ -8216,7 +9053,7 @@ name = "reth-dns-discovery" version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "data-encoding", "enr", "hickory-resolver", @@ -8229,7 +9066,7 @@ dependencies = [ "secp256k1 0.30.0", "serde", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tracing", @@ -8242,7 +9079,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "futures", "futures-util", @@ -8263,7 +9100,7 @@ dependencies = [ "reth-tasks 1.8.2", "reth-testing-utils", "tempfile", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", @@ -8276,7 +9113,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "aes", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "block-padding", "byteorder", @@ -8293,7 +9130,7 @@ dependencies = [ "secp256k1 0.30.0", "sha2 0.10.9", "sha3", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", @@ -8307,7 +9144,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "eyre", "futures-util", @@ -8332,7 +9169,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "auto_impl", "reth-chain-state 1.8.1", @@ -8345,7 +9182,7 @@ dependencies = [ "reth-primitives-traits 1.8.1", "reth-trie-common 1.8.1", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -8355,7 +9192,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "auto_impl", "futures", @@ -8369,7 +9206,7 @@ dependencies = [ "reth-primitives-traits 1.8.2", "reth-trie-common 1.8.2", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", ] @@ -8393,7 +9230,7 @@ dependencies = [ "reth-prune", "reth-stages-api", "reth-tasks 1.8.2", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -8404,7 +9241,7 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-evm", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-engine", "derive_more", @@ -8445,7 +9282,7 @@ dependencies = [ "revm-primitives", "schnellru", "smallvec", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", ] @@ -8485,13 +9322,13 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "ethereum_ssz", "ethereum_ssz_derive", "reth-ethereum-primitives 1.8.2", "snap", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -8499,7 +9336,7 @@ name = "reth-era-downloader" version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "bytes", "eyre", "futures-util", @@ -8515,7 +9352,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "eyre", "futures-util", "reth-db-api", @@ -8539,7 +9376,7 @@ dependencies = [ "reth-consensus 1.8.1", "reth-execution-errors 1.8.1", "reth-storage-errors 1.8.1", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -8550,7 +9387,7 @@ dependencies = [ "reth-consensus 1.8.2", "reth-execution-errors 1.8.2", "reth-storage-errors 1.8.2", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -8559,7 +9396,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-chains", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "bytes", "derive_more", @@ -8574,7 +9411,7 @@ dependencies = [ "reth-primitives-traits 1.8.2", "serde", "snap", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", @@ -8590,7 +9427,7 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-hardforks", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "bytes", "derive_more", @@ -8599,7 +9436,7 @@ dependencies = [ "reth-ethereum-primitives 1.8.1", "reth-primitives-traits 1.8.1", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -8611,7 +9448,7 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-hardforks", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "bytes", "derive_more", @@ -8620,7 +9457,7 @@ dependencies = [ "reth-ethereum-primitives 1.8.2", "reth-primitives-traits 1.8.2", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -8652,7 +9489,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "reth-chainspec 1.8.2", "reth-consensus 1.8.2", "reth-consensus-common 1.8.2", @@ -8667,7 +9504,7 @@ version = "1.8.1" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-engine", "reth-engine-primitives 1.8.1", @@ -8676,7 +9513,7 @@ dependencies = [ "reth-primitives-traits 1.8.1", "serde", "sha2 0.10.9", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -8685,7 +9522,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-engine", "reth-engine-primitives 1.8.2", @@ -8694,7 +9531,7 @@ dependencies = [ "reth-primitives-traits 1.8.2", "serde", "sha2 0.10.9", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -8704,7 +9541,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e dependencies = [ "alloy-eip2124", "alloy-hardforks", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "auto_impl", "once_cell", "rustc-hash 2.1.1", @@ -8717,7 +9554,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-eip2124", "alloy-hardforks", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "auto_impl", "once_cell", "rustc-hash 2.1.1", @@ -8730,7 +9567,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-engine", "reth-basic-payload-builder 1.8.2", @@ -8759,7 +9596,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-eth", "alloy-serde", @@ -8776,7 +9613,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-eth", "alloy-serde", @@ -8807,7 +9644,7 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-evm", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "auto_impl", "derive_more", "futures-util", @@ -8828,7 +9665,7 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-evm", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "auto_impl", "derive_more", "futures-util", @@ -8851,7 +9688,7 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-evm", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "reth-chainspec 1.8.2", "reth-ethereum-forks 1.8.2", @@ -8869,11 +9706,11 @@ version = "1.8.1" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-evm", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "nybbles", "reth-storage-errors 1.8.1", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -8882,11 +9719,11 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-evm", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "nybbles", "reth-storage-errors 1.8.2", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -8897,7 +9734,7 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-evm", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "derive_more", "reth-ethereum-primitives 1.8.1", "reth-primitives-traits 1.8.1", @@ -8913,7 +9750,7 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-evm", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "derive_more", "reth-ethereum-primitives 1.8.2", "reth-primitives-traits 1.8.2", @@ -8930,7 +9767,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "eyre", "futures", "itertools 0.14.0", @@ -8955,7 +9792,7 @@ dependencies = [ "reth-tasks 1.8.2", "reth-tracing", "rmp-serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-util", "tracing", @@ -8967,7 +9804,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "reth-chain-state 1.8.2", "reth-execution-types 1.8.2", "reth-primitives-traits 1.8.2", @@ -8982,7 +9819,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e dependencies = [ "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -8992,7 +9829,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -9001,7 +9838,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-debug", "eyre", @@ -9034,7 +9871,7 @@ dependencies = [ "jsonrpsee 0.26.0", "pin-project", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", @@ -9047,14 +9884,14 @@ name = "reth-libmdbx" version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "byteorder", "dashmap 6.1.0", "derive_more", "parking_lot", "reth-mdbx-sys", "smallvec", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", ] @@ -9093,7 +9930,7 @@ name = "reth-net-banlist" version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", ] [[package]] @@ -9102,10 +9939,10 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "futures-util", - "if-addrs", + "if-addrs 0.13.4", "reqwest", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", ] @@ -9117,7 +9954,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "aquamarine", "auto_impl", @@ -9158,7 +9995,7 @@ dependencies = [ "secp256k1 0.30.0", "serde", "smallvec", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", @@ -9171,7 +10008,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-admin", "alloy-rpc-types-eth", "auto_impl", @@ -9185,7 +10022,7 @@ dependencies = [ "reth-network-types", "reth-tokio-util", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", ] @@ -9197,7 +10034,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "auto_impl", "derive_more", "futures", @@ -9218,11 +10055,11 @@ name = "reth-network-peers" version = "1.8.1" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "secp256k1 0.30.0", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", "url", ] @@ -9231,12 +10068,12 @@ name = "reth-network-peers" version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "enr", "secp256k1 0.30.0", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "url", ] @@ -9267,7 +10104,7 @@ dependencies = [ "memmap2", "reth-fs-util 1.8.2", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", "zstd", ] @@ -9303,7 +10140,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-provider", "alloy-rpc-types", "alloy-rpc-types-engine", @@ -9371,7 +10208,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "clap", "derive_more", @@ -9408,7 +10245,7 @@ dependencies = [ "serde", "shellexpand", "strum 0.27.2", - "thiserror 2.0.16", + "thiserror 2.0.17", "toml", "tracing", "url", @@ -9460,7 +10297,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "chrono", "futures-util", "reth-chain-state 1.8.2", @@ -9470,7 +10307,7 @@ dependencies = [ "reth-transaction-pool 1.8.2", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-tungstenite", @@ -9485,7 +10322,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "derive_more", "futures", @@ -9514,7 +10351,7 @@ dependencies = [ "metrics-exporter-prometheus 0.16.2", "metrics-process", "metrics-util 0.19.1", - "procfs", + "procfs 0.17.0", "reth-metrics 1.8.2", "reth-tasks 1.8.2", "tikv-jemalloc-ctl", @@ -9545,7 +10382,7 @@ dependencies = [ "alloy-eips", "alloy-genesis", "alloy-hardforks", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "derive_more", "op-alloy-consensus", "op-alloy-rpc-types", @@ -9568,7 +10405,7 @@ dependencies = [ "alloy-eips", "alloy-genesis", "alloy-hardforks", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "derive_more", "miniz_oxide", "op-alloy-consensus", @@ -9583,7 +10420,7 @@ dependencies = [ "serde", "serde_json", "tar-no-std", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -9593,7 +10430,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "clap", "derive_more", @@ -9641,7 +10478,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-trie", "reth-chainspec 1.8.1", "reth-consensus 1.8.1", @@ -9655,7 +10492,7 @@ dependencies = [ "reth-storage-errors 1.8.1", "reth-trie-common 1.8.1", "revm", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", ] @@ -9666,7 +10503,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-trie", "reth-chainspec 1.8.2", "reth-consensus 1.8.2", @@ -9680,7 +10517,7 @@ dependencies = [ "reth-storage-errors 1.8.2", "reth-trie-common 1.8.2", "revm", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", ] @@ -9693,7 +10530,7 @@ dependencies = [ "alloy-eips", "alloy-evm", "alloy-op-evm", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "op-alloy-consensus", "op-alloy-rpc-types-engine", "op-revm", @@ -9708,7 +10545,7 @@ dependencies = [ "reth-primitives-traits 1.8.1", "reth-storage-errors 1.8.1", "revm", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -9720,7 +10557,7 @@ dependencies = [ "alloy-eips", "alloy-evm", "alloy-op-evm", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "op-alloy-consensus", "op-alloy-rpc-types-engine", "op-revm", @@ -9736,7 +10573,7 @@ dependencies = [ "reth-rpc-eth-api", "reth-storage-errors 1.8.2", "revm", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -9746,7 +10583,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "alloy-serde", "brotli", @@ -9780,7 +10617,7 @@ version = "1.8.1" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-op-hardforks", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "once_cell", "reth-ethereum-forks 1.8.1", ] @@ -9791,7 +10628,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-op-hardforks", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "once_cell", "reth-ethereum-forks 1.8.2", ] @@ -9802,7 +10639,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "alloy-rpc-types-eth", "clap", @@ -9849,7 +10686,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-debug", "alloy-rpc-types-engine", @@ -9877,7 +10714,7 @@ dependencies = [ "revm", "serde", "sha2 0.10.9", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", ] @@ -9888,7 +10725,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-debug", "alloy-rpc-types-engine", @@ -9916,7 +10753,7 @@ dependencies = [ "revm", "serde", "sha2 0.10.9", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", ] @@ -9927,7 +10764,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "op-alloy-consensus", "reth-primitives-traits 1.8.1", @@ -9940,7 +10777,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "arbitrary", "bytes", @@ -9961,7 +10798,7 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-json-rpc", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-client", "alloy-rpc-types-debug", "alloy-rpc-types-engine", @@ -10008,7 +10845,7 @@ dependencies = [ "reth-transaction-pool 1.8.2", "revm", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tower 0.5.2", @@ -10033,7 +10870,7 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-json-rpc", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-client", "alloy-rpc-types-eth", "alloy-serde", @@ -10056,7 +10893,7 @@ dependencies = [ "reth-storage-api 1.8.1", "reth-transaction-pool 1.8.1", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", ] @@ -10069,7 +10906,7 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-json-rpc", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-client", "alloy-rpc-types-eth", "alloy-serde", @@ -10092,7 +10929,7 @@ dependencies = [ "reth-storage-api 1.8.2", "reth-transaction-pool 1.8.2", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", ] @@ -10103,7 +10940,7 @@ version = "1.8.1" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types", "futures-util", "metrics", @@ -10124,7 +10961,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types", "futures-util", "metrics", @@ -10169,7 +11006,7 @@ version = "1.8.1" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "auto_impl", "either", @@ -10179,7 +11016,7 @@ dependencies = [ "reth-errors 1.8.1", "reth-primitives-traits 1.8.1", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", ] @@ -10189,7 +11026,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "auto_impl", "either", @@ -10199,7 +11036,7 @@ dependencies = [ "reth-errors 1.8.2", "reth-primitives-traits 1.8.2", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", ] @@ -10209,7 +11046,7 @@ version = "1.8.1" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "reth-transaction-pool 1.8.1", ] @@ -10219,7 +11056,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "reth-transaction-pool 1.8.2", ] @@ -10265,7 +11102,7 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-genesis", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-eth", "alloy-trie", @@ -10281,7 +11118,7 @@ dependencies = [ "secp256k1 0.30.0", "serde", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -10292,7 +11129,7 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-genesis", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-eth", "alloy-trie", @@ -10314,7 +11151,7 @@ dependencies = [ "secp256k1 0.30.0", "serde", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -10324,7 +11161,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "dashmap 6.1.0", "eyre", @@ -10369,7 +11206,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "itertools 0.14.0", "metrics", "rayon", @@ -10385,7 +11222,7 @@ dependencies = [ "reth-static-file-types 1.8.2", "reth-tokio-util", "rustc-hash 2.1.1", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", ] @@ -10395,9 +11232,9 @@ name = "reth-prune-types" version = "1.8.1" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "derive_more", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -10405,13 +11242,13 @@ name = "reth-prune-types" version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "arbitrary", "derive_more", "modular-bitfield", "reth-codecs 1.8.2", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -10420,7 +11257,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "futures", "reth-eth-wire", @@ -10439,7 +11276,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "eyre", "futures", "parking_lot", @@ -10465,7 +11302,7 @@ name = "reth-revm" version = "1.8.1" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "reth-primitives-traits 1.8.1", "reth-storage-api 1.8.1", "reth-storage-errors 1.8.1", @@ -10478,7 +11315,7 @@ name = "reth-revm" version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "reth-primitives-traits 1.8.2", "reth-storage-api 1.8.2", "reth-storage-errors 1.8.2", @@ -10497,7 +11334,7 @@ dependencies = [ "alloy-evm", "alloy-genesis", "alloy-network", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-client", "alloy-rpc-types", @@ -10557,7 +11394,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.9", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tower 0.5.2", @@ -10573,7 +11410,7 @@ dependencies = [ "alloy-eips", "alloy-genesis", "alloy-json-rpc", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types", "alloy-rpc-types-admin", "alloy-rpc-types-anvil", @@ -10624,7 +11461,7 @@ dependencies = [ "reth-tasks 1.8.2", "reth-transaction-pool 1.8.2", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-util", "tower 0.5.2", @@ -10640,7 +11477,7 @@ dependencies = [ "alloy-consensus", "alloy-json-rpc", "alloy-network", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-eth", "alloy-signer", "auto_impl", @@ -10656,7 +11493,7 @@ dependencies = [ "reth-primitives-traits 1.8.2", "reth-storage-api 1.8.2", "revm-context", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -10665,7 +11502,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "async-trait", "jsonrpsee-core 0.26.0", @@ -10684,7 +11521,7 @@ dependencies = [ "reth-tasks 1.8.2", "reth-transaction-pool 1.8.2", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", ] @@ -10700,7 +11537,7 @@ dependencies = [ "alloy-evm", "alloy-json-rpc", "alloy-network", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-eth", "alloy-rpc-types-mev", @@ -10742,10 +11579,10 @@ dependencies = [ "alloy-eips", "alloy-evm", "alloy-network", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-client", "alloy-rpc-types-eth", - "alloy-sol-types 1.3.1", + "alloy-sol-types 1.4.1", "alloy-transport", "derive_more", "futures", @@ -10774,7 +11611,7 @@ dependencies = [ "revm-inspectors", "schnellru", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tracing", @@ -10800,7 +11637,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "jsonrpsee-core 0.26.0", "jsonrpsee-types 0.26.0", @@ -10817,7 +11654,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "bincode", "eyre", "futures-util", @@ -10853,7 +11690,7 @@ dependencies = [ "reth-trie 1.8.2", "reth-trie-db", "tempfile", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", ] @@ -10864,7 +11701,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "aquamarine", "auto_impl", "futures-util", @@ -10880,7 +11717,7 @@ dependencies = [ "reth-static-file", "reth-static-file-types 1.8.2", "reth-tokio-util", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", ] @@ -10890,7 +11727,7 @@ name = "reth-stages-types" version = "1.8.1" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "reth-trie-common 1.8.1", ] @@ -10899,7 +11736,7 @@ name = "reth-stages-types" version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "arbitrary", "bytes", "modular-bitfield", @@ -10913,7 +11750,7 @@ name = "reth-static-file" version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "parking_lot", "rayon", "reth-codecs 1.8.2", @@ -10933,7 +11770,7 @@ name = "reth-static-file-types" version = "1.8.1" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "derive_more", "serde", "strum 0.27.2", @@ -10944,7 +11781,7 @@ name = "reth-static-file-types" version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "clap", "derive_more", "serde", @@ -10958,7 +11795,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "auto_impl", "reth-chainspec 1.8.1", @@ -10980,7 +11817,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "auto_impl", "reth-chainspec 1.8.2", @@ -11002,14 +11839,14 @@ version = "1.8.1" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "derive_more", "reth-primitives-traits 1.8.1", "reth-prune-types 1.8.1", "reth-static-file-types 1.8.1", "revm-database-interface", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -11018,14 +11855,14 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "derive_more", "reth-primitives-traits 1.8.2", "reth-prune-types 1.8.2", "reth-static-file-types 1.8.2", "revm-database-interface", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -11038,7 +11875,7 @@ dependencies = [ "futures-util", "metrics", "reth-metrics 1.8.1", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", "tracing-futures", @@ -11056,7 +11893,7 @@ dependencies = [ "pin-project", "rayon", "reth-metrics 1.8.2", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", "tracing-futures", @@ -11070,7 +11907,7 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-genesis", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "rand 0.8.5", "rand 0.9.2", "reth-ethereum-primitives 1.8.2", @@ -11124,11 +11961,11 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "aquamarine", "auto_impl", - "bitflags 2.9.2", + "bitflags 2.9.4", "futures-util", "metrics", "parking_lot", @@ -11150,7 +11987,7 @@ dependencies = [ "serde", "serde_json", "smallvec", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tracing", @@ -11163,11 +12000,11 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "aquamarine", "auto_impl", - "bitflags 2.9.2", + "bitflags 2.9.4", "futures-util", "metrics", "parking_lot", @@ -11191,7 +12028,7 @@ dependencies = [ "serde", "serde_json", "smallvec", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tracing", @@ -11204,7 +12041,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-trie", "auto_impl", @@ -11226,7 +12063,7 @@ source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-trie", "auto_impl", @@ -11250,7 +12087,7 @@ version = "1.8.1" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-trie", "derive_more", @@ -11267,7 +12104,7 @@ version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ "alloy-consensus", - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-eth", "alloy-serde", @@ -11292,7 +12129,7 @@ name = "reth-trie-db" version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "reth-db-api", "reth-execution-errors 1.8.2", "reth-primitives-traits 1.8.2", @@ -11305,7 +12142,7 @@ name = "reth-trie-parallel" version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "derive_more", "itertools 0.14.0", @@ -11320,7 +12157,7 @@ dependencies = [ "reth-trie-common 1.8.2", "reth-trie-db", "reth-trie-sparse 1.8.2", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", ] @@ -11330,7 +12167,7 @@ name = "reth-trie-sparse" version = "1.8.1" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-trie", "auto_impl", @@ -11346,7 +12183,7 @@ name = "reth-trie-sparse" version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-trie", "auto_impl", @@ -11365,7 +12202,7 @@ name = "reth-trie-sparse-parallel" version = "1.8.2" source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rlp", "alloy-trie", "metrics", @@ -11528,10 +12365,10 @@ version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9b329afcc0f9fd5adfa2c6349a7435a8558e82bcae203142103a9a95e2a63b6" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-eth", "alloy-rpc-types-trace", - "alloy-sol-types 1.3.1", + "alloy-sol-types 1.4.1", "anstyle", "boa_engine", "boa_gc", @@ -11539,7 +12376,7 @@ dependencies = [ "revm", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -11586,7 +12423,7 @@ version = "20.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5aa29d9da06fe03b249b6419b33968ecdf92ad6428e2f012dc57bcd619b5d94e" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "num_enum", "once_cell", "serde", @@ -11598,7 +12435,7 @@ version = "7.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f64fbacb86008394aaebd3454f9643b7d5a782bd251135e17c5b33da592d84d" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "revm-bytecode", "revm-primitives", "serde", @@ -11708,7 +12545,7 @@ name = "rollup-boost" version = "0.1.0" source = "git+http://github.com/flashbots/rollup-boost?rev=b86af43969557bee18f17ec1d6bcd3e984f910b2#b86af43969557bee18f17ec1d6bcd3e984f910b2" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "alloy-rpc-types-eth", "alloy-serde", @@ -11740,7 +12577,7 @@ dependencies = [ "serde_json", "sha2 0.10.9", "testcontainers 0.23.3", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-tungstenite", "tokio-util", @@ -11760,11 +12597,29 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" +[[package]] +name = "rtnetlink" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a552eb82d19f38c3beed3f786bd23aa434ceb9ac43ab44419ca6d67a7e186c0" +dependencies = [ + "futures", + "log", + "netlink-packet-core", + "netlink-packet-route", + "netlink-packet-utils", + "netlink-proto", + "netlink-sys", + "nix", + "thiserror 1.0.69", + "tokio", +] + [[package]] name = "rug" -version = "1.27.0" +version = "1.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4207e8d668e5b8eb574bda8322088ccd0d7782d3d03c7e8d562e82ed82bdcbc3" +checksum = "58ad2e973fe3c3214251a840a621812a4f40468da814b1a3d6947d433c2af11f" dependencies = [ "az", "gmp-mpfr-sys", @@ -11774,14 +12629,15 @@ dependencies = [ [[package]] name = "ruint" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecb38f82477f20c5c3d62ef52d7c4e536e38ea9b73fb570a20c5cae0e14bcf6" +checksum = "a68df0380e5c9d20ce49534f292a36a7514ae21350726efe1865bdb1fa91d278" dependencies = [ "alloy-rlp", "arbitrary", "ark-ff 0.3.0", "ark-ff 0.4.2", + "ark-ff 0.5.0", "bytes", "fastrlp 0.3.1", "fastrlp 0.4.0", @@ -11795,7 +12651,7 @@ dependencies = [ "rand 0.9.2", "rlp", "ruint-macro", - "serde", + "serde_core", "valuable", "zeroize", ] @@ -11806,12 +12662,6 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" -[[package]] -name = "rustc-demangle" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" - [[package]] name = "rustc-hash" version = "1.1.0" @@ -11848,7 +12698,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.26", + "semver 1.0.27", ] [[package]] @@ -11866,7 +12716,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "errno", "libc", "linux-raw-sys 0.4.15", @@ -11875,15 +12725,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.8" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "errno", "libc", - "linux-raw-sys 0.9.4", - "windows-sys 0.60.2", + "linux-raw-sys 0.11.0", + "windows-sys 0.61.2", ] [[package]] @@ -11911,7 +12761,7 @@ dependencies = [ "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.3.0", + "security-framework 3.5.1", ] [[package]] @@ -11948,7 +12798,7 @@ dependencies = [ "rustls-native-certs", "rustls-platform-verifier-android", "rustls-webpki", - "security-framework 3.3.0", + "security-framework 3.5.1", "security-framework-sys", "webpki-root-certs 0.26.11", "windows-sys 0.59.0", @@ -11980,9 +12830,9 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rusty-fork" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" dependencies = [ "fnv", "quick-error", @@ -11990,6 +12840,17 @@ dependencies = [ "wait-timeout", ] +[[package]] +name = "rw-stream-sink" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8c9026ff5d2f23da5e45bbc283f156383001bfb09c4e44256d02c1a685fe9a1" +dependencies = [ + "futures", + "pin-project", + "static_assertions", +] + [[package]] name = "ryu" version = "1.0.20" @@ -12013,11 +12874,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -12055,12 +12916,6 @@ dependencies = [ "hashbrown 0.13.2", ] -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - [[package]] name = "scopeguard" version = "1.2.0" @@ -12129,7 +12984,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -12138,11 +12993,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.3.0" +version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c" +checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -12151,9 +13006,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ "core-foundation-sys", "libc", @@ -12170,11 +13025,12 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" dependencies = [ "serde", + "serde_core", ] [[package]] @@ -12200,9 +13056,9 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.226" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dca6411025b24b60bfa7ec1fe1f8e710ac09782dca409ee8237ba74b51295fd" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", "serde_derive", @@ -12219,27 +13075,28 @@ dependencies = [ [[package]] name = "serde_bytes" -version = "0.11.17" +version = "0.11.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" +checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" dependencies = [ "serde", + "serde_core", ] [[package]] name = "serde_core" -version = "1.0.226" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba2ba63999edb9dac981fb34b3e5c0d111a69b0924e253ed29d83f7c99e966a4" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.226" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8db53ae22f34573731bafa1db20f04027b2d25e02d8205921b569171699cdb33" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -12248,25 +13105,27 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.143" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.4", "itoa", "memchr", "ryu", "serde", + "serde_core", ] [[package]] name = "serde_path_to_error" -version = "0.1.17" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" dependencies = [ "itoa", "serde", + "serde_core", ] [[package]] @@ -12303,19 +13162,18 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.14.0" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" +checksum = "6093cd8c01b25262b84927e0f7151692158fab02d961e04c979d3903eba7ecc5" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.10.0", + "indexmap 2.11.4", "schemars 0.9.0", "schemars 1.0.4", - "serde", - "serde_derive", + "serde_core", "serde_json", "serde_with_macros", "time", @@ -12323,11 +13181,11 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.14.0" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" +checksum = "a7e6c180db0816026a61afa1cff5344fb7ebded7e4d3062772179f2501481c27" dependencies = [ - "darling 0.20.11", + "darling 0.21.3", "proc-macro2", "quote", "syn 2.0.106", @@ -12339,7 +13197,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.4", "itoa", "ryu", "serde", @@ -12481,6 +13339,12 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + [[package]] name = "simple_asn1" version = "0.6.3" @@ -12489,7 +13353,7 @@ checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" dependencies = [ "num-bigint", "num-traits", - "thiserror 2.0.16", + "thiserror 2.0.17", "time", ] @@ -12542,6 +13406,23 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" +[[package]] +name = "snow" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" +dependencies = [ + "aes-gcm", + "blake2", + "chacha20poly1305", + "curve25519-dalek", + "rand_core 0.6.4", + "ring", + "rustc_version 0.4.1", + "sha2 0.10.9", + "subtle", +] + [[package]] name = "socket2" version = "0.5.10" @@ -12554,12 +13435,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -12596,9 +13477,9 @@ checksum = "3b9b39299b249ad65f3b7e96443bad61c02ca5cd3589f46cb6d610a0fd6c0d6a" [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "static_assertions" @@ -12708,9 +13589,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4560533fbd6914b94a8fb5cc803ed6801c3455668db3b810702c57612bac9412" +checksum = "ab4e6eed052a117409a1a744c8bda9c3ea6934597cf7419f791cb7d590871c4c" dependencies = [ "paste", "proc-macro2", @@ -12720,9 +13601,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0b198d366dbec045acfcd97295eb653a7a2b40e4dc764ef1e79aafcad439d3c" +checksum = "ff790eb176cc81bb8936aed0f7b9f14fc4670069a2d371b3e3b0ecce908b2cb3" dependencies = [ "paste", "proc-macro2", @@ -12795,7 +13676,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -12839,7 +13720,7 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac9ee8b664c9f1740cd813fea422116f8ba29997bb7c878d1940424889802897" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "log", "num-traits", ] @@ -12868,14 +13749,14 @@ dependencies = [ "serde", "tokio", "ureq", - "x509-parser", + "x509-parser 0.15.1", ] [[package]] name = "tdx-quote-provider" version = "0.1.0" dependencies = [ - "axum 0.8.4", + "axum 0.8.6", "clap", "dotenvy", "eyre", @@ -12895,15 +13776,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.21.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", - "rustix 1.0.8", - "windows-sys 0.60.2", + "rustix 1.1.2", + "windows-sys 0.61.2", ] [[package]] @@ -12927,7 +13808,7 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-tar", @@ -12956,7 +13837,7 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-tar", @@ -12981,11 +13862,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.16", + "thiserror-impl 2.0.17", ] [[package]] @@ -13001,9 +13882,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", @@ -13061,9 +13942,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.41" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", "itoa", @@ -13079,15 +13960,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -13139,29 +14020,26 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.47.1" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ - "backtrace", "bytes", - "io-uring", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", - "slab", - "socket2 0.6.0", + "socket2 0.6.1", "tokio-macros", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", @@ -13180,9 +14058,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ "rustls", "tokio", @@ -13257,8 +14135,8 @@ checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned", - "toml_datetime", - "toml_edit", + "toml_datetime 0.6.11", + "toml_edit 0.22.27", ] [[package]] @@ -13270,20 +14148,50 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_datetime" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +dependencies = [ + "serde_core", +] + [[package]] name = "toml_edit" version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.4", "serde", "serde_spanned", - "toml_datetime", + "toml_datetime 0.6.11", "toml_write", "winnow", ] +[[package]] +name = "toml_edit" +version = "0.23.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +dependencies = [ + "indexmap 2.11.4", + "toml_datetime 0.7.3", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +dependencies = [ + "winnow", +] + [[package]] name = "toml_write" version = "0.1.2" @@ -13349,7 +14257,7 @@ dependencies = [ "futures-core", "futures-util", "hdrhistogram", - "indexmap 2.10.0", + "indexmap 2.11.4", "pin-project-lite", "slab", "sync_wrapper", @@ -13368,7 +14276,7 @@ checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ "async-compression", "base64 0.22.1", - "bitflags 2.9.2", + "bitflags 2.9.4", "bytes", "futures-core", "futures-util", @@ -13574,7 +14482,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee44f4cef85f88b4dea21c0b1f58320bdf35715cf56d840969487cff00613321" dependencies = [ - "alloy-primitives 1.3.1", + "alloy-primitives 1.4.1", "ethereum_hashing", "ethereum_ssz", "smallvec", @@ -13605,9 +14513,9 @@ dependencies = [ [[package]] name = "triomphe" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8f7726da4807b58ea5c96fdc122f80702030edc33b35aff9190a51148ccc85" +checksum = "dd69c5aa8f924c7519d6372789a74eac5b94fb0f8fcf0d4a97eb0bfc3e785f39" [[package]] name = "try-lock" @@ -13664,15 +14572,15 @@ dependencies = [ "rustls", "rustls-pki-types", "sha1", - "thiserror 2.0.16", + "thiserror 2.0.17", "utf-8", ] [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "ucd-trie" @@ -13718,9 +14626,9 @@ checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" [[package]] name = "unicode-segmentation" @@ -13773,6 +14681,12 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" +[[package]] +name = "unsigned-varint" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" + [[package]] name = "unsigned-varint" version = "0.8.0" @@ -13805,9 +14719,9 @@ dependencies = [ [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", @@ -13841,11 +14755,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.18.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f33196643e165781c20a5ead5582283a7dacbb87855d867fbc2df3f81eddc1be" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "js-sys", "serde", "sha1_smol", @@ -13957,31 +14871,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" dependencies = [ "bumpalo", "log", @@ -13993,9 +14908,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" dependencies = [ "cfg-if", "js-sys", @@ -14006,9 +14921,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -14016,9 +14931,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", @@ -14029,9 +14944,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" dependencies = [ "unicode-ident", ] @@ -14051,9 +14966,9 @@ dependencies = [ [[package]] name = "wasmtimer" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8d49b5d6c64e8558d9b1b065014426f35c18de636895d24893dbbd329743446" +checksum = "1c598d6b99ea013e35844697fc4670d08339d5cda15588f193c6beedd12f644b" dependencies = [ "futures", "js-sys", @@ -14065,9 +14980,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" dependencies = [ "js-sys", "wasm-bindgen", @@ -14089,14 +15004,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75c7f0ef91146ebfb530314f5f1d24528d7f0767efbfd31dce919275413e393e" dependencies = [ - "webpki-root-certs 1.0.2", + "webpki-root-certs 1.0.3", ] [[package]] name = "webpki-root-certs" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4ffd8df1c57e87c325000a3d6ef93db75279dc3a231125aac571650f22b12a" +checksum = "05d651ec480de84b762e7be71e6efa7461699c19d9e2c272c8d93455f567786e" dependencies = [ "rustls-pki-types", ] @@ -14107,14 +15022,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.2", + "webpki-roots 1.0.3", ] [[package]] name = "webpki-roots" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" +checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8" dependencies = [ "rustls-pki-types", ] @@ -14133,9 +15048,9 @@ dependencies = [ [[package]] name = "widestring" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" +checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" [[package]] name = "winapi" @@ -14155,11 +15070,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -14170,21 +15085,21 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.57.0" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" +checksum = "efc5cf48f83140dcaab716eeaea345f9e93d0018fb81162753a3f76c3397b538" dependencies = [ - "windows-core 0.57.0", + "windows-core 0.53.0", "windows-targets 0.52.6", ] [[package]] name = "windows" -version = "0.58.0" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" dependencies = [ - "windows-core 0.58.0", + "windows-core 0.57.0", "windows-targets 0.52.6", ] @@ -14194,11 +15109,23 @@ version = "0.61.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ - "windows-collections", + "windows-collections 0.2.0", "windows-core 0.61.2", - "windows-future", - "windows-link", - "windows-numerics", + "windows-future 0.2.1", + "windows-link 0.1.3", + "windows-numerics 0.2.0", +] + +[[package]] +name = "windows" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" +dependencies = [ + "windows-collections 0.3.2", + "windows-core 0.62.2", + "windows-future 0.3.2", + "windows-numerics 0.3.1", ] [[package]] @@ -14210,28 +15137,34 @@ dependencies = [ "windows-core 0.61.2", ] +[[package]] +name = "windows-collections" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" +dependencies = [ + "windows-core 0.62.2", +] + [[package]] name = "windows-core" -version = "0.57.0" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" +checksum = "9dcc5b895a6377f1ab9fa55acedab1fd5ac0db66ad1e6c7f47e28a22e446a5dd" dependencies = [ - "windows-implement 0.57.0", - "windows-interface 0.57.0", "windows-result 0.1.2", "windows-targets 0.52.6", ] [[package]] name = "windows-core" -version = "0.58.0" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" dependencies = [ - "windows-implement 0.58.0", - "windows-interface 0.58.0", - "windows-result 0.2.0", - "windows-strings 0.1.0", + "windows-implement 0.57.0", + "windows-interface 0.57.0", + "windows-result 0.1.2", "windows-targets 0.52.6", ] @@ -14241,13 +15174,26 @@ version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-implement 0.60.0", - "windows-interface 0.59.1", - "windows-link", + "windows-implement 0.60.2", + "windows-interface 0.59.3", + "windows-link 0.1.3", "windows-result 0.3.4", "windows-strings 0.4.2", ] +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement 0.60.2", + "windows-interface 0.59.3", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + [[package]] name = "windows-future" version = "0.2.1" @@ -14255,26 +15201,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ "windows-core 0.61.2", - "windows-link", - "windows-threading", + "windows-link 0.1.3", + "windows-threading 0.1.0", ] [[package]] -name = "windows-implement" -version = "0.57.0" +name = "windows-future" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", + "windows-core 0.62.2", + "windows-link 0.2.1", + "windows-threading 0.2.1", ] [[package]] name = "windows-implement" -version = "0.58.0" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", @@ -14283,9 +15229,9 @@ dependencies = [ [[package]] name = "windows-implement" -version = "0.60.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", @@ -14305,9 +15251,9 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.58.0" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", @@ -14315,21 +15261,16 @@ dependencies = [ ] [[package]] -name = "windows-interface" -version = "0.59.1" +name = "windows-link" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] name = "windows-link" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-numerics" @@ -14338,7 +15279,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ "windows-core 0.61.2", - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-numerics" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" +dependencies = [ + "windows-core 0.62.2", + "windows-link 0.2.1", ] [[package]] @@ -14347,7 +15298,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" dependencies = [ - "windows-link", + "windows-link 0.1.3", "windows-result 0.3.4", "windows-strings 0.4.2", ] @@ -14363,39 +15314,38 @@ dependencies = [ [[package]] name = "windows-result" -version = "0.2.0" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-targets 0.52.6", + "windows-link 0.1.3", ] [[package]] name = "windows-result" -version = "0.3.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] name = "windows-strings" -version = "0.1.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "windows-result 0.2.0", - "windows-targets 0.52.6", + "windows-link 0.1.3", ] [[package]] name = "windows-strings" -version = "0.4.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -14440,7 +15390,16 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.3", + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", ] [[package]] @@ -14491,19 +15450,19 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.3" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows-link", - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "windows-link 0.2.1", + "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]] @@ -14512,7 +15471,16 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-threading" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" +dependencies = [ + "windows-link 0.2.1", ] [[package]] @@ -14535,9 +15503,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" @@ -14559,9 +15527,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" @@ -14583,9 +15551,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" @@ -14595,9 +15563,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" @@ -14619,9 +15587,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" @@ -14643,9 +15611,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" @@ -14667,9 +15635,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" @@ -14691,15 +15659,15 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" -version = "0.7.12" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] @@ -14715,13 +15683,10 @@ dependencies = [ ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.9.2", -] +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "write16" @@ -14754,7 +15719,7 @@ dependencies = [ "pharos", "rustc_version 0.4.1", "send_wrapper 0.6.0", - "thiserror 2.0.16", + "thiserror 2.0.17", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -14769,31 +15734,106 @@ dependencies = [ "tap", ] +[[package]] +name = "x25519-dalek" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +dependencies = [ + "curve25519-dalek", + "rand_core 0.6.4", + "serde", + "zeroize", +] + [[package]] name = "x509-parser" version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7069fba5b66b9193bd2c5d3d4ff12b839118f6bcbef5328efafafb5395cf63da" dependencies = [ - "asn1-rs", + "asn1-rs 0.5.2", "data-encoding", - "der-parser", + "der-parser 8.2.0", "lazy_static", "nom", - "oid-registry", + "oid-registry 0.6.1", "rusticata-macros", "thiserror 1.0.69", "time", ] +[[package]] +name = "x509-parser" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4569f339c0c402346d4a75a9e39cf8dad310e287eef1ff56d4c68e5067f53460" +dependencies = [ + "asn1-rs 0.7.1", + "data-encoding", + "der-parser 10.0.0", + "lazy_static", + "nom", + "oid-registry 0.8.1", + "rusticata-macros", + "thiserror 2.0.17", + "time", +] + [[package]] name = "xattr" -version = "1.5.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af3a19837351dc82ba89f8a125e22a3c475f05aba604acc023d62b2739ae2909" +checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", - "rustix 1.0.8", + "rustix 1.1.2", +] + +[[package]] +name = "xml-rs" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" + +[[package]] +name = "xmltree" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7d8a75eaf6557bb84a65ace8609883db44a29951042ada9b393151532e41fcb" +dependencies = [ + "xml-rs", +] + +[[package]] +name = "yamux" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed0164ae619f2dc144909a9f082187ebb5893693d8c0196e8085283ccd4b776" +dependencies = [ + "futures", + "log", + "nohash-hasher", + "parking_lot", + "pin-project", + "rand 0.8.5", + "static_assertions", +] + +[[package]] +name = "yamux" +version = "0.13.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6927cfe0edfae4b26a369df6bad49cd0ef088c0ec48f4045b2084bcaedc10246" +dependencies = [ + "futures", + "log", + "nohash-hasher", + "parking_lot", + "pin-project", + "rand 0.9.2", + "static_assertions", + "web-time", ] [[package]] @@ -14802,6 +15842,15 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" +[[package]] +name = "yasna" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" +dependencies = [ + "time", +] + [[package]] name = "yoke" version = "0.7.5" @@ -14852,18 +15901,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", @@ -14893,9 +15942,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" dependencies = [ "zeroize_derive", ] @@ -14986,9 +16035,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.15+zstd.1.5.7" +version = "2.0.16+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" dependencies = [ "cc", "pkg-config", diff --git a/Cargo.toml b/Cargo.toml index b31e0019a..947ab7b49 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ repository = "https://github.com/flashbots/op-rbuilder" exclude = [".github/"] [workspace] -members = [ "crates/op-rbuilder", "crates/tdx-quote-provider"] +members = [ "crates/op-rbuilder", "crates/p2p", "crates/tdx-quote-provider"] default-members = ["crates/op-rbuilder"] resolver = "2" @@ -182,6 +182,9 @@ flate2 = "1.0.37" prometheus = "0.13.4" ctor = "0.2" dashmap = "6.1" +hex = "0.4" +futures = "0.3" +futures-util = "0.3.31" lazy_static = "1.4.0" tikv-jemallocator = { version = "0.6" } diff --git a/crates/op-rbuilder/Cargo.toml b/crates/op-rbuilder/Cargo.toml index 8ae251460..d49d49518 100644 --- a/crates/op-rbuilder/Cargo.toml +++ b/crates/op-rbuilder/Cargo.toml @@ -12,6 +12,8 @@ default-run = "op-rbuilder" workspace = true [dependencies] +p2p = { path = "../p2p" } + reth.workspace = true reth-optimism-node.workspace = true reth-optimism-cli.workspace = true @@ -109,10 +111,11 @@ url.workspace = true anyhow = "1" opentelemetry = { workspace = true, optional = true } dashmap.workspace = true +hex = { workspace = true } +futures = { workspace = true } +futures-util = { workspace = true } tower = "0.5" -futures = "0.3" -futures-util = "0.3.31" time = { version = "0.3.36", features = ["macros", "formatting", "parsing"] } chrono = "0.4" uuid = { version = "1.6.1", features = ["serde", "v5", "v4"] } @@ -124,7 +127,6 @@ serde_yaml = { version = "0.9" } moka = "0.12" http = "1.0" sha3 = "0.10" -hex = "0.4" reqwest = "0.12.23" k256 = "0.13.4" diff --git a/crates/op-rbuilder/src/args/op.rs b/crates/op-rbuilder/src/args/op.rs index bd860f155..b0b90f848 100644 --- a/crates/op-rbuilder/src/args/op.rs +++ b/crates/op-rbuilder/src/args/op.rs @@ -166,6 +166,10 @@ pub struct FlashblocksArgs { env = "FLASHBLOCK_NUMBER_CONTRACT_ADDRESS" )] pub flashblocks_number_contract_address: Option
, + + /// Flashblocks p2p configuration + #[command(flatten)] + pub p2p: FlashblocksP2pArgs, } impl Default for FlashblocksArgs { @@ -178,6 +182,49 @@ impl Default for FlashblocksArgs { } } +#[derive(Debug, Clone, PartialEq, Eq, clap::Args)] +pub struct FlashblocksP2pArgs { + /// Enable libp2p networking for flashblock propagation + #[arg( + long = "flashblocks.p2p_enabled", + env = "FLASHBLOCK_P2P_ENABLED", + default_value = "false" + )] + pub p2p_enabled: bool, + + /// Port for the flashblocks p2p node + #[arg( + long = "flashblocks.p2p_port", + env = "FLASHBLOCK_P2P_PORT", + default_value = "9009" + )] + pub p2p_port: u16, + + /// Path to the file containing a hex-encoded libp2p private key. + /// If the file does not exist, a new key will be generated. + #[arg( + long = "flashblocks.p2p_private_key_file", + env = "FLASHBLOCK_P2P_PRIVATE_KEY_FILE" + )] + pub p2p_private_key_file: Option, + + /// Comma-separated list of multiaddrs of known Flashblocks peers + /// Example: "/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ,/ip4/104.131.131.82/udp/4001/quic-v1/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ" + #[arg( + long = "flashblocks.p2p_known_peers", + env = "FLASHBLOCK_P2P_KNOWN_PEERS" + )] + pub p2p_known_peers: Option, + + /// Maximum number of peers for the flashblocks p2p node + #[arg( + long = "flashblocks.p2p_max_peer_count", + env = "FLASHBLOCK_P2P_MAX_PEER_COUNT", + default_value = "50" + )] + pub p2p_max_peer_count: u32, +} + /// Parameters for telemetry configuration #[derive(Debug, Clone, Default, PartialEq, Eq, clap::Args)] pub struct TelemetryArgs { diff --git a/crates/op-rbuilder/src/builders/builder_tx.rs b/crates/op-rbuilder/src/builders/builder_tx.rs index 89b219978..11194a384 100644 --- a/crates/op-rbuilder/src/builders/builder_tx.rs +++ b/crates/op-rbuilder/src/builders/builder_tx.rs @@ -4,7 +4,7 @@ use alloy_evm::Database; use alloy_op_evm::OpEvm; use alloy_primitives::{ Address, B256, Bytes, TxKind, U256, - map::foldhash::{HashMap, HashSet, HashSetExt}, + map::{HashMap, HashSet}, }; use alloy_sol_types::{ContractError, Revert, SolCall, SolError, SolInterface}; use core::fmt::Debug; @@ -192,7 +192,7 @@ pub trait BuilderTransactions = HashSet::new(); + let mut invalid = HashSet::new(); for builder_tx in builder_txs.iter() { if builder_tx.is_top_of_block != top_of_block { diff --git a/crates/op-rbuilder/src/builders/context.rs b/crates/op-rbuilder/src/builders/context.rs index 032e97e69..54894d280 100644 --- a/crates/op-rbuilder/src/builders/context.rs +++ b/crates/op-rbuilder/src/builders/context.rs @@ -544,9 +544,9 @@ impl OpPayloadBuilderCtx { info.executed_transactions.push(tx.into_inner()); } - let payload_tx_simulation_time = execute_txs_start_time.elapsed(); + let payload_transaction_simulation_time = execute_txs_start_time.elapsed(); self.metrics.set_payload_builder_metrics( - payload_tx_simulation_time, + payload_transaction_simulation_time, num_txs_considered, num_txs_simulated, num_txs_simulated_success, diff --git a/crates/op-rbuilder/src/builders/flashblocks/config.rs b/crates/op-rbuilder/src/builders/flashblocks/config.rs index f2dca7759..a3345edbd 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/config.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/config.rs @@ -38,6 +38,21 @@ pub struct FlashblocksConfig { /// /// If set a builder tx will be added to the start of every flashblock instead of the regular builder tx. pub flashblocks_number_contract_address: Option
, + + /// Whether to enable the p2p node for flashblocks + pub p2p_enabled: bool, + + /// Port for the p2p node + pub p2p_port: u16, + + /// Optional hex-encoded private key file path for the p2p node + pub p2p_private_key_file: Option, + + /// Comma-separated list of multiaddresses of known peers to connect to + pub p2p_known_peers: Option, + + /// Maximum number of peers for the p2p node + pub p2p_max_peer_count: u32, } impl Default for FlashblocksConfig { @@ -49,6 +64,11 @@ impl Default for FlashblocksConfig { fixed: false, calculate_state_root: true, flashblocks_number_contract_address: None, + p2p_enabled: false, + p2p_port: 9009, + p2p_private_key_file: None, + p2p_known_peers: None, + p2p_max_peer_count: 50, } } } @@ -80,6 +100,11 @@ impl TryFrom for FlashblocksConfig { fixed, calculate_state_root, flashblocks_number_contract_address, + p2p_enabled: args.flashblocks.p2p.p2p_enabled, + p2p_port: args.flashblocks.p2p.p2p_port, + p2p_private_key_file: args.flashblocks.p2p.p2p_private_key_file, + p2p_known_peers: args.flashblocks.p2p.p2p_known_peers, + p2p_max_peer_count: args.flashblocks.p2p.p2p_max_peer_count, }) } } diff --git a/crates/op-rbuilder/src/builders/flashblocks/mod.rs b/crates/op-rbuilder/src/builders/flashblocks/mod.rs index 10503fa5d..643bf39a3 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/mod.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/mod.rs @@ -6,7 +6,9 @@ use service::FlashblocksServiceBuilder; mod best_txs; mod builder_tx; mod config; +mod p2p; mod payload; +mod payload_handler; mod service; mod wspub; diff --git a/crates/op-rbuilder/src/builders/flashblocks/p2p.rs b/crates/op-rbuilder/src/builders/flashblocks/p2p.rs new file mode 100644 index 000000000..9f947d959 --- /dev/null +++ b/crates/op-rbuilder/src/builders/flashblocks/p2p.rs @@ -0,0 +1,60 @@ +use alloy_primitives::U256; +use reth::{core::primitives::SealedBlock, payload::PayloadId}; +use reth_optimism_payload_builder::OpBuiltPayload as RethOpBuiltPayload; +use reth_optimism_primitives::OpBlock; +use serde::{Deserialize, Serialize}; + +pub(super) const AGENT_VERSION: &str = "op-rbuilder/1.0.0"; +pub(super) const FLASHBLOCKS_STREAM_PROTOCOL: p2p::StreamProtocol = + p2p::StreamProtocol::new("/flashblocks/1.0.0"); + +#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] +pub(super) enum Message { + OpBuiltPayload(OpBuiltPayload), +} + +impl p2p::Message for Message { + fn protocol(&self) -> p2p::StreamProtocol { + FLASHBLOCKS_STREAM_PROTOCOL + } +} + +/// Internal type analogous to [`reth_optimism_payload_builder::OpBuiltPayload`] +/// which additionally implements `Serialize` and `Deserialize` for p2p transmission. +#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] +pub(crate) struct OpBuiltPayload { + /// Identifier of the payload + pub(crate) id: PayloadId, + /// Sealed block + pub(crate) block: SealedBlock, + /// The fees of the block + pub(crate) fees: U256, +} + +impl From for Message { + fn from(value: RethOpBuiltPayload) -> Self { + Message::OpBuiltPayload(value.into()) + } +} + +impl From for Message { + fn from(value: OpBuiltPayload) -> Self { + Message::OpBuiltPayload(value) + } +} + +impl From for RethOpBuiltPayload { + fn from(value: OpBuiltPayload) -> Self { + RethOpBuiltPayload::new(value.id, value.block.into(), value.fees, None) + } +} + +impl From for OpBuiltPayload { + fn from(value: RethOpBuiltPayload) -> Self { + OpBuiltPayload { + id: value.id(), + block: value.block().clone(), + fees: value.fees(), + } + } +} diff --git a/crates/op-rbuilder/src/builders/flashblocks/payload.rs b/crates/op-rbuilder/src/builders/flashblocks/payload.rs index e350260bd..9e2237bc8 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/payload.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/payload.rs @@ -27,9 +27,8 @@ use reth_node_api::{Block, NodePrimitives, PayloadBuilderError}; use reth_optimism_consensus::{calculate_receipt_root_no_memo_optimism, isthmus}; use reth_optimism_evm::{OpEvmConfig, OpNextBlockEnvAttributes}; use reth_optimism_forks::OpHardforks; -use reth_optimism_node::{OpBuiltPayload, OpEngineTypes, OpPayloadBuilderAttributes}; +use reth_optimism_node::{OpBuiltPayload, OpPayloadBuilderAttributes}; use reth_optimism_primitives::{OpPrimitives, OpReceipt, OpTransactionSigned}; -use reth_payload_builder_primitives::Events; use reth_payload_util::BestPayloadTransactions; use reth_primitives_traits::RecoveredBlock; use reth_provider::{ @@ -48,7 +47,7 @@ use rollup_boost::{ use serde::{Deserialize, Serialize}; use std::{ ops::{Div, Rem}, - sync::{Arc, OnceLock}, + sync::Arc, time::Instant, }; use tokio::sync::mpsc; @@ -134,6 +133,9 @@ pub(super) struct OpPayloadBuilder { pub pool: Pool, /// Node client pub client: Client, + /// Sender for sending built payloads to [`PayloadHandler`], + /// which broadcasts outgoing payloads via p2p. + pub payload_tx: mpsc::Sender, /// WebSocket publisher for broadcasting flashblocks /// to all connected subscribers. pub ws_pub: Arc, @@ -143,9 +145,6 @@ pub(super) struct OpPayloadBuilder { pub metrics: Arc, /// The end of builder transaction type pub builder_tx: BuilderTx, - /// Builder events handle to send BuiltPayload events - pub payload_builder_handle: - Arc>>>, /// Rate limiting based on gas. This is an optional feature. pub address_gas_limiter: AddressGasLimiter, } @@ -158,9 +157,7 @@ impl OpPayloadBuilder { client: Client, config: BuilderConfig, builder_tx: BuilderTx, - payload_builder_handle: Arc< - OnceLock>>, - >, + payload_tx: mpsc::Sender, ) -> eyre::Result { let metrics = Arc::new(OpRBuilderMetrics::default()); let ws_pub = WebSocketPublisher::new(config.specific.ws_addr, Arc::clone(&metrics))?.into(); @@ -169,11 +166,11 @@ impl OpPayloadBuilder { evm_config, pool, client, + payload_tx, ws_pub, config, metrics, builder_tx, - payload_builder_handle, address_gas_limiter, }) } @@ -360,7 +357,10 @@ where calculate_state_root || ctx.attributes().no_tx_pool, // need to calculate state root for CL sync )?; - self.send_payload_to_engine(payload.clone()); + self.payload_tx + .send(payload.clone()) + .await + .map_err(PayloadBuilderError::other)?; best_payload.set(payload); info!( @@ -525,16 +525,19 @@ where } // build first flashblock immediately - let next_flashblocks_ctx = match self.build_next_flashblock( - &mut ctx, - &mut info, - &mut state, - &state_provider, - &mut best_txs, - &block_cancel, - &best_payload, - &fb_span, - ) { + let next_flashblocks_ctx = match self + .build_next_flashblock( + &ctx, + &mut info, + &mut state, + &state_provider, + &mut best_txs, + &block_cancel, + &best_payload, + &fb_span, + ) + .await + { Ok(Some(next_flashblocks_ctx)) => next_flashblocks_ctx, Ok(None) => { self.record_flashblocks_metrics( @@ -577,12 +580,12 @@ where } #[allow(clippy::too_many_arguments)] - fn build_next_flashblock< + async fn build_next_flashblock< DB: Database + std::fmt::Debug + AsRef

, P: StateRootProvider + HashedPostStateProvider + StorageRootProvider, >( &self, - ctx: &mut OpPayloadBuilderCtx, + ctx: &OpPayloadBuilderCtx, info: &mut ExecutionInfo, state: &mut State, state_provider: impl reth::providers::StateProvider + Clone, @@ -675,13 +678,13 @@ where return Ok(None); } - let payload_tx_simulation_time = tx_execution_start_time.elapsed(); + let payload_transaction_simulation_time = tx_execution_start_time.elapsed(); ctx.metrics - .payload_tx_simulation_duration - .record(payload_tx_simulation_time); + .payload_transaction_simulation_duration + .record(payload_transaction_simulation_time); ctx.metrics - .payload_tx_simulation_gauge - .set(payload_tx_simulation_time); + .payload_transaction_simulation_gauge + .set(payload_transaction_simulation_time); if let Err(e) = self .builder_tx @@ -730,7 +733,10 @@ where .ws_pub .publish(&fb_payload) .wrap_err("failed to publish flashblock via websocket")?; - self.send_payload_to_engine(new_payload.clone()); + self.payload_tx + .send(new_payload.clone()) + .await + .wrap_err("failed to send built payload to handler")?; best_payload.set(new_payload); // Record flashblock build duration @@ -809,24 +815,6 @@ where span.record("flashblock_count", ctx.flashblock_index()); } - /// Sends built payload via payload builder handle broadcast channel to the engine - pub(super) fn send_payload_to_engine(&self, payload: OpBuiltPayload) { - // Send built payload as created one - match self.payload_builder_handle.get() { - Some(handle) => { - let res = handle.send(Events::BuiltPayload(payload.clone())); - if let Err(e) = res { - error!( - message = "Failed to send payload via payload builder handle", - error = ?e, - ); - } - } - None => { - error!(message = "Payload builder handle is not setup, skipping sending payload") - } - } - } /// Calculate number of flashblocks. /// If dynamic is enabled this function will take time drift into the account. pub(super) fn calculate_flashblocks(&self, timestamp: u64) -> (u64, Duration) { diff --git a/crates/op-rbuilder/src/builders/flashblocks/payload_handler.rs b/crates/op-rbuilder/src/builders/flashblocks/payload_handler.rs new file mode 100644 index 000000000..e19bb19c7 --- /dev/null +++ b/crates/op-rbuilder/src/builders/flashblocks/payload_handler.rs @@ -0,0 +1,64 @@ +use crate::builders::flashblocks::p2p::Message; +use reth_node_builder::Events; +use reth_optimism_node::OpEngineTypes; +use reth_optimism_payload_builder::OpBuiltPayload; +use tokio::sync::mpsc; +use tracing::warn; + +pub(crate) struct PayloadHandler { + // receives new payloads built by us. + built_rx: mpsc::Receiver, + // receives incoming p2p messages from peers. + p2p_rx: mpsc::Receiver, + // outgoing p2p channel to broadcast new payloads to peers. + p2p_tx: mpsc::Sender, + // sends a `Events::BuiltPayload` to the reth payload builder when a new payload is received. + payload_events_handle: tokio::sync::broadcast::Sender>, +} + +impl PayloadHandler { + pub(crate) fn new( + built_rx: mpsc::Receiver, + p2p_rx: mpsc::Receiver, + p2p_tx: mpsc::Sender, + payload_events_handle: tokio::sync::broadcast::Sender>, + ) -> Self { + Self { + built_rx, + p2p_rx, + p2p_tx, + payload_events_handle, + } + } + + pub(crate) async fn run(self) { + let Self { + mut built_rx, + mut p2p_rx, + p2p_tx, + payload_events_handle, + } = self; + + tracing::info!("flashblocks payload handler started"); + + loop { + tokio::select! { + Some(payload) = built_rx.recv() => { + if let Err(e) = payload_events_handle.send(Events::BuiltPayload(payload.clone())) { + warn!(e = ?e, "failed to send BuiltPayload event"); + } + // ignore error here; if p2p was disabled, the channel will be closed. + let _ = p2p_tx.send(payload.into()).await; + } + Some(message) = p2p_rx.recv() => { + match message { + Message::OpBuiltPayload(payload) => { + let payload: OpBuiltPayload = payload.into(); + let _ = payload_events_handle.send(Events::BuiltPayload(payload)); + } + } + } + } + } + } +} diff --git a/crates/op-rbuilder/src/builders/flashblocks/service.rs b/crates/op-rbuilder/src/builders/flashblocks/service.rs index fe23fdbfc..68d4b0361 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/service.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/service.rs @@ -5,20 +5,22 @@ use crate::{ builder_tx::BuilderTransactions, flashblocks::{ builder_tx::{FlashblocksBuilderTx, FlashblocksNumberBuilderTx}, + p2p::{AGENT_VERSION, FLASHBLOCKS_STREAM_PROTOCOL, Message}, payload::{FlashblocksExecutionInfo, FlashblocksExtraCtx}, + payload_handler::PayloadHandler, }, generator::BlockPayloadJobGenerator, }, flashtestations::service::bootstrap_flashtestations, traits::{NodeBounds, PoolBounds}, }; +use eyre::WrapErr as _; use reth_basic_payload_builder::BasicPayloadJobGeneratorConfig; use reth_node_api::NodeTypes; use reth_node_builder::{BuilderContext, components::PayloadServiceBuilder}; use reth_optimism_evm::OpEvmConfig; use reth_payload_builder::{PayloadBuilderHandle, PayloadBuilderService}; use reth_provider::CanonStateSubscriptions; -use std::sync::Arc; pub struct FlashblocksServiceBuilder(pub BuilderConfig); @@ -39,16 +41,72 @@ impl FlashblocksServiceBuilder { + Sync + 'static, { - let once_lock = Arc::new(std::sync::OnceLock::new()); + let (incoming_message_rx, outgoing_message_tx) = if self.0.specific.p2p_enabled { + let mut builder = p2p::NodeBuilder::new(); + if let Some(ref private_key_file) = self.0.specific.p2p_private_key_file + && !private_key_file.is_empty() + { + let private_key_hex = std::fs::read_to_string(private_key_file) + .wrap_err_with(|| { + format!("failed to read p2p private key file: {private_key_file}") + })? + .trim() + .to_string(); + builder = builder.with_keypair_hex_string(private_key_hex); + } + + let known_peers: Vec = + if let Some(ref p2p_known_peers) = self.0.specific.p2p_known_peers { + p2p_known_peers + .split(',') + .map(|s| s.to_string()) + .filter_map(|s| s.parse().ok()) + .collect() + } else { + vec![] + }; + + let p2p::NodeBuildResult { + node, + outgoing_message_tx, + mut incoming_message_rxs, + } = builder + .with_agent_version(AGENT_VERSION.to_string()) + .with_protocol(FLASHBLOCKS_STREAM_PROTOCOL) + .with_known_peers(known_peers) + .with_port(self.0.specific.p2p_port) + .with_max_peer_count(self.0.specific.p2p_max_peer_count) + .try_build::() + .wrap_err("failed to build flashblocks p2p node")?; + let multiaddrs = node.multiaddrs(); + ctx.task_executor().spawn(async move { + if let Err(e) = node.run().await { + tracing::error!(error = %e, "p2p node exited"); + } + }); + tracing::info!(multiaddrs = ?multiaddrs, "flashblocks p2p node started"); + + let incoming_message_rx = incoming_message_rxs + .remove(&FLASHBLOCKS_STREAM_PROTOCOL) + .expect("flashblocks p2p protocol must be found in receiver map"); + (incoming_message_rx, outgoing_message_tx) + } else { + let (_incoming_message_tx, incoming_message_rx) = tokio::sync::mpsc::channel(16); + let (outgoing_message_tx, _outgoing_message_rx) = tokio::sync::mpsc::channel(16); + (incoming_message_rx, outgoing_message_tx) + }; + + let (built_payload_tx, built_payload_rx) = tokio::sync::mpsc::channel(16); let payload_builder = OpPayloadBuilder::new( OpEvmConfig::optimism(ctx.chain_spec()), pool, ctx.provider().clone(), self.0.clone(), builder_tx, - once_lock.clone(), - )?; + built_payload_tx, + ) + .wrap_err("failed to create flashblocks payload builder")?; let payload_job_config = BasicPayloadJobGeneratorConfig::default(); @@ -61,19 +119,25 @@ impl FlashblocksServiceBuilder { self.0.block_time_leeway, ); - let (payload_service, payload_builder) = + let (payload_service, payload_builder_handle) = PayloadBuilderService::new(payload_generator, ctx.provider().canonical_state_stream()); - once_lock - .set(payload_service.payload_events_handle()) - .map_err(|_| eyre::eyre!("Cannot initialize payload service handle"))?; + let payload_handler = PayloadHandler::new( + built_payload_rx, + incoming_message_rx, + outgoing_message_tx, + payload_service.payload_events_handle(), + ); ctx.task_executor() .spawn_critical("custom payload builder service", Box::pin(payload_service)); + ctx.task_executor().spawn_critical( + "flashblocks payload handler", + Box::pin(payload_handler.run()), + ); tracing::info!("Flashblocks payload builder service started"); - - Ok(payload_builder) + Ok(payload_builder_handle) } } diff --git a/crates/op-rbuilder/src/builders/flashblocks/wspub.rs b/crates/op-rbuilder/src/builders/flashblocks/wspub.rs index 944edb911..e2f003dc1 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/wspub.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/wspub.rs @@ -1,11 +1,9 @@ use core::{ fmt::{Debug, Formatter}, net::SocketAddr, - pin::Pin, sync::atomic::{AtomicUsize, Ordering}, - task::{Context, Poll}, }; -use futures::{Sink, SinkExt}; +use futures::SinkExt; use futures_util::StreamExt; use rollup_boost::FlashblocksPayloadV1; use std::{io, net::TcpListener, sync::Arc}; @@ -238,24 +236,3 @@ impl Debug for WebSocketPublisher { .finish() } } - -impl Sink<&FlashblocksPayloadV1> for WebSocketPublisher { - type Error = eyre::Report; - - fn poll_ready(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll> { - Poll::Ready(Ok(())) - } - - fn start_send(self: Pin<&mut Self>, item: &FlashblocksPayloadV1) -> Result<(), Self::Error> { - self.publish(item)?; - Ok(()) - } - - fn poll_flush(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll> { - Poll::Ready(Ok(())) - } - - fn poll_close(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll> { - Poll::Ready(Ok(())) - } -} diff --git a/crates/op-rbuilder/src/builders/mod.rs b/crates/op-rbuilder/src/builders/mod.rs index c733d1116..81c49cee7 100644 --- a/crates/op-rbuilder/src/builders/mod.rs +++ b/crates/op-rbuilder/src/builders/mod.rs @@ -117,6 +117,7 @@ pub struct BuilderConfig { /// Configuration values that are specific to the block builder implementation used. pub specific: Specific, + /// Maximum gas a transaction can use before being excluded. pub max_gas_per_txn: Option, @@ -139,6 +140,7 @@ impl core::fmt::Debug for BuilderConfig { .field("block_time", &self.block_time) .field("block_time_leeway", &self.block_time_leeway) .field("da_config", &self.da_config) + .field("sampling_ratio", &self.sampling_ratio) .field("specific", &self.specific) .field("max_gas_per_txn", &self.max_gas_per_txn) .field("gas_limiter_config", &self.gas_limiter_config) diff --git a/crates/op-rbuilder/src/metrics.rs b/crates/op-rbuilder/src/metrics.rs index dd43d9580..31fe081cd 100644 --- a/crates/op-rbuilder/src/metrics.rs +++ b/crates/op-rbuilder/src/metrics.rs @@ -96,9 +96,9 @@ pub struct OpRBuilderMetrics { /// Latest state merge transitions duration pub state_transition_merge_gauge: Gauge, /// Histogram of the duration of payload simulation of all transactions - pub payload_tx_simulation_duration: Histogram, + pub payload_transaction_simulation_duration: Histogram, /// Latest payload simulation of all transactions duration - pub payload_tx_simulation_gauge: Gauge, + pub payload_transaction_simulation_gauge: Gauge, /// Number of transaction considered for inclusion in the block pub payload_num_tx_considered: Histogram, /// Latest number of transactions considered for inclusion in the block @@ -157,7 +157,7 @@ impl OpRBuilderMetrics { #[expect(clippy::too_many_arguments)] pub fn set_payload_builder_metrics( &self, - payload_tx_simulation_time: impl IntoF64 + Copy, + payload_transaction_simulation_time: impl IntoF64 + Copy, num_txs_considered: impl IntoF64 + Copy, num_txs_simulated: impl IntoF64 + Copy, num_txs_simulated_success: impl IntoF64 + Copy, @@ -165,10 +165,10 @@ impl OpRBuilderMetrics { num_bundles_reverted: impl IntoF64, reverted_gas_used: impl IntoF64, ) { - self.payload_tx_simulation_duration - .record(payload_tx_simulation_time); - self.payload_tx_simulation_gauge - .set(payload_tx_simulation_time); + self.payload_transaction_simulation_duration + .record(payload_transaction_simulation_time); + self.payload_transaction_simulation_gauge + .set(payload_transaction_simulation_time); self.payload_num_tx_considered.record(num_txs_considered); self.payload_num_tx_considered_gauge.set(num_txs_considered); self.payload_num_tx_simulated.record(num_txs_simulated); diff --git a/crates/op-rbuilder/src/tests/flashblocks.rs b/crates/op-rbuilder/src/tests/flashblocks.rs index 781048283..a623aaffd 100644 --- a/crates/op-rbuilder/src/tests/flashblocks.rs +++ b/crates/op-rbuilder/src/tests/flashblocks.rs @@ -219,6 +219,7 @@ async fn unichain_dynamic_with_lag(rbuilder: LocalInstance) -> eyre::Result<()> flashblocks_addr: "127.0.0.1".into(), flashblocks_block_time: 200, flashblocks_leeway_time: 0, + flashblocks_fixed: false, ..Default::default() }, ..Default::default() @@ -255,6 +256,8 @@ async fn dynamic_with_full_block_lag(rbuilder: LocalInstance) -> eyre::Result<() flashblocks_port: 1239, flashblocks_addr: "127.0.0.1".into(), flashblocks_block_time: 200, + flashblocks_leeway_time: 100, + flashblocks_fixed: false, ..Default::default() }, ..Default::default() @@ -313,6 +316,8 @@ async fn test_flashblock_min_filtering(rbuilder: LocalInstance) -> eyre::Result< flashblocks_port: 1239, flashblocks_addr: "127.0.0.1".into(), flashblocks_block_time: 200, + flashblocks_leeway_time: 100, + flashblocks_fixed: false, ..Default::default() }, ..Default::default() diff --git a/crates/p2p/Cargo.toml b/crates/p2p/Cargo.toml new file mode 100644 index 000000000..5f512c4a2 --- /dev/null +++ b/crates/p2p/Cargo.toml @@ -0,0 +1,28 @@ +[package] +name = "p2p" +version.workspace = true +edition.workspace = true +rust-version.workspace = true +license.workspace = true +homepage.workspace = true +repository.workspace = true +exclude.workspace = true + +[dependencies] +libp2p = { version = "0.56", features = ["identify", "ping", "noise", "tcp", "autonat", "mdns", "tokio", "cbor", "macros", "yamux"] } +libp2p-stream = "0.4.0-alpha" +multiaddr = "0.18" + +derive_more = { workspace = true, features = ["from"] } +eyre = { workspace = true } +futures = { workspace = true} +futures-util = { workspace = true } +hex = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } +tokio = { workspace = true, features = [ "macros" ] } +tokio-util = { workspace = true, features = [ "compat", "codec" ] } +tracing = { workspace = true } + +[lints] +workspace = true diff --git a/crates/p2p/src/behaviour.rs b/crates/p2p/src/behaviour.rs new file mode 100644 index 000000000..140d309b1 --- /dev/null +++ b/crates/p2p/src/behaviour.rs @@ -0,0 +1,106 @@ +use eyre::WrapErr as _; +use libp2p::{ + autonat, connection_limits, connection_limits::ConnectionLimits, identify, identity, mdns, + ping, swarm::NetworkBehaviour, +}; +use std::{convert::Infallible, time::Duration}; + +const PROTOCOL_VERSION: &str = "1.0.0"; + +#[derive(NetworkBehaviour)] +#[behaviour(to_swarm = "BehaviourEvent")] +pub(crate) struct Behaviour { + // connection gating + connection_limits: connection_limits::Behaviour, + + // discovery + mdns: mdns::tokio::Behaviour, + + // protocols + identify: identify::Behaviour, + ping: ping::Behaviour, + stream: libp2p_stream::Behaviour, + + // nat traversal + autonat: autonat::Behaviour, +} + +#[allow(clippy::large_enum_variant)] +#[derive(Debug, derive_more::From)] +pub(crate) enum BehaviourEvent { + Autonat(autonat::Event), + Identify(identify::Event), + Mdns(mdns::Event), + Ping(ping::Event), +} + +impl From<()> for BehaviourEvent { + fn from(_: ()) -> Self { + unreachable!("() cannot be converted to BehaviourEvent") + } +} + +impl From for BehaviourEvent { + fn from(_: Infallible) -> Self { + unreachable!("Infallible cannot be converted to BehaviourEvent") + } +} + +impl Behaviour { + pub(crate) fn new( + keypair: &identity::Keypair, + agent_version: String, + max_peer_count: u32, + ) -> eyre::Result { + let peer_id = keypair.public().to_peer_id(); + + let autonat = autonat::Behaviour::new(peer_id, autonat::Config::default()); + let mdns = mdns::tokio::Behaviour::new(mdns::Config::default(), peer_id) + .wrap_err("failed to create mDNS behaviour")?; + let connection_limits = connection_limits::Behaviour::new( + ConnectionLimits::default().with_max_established(Some(max_peer_count)), + ); + + let identify = identify::Behaviour::new( + identify::Config::new(PROTOCOL_VERSION.to_string(), keypair.public()) + .with_agent_version(agent_version), + ); + let ping = ping::Behaviour::new(ping::Config::new().with_interval(Duration::from_secs(10))); + let stream = libp2p_stream::Behaviour::new(); + + Ok(Self { + autonat, + connection_limits, + identify, + ping, + mdns, + stream, + }) + } + + pub(crate) fn new_control(&mut self) -> libp2p_stream::Control { + self.stream.new_control() + } +} + +impl BehaviourEvent { + pub(crate) fn handle(self) { + match self { + BehaviourEvent::Autonat(_event) => {} + BehaviourEvent::Identify(_event) => {} + BehaviourEvent::Mdns(event) => match event { + mdns::Event::Discovered(list) => { + for (peer_id, multiaddr) in list { + tracing::debug!("mDNS discovered peer {peer_id} at {multiaddr}"); + } + } + mdns::Event::Expired(list) => { + for (peer_id, multiaddr) in list { + tracing::debug!("mDNS expired peer {peer_id} at {multiaddr}"); + } + } + }, + BehaviourEvent::Ping(_event) => {} + } + } +} diff --git a/crates/p2p/src/lib.rs b/crates/p2p/src/lib.rs new file mode 100644 index 000000000..fba12aa15 --- /dev/null +++ b/crates/p2p/src/lib.rs @@ -0,0 +1,574 @@ +mod behaviour; +mod outgoing; + +use behaviour::Behaviour; +use libp2p_stream::IncomingStreams; + +use eyre::Context; +use libp2p::{ + PeerId, Swarm, Transport as _, + identity::{self, ed25519}, + noise, + swarm::SwarmEvent, + tcp, yamux, +}; +use multiaddr::Protocol; +use std::{collections::HashMap, time::Duration}; +use tokio::sync::mpsc; +use tokio_util::sync::CancellationToken; +use tracing::{debug, warn}; + +pub use libp2p::{Multiaddr, StreamProtocol}; + +const DEFAULT_MAX_PEER_COUNT: u32 = 50; + +/// A message that can be sent between peers. +pub trait Message: + serde::Serialize + for<'de> serde::Deserialize<'de> + Send + Sync + Clone + std::fmt::Debug +{ + fn protocol(&self) -> StreamProtocol; + + fn to_string(&self) -> eyre::Result { + serde_json::to_string(self).wrap_err("failed to serialize message to string") + } + + fn from_str(s: &str) -> eyre::Result + where + Self: Sized, + { + serde_json::from_str(s).wrap_err("failed to deserialize message from string") + } +} + +/// The libp2p node. +/// +/// The current behaviour of the node regarding messaging protocols is as follows: +/// - for each supported protocol, the node will accept incoming streams from remote peers on that protocol. +/// - when a new connection is established with a peer, the node will open outbound streams to that peer for each supported protocol. +/// - when a new outgoing message is received on `outgoing_message_rx`, the node will broadcast that message to all connected peers that have an outbound stream open for the message's protocol. +/// - incoming messages received on incoming streams are handled by `IncomingStreamsHandler`, which reads messages from the stream and sends them to a channel for processing by the consumer of this library. +/// +/// Currently, there is no gossip implemented; messages are simply broadcast to connected peers. +pub struct Node { + /// The peer ID of this node. + peer_id: PeerId, + + /// The multiaddresses this node is listening on. + listen_addrs: Vec, + + /// The libp2p swarm, which contains the state of the network + /// and its behaviours. + swarm: Swarm, + + /// The multiaddresses of known peers to connect to on startup. + known_peers: Vec, + + /// Receiver for outgoing messages to be sent to peers. + outgoing_message_rx: mpsc::Receiver, + + /// Handler for managing outgoing streams to peers. + /// Used to determine what peers to broadcast to when a + /// new outgoing message is received on `outgoing_message_rx`. + outgoing_streams_handler: outgoing::StreamsHandler, + + /// Handlers for incoming streams (streams which remote peers have opened with us). + incoming_streams_handlers: Vec>, + + /// The protocols this node supports. + protocols: Vec, + + /// Cancellation token to shut down the node. + cancellation_token: CancellationToken, +} + +impl Node { + /// Returns the multiaddresses that this node is listening on, with the peer ID included. + pub fn multiaddrs(&self) -> Vec { + self.listen_addrs + .iter() + .map(|addr| { + addr.clone() + .with_p2p(self.peer_id) + .expect("can add peer ID to multiaddr") + }) + .collect() + } + + /// Runs the p2p node, dials known peers, and starts listening for incoming connections and messages. + /// + /// This function will run until the cancellation token is triggered. + /// If an error occurs, it will be logged, but the node will continue running. + pub async fn run(self) -> eyre::Result<()> { + use libp2p::futures::StreamExt as _; + + let Node { + peer_id: _, + listen_addrs, + mut swarm, + known_peers, + mut outgoing_message_rx, + mut outgoing_streams_handler, + cancellation_token, + incoming_streams_handlers, + protocols, + } = self; + + for addr in listen_addrs { + swarm + .listen_on(addr) + .wrap_err("swarm failed to listen on multiaddr")?; + } + + for mut address in known_peers { + let peer_id = match address.pop() { + Some(multiaddr::Protocol::P2p(peer_id)) => peer_id, + _ => { + eyre::bail!("no peer ID for known peer"); + } + }; + swarm.add_peer_address(peer_id, address.clone()); + swarm + .dial(address) + .wrap_err("swarm failed to dial known peer")?; + } + + let handles = incoming_streams_handlers + .into_iter() + .map(|handler| tokio::spawn(handler.run())) + .collect::>(); + + loop { + tokio::select! { + biased; + _ = cancellation_token.cancelled() => { + debug!("cancellation token triggered, shutting down node"); + handles.into_iter().for_each(|h| h.abort()); + break Ok(()); + } + Some(message) = outgoing_message_rx.recv() => { + let protocol = message.protocol(); + if let Err(e) = outgoing_streams_handler.broadcast_message(message).await { + warn!("failed to broadcast message on protocol {protocol}: {e:?}"); + } + } + event = swarm.select_next_some() => { + match event { + SwarmEvent::NewListenAddr { + address, + .. + } => { + debug!("new listen address: {address}"); + } + SwarmEvent::ExternalAddrConfirmed { address } => { + debug!("external address confirmed: {address}"); + } + SwarmEvent::ConnectionEstablished { + peer_id, + connection_id, + .. + } => { + // when a new connection is established, open outbound streams for each protocol + // and add them to the outgoing streams handler. + // + // If we already have a connection with this peer, close the new connection, + // as we only want one connection per peer. + debug!("connection established with peer {peer_id}"); + if outgoing_streams_handler.has_peer(&peer_id) { + swarm.close_connection(connection_id); + debug!("already have connection with peer {peer_id}, closed connection {connection_id}"); + } else { + for protocol in &protocols { + match swarm + .behaviour_mut() + .new_control() + .open_stream(peer_id, protocol.clone()) + .await + { + Ok(stream) => { outgoing_streams_handler.insert_peer_and_stream(peer_id, protocol.clone(), stream); + debug!("opened outbound stream with peer {peer_id} with protocol {protocol} on connection {connection_id}"); + } + Err(e) => { + warn!("failed to open stream with peer {peer_id} on connection {connection_id}: {e:?}"); + } + } + } + } + } + SwarmEvent::ConnectionClosed { + peer_id, + cause, + .. + } => { + debug!("connection closed with peer {peer_id}: {cause:?}"); + outgoing_streams_handler.remove_peer(&peer_id); + } + SwarmEvent::Behaviour(event) => event.handle(), + _ => continue, + } + }, + } + } + } +} + +pub struct NodeBuildResult { + pub node: Node, + pub outgoing_message_tx: mpsc::Sender, + pub incoming_message_rxs: HashMap>, +} + +pub struct NodeBuilder { + port: Option, + listen_addrs: Vec, + keypair_hex: Option, + known_peers: Vec, + agent_version: Option, + protocols: Vec, + max_peer_count: Option, + cancellation_token: Option, +} + +impl Default for NodeBuilder { + fn default() -> Self { + Self::new() + } +} + +impl NodeBuilder { + pub fn new() -> Self { + Self { + port: None, + listen_addrs: Vec::new(), + keypair_hex: None, + known_peers: Vec::new(), + agent_version: None, + protocols: Vec::new(), + max_peer_count: None, + cancellation_token: None, + } + } + + pub fn with_port(mut self, port: u16) -> Self { + self.port = Some(port); + self + } + + pub fn with_listen_addr(mut self, addr: libp2p::Multiaddr) -> Self { + self.listen_addrs.push(addr); + self + } + + pub fn with_keypair_hex_string(mut self, keypair_hex: String) -> Self { + self.keypair_hex = Some(keypair_hex); + self + } + + pub fn with_agent_version(mut self, agent_version: String) -> Self { + self.agent_version = Some(agent_version); + self + } + + pub fn with_protocol(mut self, protocol: StreamProtocol) -> Self { + self.protocols.push(protocol); + self + } + + pub fn with_max_peer_count(mut self, max_peer_count: u32) -> Self { + self.max_peer_count = Some(max_peer_count); + self + } + + pub fn with_known_peers(mut self, addresses: I) -> Self + where + I: IntoIterator, + T: Into, + { + for address in addresses { + self.known_peers.push(address.into()); + } + self + } + + pub fn try_build(self) -> eyre::Result> { + let Self { + port, + listen_addrs, + keypair_hex, + known_peers, + agent_version, + protocols, + max_peer_count, + cancellation_token, + } = self; + + // TODO: caller should be forced to provide this + let cancellation_token = cancellation_token.unwrap_or_default(); + + let Some(agent_version) = agent_version else { + eyre::bail!("agent version must be set"); + }; + + let keypair = match keypair_hex { + Some(hex) => { + let mut bytes = hex::decode(hex).wrap_err("failed to decode hex string")?; + let keypair = ed25519::Keypair::try_from_bytes(&mut bytes) + .wrap_err("failed to create keypair from bytes")?; + Some(keypair.into()) + } + None => None, + }; + let keypair = keypair.unwrap_or(identity::Keypair::generate_ed25519()); + let peer_id = keypair.public().to_peer_id(); + + let transport = create_transport(&keypair).wrap_err("failed to create transport")?; + let max_peer_count = max_peer_count.unwrap_or(DEFAULT_MAX_PEER_COUNT); + let mut behaviour = Behaviour::new(&keypair, agent_version, max_peer_count) + .context("failed to create behaviour")?; + let mut control = behaviour.new_control(); + + let mut incoming_streams_handlers = Vec::new(); + let mut incoming_message_rxs = HashMap::new(); + for protocol in &protocols { + let incoming_streams = control + .accept(protocol.clone()) + .wrap_err("failed to subscribe to incoming streams for flashblocks protocol")?; + let (incoming_streams_handler, message_rx) = IncomingStreamsHandler::new( + protocol.clone(), + incoming_streams, + cancellation_token.clone(), + ); + incoming_streams_handlers.push(incoming_streams_handler); + incoming_message_rxs.insert(protocol.clone(), message_rx); + } + + let swarm = libp2p::SwarmBuilder::with_existing_identity(keypair) + .with_tokio() + .with_other_transport(|_| transport)? + .with_behaviour(|_| behaviour)? + .with_swarm_config(|cfg| { + cfg.with_idle_connection_timeout(Duration::from_secs(u64::MAX)) // don't disconnect from idle peers + }) + .build(); + + // disallow providing listen addresses that have a peer ID in them, + // as we've specified the peer ID for this node above. + let mut listen_addrs: Vec = listen_addrs + .into_iter() + .filter(|addr| { + for protocol in addr.iter() { + if protocol == Protocol::P2p(peer_id) { + return false; + } + } + true + }) + .collect(); + if listen_addrs.is_empty() { + let port = port.unwrap_or(0); + let listen_addr = format!("/ip4/0.0.0.0/tcp/{port}") + .parse() + .expect("can parse valid multiaddr"); + listen_addrs.push(listen_addr); + } + + let (outgoing_message_tx, outgoing_message_rx) = tokio::sync::mpsc::channel(100); + + Ok(NodeBuildResult { + node: Node { + peer_id, + swarm, + listen_addrs, + known_peers, + outgoing_message_rx, + outgoing_streams_handler: outgoing::StreamsHandler::new(), + cancellation_token, + incoming_streams_handlers, + protocols, + }, + outgoing_message_tx, + incoming_message_rxs, + }) + } +} + +struct IncomingStreamsHandler { + protocol: StreamProtocol, + incoming: IncomingStreams, + tx: mpsc::Sender, + cancellation_token: CancellationToken, +} + +impl IncomingStreamsHandler { + fn new( + protocol: StreamProtocol, + incoming: IncomingStreams, + cancellation_token: CancellationToken, + ) -> (Self, mpsc::Receiver) { + const CHANNEL_SIZE: usize = 100; + let (tx, rx) = mpsc::channel(CHANNEL_SIZE); + ( + Self { + protocol, + incoming, + tx, + cancellation_token, + }, + rx, + ) + } + + async fn run(self) { + use futures::StreamExt as _; + + let Self { + protocol, + mut incoming, + tx, + cancellation_token, + } = self; + let mut handle_stream_futures = futures::stream::FuturesUnordered::new(); + + loop { + tokio::select! { + _ = cancellation_token.cancelled() => { + debug!("cancellation token triggered, shutting down incoming streams handler for protocol {protocol}"); + return; + } + Some((from, stream)) = incoming.next() => { + debug!("new incoming stream on protocol {protocol} from peer {from}"); + handle_stream_futures.push(tokio::spawn(handle_incoming_stream(from, stream, tx.clone()))); + } + Some(res) = handle_stream_futures.next() => { + match res { + Ok(Ok(())) => {} + Ok(Err(e)) => { + warn!("error handling incoming stream: {e:?}"); + } + Err(e) => { + warn!("task handling incoming stream panicked: {e:?}"); + } + } + } + } + } + } +} + +async fn handle_incoming_stream( + peer_id: PeerId, + stream: libp2p::Stream, + payload_tx: mpsc::Sender, +) -> eyre::Result<()> { + use futures::StreamExt as _; + use tokio_util::{ + codec::{FramedRead, LinesCodec}, + compat::FuturesAsyncReadCompatExt as _, + }; + + let codec = LinesCodec::new(); + let mut reader = FramedRead::new(stream.compat(), codec); + + while let Some(res) = reader.next().await { + match res { + Ok(str) => { + let payload = M::from_str(&str).wrap_err("failed to decode stream message")?; + debug!("got message from peer {peer_id}: {payload:?}"); + let _ = payload_tx.send(payload).await; + } + Err(e) => { + return Err(e).wrap_err(format!("failed to read from stream of peer {peer_id}")); + } + } + } + + Ok(()) +} + +fn create_transport( + keypair: &identity::Keypair, +) -> eyre::Result> { + let transport = tcp::tokio::Transport::new(tcp::Config::default()) + .upgrade(libp2p::core::upgrade::Version::V1) + .authenticate(noise::Config::new(keypair)?) + .multiplex(yamux::Config::default()) + .timeout(Duration::from_secs(20)) + .boxed(); + + Ok(transport) +} + +#[cfg(test)] +mod test { + use super::*; + + const TEST_AGENT_VERSION: &str = "test/1.0.0"; + const TEST_PROTOCOL: StreamProtocol = StreamProtocol::new("/test/1.0.0"); + + #[derive(Debug, PartialEq, Eq, Clone)] + struct TestMessage { + content: String, + } + + impl Message for TestMessage { + fn protocol(&self) -> StreamProtocol { + TEST_PROTOCOL + } + } + + impl serde::Serialize for TestMessage { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + serializer.serialize_str(&self.content) + } + } + + impl<'de> serde::Deserialize<'de> for TestMessage { + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + let s = String::deserialize(deserializer)?; + Ok(TestMessage { content: s }) + } + } + + #[tokio::test] + async fn two_nodes_can_connect_and_message() { + let NodeBuildResult { + node: node1, + outgoing_message_tx: _, + incoming_message_rxs: mut rx1, + } = NodeBuilder::new() + .with_listen_addr("/ip4/127.0.0.1/tcp/9000".parse().unwrap()) + .with_agent_version(TEST_AGENT_VERSION.to_string()) + .with_protocol(TEST_PROTOCOL) + .try_build::() + .unwrap(); + let NodeBuildResult { + node: node2, + outgoing_message_tx: tx2, + incoming_message_rxs: _, + } = NodeBuilder::new() + .with_known_peers(node1.multiaddrs()) + .with_protocol(TEST_PROTOCOL) + .with_listen_addr("/ip4/127.0.0.1/tcp/9001".parse().unwrap()) + .with_agent_version(TEST_AGENT_VERSION.to_string()) + .try_build::() + .unwrap(); + + tokio::spawn(async move { node1.run().await }); + tokio::spawn(async move { node2.run().await }); + // sleep to allow nodes to connect + tokio::time::sleep(Duration::from_secs(2)).await; + + let message = TestMessage { + content: "message".to_string(), + }; + tx2.send(message.clone()).await.unwrap(); + + let recv_message: TestMessage = rx1.remove(&TEST_PROTOCOL).unwrap().recv().await.unwrap(); + assert_eq!(recv_message, message); + } +} diff --git a/crates/p2p/src/outgoing.rs b/crates/p2p/src/outgoing.rs new file mode 100644 index 000000000..c948bde66 --- /dev/null +++ b/crates/p2p/src/outgoing.rs @@ -0,0 +1,95 @@ +use crate::Message; +use eyre::Context; +use futures::stream::FuturesUnordered; +use libp2p::{PeerId, StreamProtocol, swarm::Stream}; +use std::collections::HashMap; +use tracing::{debug, warn}; + +pub(crate) struct StreamsHandler { + peers_to_stream: HashMap>, +} + +impl StreamsHandler { + pub(crate) fn new() -> Self { + Self { + peers_to_stream: HashMap::new(), + } + } + + pub(crate) fn has_peer(&self, peer: &PeerId) -> bool { + self.peers_to_stream.contains_key(peer) + } + + pub(crate) fn insert_peer_and_stream( + &mut self, + peer: PeerId, + protocol: StreamProtocol, + stream: Stream, + ) { + self.peers_to_stream + .entry(peer) + .or_default() + .insert(protocol, stream); + } + + pub(crate) fn remove_peer(&mut self, peer: &PeerId) { + self.peers_to_stream.remove(peer); + } + + pub(crate) async fn broadcast_message(&mut self, message: M) -> eyre::Result<()> { + use futures::{SinkExt as _, StreamExt as _}; + use tokio_util::{ + codec::{FramedWrite, LinesCodec}, + compat::FuturesAsyncReadCompatExt as _, + }; + + let protocol = message.protocol(); + let payload = message + .to_string() + .wrap_err("failed to serialize payload")?; + + let peers = self.peers_to_stream.keys().cloned().collect::>(); + let mut futures = FuturesUnordered::new(); + for peer in peers { + let protocol_to_stream = self + .peers_to_stream + .get_mut(&peer) + .expect("stream map must exist for peer"); + let Some(stream) = protocol_to_stream.remove(&protocol) else { + warn!("no stream for protocol {protocol:?} to peer {peer}"); + continue; + }; + let stream = stream.compat(); + let payload = payload.clone(); + let fut = async move { + let mut writer = FramedWrite::new(stream, LinesCodec::new()); + writer.send(payload).await?; + Ok::<(PeerId, libp2p::swarm::Stream), eyre::ErrReport>(( + peer, + writer.into_inner().into_inner(), + )) + }; + futures.push(fut); + } + while let Some(result) = futures.next().await { + match result { + Ok((peer, stream)) => { + let protocol_to_stream = self + .peers_to_stream + .get_mut(&peer) + .expect("stream map must exist for peer"); + protocol_to_stream.insert(protocol.clone(), stream); + } + Err(e) => { + warn!("failed to send payload to peer: {e:?}"); + } + } + } + debug!( + "broadcasted message to {} peers", + self.peers_to_stream.len() + ); + + Ok(()) + } +} From ceaf1c730bd3c9c603b6741f8e06cb131b79e0ce Mon Sep 17 00:00:00 2001 From: Anton Date: Mon, 27 Oct 2025 23:53:08 +0100 Subject: [PATCH 10/19] release: 0.2.8 (#304) --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a48285d7b..440d87443 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7004,7 +7004,7 @@ dependencies = [ [[package]] name = "op-rbuilder" -version = "0.2.7" +version = "0.2.8" dependencies = [ "alloy-consensus", "alloy-contract", @@ -7392,7 +7392,7 @@ dependencies = [ [[package]] name = "p2p" -version = "0.2.7" +version = "0.2.8" dependencies = [ "derive_more", "eyre", diff --git a/Cargo.toml b/Cargo.toml index 947ab7b49..04ec70e8c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace.package] -version = "0.2.7" +version = "0.2.8" edition = "2024" rust-version = "1.86" license = "MIT OR Apache-2.0" From 440183bd564dce309179153fb144ba93ee8c7d98 Mon Sep 17 00:00:00 2001 From: noot <36753753+noot@users.noreply.github.com> Date: Tue, 28 Oct 2025 11:19:10 -0400 Subject: [PATCH 11/19] feat: implement flashblock sync over p2p (#288) --- .../src/builders/flashblocks/ctx.rs | 81 ++++ .../src/builders/flashblocks/mod.rs | 1 + .../src/builders/flashblocks/payload.rs | 4 +- .../builders/flashblocks/payload_handler.rs | 395 +++++++++++++++++- .../src/builders/flashblocks/service.rs | 21 +- crates/op-rbuilder/src/metrics.rs | 8 +- crates/p2p/src/behaviour.rs | 16 +- crates/p2p/src/lib.rs | 43 +- crates/p2p/src/outgoing.rs | 7 +- 9 files changed, 541 insertions(+), 35 deletions(-) create mode 100644 crates/op-rbuilder/src/builders/flashblocks/ctx.rs diff --git a/crates/op-rbuilder/src/builders/flashblocks/ctx.rs b/crates/op-rbuilder/src/builders/flashblocks/ctx.rs new file mode 100644 index 000000000..c465445f5 --- /dev/null +++ b/crates/op-rbuilder/src/builders/flashblocks/ctx.rs @@ -0,0 +1,81 @@ +use crate::{ + builders::{BuilderConfig, OpPayloadBuilderCtx, flashblocks::FlashblocksConfig}, + gas_limiter::{AddressGasLimiter, args::GasLimiterArgs}, + metrics::OpRBuilderMetrics, + traits::ClientBounds, +}; +use op_revm::OpSpecId; +use reth_basic_payload_builder::PayloadConfig; +use reth_evm::EvmEnv; +use reth_optimism_chainspec::OpChainSpec; +use reth_optimism_evm::{OpEvmConfig, OpNextBlockEnvAttributes}; +use reth_optimism_payload_builder::{OpPayloadBuilderAttributes, config::OpDAConfig}; +use reth_optimism_primitives::OpTransactionSigned; +use std::sync::Arc; +use tokio_util::sync::CancellationToken; + +#[derive(Debug, Clone)] +pub(super) struct OpPayloadSyncerCtx { + /// The type that knows how to perform system calls and configure the evm. + evm_config: OpEvmConfig, + /// The DA config for the payload builder + da_config: OpDAConfig, + /// The chainspec + chain_spec: Arc, + /// Max gas that can be used by a transaction. + max_gas_per_txn: Option, + /// The metrics for the builder + metrics: Arc, +} + +impl OpPayloadSyncerCtx { + pub(super) fn new( + client: &Client, + builder_config: BuilderConfig, + evm_config: OpEvmConfig, + metrics: Arc, + ) -> eyre::Result + where + Client: ClientBounds, + { + let chain_spec = client.chain_spec(); + Ok(Self { + evm_config, + da_config: builder_config.da_config.clone(), + chain_spec, + max_gas_per_txn: builder_config.max_gas_per_txn, + metrics, + }) + } + + pub(super) fn evm_config(&self) -> &OpEvmConfig { + &self.evm_config + } + + pub(super) fn max_gas_per_txn(&self) -> Option { + self.max_gas_per_txn + } + + pub(super) fn into_op_payload_builder_ctx( + self, + payload_config: PayloadConfig>, + evm_env: EvmEnv, + block_env_attributes: OpNextBlockEnvAttributes, + cancel: CancellationToken, + ) -> OpPayloadBuilderCtx { + OpPayloadBuilderCtx { + evm_config: self.evm_config, + da_config: self.da_config, + chain_spec: self.chain_spec, + config: payload_config, + evm_env, + block_env_attributes, + cancel, + builder_signer: None, + metrics: self.metrics, + extra_ctx: (), + max_gas_per_txn: self.max_gas_per_txn, + address_gas_limiter: AddressGasLimiter::new(GasLimiterArgs::default()), + } + } +} diff --git a/crates/op-rbuilder/src/builders/flashblocks/mod.rs b/crates/op-rbuilder/src/builders/flashblocks/mod.rs index 643bf39a3..87d4494cb 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/mod.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/mod.rs @@ -6,6 +6,7 @@ use service::FlashblocksServiceBuilder; mod best_txs; mod builder_tx; mod config; +mod ctx; mod p2p; mod payload; mod payload_handler; diff --git a/crates/op-rbuilder/src/builders/flashblocks/payload.rs b/crates/op-rbuilder/src/builders/flashblocks/payload.rs index 9e2237bc8..89f192100 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/payload.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/payload.rs @@ -158,8 +158,8 @@ impl OpPayloadBuilder { config: BuilderConfig, builder_tx: BuilderTx, payload_tx: mpsc::Sender, + metrics: Arc, ) -> eyre::Result { - let metrics = Arc::new(OpRBuilderMetrics::default()); let ws_pub = WebSocketPublisher::new(config.specific.ws_addr, Arc::clone(&metrics))?.into(); let address_gas_limiter = AddressGasLimiter::new(config.gas_limiter_config.clone()); Ok(Self { @@ -710,7 +710,7 @@ where match build_result { Err(err) => { - ctx.metrics.invalid_blocks_count.increment(1); + ctx.metrics.invalid_built_blocks_count.increment(1); Err(err).wrap_err("failed to build payload") } Ok((new_payload, mut fb_payload)) => { diff --git a/crates/op-rbuilder/src/builders/flashblocks/payload_handler.rs b/crates/op-rbuilder/src/builders/flashblocks/payload_handler.rs index e19bb19c7..4927a0479 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/payload_handler.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/payload_handler.rs @@ -1,12 +1,35 @@ -use crate::builders::flashblocks::p2p::Message; +use crate::{ + builders::flashblocks::{ + ctx::OpPayloadSyncerCtx, p2p::Message, payload::FlashblocksExecutionInfo, + }, + primitives::reth::ExecutionInfo, + traits::ClientBounds, +}; +use alloy_evm::eth::receipt_builder::ReceiptBuilderCtx; +use alloy_primitives::B64; +use eyre::{WrapErr as _, bail}; +use op_alloy_consensus::OpTxEnvelope; +use reth::revm::{State, database::StateProviderDatabase}; +use reth_basic_payload_builder::PayloadConfig; +use reth_evm::FromRecoveredTx; use reth_node_builder::Events; -use reth_optimism_node::OpEngineTypes; +use reth_optimism_chainspec::OpChainSpec; +use reth_optimism_evm::{OpEvmConfig, OpNextBlockEnvAttributes}; +use reth_optimism_node::{OpEngineTypes, OpPayloadBuilderAttributes}; use reth_optimism_payload_builder::OpBuiltPayload; +use reth_optimism_primitives::{OpReceipt, OpTransactionSigned}; +use reth_payload_builder::EthPayloadBuilderAttributes; +use rollup_boost::FlashblocksPayloadV1; +use std::sync::Arc; use tokio::sync::mpsc; use tracing::warn; -pub(crate) struct PayloadHandler { - // receives new payloads built by us. +/// Handles newly built or received flashblock payloads. +/// +/// In the case of a payload built by this node, it is broadcast to peers and an event is sent to the payload builder. +/// In the case of a payload received from a peer, it is executed and if successful, an event is sent to the payload builder. +pub(crate) struct PayloadHandler { + // receives new payloads built by this builder. built_rx: mpsc::Receiver, // receives incoming p2p messages from peers. p2p_rx: mpsc::Receiver, @@ -14,20 +37,35 @@ pub(crate) struct PayloadHandler { p2p_tx: mpsc::Sender, // sends a `Events::BuiltPayload` to the reth payload builder when a new payload is received. payload_events_handle: tokio::sync::broadcast::Sender>, + // context required for execution of blocks during syncing + ctx: OpPayloadSyncerCtx, + // chain client + client: Client, + cancel: tokio_util::sync::CancellationToken, } -impl PayloadHandler { +impl PayloadHandler +where + Client: ClientBounds + 'static, +{ + #[allow(clippy::too_many_arguments)] pub(crate) fn new( built_rx: mpsc::Receiver, p2p_rx: mpsc::Receiver, p2p_tx: mpsc::Sender, payload_events_handle: tokio::sync::broadcast::Sender>, + ctx: OpPayloadSyncerCtx, + client: Client, + cancel: tokio_util::sync::CancellationToken, ) -> Self { Self { built_rx, p2p_rx, p2p_tx, payload_events_handle, + ctx, + client, + cancel, } } @@ -37,9 +75,12 @@ impl PayloadHandler { mut p2p_rx, p2p_tx, payload_events_handle, + ctx, + client, + cancel, } = self; - tracing::info!("flashblocks payload handler started"); + tracing::debug!("flashblocks payload handler started"); loop { tokio::select! { @@ -54,11 +95,351 @@ impl PayloadHandler { match message { Message::OpBuiltPayload(payload) => { let payload: OpBuiltPayload = payload.into(); - let _ = payload_events_handle.send(Events::BuiltPayload(payload)); + let ctx = ctx.clone(); + let client = client.clone(); + let payload_events_handle = payload_events_handle.clone(); + let cancel = cancel.clone(); + + // execute the flashblock on a thread where blocking is acceptable, + // as it's potentially a heavy operation + tokio::task::spawn_blocking(move || { + let res = execute_flashblock( + payload, + ctx, + client, + cancel, + ); + match res { + Ok((payload, _)) => { + tracing::info!(hash = payload.block().hash().to_string(), block_number = payload.block().header().number, "successfully executed received flashblock"); + let _ = payload_events_handle.send(Events::BuiltPayload(payload)); + } + Err(e) => { + tracing::error!(error = ?e, "failed to execute received flashblock"); + } + } + }); } } } + else => break, } } } } + +fn execute_flashblock( + payload: OpBuiltPayload, + ctx: OpPayloadSyncerCtx, + client: Client, + cancel: tokio_util::sync::CancellationToken, +) -> eyre::Result<(OpBuiltPayload, FlashblocksPayloadV1)> +where + Client: ClientBounds, +{ + use alloy_consensus::BlockHeader as _; + use reth::primitives::SealedHeader; + use reth_evm::{ConfigureEvm as _, execute::BlockBuilder as _}; + + let start = tokio::time::Instant::now(); + + tracing::info!(header = ?payload.block().header(), "executing flashblock"); + + let mut cached_reads = reth::revm::cached::CachedReads::default(); + let parent_hash = payload.block().sealed_header().parent_hash; + let parent_header = client + .header_by_id(parent_hash.into()) + .wrap_err("failed to get parent header")? + .ok_or_else(|| eyre::eyre!("parent header not found"))?; + + let state_provider = client + .state_by_block_hash(parent_hash) + .wrap_err("failed to get state for parent hash")?; + let db = StateProviderDatabase::new(&state_provider); + let mut state = State::builder() + .with_database(cached_reads.as_db_mut(db)) + .with_bundle_update() + .build(); + + let chain_spec = client.chain_spec(); + let timestamp = payload.block().header().timestamp(); + let block_env_attributes = OpNextBlockEnvAttributes { + timestamp, + suggested_fee_recipient: payload.block().sealed_header().beneficiary, + prev_randao: payload.block().sealed_header().mix_hash, + gas_limit: payload.block().sealed_header().gas_limit, + parent_beacon_block_root: payload.block().sealed_header().parent_beacon_block_root, + extra_data: payload.block().sealed_header().extra_data.clone(), + }; + + let evm_env = ctx + .evm_config() + .next_evm_env(&parent_header, &block_env_attributes) + .wrap_err("failed to create next evm env")?; + + ctx.evm_config() + .builder_for_next_block( + &mut state, + &Arc::new(SealedHeader::new(parent_header.clone(), parent_hash)), + block_env_attributes.clone(), + ) + .wrap_err("failed to create evm builder for next block")? + .apply_pre_execution_changes() + .wrap_err("failed to apply pre execution changes")?; + + let mut info = ExecutionInfo::with_capacity(payload.block().body().transactions.len()); + + let extra_data = payload.block().sealed_header().extra_data.clone(); + if extra_data.len() != 9 { + tracing::error!(len = extra_data.len(), data = ?extra_data, "invalid extra data length in flashblock"); + bail!("extra data length should be 9 bytes"); + } + + // see https://specs.optimism.io/protocol/holocene/exec-engine.html#eip-1559-parameters-in-block-header + let eip_1559_parameters: B64 = extra_data[1..9].try_into().unwrap(); + let payload_config = PayloadConfig::new( + Arc::new(SealedHeader::new(parent_header.clone(), parent_hash)), + OpPayloadBuilderAttributes { + eip_1559_params: Some(eip_1559_parameters), + payload_attributes: EthPayloadBuilderAttributes { + id: payload.id(), // unused + parent: parent_hash, // unused + suggested_fee_recipient: payload.block().sealed_header().beneficiary, + withdrawals: payload + .block() + .body() + .withdrawals + .clone() + .unwrap_or_default(), + parent_beacon_block_root: payload.block().sealed_header().parent_beacon_block_root, + timestamp, + prev_randao: payload.block().sealed_header().mix_hash, + }, + ..Default::default() + }, + ); + + execute_transactions( + &mut info, + &mut state, + payload.block().body().transactions.clone(), + payload.block().header().gas_used, + ctx.evm_config(), + evm_env.clone(), + ctx.max_gas_per_txn(), + is_canyon_active(&chain_spec, timestamp), + is_regolith_active(&chain_spec, timestamp), + ) + .wrap_err("failed to execute best transactions")?; + + let builder_ctx = ctx.into_op_payload_builder_ctx( + payload_config, + evm_env.clone(), + block_env_attributes, + cancel, + ); + + let (built_payload, fb_payload) = crate::builders::flashblocks::payload::build_block( + &mut state, + &builder_ctx, + &mut info, + true, + ) + .wrap_err("failed to build flashblock")?; + + builder_ctx + .metrics + .flashblock_sync_duration + .record(start.elapsed()); + + if built_payload.block().hash() != payload.block().hash() { + tracing::error!( + expected = %payload.block().hash(), + got = %built_payload.block().hash(), + "flashblock hash mismatch after execution" + ); + builder_ctx.metrics.invalid_synced_blocks_count.increment(1); + bail!("flashblock hash mismatch after execution"); + } + + builder_ctx.metrics.block_synced_success.increment(1); + + tracing::info!(header = ?built_payload.block().header(), "successfully executed flashblock"); + Ok((built_payload, fb_payload)) +} + +#[allow(clippy::too_many_arguments)] +fn execute_transactions( + info: &mut ExecutionInfo, + state: &mut State, + txs: Vec, + gas_limit: u64, + evm_config: &reth_optimism_evm::OpEvmConfig, + evm_env: alloy_evm::EvmEnv, + max_gas_per_txn: Option, + is_canyon_active: bool, + is_regolith_active: bool, +) -> eyre::Result<()> { + use alloy_evm::{Evm as _, EvmError as _}; + use op_revm::{OpTransaction, transaction::deposit::DepositTransactionParts}; + use reth_evm::ConfigureEvm as _; + use reth_primitives_traits::SignerRecoverable as _; + use revm::{ + DatabaseCommit as _, + context::{TxEnv, result::ResultAndState}, + }; + + let mut evm = evm_config.evm_with_env(&mut *state, evm_env); + + for tx in txs { + let sender = tx + .recover_signer() + .wrap_err("failed to recover tx signer")?; + let tx_env = TxEnv::from_recovered_tx(&tx, sender); + let executable_tx = match tx { + OpTxEnvelope::Deposit(ref tx) => { + let deposit = DepositTransactionParts { + mint: Some(tx.mint), + source_hash: tx.source_hash, + is_system_transaction: tx.is_system_transaction, + }; + OpTransaction { + base: tx_env, + enveloped_tx: None, + deposit, + } + } + OpTxEnvelope::Legacy(_) => { + let mut tx = OpTransaction::new(tx_env); + tx.enveloped_tx = Some(vec![0x00].into()); + tx + } + OpTxEnvelope::Eip2930(_) => { + let mut tx = OpTransaction::new(tx_env); + tx.enveloped_tx = Some(vec![0x00].into()); + tx + } + OpTxEnvelope::Eip1559(_) => { + let mut tx = OpTransaction::new(tx_env); + tx.enveloped_tx = Some(vec![0x00].into()); + tx + } + OpTxEnvelope::Eip7702(_) => { + let mut tx = OpTransaction::new(tx_env); + tx.enveloped_tx = Some(vec![0x00].into()); + tx + } + }; + + let ResultAndState { result, state } = match evm.transact_raw(executable_tx) { + Ok(res) => res, + Err(err) => { + if let Some(err) = err.as_invalid_tx_err() { + // TODO: what invalid txs are allowed in the block? + // reverting txs should be allowed (?) but not straight up invalid ones + tracing::error!(error = %err, "skipping invalid transaction in flashblock"); + continue; + } + return Err(err).wrap_err("failed to execute flashblock transaction"); + } + }; + + if let Some(max_gas_per_txn) = max_gas_per_txn { + if result.gas_used() > max_gas_per_txn { + return Err(eyre::eyre!( + "transaction exceeded max gas per txn limit in flashblock" + )); + } + } + + let tx_gas_used = result.gas_used(); + info.cumulative_gas_used = info + .cumulative_gas_used + .checked_add(tx_gas_used) + .ok_or_else(|| { + eyre::eyre!("total gas used overflowed when executing flashblock transactions") + })?; + if info.cumulative_gas_used > gas_limit { + bail!("flashblock exceeded gas limit when executing transactions"); + } + + let depositor_nonce = (is_regolith_active && tx.is_deposit()) + .then(|| { + evm.db_mut() + .load_cache_account(sender) + .map(|acc| acc.account_info().unwrap_or_default().nonce) + }) + .transpose() + .wrap_err("failed to get depositor nonce")?; + + let ctx = ReceiptBuilderCtx { + tx: &tx, + evm: &evm, + result, + state: &state, + cumulative_gas_used: info.cumulative_gas_used, + }; + + info.receipts.push(build_receipt( + evm_config, + ctx, + depositor_nonce, + is_canyon_active, + )); + + evm.db_mut().commit(state); + + // append sender and transaction to the respective lists + info.executed_senders.push(sender); + info.executed_transactions.push(tx.clone()); + } + + Ok(()) +} + +fn build_receipt( + evm_config: &OpEvmConfig, + ctx: ReceiptBuilderCtx<'_, OpTransactionSigned, E>, + deposit_nonce: Option, + is_canyon_active: bool, +) -> OpReceipt { + use alloy_consensus::Eip658Value; + use alloy_op_evm::block::receipt_builder::OpReceiptBuilder as _; + use op_alloy_consensus::OpDepositReceipt; + use reth_evm::ConfigureEvm as _; + + let receipt_builder = evm_config.block_executor_factory().receipt_builder(); + match receipt_builder.build_receipt(ctx) { + Ok(receipt) => receipt, + Err(ctx) => { + let receipt = alloy_consensus::Receipt { + // Success flag was added in `EIP-658: Embedding transaction status code + // in receipts`. + status: Eip658Value::Eip658(ctx.result.is_success()), + cumulative_gas_used: ctx.cumulative_gas_used, + logs: ctx.result.into_logs(), + }; + + receipt_builder.build_deposit_receipt(OpDepositReceipt { + inner: receipt, + deposit_nonce, + // The deposit receipt version was introduced in Canyon to indicate an + // update to how receipt hashes should be computed + // when set. The state transition process ensures + // this is only set for post-Canyon deposit + // transactions. + deposit_receipt_version: is_canyon_active.then_some(1), + }) + } + } +} + +fn is_canyon_active(chain_spec: &OpChainSpec, timestamp: u64) -> bool { + use reth_optimism_chainspec::OpHardforks as _; + chain_spec.is_canyon_active_at_timestamp(timestamp) +} + +fn is_regolith_active(chain_spec: &OpChainSpec, timestamp: u64) -> bool { + use reth_optimism_chainspec::OpHardforks as _; + chain_spec.is_regolith_active_at_timestamp(timestamp) +} diff --git a/crates/op-rbuilder/src/builders/flashblocks/service.rs b/crates/op-rbuilder/src/builders/flashblocks/service.rs index 68d4b0361..e11fa2f2f 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/service.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/service.rs @@ -12,6 +12,7 @@ use crate::{ generator::BlockPayloadJobGenerator, }, flashtestations::service::bootstrap_flashtestations, + metrics::OpRBuilderMetrics, traits::{NodeBounds, PoolBounds}, }; use eyre::WrapErr as _; @@ -21,6 +22,7 @@ use reth_node_builder::{BuilderContext, components::PayloadServiceBuilder}; use reth_optimism_evm::OpEvmConfig; use reth_payload_builder::{PayloadBuilderHandle, PayloadBuilderService}; use reth_provider::CanonStateSubscriptions; +use std::sync::Arc; pub struct FlashblocksServiceBuilder(pub BuilderConfig); @@ -41,6 +43,10 @@ impl FlashblocksServiceBuilder { + Sync + 'static, { + // TODO: is there a different global token? + // this is effectively unused right now due to the usage of reth's `task_executor`. + let cancel = tokio_util::sync::CancellationToken::new(); + let (incoming_message_rx, outgoing_message_tx) = if self.0.specific.p2p_enabled { let mut builder = p2p::NodeBuilder::new(); @@ -76,6 +82,7 @@ impl FlashblocksServiceBuilder { .with_protocol(FLASHBLOCKS_STREAM_PROTOCOL) .with_known_peers(known_peers) .with_port(self.0.specific.p2p_port) + .with_cancellation_token(cancel.clone()) .with_max_peer_count(self.0.specific.p2p_max_peer_count) .try_build::() .wrap_err("failed to build flashblocks p2p node")?; @@ -97,6 +104,7 @@ impl FlashblocksServiceBuilder { (incoming_message_rx, outgoing_message_tx) }; + let metrics = Arc::new(OpRBuilderMetrics::default()); let (built_payload_tx, built_payload_rx) = tokio::sync::mpsc::channel(16); let payload_builder = OpPayloadBuilder::new( OpEvmConfig::optimism(ctx.chain_spec()), @@ -105,9 +113,9 @@ impl FlashblocksServiceBuilder { self.0.clone(), builder_tx, built_payload_tx, + metrics.clone(), ) .wrap_err("failed to create flashblocks payload builder")?; - let payload_job_config = BasicPayloadJobGeneratorConfig::default(); let payload_generator = BlockPayloadJobGenerator::with_builder( @@ -122,11 +130,22 @@ impl FlashblocksServiceBuilder { let (payload_service, payload_builder_handle) = PayloadBuilderService::new(payload_generator, ctx.provider().canonical_state_stream()); + let syncer_ctx = crate::builders::flashblocks::ctx::OpPayloadSyncerCtx::new( + &ctx.provider().clone(), + self.0, + OpEvmConfig::optimism(ctx.chain_spec()), + metrics.clone(), + ) + .wrap_err("failed to create flashblocks payload builder context")?; + let payload_handler = PayloadHandler::new( built_payload_rx, incoming_message_rx, outgoing_message_tx, payload_service.payload_events_handle(), + syncer_ctx, + ctx.provider().clone(), + cancel, ); ctx.task_executor() diff --git a/crates/op-rbuilder/src/metrics.rs b/crates/op-rbuilder/src/metrics.rs index 31fe081cd..c268c43c9 100644 --- a/crates/op-rbuilder/src/metrics.rs +++ b/crates/op-rbuilder/src/metrics.rs @@ -63,6 +63,8 @@ pub const VERSION: VersionInfo = VersionInfo { pub struct OpRBuilderMetrics { /// Block built success pub block_built_success: Counter, + /// Block synced success + pub block_synced_success: Counter, /// Number of flashblocks added to block (Total per block) pub flashblock_count: Histogram, /// Number of messages sent @@ -73,12 +75,16 @@ pub struct OpRBuilderMetrics { pub total_block_built_gauge: Gauge, /// Histogram of the time taken to build a Flashblock pub flashblock_build_duration: Histogram, + /// Histogram of the time taken to sync a Flashblock + pub flashblock_sync_duration: Histogram, /// Flashblock UTF8 payload byte size histogram pub flashblock_byte_size_histogram: Histogram, /// Histogram of transactions in a Flashblock pub flashblock_num_tx_histogram: Histogram, /// Number of invalid blocks - pub invalid_blocks_count: Counter, + pub invalid_built_blocks_count: Counter, + /// Number of invalid synced blocks + pub invalid_synced_blocks_count: Counter, /// Histogram of fetching transactions from the pool duration pub transaction_pool_fetch_duration: Histogram, /// Latest time taken to fetch tx from the pool diff --git a/crates/p2p/src/behaviour.rs b/crates/p2p/src/behaviour.rs index 140d309b1..bedfb78ec 100644 --- a/crates/p2p/src/behaviour.rs +++ b/crates/p2p/src/behaviour.rs @@ -1,7 +1,9 @@ use eyre::WrapErr as _; use libp2p::{ - autonat, connection_limits, connection_limits::ConnectionLimits, identify, identity, mdns, - ping, swarm::NetworkBehaviour, + Swarm, autonat, + connection_limits::{self, ConnectionLimits}, + identify, identity, mdns, ping, + swarm::NetworkBehaviour, }; use std::{convert::Infallible, time::Duration}; @@ -84,14 +86,22 @@ impl Behaviour { } impl BehaviourEvent { - pub(crate) fn handle(self) { + pub(crate) fn handle(self, swarm: &mut Swarm) { match self { BehaviourEvent::Autonat(_event) => {} BehaviourEvent::Identify(_event) => {} BehaviourEvent::Mdns(event) => match event { mdns::Event::Discovered(list) => { for (peer_id, multiaddr) in list { + if swarm.is_connected(&peer_id) { + continue; + } + tracing::debug!("mDNS discovered peer {peer_id} at {multiaddr}"); + swarm.add_peer_address(peer_id, multiaddr); + swarm.dial(peer_id).unwrap_or_else(|e| { + tracing::error!("failed to dial mDNS discovered peer {peer_id}: {e}") + }); } } mdns::Event::Expired(list) => { diff --git a/crates/p2p/src/lib.rs b/crates/p2p/src/lib.rs index fba12aa15..757be3b25 100644 --- a/crates/p2p/src/lib.rs +++ b/crates/p2p/src/lib.rs @@ -147,6 +147,7 @@ impl Node { } Some(message) = outgoing_message_rx.recv() => { let protocol = message.protocol(); + debug!("received message to broadcast on protocol {protocol}"); if let Err(e) = outgoing_streams_handler.broadcast_message(message).await { warn!("failed to broadcast message on protocol {protocol}: {e:?}"); } @@ -169,28 +170,22 @@ impl Node { } => { // when a new connection is established, open outbound streams for each protocol // and add them to the outgoing streams handler. - // - // If we already have a connection with this peer, close the new connection, - // as we only want one connection per peer. debug!("connection established with peer {peer_id}"); - if outgoing_streams_handler.has_peer(&peer_id) { - swarm.close_connection(connection_id); - debug!("already have connection with peer {peer_id}, closed connection {connection_id}"); - } else { + if !outgoing_streams_handler.has_peer(&peer_id) { for protocol in &protocols { - match swarm - .behaviour_mut() - .new_control() - .open_stream(peer_id, protocol.clone()) - .await - { - Ok(stream) => { outgoing_streams_handler.insert_peer_and_stream(peer_id, protocol.clone(), stream); - debug!("opened outbound stream with peer {peer_id} with protocol {protocol} on connection {connection_id}"); + match swarm + .behaviour_mut() + .new_control() + .open_stream(peer_id, protocol.clone()) + .await + { + Ok(stream) => { outgoing_streams_handler.insert_peer_and_stream(peer_id, protocol.clone(), stream); + debug!("opened outbound stream with peer {peer_id} with protocol {protocol} on connection {connection_id}"); + } + Err(e) => { + warn!("failed to open stream with peer {peer_id} on connection {connection_id}: {e:?}"); + } } - Err(e) => { - warn!("failed to open stream with peer {peer_id} on connection {connection_id}: {e:?}"); - } - } } } } @@ -202,7 +197,7 @@ impl Node { debug!("connection closed with peer {peer_id}: {cause:?}"); outgoing_streams_handler.remove_peer(&peer_id); } - SwarmEvent::Behaviour(event) => event.handle(), + SwarmEvent::Behaviour(event) => event.handle(&mut swarm), _ => continue, } }, @@ -273,6 +268,14 @@ impl NodeBuilder { self } + pub fn with_cancellation_token( + mut self, + cancellation_token: tokio_util::sync::CancellationToken, + ) -> Self { + self.cancellation_token = Some(cancellation_token); + self + } + pub fn with_max_peer_count(mut self, max_peer_count: u32) -> Self { self.max_peer_count = Some(max_peer_count); self diff --git a/crates/p2p/src/outgoing.rs b/crates/p2p/src/outgoing.rs index c948bde66..2440e0f72 100644 --- a/crates/p2p/src/outgoing.rs +++ b/crates/p2p/src/outgoing.rs @@ -63,7 +63,10 @@ impl StreamsHandler { let payload = payload.clone(); let fut = async move { let mut writer = FramedWrite::new(stream, LinesCodec::new()); - writer.send(payload).await?; + writer + .send(payload) + .await + .wrap_err("failed to send message to peer")?; Ok::<(PeerId, libp2p::swarm::Stream), eyre::ErrReport>(( peer, writer.into_inner().into_inner(), @@ -71,6 +74,7 @@ impl StreamsHandler { }; futures.push(fut); } + while let Some(result) = futures.next().await { match result { Ok((peer, stream)) => { @@ -85,6 +89,7 @@ impl StreamsHandler { } } } + debug!( "broadcasted message to {} peers", self.peers_to_stream.len() From 23f503d76b9a021f8a068cc47d7ccf150a2385f6 Mon Sep 17 00:00:00 2001 From: Solar Mithril Date: Mon, 3 Nov 2025 19:01:15 +0400 Subject: [PATCH 12/19] reth bump (#306) --- Cargo.lock | 2623 +++++++++++---------------------- Cargo.toml | 113 +- crates/op-rbuilder/Cargo.toml | 2 +- 3 files changed, 953 insertions(+), 1785 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 440d87443..3acc462fc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -287,9 +287,9 @@ dependencies = [ [[package]] name = "alloy-evm" -version = "0.21.2" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06a5f67ee74999aa4fe576a83be1996bdf74a30fce3d248bf2007d6fc7dae8aa" +checksum = "2f1bfade4de9f464719b5aca30cf5bb02b9fda7036f0cf43addc3a0e66a0340c" dependencies = [ "alloy-consensus", "alloy-eips", @@ -416,9 +416,9 @@ dependencies = [ [[package]] name = "alloy-op-evm" -version = "0.21.2" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17aaeb600740c181bf29c9f138f9b228d115ea74fa6d0f0343e1952f1a766968" +checksum = "d0b6679dc8854285d6c34ef6a9f9ade06dec1f5db8aab96e941d99b8abcefb72" dependencies = [ "alloy-consensus", "alloy-eips", @@ -1929,7 +1929,7 @@ dependencies = [ "bitflags 2.9.4", "cexpr", "clang-sys", - "itertools 0.10.5", + "itertools 0.13.0", "proc-macro2", "quote", "regex", @@ -3665,17 +3665,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "etcetera" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" -dependencies = [ - "cfg-if", - "home", - "windows-sys 0.48.0", -] - [[package]] name = "etcetera" version = "0.10.0" @@ -7061,51 +7050,51 @@ dependencies = [ "rand 0.9.2", "reqwest", "reth", - "reth-basic-payload-builder 1.8.2", - "reth-chain-state 1.8.2", - "reth-chainspec 1.8.2", + "reth-basic-payload-builder", + "reth-chain-state", + "reth-chainspec", "reth-cli", "reth-cli-commands", "reth-cli-util", "reth-db", - "reth-evm 1.8.2", - "reth-execution-types 1.8.2", + "reth-evm", + "reth-execution-types", "reth-exex", "reth-ipc", - "reth-metrics 1.8.2", - "reth-network-peers 1.8.2", + "reth-metrics", + "reth-network-peers", "reth-node-api", "reth-node-builder", "reth-node-core", "reth-node-ethereum", - "reth-optimism-chainspec 1.8.2", + "reth-optimism-chainspec", "reth-optimism-cli", - "reth-optimism-consensus 1.8.2", - "reth-optimism-evm 1.8.2", - "reth-optimism-forks 1.8.2", + "reth-optimism-consensus", + "reth-optimism-evm", + "reth-optimism-forks", "reth-optimism-node", - "reth-optimism-payload-builder 1.8.2", - "reth-optimism-primitives 1.8.2", + "reth-optimism-payload-builder", + "reth-optimism-primitives", "reth-optimism-rpc", - "reth-optimism-txpool 1.8.2", - "reth-payload-builder 1.8.2", - "reth-payload-builder-primitives 1.8.2", - "reth-payload-primitives 1.8.2", - "reth-payload-util 1.8.2", + "reth-optimism-txpool", + "reth-payload-builder", + "reth-payload-builder-primitives", + "reth-payload-primitives", + "reth-payload-util", "reth-primitives", - "reth-primitives-traits 1.8.2", + "reth-primitives-traits", "reth-provider", - "reth-revm 1.8.2", + "reth-revm", "reth-rpc-api", "reth-rpc-engine-api", "reth-rpc-eth-types", "reth-rpc-layer", - "reth-storage-api 1.8.2", - "reth-tasks 1.8.2", + "reth-storage-api", + "reth-tasks", "reth-testing-utils", "reth-tracing-otlp", - "reth-transaction-pool 1.8.2", - "reth-trie 1.8.2", + "reth-transaction-pool", + "reth-trie", "revm", "rlimit", "rollup-boost", @@ -7118,7 +7107,7 @@ dependencies = [ "shellexpand", "tar", "tempfile", - "testcontainers 0.24.0", + "testcontainers", "thiserror 1.0.69", "tikv-jemallocator", "time", @@ -8432,23 +8421,23 @@ checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799" [[package]] name = "reth" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-rpc-types", "aquamarine", "clap", "eyre", - "reth-chainspec 1.8.2", + "reth-chainspec", "reth-cli-runner", "reth-cli-util", - "reth-consensus 1.8.2", - "reth-consensus-common 1.8.2", + "reth-consensus", + "reth-consensus-common", "reth-db", "reth-ethereum-cli", "reth-ethereum-payload-builder", - "reth-ethereum-primitives 1.8.2", - "reth-evm 1.8.2", + "reth-ethereum-primitives", + "reth-evm", "reth-network", "reth-network-api", "reth-node-api", @@ -8456,54 +8445,30 @@ dependencies = [ "reth-node-core", "reth-node-ethereum", "reth-node-metrics", - "reth-payload-builder 1.8.2", - "reth-payload-primitives 1.8.2", + "reth-payload-builder", + "reth-payload-primitives", "reth-primitives", "reth-provider", "reth-ress-protocol", "reth-ress-provider", - "reth-revm 1.8.2", + "reth-revm", "reth-rpc", "reth-rpc-api", "reth-rpc-builder", "reth-rpc-convert", "reth-rpc-eth-types", "reth-rpc-server-types", - "reth-tasks 1.8.2", + "reth-tasks", "reth-tokio-util", - "reth-transaction-pool 1.8.2", - "tokio", - "tracing", -] - -[[package]] -name = "reth-basic-payload-builder" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives 1.4.1", - "futures-core", - "futures-util", - "metrics", - "reth-chain-state 1.8.1", - "reth-metrics 1.8.1", - "reth-payload-builder 1.8.1", - "reth-payload-builder-primitives 1.8.1", - "reth-payload-primitives 1.8.1", - "reth-primitives-traits 1.8.1", - "reth-revm 1.8.1", - "reth-storage-api 1.8.1", - "reth-tasks 1.8.1", + "reth-transaction-pool", "tokio", "tracing", ] [[package]] name = "reth-basic-payload-builder" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8511,49 +8476,23 @@ dependencies = [ "futures-core", "futures-util", "metrics", - "reth-chain-state 1.8.2", - "reth-metrics 1.8.2", - "reth-payload-builder 1.8.2", - "reth-payload-builder-primitives 1.8.2", - "reth-payload-primitives 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-revm 1.8.2", - "reth-storage-api 1.8.2", - "reth-tasks 1.8.2", - "tokio", - "tracing", -] - -[[package]] -name = "reth-chain-state" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives 1.4.1", - "derive_more", - "metrics", - "parking_lot", - "pin-project", - "reth-chainspec 1.8.1", - "reth-errors 1.8.1", - "reth-ethereum-primitives 1.8.1", - "reth-execution-types 1.8.1", - "reth-metrics 1.8.1", - "reth-primitives-traits 1.8.1", - "reth-storage-api 1.8.1", - "reth-trie 1.8.1", - "revm-database", + "reth-chain-state", + "reth-metrics", + "reth-payload-builder", + "reth-payload-builder-primitives", + "reth-payload-primitives", + "reth-primitives-traits", + "reth-revm", + "reth-storage-api", + "reth-tasks", "tokio", - "tokio-stream", "tracing", ] [[package]] name = "reth-chain-state" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8565,14 +8504,14 @@ dependencies = [ "parking_lot", "pin-project", "rand 0.9.2", - "reth-chainspec 1.8.2", - "reth-errors 1.8.2", - "reth-ethereum-primitives 1.8.2", - "reth-execution-types 1.8.2", - "reth-metrics 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-storage-api 1.8.2", - "reth-trie 1.8.2", + "reth-chainspec", + "reth-errors", + "reth-ethereum-primitives", + "reth-execution-types", + "reth-metrics", + "reth-primitives-traits", + "reth-storage-api", + "reth-trie", "revm-database", "revm-state", "serde", @@ -8583,28 +8522,8 @@ dependencies = [ [[package]] name = "reth-chainspec" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-chains", - "alloy-consensus", - "alloy-eips", - "alloy-evm", - "alloy-genesis", - "alloy-primitives 1.4.1", - "alloy-trie", - "auto_impl", - "derive_more", - "reth-ethereum-forks 1.8.1", - "reth-network-peers 1.8.1", - "reth-primitives-traits 1.8.1", - "serde_json", -] - -[[package]] -name = "reth-chainspec" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-chains", "alloy-consensus", @@ -8615,16 +8534,16 @@ dependencies = [ "alloy-trie", "auto_impl", "derive_more", - "reth-ethereum-forks 1.8.2", - "reth-network-peers 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-ethereum-forks", + "reth-network-peers", + "reth-primitives-traits", "serde_json", ] [[package]] name = "reth-cli" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-genesis", "clap", @@ -8637,8 +8556,8 @@ dependencies = [ [[package]] name = "reth-cli-commands" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-chains", "alloy-consensus", @@ -8658,13 +8577,13 @@ dependencies = [ "lz4", "ratatui", "reqwest", - "reth-chainspec 1.8.2", + "reth-chainspec", "reth-cli", "reth-cli-runner", "reth-cli-util", - "reth-codecs 1.8.2", + "reth-codecs", "reth-config", - "reth-consensus 1.8.2", + "reth-consensus", "reth-db", "reth-db-api", "reth-db-common", @@ -8677,27 +8596,27 @@ dependencies = [ "reth-era-utils", "reth-eth-wire", "reth-etl", - "reth-evm 1.8.2", + "reth-evm", "reth-exex", - "reth-fs-util 1.8.2", + "reth-fs-util", "reth-net-nat", "reth-network", "reth-network-p2p", - "reth-network-peers 1.8.2", + "reth-network-peers", "reth-node-api", "reth-node-builder", "reth-node-core", "reth-node-events", "reth-node-metrics", - "reth-primitives-traits 1.8.2", + "reth-primitives-traits", "reth-provider", "reth-prune", - "reth-revm 1.8.2", + "reth-revm", "reth-stages", "reth-static-file", - "reth-static-file-types 1.8.2", - "reth-trie 1.8.2", - "reth-trie-common 1.8.2", + "reth-static-file-types", + "reth-trie", + "reth-trie-common", "reth-trie-db", "secp256k1 0.30.0", "serde", @@ -8712,18 +8631,18 @@ dependencies = [ [[package]] name = "reth-cli-runner" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ - "reth-tasks 1.8.2", + "reth-tasks", "tokio", "tracing", ] [[package]] name = "reth-cli-util" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-eips", "alloy-primitives 1.4.1", @@ -8731,7 +8650,7 @@ dependencies = [ "eyre", "libc", "rand 0.8.5", - "reth-fs-util 1.8.2", + "reth-fs-util", "secp256k1 0.30.0", "serde", "thiserror 2.0.17", @@ -8740,26 +8659,8 @@ dependencies = [ [[package]] name = "reth-codecs" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-genesis", - "alloy-primitives 1.4.1", - "alloy-trie", - "bytes", - "modular-bitfield", - "op-alloy-consensus", - "reth-codecs-derive 1.8.1", - "reth-zstd-compressors 1.8.1", - "serde", -] - -[[package]] -name = "reth-codecs" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8770,27 +8671,16 @@ dependencies = [ "bytes", "modular-bitfield", "op-alloy-consensus", - "reth-codecs-derive 1.8.2", - "reth-zstd-compressors 1.8.2", + "reth-codecs-derive", + "reth-zstd-compressors", "serde", "visibility", ] [[package]] name = "reth-codecs-derive" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "reth-codecs-derive" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "convert_case", "proc-macro2", @@ -8800,14 +8690,14 @@ dependencies = [ [[package]] name = "reth-config" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "eyre", "humantime-serde", "reth-network-types", - "reth-prune-types 1.8.2", - "reth-stages-types 1.8.2", + "reth-prune-types", + "reth-stages-types", "serde", "toml", "url", @@ -8815,58 +8705,33 @@ dependencies = [ [[package]] name = "reth-consensus" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-consensus", - "alloy-primitives 1.4.1", - "auto_impl", - "reth-execution-types 1.8.1", - "reth-primitives-traits 1.8.1", - "thiserror 2.0.17", -] - -[[package]] -name = "reth-consensus" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", "auto_impl", - "reth-execution-types 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-execution-types", + "reth-primitives-traits", "thiserror 2.0.17", ] [[package]] name = "reth-consensus-common" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "reth-chainspec 1.8.1", - "reth-consensus 1.8.1", - "reth-primitives-traits 1.8.1", -] - -[[package]] -name = "reth-consensus-common" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", - "reth-chainspec 1.8.2", - "reth-consensus 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-chainspec", + "reth-consensus", + "reth-primitives-traits", ] [[package]] name = "reth-consensus-debug-client" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8881,7 +8746,7 @@ dependencies = [ "futures", "reqwest", "reth-node-api", - "reth-primitives-traits 1.8.2", + "reth-primitives-traits", "reth-tracing", "ringbuffer", "serde", @@ -8891,8 +8756,8 @@ dependencies = [ [[package]] name = "reth-db" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", "derive_more", @@ -8901,12 +8766,12 @@ dependencies = [ "page_size", "parking_lot", "reth-db-api", - "reth-fs-util 1.8.2", + "reth-fs-util", "reth-libmdbx", - "reth-metrics 1.8.2", + "reth-metrics", "reth-nippy-jar", - "reth-static-file-types 1.8.2", - "reth-storage-errors 1.8.2", + "reth-static-file-types", + "reth-storage-errors", "reth-tracing", "rustc-hash 2.1.1", "strum 0.27.2", @@ -8917,8 +8782,8 @@ dependencies = [ [[package]] name = "reth-db-api" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-genesis", @@ -8930,42 +8795,42 @@ dependencies = [ "modular-bitfield", "parity-scale-codec", "proptest", - "reth-codecs 1.8.2", - "reth-db-models 1.8.2", - "reth-ethereum-primitives 1.8.2", - "reth-optimism-primitives 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-prune-types 1.8.2", - "reth-stages-types 1.8.2", - "reth-storage-errors 1.8.2", - "reth-trie-common 1.8.2", + "reth-codecs", + "reth-db-models", + "reth-ethereum-primitives", + "reth-optimism-primitives", + "reth-primitives-traits", + "reth-prune-types", + "reth-stages-types", + "reth-storage-errors", + "reth-trie-common", "roaring", "serde", ] [[package]] name = "reth-db-common" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-genesis", "alloy-primitives 1.4.1", "boyer-moore-magiclen", "eyre", - "reth-chainspec 1.8.2", - "reth-codecs 1.8.2", + "reth-chainspec", + "reth-codecs", "reth-config", "reth-db-api", "reth-etl", - "reth-execution-errors 1.8.2", - "reth-fs-util 1.8.2", + "reth-execution-errors", + "reth-fs-util", "reth-node-types", - "reth-primitives-traits 1.8.2", + "reth-primitives-traits", "reth-provider", - "reth-stages-types 1.8.2", - "reth-static-file-types 1.8.2", - "reth-trie 1.8.2", + "reth-stages-types", + "reth-static-file-types", + "reth-trie", "reth-trie-db", "serde", "serde_json", @@ -8975,33 +8840,23 @@ dependencies = [ [[package]] name = "reth-db-models" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-eips", - "alloy-primitives 1.4.1", - "reth-primitives-traits 1.8.1", -] - -[[package]] -name = "reth-db-models" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-eips", "alloy-primitives 1.4.1", "arbitrary", "bytes", "modular-bitfield", - "reth-codecs 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-codecs", + "reth-primitives-traits", "serde", ] [[package]] name = "reth-discv4" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", "alloy-rlp", @@ -9011,10 +8866,10 @@ dependencies = [ "itertools 0.14.0", "parking_lot", "rand 0.8.5", - "reth-ethereum-forks 1.8.2", + "reth-ethereum-forks", "reth-net-banlist", "reth-net-nat", - "reth-network-peers 1.8.2", + "reth-network-peers", "schnellru", "secp256k1 0.30.0", "serde", @@ -9026,8 +8881,8 @@ dependencies = [ [[package]] name = "reth-discv5" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", "alloy-rlp", @@ -9038,10 +8893,10 @@ dependencies = [ "itertools 0.14.0", "metrics", "rand 0.9.2", - "reth-chainspec 1.8.2", - "reth-ethereum-forks 1.8.2", - "reth-metrics 1.8.2", - "reth-network-peers 1.8.2", + "reth-chainspec", + "reth-ethereum-forks", + "reth-metrics", + "reth-network-peers", "secp256k1 0.30.0", "thiserror 2.0.17", "tokio", @@ -9050,8 +8905,8 @@ dependencies = [ [[package]] name = "reth-dns-discovery" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", "data-encoding", @@ -9059,8 +8914,8 @@ dependencies = [ "hickory-resolver", "linked_hash_set", "parking_lot", - "reth-ethereum-forks 1.8.2", - "reth-network-peers 1.8.2", + "reth-ethereum-forks", + "reth-network-peers", "reth-tokio-util", "schnellru", "secp256k1 0.30.0", @@ -9074,8 +8929,8 @@ dependencies = [ [[package]] name = "reth-downloaders" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9088,16 +8943,16 @@ dependencies = [ "pin-project", "rayon", "reth-config", - "reth-consensus 1.8.2", + "reth-consensus", "reth-db", "reth-db-api", - "reth-ethereum-primitives 1.8.2", - "reth-metrics 1.8.2", + "reth-ethereum-primitives", + "reth-metrics", "reth-network-p2p", - "reth-network-peers 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-storage-api 1.8.2", - "reth-tasks 1.8.2", + "reth-network-peers", + "reth-primitives-traits", + "reth-storage-api", + "reth-tasks", "reth-testing-utils", "tempfile", "thiserror 2.0.17", @@ -9109,8 +8964,8 @@ dependencies = [ [[package]] name = "reth-ecies" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "aes", "alloy-primitives 1.4.1", @@ -9126,7 +8981,7 @@ dependencies = [ "hmac", "pin-project", "rand 0.8.5", - "reth-network-peers 1.8.2", + "reth-network-peers", "secp256k1 0.30.0", "sha2 0.10.9", "sha3", @@ -9140,8 +8995,8 @@ dependencies = [ [[package]] name = "reth-engine-local" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", @@ -9149,14 +9004,14 @@ dependencies = [ "eyre", "futures-util", "op-alloy-rpc-types-engine", - "reth-chainspec 1.8.2", - "reth-engine-primitives 1.8.2", - "reth-ethereum-engine-primitives 1.8.2", - "reth-optimism-chainspec 1.8.2", - "reth-payload-builder 1.8.2", - "reth-payload-primitives 1.8.2", + "reth-chainspec", + "reth-engine-primitives", + "reth-ethereum-engine-primitives", + "reth-optimism-chainspec", + "reth-payload-builder", + "reth-payload-primitives", "reth-provider", - "reth-transaction-pool 1.8.2", + "reth-transaction-pool", "tokio", "tokio-stream", "tracing", @@ -9164,31 +9019,8 @@ dependencies = [ [[package]] name = "reth-engine-primitives" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives 1.4.1", - "alloy-rpc-types-engine", - "auto_impl", - "reth-chain-state 1.8.1", - "reth-errors 1.8.1", - "reth-ethereum-primitives 1.8.1", - "reth-evm 1.8.1", - "reth-execution-types 1.8.1", - "reth-payload-builder-primitives 1.8.1", - "reth-payload-primitives 1.8.1", - "reth-primitives-traits 1.8.1", - "reth-trie-common 1.8.1", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "reth-engine-primitives" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9196,15 +9028,15 @@ dependencies = [ "alloy-rpc-types-engine", "auto_impl", "futures", - "reth-chain-state 1.8.2", - "reth-errors 1.8.2", - "reth-ethereum-primitives 1.8.2", - "reth-evm 1.8.2", - "reth-execution-types 1.8.2", - "reth-payload-builder-primitives 1.8.2", - "reth-payload-primitives 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-trie-common 1.8.2", + "reth-chain-state", + "reth-errors", + "reth-ethereum-primitives", + "reth-evm", + "reth-execution-types", + "reth-payload-builder-primitives", + "reth-payload-primitives", + "reth-primitives-traits", + "reth-trie-common", "serde", "thiserror 2.0.17", "tokio", @@ -9212,31 +9044,31 @@ dependencies = [ [[package]] name = "reth-engine-service" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "futures", "pin-project", - "reth-chainspec 1.8.2", - "reth-consensus 1.8.2", - "reth-engine-primitives 1.8.2", + "reth-chainspec", + "reth-consensus", + "reth-engine-primitives", "reth-engine-tree", - "reth-ethereum-primitives 1.8.2", - "reth-evm 1.8.2", + "reth-ethereum-primitives", + "reth-evm", "reth-network-p2p", "reth-node-types", - "reth-payload-builder 1.8.2", + "reth-payload-builder", "reth-provider", "reth-prune", "reth-stages-api", - "reth-tasks 1.8.2", + "reth-tasks", "thiserror 2.0.17", ] [[package]] name = "reth-engine-tree" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9250,33 +9082,33 @@ dependencies = [ "mini-moka", "parking_lot", "rayon", - "reth-chain-state 1.8.2", - "reth-chainspec 1.8.2", - "reth-consensus 1.8.2", + "reth-chain-state", + "reth-chainspec", + "reth-consensus", "reth-db", - "reth-engine-primitives 1.8.2", - "reth-errors 1.8.2", - "reth-ethereum-primitives 1.8.2", - "reth-evm 1.8.2", - "reth-execution-types 1.8.2", - "reth-metrics 1.8.2", + "reth-engine-primitives", + "reth-errors", + "reth-ethereum-primitives", + "reth-evm", + "reth-execution-types", + "reth-metrics", "reth-network-p2p", - "reth-payload-builder 1.8.2", - "reth-payload-primitives 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-payload-builder", + "reth-payload-primitives", + "reth-primitives-traits", "reth-provider", "reth-prune", - "reth-prune-types 1.8.2", - "reth-revm 1.8.2", + "reth-prune-types", + "reth-revm", "reth-stages", "reth-stages-api", "reth-static-file", - "reth-tasks 1.8.2", + "reth-tasks", "reth-tracing", - "reth-trie 1.8.2", + "reth-trie", "reth-trie-db", "reth-trie-parallel", - "reth-trie-sparse 1.8.2", + "reth-trie-sparse", "reth-trie-sparse-parallel", "revm", "revm-primitives", @@ -9289,8 +9121,8 @@ dependencies = [ [[package]] name = "reth-engine-util" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-rpc-types-engine", @@ -9298,16 +9130,16 @@ dependencies = [ "futures", "itertools 0.14.0", "pin-project", - "reth-chainspec 1.8.2", - "reth-engine-primitives 1.8.2", + "reth-chainspec", + "reth-engine-primitives", "reth-engine-tree", - "reth-errors 1.8.2", - "reth-evm 1.8.2", - "reth-fs-util 1.8.2", - "reth-payload-primitives 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-revm 1.8.2", - "reth-storage-api 1.8.2", + "reth-errors", + "reth-evm", + "reth-fs-util", + "reth-payload-primitives", + "reth-primitives-traits", + "reth-revm", + "reth-storage-api", "serde", "serde_json", "tokio", @@ -9317,8 +9149,8 @@ dependencies = [ [[package]] name = "reth-era" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9326,30 +9158,30 @@ dependencies = [ "alloy-rlp", "ethereum_ssz", "ethereum_ssz_derive", - "reth-ethereum-primitives 1.8.2", + "reth-ethereum-primitives", "snap", "thiserror 2.0.17", ] [[package]] name = "reth-era-downloader" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", "bytes", "eyre", "futures-util", "reqwest", - "reth-fs-util 1.8.2", + "reth-fs-util", "sha2 0.10.9", "tokio", ] [[package]] name = "reth-era-utils" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", @@ -9359,41 +9191,30 @@ dependencies = [ "reth-era", "reth-era-downloader", "reth-etl", - "reth-fs-util 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-fs-util", + "reth-primitives-traits", "reth-provider", - "reth-stages-types 1.8.2", - "reth-storage-api 1.8.2", + "reth-stages-types", + "reth-storage-api", "tokio", "tracing", ] [[package]] name = "reth-errors" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "reth-consensus 1.8.1", - "reth-execution-errors 1.8.1", - "reth-storage-errors 1.8.1", - "thiserror 2.0.17", -] - -[[package]] -name = "reth-errors" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ - "reth-consensus 1.8.2", - "reth-execution-errors 1.8.2", - "reth-storage-errors 1.8.2", + "reth-consensus", + "reth-execution-errors", + "reth-storage-errors", "thiserror 2.0.17", ] [[package]] name = "reth-eth-wire" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-chains", "alloy-primitives 1.4.1", @@ -9402,13 +9223,13 @@ dependencies = [ "derive_more", "futures", "pin-project", - "reth-codecs 1.8.2", + "reth-codecs", "reth-ecies", - "reth-eth-wire-types 1.8.2", - "reth-ethereum-forks 1.8.2", - "reth-metrics 1.8.2", - "reth-network-peers 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-eth-wire-types", + "reth-ethereum-forks", + "reth-metrics", + "reth-network-peers", + "reth-primitives-traits", "serde", "snap", "thiserror 2.0.17", @@ -9420,29 +9241,8 @@ dependencies = [ [[package]] name = "reth-eth-wire-types" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-chains", - "alloy-consensus", - "alloy-eips", - "alloy-hardforks", - "alloy-primitives 1.4.1", - "alloy-rlp", - "bytes", - "derive_more", - "reth-chainspec 1.8.1", - "reth-codecs-derive 1.8.1", - "reth-ethereum-primitives 1.8.1", - "reth-primitives-traits 1.8.1", - "serde", - "thiserror 2.0.17", -] - -[[package]] -name = "reth-eth-wire-types" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-chains", "alloy-consensus", @@ -9452,22 +9252,22 @@ dependencies = [ "alloy-rlp", "bytes", "derive_more", - "reth-chainspec 1.8.2", - "reth-codecs-derive 1.8.2", - "reth-ethereum-primitives 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-chainspec", + "reth-codecs-derive", + "reth-ethereum-primitives", + "reth-primitives-traits", "serde", "thiserror 2.0.17", ] [[package]] name = "reth-ethereum-cli" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "clap", "eyre", - "reth-chainspec 1.8.2", + "reth-chainspec", "reth-cli", "reth-cli-commands", "reth-cli-runner", @@ -9484,51 +9284,33 @@ dependencies = [ [[package]] name = "reth-ethereum-consensus" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives 1.4.1", - "reth-chainspec 1.8.2", - "reth-consensus 1.8.2", - "reth-consensus-common 1.8.2", - "reth-execution-types 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-chainspec", + "reth-consensus", + "reth-consensus-common", + "reth-execution-types", + "reth-primitives-traits", "tracing", ] [[package]] name = "reth-ethereum-engine-primitives" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-eips", - "alloy-primitives 1.4.1", - "alloy-rlp", - "alloy-rpc-types-engine", - "reth-engine-primitives 1.8.1", - "reth-ethereum-primitives 1.8.1", - "reth-payload-primitives 1.8.1", - "reth-primitives-traits 1.8.1", - "serde", - "sha2 0.10.9", - "thiserror 2.0.17", -] - -[[package]] -name = "reth-ethereum-engine-primitives" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-eips", "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-engine", - "reth-engine-primitives 1.8.2", - "reth-ethereum-primitives 1.8.2", - "reth-payload-primitives 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-engine-primitives", + "reth-ethereum-primitives", + "reth-payload-primitives", + "reth-primitives-traits", "serde", "sha2 0.10.9", "thiserror 2.0.17", @@ -9536,21 +9318,8 @@ dependencies = [ [[package]] name = "reth-ethereum-forks" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-eip2124", - "alloy-hardforks", - "alloy-primitives 1.4.1", - "auto_impl", - "once_cell", - "rustc-hash 2.1.1", -] - -[[package]] -name = "reth-ethereum-forks" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-eip2124", "alloy-hardforks", @@ -9562,54 +9331,37 @@ dependencies = [ [[package]] name = "reth-ethereum-payload-builder" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-engine", - "reth-basic-payload-builder 1.8.2", - "reth-chainspec 1.8.2", - "reth-consensus-common 1.8.2", - "reth-errors 1.8.2", - "reth-ethereum-primitives 1.8.2", - "reth-evm 1.8.2", + "reth-basic-payload-builder", + "reth-chainspec", + "reth-consensus-common", + "reth-errors", + "reth-ethereum-primitives", + "reth-evm", "reth-evm-ethereum", - "reth-payload-builder 1.8.2", - "reth-payload-builder-primitives 1.8.2", - "reth-payload-primitives 1.8.2", - "reth-payload-validator 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-revm 1.8.2", - "reth-storage-api 1.8.2", - "reth-transaction-pool 1.8.2", + "reth-payload-builder", + "reth-payload-builder-primitives", + "reth-payload-primitives", + "reth-payload-validator", + "reth-primitives-traits", + "reth-revm", + "reth-storage-api", + "reth-transaction-pool", "revm", "tracing", ] [[package]] name = "reth-ethereum-primitives" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives 1.4.1", - "alloy-rlp", - "alloy-rpc-types-eth", - "alloy-serde", - "reth-primitives-traits 1.8.1", - "reth-zstd-compressors 1.8.1", - "serde", - "serde_with", -] - -[[package]] -name = "reth-ethereum-primitives" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9619,17 +9371,17 @@ dependencies = [ "alloy-serde", "arbitrary", "modular-bitfield", - "reth-codecs 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-zstd-compressors 1.8.2", + "reth-codecs", + "reth-primitives-traits", + "reth-zstd-compressors", "serde", "serde_with", ] [[package]] name = "reth-etl" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "rayon", "reth-db-api", @@ -9638,29 +9390,8 @@ dependencies = [ [[package]] name = "reth-evm" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-evm", - "alloy-primitives 1.4.1", - "auto_impl", - "derive_more", - "futures-util", - "reth-execution-errors 1.8.1", - "reth-execution-types 1.8.1", - "reth-primitives-traits 1.8.1", - "reth-storage-api 1.8.1", - "reth-storage-errors 1.8.1", - "reth-trie-common 1.8.1", - "revm", -] - -[[package]] -name = "reth-evm" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9670,91 +9401,62 @@ dependencies = [ "derive_more", "futures-util", "metrics", - "reth-execution-errors 1.8.2", - "reth-execution-types 1.8.2", - "reth-metrics 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-storage-api 1.8.2", - "reth-storage-errors 1.8.2", - "reth-trie-common 1.8.2", + "reth-execution-errors", + "reth-execution-types", + "reth-metrics", + "reth-primitives-traits", + "reth-storage-api", + "reth-storage-errors", + "reth-trie-common", "revm", ] [[package]] name = "reth-evm-ethereum" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-evm", "alloy-primitives 1.4.1", "alloy-rpc-types-engine", - "reth-chainspec 1.8.2", - "reth-ethereum-forks 1.8.2", - "reth-ethereum-primitives 1.8.2", - "reth-evm 1.8.2", - "reth-execution-types 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-storage-errors 1.8.2", + "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.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-evm", "alloy-primitives 1.4.1", "alloy-rlp", "nybbles", - "reth-storage-errors 1.8.1", + "reth-storage-errors", "thiserror 2.0.17", ] [[package]] -name = "reth-execution-errors" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +name = "reth-execution-types" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ - "alloy-evm", - "alloy-primitives 1.4.1", - "alloy-rlp", - "nybbles", - "reth-storage-errors 1.8.2", - "thiserror 2.0.17", -] - -[[package]] -name = "reth-execution-types" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-consensus", - "alloy-eips", + "alloy-consensus", + "alloy-eips", "alloy-evm", "alloy-primitives 1.4.1", "derive_more", - "reth-ethereum-primitives 1.8.1", - "reth-primitives-traits 1.8.1", - "reth-trie-common 1.8.1", - "revm", -] - -[[package]] -name = "reth-execution-types" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-evm", - "alloy-primitives 1.4.1", - "derive_more", - "reth-ethereum-primitives 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-trie-common 1.8.2", + "reth-ethereum-primitives", + "reth-primitives-traits", + "reth-trie-common", "revm", "serde", "serde_with", @@ -9762,8 +9464,8 @@ dependencies = [ [[package]] name = "reth-exex" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9773,23 +9475,23 @@ dependencies = [ "itertools 0.14.0", "metrics", "parking_lot", - "reth-chain-state 1.8.2", - "reth-chainspec 1.8.2", + "reth-chain-state", + "reth-chainspec", "reth-config", - "reth-ethereum-primitives 1.8.2", - "reth-evm 1.8.2", + "reth-ethereum-primitives", + "reth-evm", "reth-exex-types", - "reth-fs-util 1.8.2", - "reth-metrics 1.8.2", + "reth-fs-util", + "reth-metrics", "reth-node-api", "reth-node-core", - "reth-payload-builder 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-payload-builder", + "reth-primitives-traits", "reth-provider", - "reth-prune-types 1.8.2", - "reth-revm 1.8.2", + "reth-prune-types", + "reth-revm", "reth-stages-api", - "reth-tasks 1.8.2", + "reth-tasks", "reth-tracing", "rmp-serde", "thiserror 2.0.17", @@ -9800,32 +9502,22 @@ dependencies = [ [[package]] name = "reth-exex-types" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-eips", "alloy-primitives 1.4.1", - "reth-chain-state 1.8.2", - "reth-execution-types 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-chain-state", + "reth-execution-types", + "reth-primitives-traits", "serde", "serde_with", ] [[package]] name = "reth-fs-util" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "serde", - "serde_json", - "thiserror 2.0.17", -] - -[[package]] -name = "reth-fs-util" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "serde", "serde_json", @@ -9834,8 +9526,8 @@ dependencies = [ [[package]] name = "reth-invalid-block-hooks" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", @@ -9845,14 +9537,14 @@ dependencies = [ "futures", "jsonrpsee 0.26.0", "pretty_assertions", - "reth-engine-primitives 1.8.2", - "reth-evm 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-engine-primitives", + "reth-evm", + "reth-primitives-traits", "reth-provider", - "reth-revm 1.8.2", + "reth-revm", "reth-rpc-api", "reth-tracing", - "reth-trie 1.8.2", + "reth-trie", "revm-bytecode", "revm-database", "serde", @@ -9861,8 +9553,8 @@ dependencies = [ [[package]] name = "reth-ipc" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "bytes", "futures", @@ -9881,8 +9573,8 @@ dependencies = [ [[package]] name = "reth-libmdbx" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "bitflags 2.9.4", "byteorder", @@ -9897,8 +9589,8 @@ dependencies = [ [[package]] name = "reth-mdbx-sys" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "bindgen 0.71.1", "cc", @@ -9906,17 +9598,8 @@ dependencies = [ [[package]] name = "reth-metrics" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "metrics", - "metrics-derive", -] - -[[package]] -name = "reth-metrics" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "futures", "metrics", @@ -9927,16 +9610,16 @@ dependencies = [ [[package]] name = "reth-net-banlist" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", ] [[package]] name = "reth-net-nat" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "futures-util", "if-addrs 0.13.4", @@ -9949,8 +9632,8 @@ dependencies = [ [[package]] name = "reth-network" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9968,28 +9651,28 @@ dependencies = [ "pin-project", "rand 0.8.5", "rand 0.9.2", - "reth-chainspec 1.8.2", - "reth-consensus 1.8.2", + "reth-chainspec", + "reth-consensus", "reth-discv4", "reth-discv5", "reth-dns-discovery", "reth-ecies", "reth-eth-wire", - "reth-eth-wire-types 1.8.2", - "reth-ethereum-forks 1.8.2", - "reth-ethereum-primitives 1.8.2", - "reth-fs-util 1.8.2", - "reth-metrics 1.8.2", + "reth-eth-wire-types", + "reth-ethereum-forks", + "reth-ethereum-primitives", + "reth-fs-util", + "reth-metrics", "reth-net-banlist", "reth-network-api", "reth-network-p2p", - "reth-network-peers 1.8.2", + "reth-network-peers", "reth-network-types", - "reth-primitives-traits 1.8.2", - "reth-storage-api 1.8.2", - "reth-tasks 1.8.2", + "reth-primitives-traits", + "reth-storage-api", + "reth-tasks", "reth-tokio-util", - "reth-transaction-pool 1.8.2", + "reth-transaction-pool", "rustc-hash 2.1.1", "schnellru", "secp256k1 0.30.0", @@ -10004,8 +9687,8 @@ dependencies = [ [[package]] name = "reth-network-api" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", @@ -10015,10 +9698,10 @@ dependencies = [ "derive_more", "enr", "futures", - "reth-eth-wire-types 1.8.2", - "reth-ethereum-forks 1.8.2", + "reth-eth-wire-types", + "reth-ethereum-forks", "reth-network-p2p", - "reth-network-peers 1.8.2", + "reth-network-peers", "reth-network-types", "reth-tokio-util", "serde", @@ -10029,8 +9712,8 @@ dependencies = [ [[package]] name = "reth-network-p2p" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -10039,34 +9722,21 @@ dependencies = [ "derive_more", "futures", "parking_lot", - "reth-consensus 1.8.2", - "reth-eth-wire-types 1.8.2", - "reth-ethereum-primitives 1.8.2", - "reth-network-peers 1.8.2", + "reth-consensus", + "reth-eth-wire-types", + "reth-ethereum-primitives", + "reth-network-peers", "reth-network-types", - "reth-primitives-traits 1.8.2", - "reth-storage-errors 1.8.2", + "reth-primitives-traits", + "reth-storage-errors", "tokio", "tracing", ] [[package]] name = "reth-network-peers" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-primitives 1.4.1", - "alloy-rlp", - "secp256k1 0.30.0", - "serde_with", - "thiserror 2.0.17", - "url", -] - -[[package]] -name = "reth-network-peers" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", "alloy-rlp", @@ -10080,13 +9750,13 @@ dependencies = [ [[package]] name = "reth-network-types" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-eip2124", "humantime-serde", "reth-net-banlist", - "reth-network-peers 1.8.2", + "reth-network-peers", "serde", "serde_json", "tracing", @@ -10094,15 +9764,15 @@ dependencies = [ [[package]] name = "reth-nippy-jar" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "anyhow", "bincode", "derive_more", "lz4_flex", "memmap2", - "reth-fs-util 1.8.2", + "reth-fs-util", "serde", "thiserror 2.0.17", "tracing", @@ -10111,32 +9781,32 @@ dependencies = [ [[package]] name = "reth-node-api" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-rpc-types-engine", "eyre", - "reth-basic-payload-builder 1.8.2", - "reth-consensus 1.8.2", + "reth-basic-payload-builder", + "reth-consensus", "reth-db-api", - "reth-engine-primitives 1.8.2", - "reth-evm 1.8.2", + "reth-engine-primitives", + "reth-evm", "reth-network-api", "reth-node-core", "reth-node-types", - "reth-payload-builder 1.8.2", - "reth-payload-builder-primitives 1.8.2", - "reth-payload-primitives 1.8.2", + "reth-payload-builder", + "reth-payload-builder-primitives", + "reth-payload-primitives", "reth-provider", - "reth-tasks 1.8.2", + "reth-tasks", "reth-tokio-util", - "reth-transaction-pool 1.8.2", + "reth-transaction-pool", ] [[package]] name = "reth-node-builder" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -10150,25 +9820,25 @@ dependencies = [ "futures", "jsonrpsee 0.26.0", "rayon", - "reth-basic-payload-builder 1.8.2", - "reth-chain-state 1.8.2", - "reth-chainspec 1.8.2", + "reth-basic-payload-builder", + "reth-chain-state", + "reth-chainspec", "reth-cli-util", "reth-config", - "reth-consensus 1.8.2", + "reth-consensus", "reth-consensus-debug-client", "reth-db", "reth-db-api", "reth-db-common", "reth-downloaders", "reth-engine-local", - "reth-engine-primitives 1.8.2", + "reth-engine-primitives", "reth-engine-service", "reth-engine-tree", "reth-engine-util", - "reth-evm 1.8.2", + "reth-evm", "reth-exex", - "reth-fs-util 1.8.2", + "reth-fs-util", "reth-invalid-block-hooks", "reth-network", "reth-network-api", @@ -10178,8 +9848,8 @@ dependencies = [ "reth-node-ethstats", "reth-node-events", "reth-node-metrics", - "reth-payload-builder 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-payload-builder", + "reth-primitives-traits", "reth-provider", "reth-prune", "reth-rpc", @@ -10190,10 +9860,10 @@ dependencies = [ "reth-rpc-layer", "reth-stages", "reth-static-file", - "reth-tasks 1.8.2", + "reth-tasks", "reth-tokio-util", "reth-tracing", - "reth-transaction-pool 1.8.2", + "reth-transaction-pool", "secp256k1 0.30.0", "serde_json", "tokio", @@ -10203,8 +9873,8 @@ dependencies = [ [[package]] name = "reth-node-core" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -10217,30 +9887,30 @@ dependencies = [ "futures", "humantime", "rand 0.9.2", - "reth-chainspec 1.8.2", + "reth-chainspec", "reth-cli-util", "reth-config", - "reth-consensus 1.8.2", + "reth-consensus", "reth-db", "reth-discv4", "reth-discv5", "reth-engine-local", - "reth-engine-primitives 1.8.2", - "reth-ethereum-forks 1.8.2", + "reth-engine-primitives", + "reth-ethereum-forks", "reth-net-nat", "reth-network", "reth-network-p2p", - "reth-network-peers 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-prune-types 1.8.2", + "reth-network-peers", + "reth-primitives-traits", + "reth-prune-types", "reth-rpc-convert", "reth-rpc-eth-types", "reth-rpc-server-types", - "reth-stages-types 1.8.2", - "reth-storage-api 1.8.2", - "reth-storage-errors 1.8.2", + "reth-stages-types", + "reth-storage-api", + "reth-storage-errors", "reth-tracing", - "reth-transaction-pool 1.8.2", + "reth-transaction-pool", "secp256k1 0.30.0", "serde", "shellexpand", @@ -10255,30 +9925,30 @@ dependencies = [ [[package]] name = "reth-node-ethereum" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-eips", "alloy-network", "alloy-rpc-types-engine", "alloy-rpc-types-eth", "eyre", - "reth-chainspec 1.8.2", + "reth-chainspec", "reth-engine-local", - "reth-engine-primitives 1.8.2", + "reth-engine-primitives", "reth-ethereum-consensus", - "reth-ethereum-engine-primitives 1.8.2", + "reth-ethereum-engine-primitives", "reth-ethereum-payload-builder", - "reth-ethereum-primitives 1.8.2", - "reth-evm 1.8.2", + "reth-ethereum-primitives", + "reth-evm", "reth-evm-ethereum", "reth-network", "reth-node-api", "reth-node-builder", - "reth-payload-primitives 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-payload-primitives", + "reth-primitives-traits", "reth-provider", - "reth-revm 1.8.2", + "reth-revm", "reth-rpc", "reth-rpc-api", "reth-rpc-builder", @@ -10286,25 +9956,25 @@ dependencies = [ "reth-rpc-eth-types", "reth-rpc-server-types", "reth-tracing", - "reth-transaction-pool 1.8.2", + "reth-transaction-pool", "revm", "tokio", ] [[package]] name = "reth-node-ethstats" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", "chrono", "futures-util", - "reth-chain-state 1.8.2", + "reth-chain-state", "reth-network-api", - "reth-primitives-traits 1.8.2", - "reth-storage-api 1.8.2", - "reth-transaction-pool 1.8.2", + "reth-primitives-traits", + "reth-storage-api", + "reth-transaction-pool", "serde", "serde_json", "thiserror 2.0.17", @@ -10317,8 +9987,8 @@ dependencies = [ [[package]] name = "reth-node-events" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -10328,21 +9998,21 @@ dependencies = [ "futures", "humantime", "pin-project", - "reth-engine-primitives 1.8.2", + "reth-engine-primitives", "reth-network-api", - "reth-primitives-traits 1.8.2", - "reth-prune-types 1.8.2", + "reth-primitives-traits", + "reth-prune-types", "reth-stages", - "reth-static-file-types 1.8.2", - "reth-storage-api 1.8.2", + "reth-static-file-types", + "reth-storage-api", "tokio", "tracing", ] [[package]] name = "reth-node-metrics" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "eyre", "http", @@ -10352,8 +10022,8 @@ dependencies = [ "metrics-process", "metrics-util 0.19.1", "procfs 0.17.0", - "reth-metrics 1.8.2", - "reth-tasks 1.8.2", + "reth-metrics", + "reth-tasks", "tikv-jemalloc-ctl", "tokio", "tower 0.5.2", @@ -10362,43 +10032,20 @@ dependencies = [ [[package]] name = "reth-node-types" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ - "reth-chainspec 1.8.2", + "reth-chainspec", "reth-db-api", - "reth-engine-primitives 1.8.2", - "reth-payload-primitives 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-engine-primitives", + "reth-payload-primitives", + "reth-primitives-traits", ] [[package]] name = "reth-optimism-chainspec" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-chains", - "alloy-consensus", - "alloy-eips", - "alloy-genesis", - "alloy-hardforks", - "alloy-primitives 1.4.1", - "derive_more", - "op-alloy-consensus", - "op-alloy-rpc-types", - "reth-chainspec 1.8.1", - "reth-ethereum-forks 1.8.1", - "reth-network-peers 1.8.1", - "reth-optimism-forks 1.8.1", - "reth-optimism-primitives 1.8.1", - "reth-primitives-traits 1.8.1", - "serde_json", -] - -[[package]] -name = "reth-optimism-chainspec" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-chains", "alloy-consensus", @@ -10411,12 +10058,12 @@ dependencies = [ "op-alloy-consensus", "op-alloy-rpc-types", "paste", - "reth-chainspec 1.8.2", - "reth-ethereum-forks 1.8.2", - "reth-network-peers 1.8.2", - "reth-optimism-forks 1.8.2", - "reth-optimism-primitives 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-chainspec", + "reth-ethereum-forks", + "reth-network-peers", + "reth-optimism-forks", + "reth-optimism-primitives", + "reth-primitives-traits", "serde", "serde_json", "tar-no-std", @@ -10425,8 +10072,8 @@ dependencies = [ [[package]] name = "reth-optimism-cli" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -10437,33 +10084,33 @@ dependencies = [ "eyre", "futures-util", "op-alloy-consensus", - "reth-chainspec 1.8.2", + "reth-chainspec", "reth-cli", "reth-cli-commands", "reth-cli-runner", - "reth-consensus 1.8.2", + "reth-consensus", "reth-db", "reth-db-api", "reth-db-common", "reth-downloaders", - "reth-execution-types 1.8.2", - "reth-fs-util 1.8.2", + "reth-execution-types", + "reth-fs-util", "reth-node-builder", "reth-node-core", "reth-node-events", "reth-node-metrics", - "reth-optimism-chainspec 1.8.2", - "reth-optimism-consensus 1.8.2", - "reth-optimism-evm 1.8.2", + "reth-optimism-chainspec", + "reth-optimism-consensus", + "reth-optimism-evm", "reth-optimism-node", - "reth-optimism-primitives 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-optimism-primitives", + "reth-primitives-traits", "reth-provider", "reth-prune", "reth-rpc-server-types", "reth-stages", "reth-static-file", - "reth-static-file-types 1.8.2", + "reth-static-file-types", "reth-tracing", "serde", "tokio", @@ -10473,85 +10120,33 @@ dependencies = [ [[package]] name = "reth-optimism-consensus" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives 1.4.1", "alloy-trie", - "reth-chainspec 1.8.1", - "reth-consensus 1.8.1", - "reth-consensus-common 1.8.1", - "reth-execution-types 1.8.1", - "reth-optimism-chainspec 1.8.1", - "reth-optimism-forks 1.8.1", - "reth-optimism-primitives 1.8.1", - "reth-primitives-traits 1.8.1", - "reth-storage-api 1.8.1", - "reth-storage-errors 1.8.1", - "reth-trie-common 1.8.1", + "reth-chainspec", + "reth-consensus", + "reth-consensus-common", + "reth-execution-types", + "reth-optimism-chainspec", + "reth-optimism-forks", + "reth-optimism-primitives", + "reth-primitives-traits", + "reth-storage-api", + "reth-storage-errors", + "reth-trie-common", "revm", "thiserror 2.0.17", "tracing", ] -[[package]] -name = "reth-optimism-consensus" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives 1.4.1", - "alloy-trie", - "reth-chainspec 1.8.2", - "reth-consensus 1.8.2", - "reth-consensus-common 1.8.2", - "reth-execution-types 1.8.2", - "reth-optimism-chainspec 1.8.2", - "reth-optimism-forks 1.8.2", - "reth-optimism-primitives 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-storage-api 1.8.2", - "reth-storage-errors 1.8.2", - "reth-trie-common 1.8.2", - "revm", - "thiserror 2.0.17", - "tracing", -] - -[[package]] -name = "reth-optimism-evm" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-evm", - "alloy-op-evm", - "alloy-primitives 1.4.1", - "op-alloy-consensus", - "op-alloy-rpc-types-engine", - "op-revm", - "reth-chainspec 1.8.1", - "reth-evm 1.8.1", - "reth-execution-errors 1.8.1", - "reth-execution-types 1.8.1", - "reth-optimism-chainspec 1.8.1", - "reth-optimism-consensus 1.8.1", - "reth-optimism-forks 1.8.1", - "reth-optimism-primitives 1.8.1", - "reth-primitives-traits 1.8.1", - "reth-storage-errors 1.8.1", - "revm", - "thiserror 2.0.17", -] - [[package]] name = "reth-optimism-evm" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -10561,25 +10156,25 @@ dependencies = [ "op-alloy-consensus", "op-alloy-rpc-types-engine", "op-revm", - "reth-chainspec 1.8.2", - "reth-evm 1.8.2", - "reth-execution-errors 1.8.2", - "reth-execution-types 1.8.2", - "reth-optimism-chainspec 1.8.2", - "reth-optimism-consensus 1.8.2", - "reth-optimism-forks 1.8.2", - "reth-optimism-primitives 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-chainspec", + "reth-evm", + "reth-execution-errors", + "reth-execution-types", + "reth-optimism-chainspec", + "reth-optimism-consensus", + "reth-optimism-forks", + "reth-optimism-primitives", + "reth-primitives-traits", "reth-rpc-eth-api", - "reth-storage-errors 1.8.2", + "reth-storage-errors", "revm", "thiserror 2.0.17", ] [[package]] name = "reth-optimism-flashblocks" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -10589,19 +10184,19 @@ dependencies = [ "brotli", "eyre", "futures-util", - "reth-chain-state 1.8.2", - "reth-errors 1.8.2", - "reth-evm 1.8.2", - "reth-execution-types 1.8.2", + "reth-chain-state", + "reth-errors", + "reth-evm", + "reth-execution-types", "reth-node-api", - "reth-optimism-evm 1.8.2", - "reth-optimism-payload-builder 1.8.2", - "reth-optimism-primitives 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-revm 1.8.2", + "reth-optimism-evm", + "reth-optimism-payload-builder", + "reth-optimism-primitives", + "reth-primitives-traits", + "reth-revm", "reth-rpc-eth-types", - "reth-storage-api 1.8.2", - "reth-tasks 1.8.2", + "reth-storage-api", + "reth-tasks", "ringbuffer", "serde", "serde_json", @@ -10613,30 +10208,19 @@ dependencies = [ [[package]] name = "reth-optimism-forks" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-op-hardforks", - "alloy-primitives 1.4.1", - "once_cell", - "reth-ethereum-forks 1.8.1", -] - -[[package]] -name = "reth-optimism-forks" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-op-hardforks", "alloy-primitives 1.4.1", "once_cell", - "reth-ethereum-forks 1.8.2", + "reth-ethereum-forks", ] [[package]] name = "reth-optimism-node" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", @@ -10647,32 +10231,32 @@ dependencies = [ "op-alloy-consensus", "op-alloy-rpc-types-engine", "op-revm", - "reth-chainspec 1.8.2", - "reth-consensus 1.8.2", + "reth-chainspec", + "reth-consensus", "reth-engine-local", - "reth-evm 1.8.2", + "reth-evm", "reth-network", "reth-node-api", "reth-node-builder", "reth-node-core", - "reth-optimism-chainspec 1.8.2", - "reth-optimism-consensus 1.8.2", - "reth-optimism-evm 1.8.2", - "reth-optimism-forks 1.8.2", - "reth-optimism-payload-builder 1.8.2", - "reth-optimism-primitives 1.8.2", + "reth-optimism-chainspec", + "reth-optimism-consensus", + "reth-optimism-evm", + "reth-optimism-forks", + "reth-optimism-payload-builder", + "reth-optimism-primitives", "reth-optimism-rpc", "reth-optimism-storage", - "reth-optimism-txpool 1.8.2", - "reth-payload-builder 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-optimism-txpool", + "reth-payload-builder", + "reth-primitives-traits", "reth-provider", "reth-rpc-api", "reth-rpc-engine-api", "reth-rpc-server-types", "reth-tracing", - "reth-transaction-pool 1.8.2", - "reth-trie-common 1.8.2", + "reth-transaction-pool", + "reth-trie-common", "revm", "serde", "tokio", @@ -10681,47 +10265,8 @@ dependencies = [ [[package]] name = "reth-optimism-payload-builder" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives 1.4.1", - "alloy-rlp", - "alloy-rpc-types-debug", - "alloy-rpc-types-engine", - "derive_more", - "op-alloy-consensus", - "op-alloy-rpc-types-engine", - "reth-basic-payload-builder 1.8.1", - "reth-chain-state 1.8.1", - "reth-chainspec 1.8.1", - "reth-evm 1.8.1", - "reth-execution-types 1.8.1", - "reth-optimism-evm 1.8.1", - "reth-optimism-forks 1.8.1", - "reth-optimism-primitives 1.8.1", - "reth-optimism-txpool 1.8.1", - "reth-payload-builder 1.8.1", - "reth-payload-builder-primitives 1.8.1", - "reth-payload-primitives 1.8.1", - "reth-payload-util 1.8.1", - "reth-payload-validator 1.8.1", - "reth-primitives-traits 1.8.1", - "reth-revm 1.8.1", - "reth-storage-api 1.8.1", - "reth-transaction-pool 1.8.1", - "revm", - "serde", - "sha2 0.10.9", - "thiserror 2.0.17", - "tracing", -] - -[[package]] -name = "reth-optimism-payload-builder" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -10732,24 +10277,24 @@ dependencies = [ "derive_more", "op-alloy-consensus", "op-alloy-rpc-types-engine", - "reth-basic-payload-builder 1.8.2", - "reth-chain-state 1.8.2", - "reth-chainspec 1.8.2", - "reth-evm 1.8.2", - "reth-execution-types 1.8.2", - "reth-optimism-evm 1.8.2", - "reth-optimism-forks 1.8.2", - "reth-optimism-primitives 1.8.2", - "reth-optimism-txpool 1.8.2", - "reth-payload-builder 1.8.2", - "reth-payload-builder-primitives 1.8.2", - "reth-payload-primitives 1.8.2", - "reth-payload-util 1.8.2", - "reth-payload-validator 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-revm 1.8.2", - "reth-storage-api 1.8.2", - "reth-transaction-pool 1.8.2", + "reth-basic-payload-builder", + "reth-chain-state", + "reth-chainspec", + "reth-evm", + "reth-execution-types", + "reth-optimism-evm", + "reth-optimism-forks", + "reth-optimism-primitives", + "reth-optimism-txpool", + "reth-payload-builder", + "reth-payload-builder-primitives", + "reth-payload-primitives", + "reth-payload-util", + "reth-payload-validator", + "reth-primitives-traits", + "reth-revm", + "reth-storage-api", + "reth-transaction-pool", "revm", "serde", "sha2 0.10.9", @@ -10759,21 +10304,8 @@ dependencies = [ [[package]] name = "reth-optimism-primitives" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives 1.4.1", - "alloy-rlp", - "op-alloy-consensus", - "reth-primitives-traits 1.8.1", -] - -[[package]] -name = "reth-optimism-primitives" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -10783,17 +10315,17 @@ dependencies = [ "bytes", "modular-bitfield", "op-alloy-consensus", - "reth-codecs 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-zstd-compressors 1.8.2", + "reth-codecs", + "reth-primitives-traits", + "reth-zstd-compressors", "serde", "serde_with", ] [[package]] name = "reth-optimism-rpc" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -10820,19 +10352,19 @@ dependencies = [ "op-alloy-rpc-types-engine", "op-revm", "reqwest", - "reth-chain-state 1.8.2", - "reth-chainspec 1.8.2", - "reth-evm 1.8.2", - "reth-metrics 1.8.2", + "reth-chain-state", + "reth-chainspec", + "reth-evm", + "reth-metrics", "reth-node-api", "reth-node-builder", - "reth-optimism-evm 1.8.2", + "reth-optimism-evm", "reth-optimism-flashblocks", - "reth-optimism-forks 1.8.2", - "reth-optimism-payload-builder 1.8.2", - "reth-optimism-primitives 1.8.2", - "reth-optimism-txpool 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-optimism-forks", + "reth-optimism-payload-builder", + "reth-optimism-primitives", + "reth-optimism-txpool", + "reth-primitives-traits", "reth-rpc", "reth-rpc-api", "reth-rpc-convert", @@ -10840,9 +10372,9 @@ dependencies = [ "reth-rpc-eth-api", "reth-rpc-eth-types", "reth-rpc-server-types", - "reth-storage-api 1.8.2", - "reth-tasks 1.8.2", - "reth-transaction-pool 1.8.2", + "reth-storage-api", + "reth-tasks", + "reth-transaction-pool", "revm", "serde_json", "thiserror 2.0.17", @@ -10854,18 +10386,18 @@ dependencies = [ [[package]] name = "reth-optimism-storage" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", - "reth-optimism-primitives 1.8.2", - "reth-storage-api 1.8.2", + "reth-optimism-primitives", + "reth-storage-api", ] [[package]] name = "reth-optimism-txpool" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -10883,51 +10415,15 @@ dependencies = [ "op-alloy-rpc-types", "op-revm", "parking_lot", - "reth-chain-state 1.8.1", - "reth-chainspec 1.8.1", - "reth-metrics 1.8.1", - "reth-optimism-evm 1.8.1", - "reth-optimism-forks 1.8.1", - "reth-optimism-primitives 1.8.1", - "reth-primitives-traits 1.8.1", - "reth-storage-api 1.8.1", - "reth-transaction-pool 1.8.1", - "serde", - "thiserror 2.0.17", - "tokio", - "tracing", -] - -[[package]] -name = "reth-optimism-txpool" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-json-rpc", - "alloy-primitives 1.4.1", - "alloy-rpc-client", - "alloy-rpc-types-eth", - "alloy-serde", - "c-kzg", - "derive_more", - "futures-util", - "metrics", - "op-alloy-consensus", - "op-alloy-flz", - "op-alloy-rpc-types", - "op-revm", - "parking_lot", - "reth-chain-state 1.8.2", - "reth-chainspec 1.8.2", - "reth-metrics 1.8.2", - "reth-optimism-evm 1.8.2", - "reth-optimism-forks 1.8.2", - "reth-optimism-primitives 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-storage-api 1.8.2", - "reth-transaction-pool 1.8.2", + "reth-chain-state", + "reth-chainspec", + "reth-metrics", + "reth-optimism-evm", + "reth-optimism-forks", + "reth-optimism-primitives", + "reth-primitives-traits", + "reth-storage-api", + "reth-transaction-pool", "serde", "thiserror 2.0.17", "tokio", @@ -10936,41 +10432,20 @@ dependencies = [ [[package]] name = "reth-payload-builder" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", "alloy-rpc-types", "futures-util", "metrics", - "reth-chain-state 1.8.1", - "reth-ethereum-engine-primitives 1.8.1", - "reth-metrics 1.8.1", - "reth-payload-builder-primitives 1.8.1", - "reth-payload-primitives 1.8.1", - "reth-primitives-traits 1.8.1", - "tokio", - "tokio-stream", - "tracing", -] - -[[package]] -name = "reth-payload-builder" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" -dependencies = [ - "alloy-consensus", - "alloy-primitives 1.4.1", - "alloy-rpc-types", - "futures-util", - "metrics", - "reth-chain-state 1.8.2", - "reth-ethereum-engine-primitives 1.8.2", - "reth-metrics 1.8.2", - "reth-payload-builder-primitives 1.8.2", - "reth-payload-primitives 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-chain-state", + "reth-ethereum-engine-primitives", + "reth-metrics", + "reth-payload-builder-primitives", + "reth-payload-primitives", + "reth-primitives-traits", "tokio", "tokio-stream", "tracing", @@ -10978,52 +10453,20 @@ dependencies = [ [[package]] name = "reth-payload-builder-primitives" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "pin-project", - "reth-payload-primitives 1.8.1", + "reth-payload-primitives", "tokio", "tokio-stream", "tracing", ] -[[package]] -name = "reth-payload-builder-primitives" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" -dependencies = [ - "pin-project", - "reth-payload-primitives 1.8.2", - "tokio", - "tokio-stream", - "tracing", -] - -[[package]] -name = "reth-payload-primitives" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-eips", - "alloy-primitives 1.4.1", - "alloy-rpc-types-engine", - "auto_impl", - "either", - "op-alloy-rpc-types-engine", - "reth-chain-state 1.8.1", - "reth-chainspec 1.8.1", - "reth-errors 1.8.1", - "reth-primitives-traits 1.8.1", - "serde", - "thiserror 2.0.17", - "tokio", -] - [[package]] name = "reth-payload-primitives" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-eips", "alloy-primitives 1.4.1", @@ -11031,10 +10474,10 @@ dependencies = [ "auto_impl", "either", "op-alloy-rpc-types-engine", - "reth-chain-state 1.8.2", - "reth-chainspec 1.8.2", - "reth-errors 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-chain-state", + "reth-chainspec", + "reth-errors", + "reth-primitives-traits", "serde", "thiserror 2.0.17", "tokio", @@ -11042,89 +10485,42 @@ dependencies = [ [[package]] name = "reth-payload-util" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-consensus", - "alloy-primitives 1.4.1", - "reth-transaction-pool 1.8.1", -] - -[[package]] -name = "reth-payload-util" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", - "reth-transaction-pool 1.8.2", + "reth-transaction-pool", ] [[package]] name = "reth-payload-validator" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-consensus", - "alloy-rpc-types-engine", - "reth-primitives-traits 1.8.1", -] - -[[package]] -name = "reth-payload-validator" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-rpc-types-engine", - "reth-primitives-traits 1.8.2", + "reth-primitives-traits", ] [[package]] name = "reth-primitives" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "c-kzg", "once_cell", - "reth-ethereum-forks 1.8.2", - "reth-ethereum-primitives 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-static-file-types 1.8.2", -] - -[[package]] -name = "reth-primitives-traits" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-genesis", - "alloy-primitives 1.4.1", - "alloy-rlp", - "alloy-rpc-types-eth", - "alloy-trie", - "auto_impl", - "bytes", - "derive_more", - "once_cell", - "op-alloy-consensus", - "reth-codecs 1.8.1", - "revm-bytecode", - "revm-primitives", - "revm-state", - "secp256k1 0.30.0", - "serde", - "serde_with", - "thiserror 2.0.17", + "reth-ethereum-forks", + "reth-ethereum-primitives", + "reth-primitives-traits", + "reth-static-file-types", ] [[package]] name = "reth-primitives-traits" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -11144,7 +10540,7 @@ dependencies = [ "proptest", "proptest-arbitrary-interop", "rayon", - "reth-codecs 1.8.2", + "reth-codecs", "revm-bytecode", "revm-primitives", "revm-state", @@ -11156,8 +10552,8 @@ dependencies = [ [[package]] name = "reth-provider" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -11170,27 +10566,27 @@ dependencies = [ "notify", "parking_lot", "rayon", - "reth-chain-state 1.8.2", - "reth-chainspec 1.8.2", - "reth-codecs 1.8.2", + "reth-chain-state", + "reth-chainspec", + "reth-codecs", "reth-db", "reth-db-api", - "reth-errors 1.8.2", - "reth-ethereum-engine-primitives 1.8.2", - "reth-ethereum-primitives 1.8.2", - "reth-evm 1.8.2", - "reth-execution-types 1.8.2", - "reth-fs-util 1.8.2", - "reth-metrics 1.8.2", + "reth-errors", + "reth-ethereum-engine-primitives", + "reth-ethereum-primitives", + "reth-evm", + "reth-execution-types", + "reth-fs-util", + "reth-metrics", "reth-nippy-jar", "reth-node-types", - "reth-primitives-traits 1.8.2", - "reth-prune-types 1.8.2", - "reth-stages-types 1.8.2", - "reth-static-file-types 1.8.2", - "reth-storage-api 1.8.2", - "reth-storage-errors 1.8.2", - "reth-trie 1.8.2", + "reth-primitives-traits", + "reth-prune-types", + "reth-stages-types", + "reth-static-file-types", + "reth-storage-api", + "reth-storage-errors", + "reth-trie", "reth-trie-db", "revm-database", "revm-state", @@ -11201,8 +10597,8 @@ dependencies = [ [[package]] name = "reth-prune" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -11210,16 +10606,16 @@ dependencies = [ "itertools 0.14.0", "metrics", "rayon", - "reth-chainspec 1.8.2", + "reth-chainspec", "reth-config", "reth-db-api", - "reth-errors 1.8.2", + "reth-errors", "reth-exex-types", - "reth-metrics 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-metrics", + "reth-primitives-traits", "reth-provider", - "reth-prune-types 1.8.2", - "reth-static-file-types 1.8.2", + "reth-prune-types", + "reth-static-file-types", "reth-tokio-util", "rustc-hash 2.1.1", "thiserror 2.0.17", @@ -11229,42 +10625,32 @@ dependencies = [ [[package]] name = "reth-prune-types" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-primitives 1.4.1", - "derive_more", - "thiserror 2.0.17", -] - -[[package]] -name = "reth-prune-types" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", "arbitrary", "derive_more", "modular-bitfield", - "reth-codecs 1.8.2", + "reth-codecs", "serde", "thiserror 2.0.17", ] [[package]] name = "reth-ress-protocol" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", "alloy-rlp", "futures", "reth-eth-wire", - "reth-ethereum-primitives 1.8.2", + "reth-ethereum-primitives", "reth-network", "reth-network-api", - "reth-storage-errors 1.8.2", + "reth-storage-errors", "tokio", "tokio-stream", "tracing", @@ -11272,26 +10658,26 @@ dependencies = [ [[package]] name = "reth-ress-provider" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", "eyre", "futures", "parking_lot", - "reth-chain-state 1.8.2", - "reth-errors 1.8.2", - "reth-ethereum-primitives 1.8.2", - "reth-evm 1.8.2", + "reth-chain-state", + "reth-errors", + "reth-ethereum-primitives", + "reth-evm", "reth-node-api", - "reth-primitives-traits 1.8.2", + "reth-primitives-traits", "reth-ress-protocol", - "reth-revm 1.8.2", - "reth-storage-api 1.8.2", - "reth-tasks 1.8.2", + "reth-revm", + "reth-storage-api", + "reth-tasks", "reth-tokio-util", - "reth-trie 1.8.2", + "reth-trie", "schnellru", "tokio", "tracing", @@ -11299,34 +10685,21 @@ dependencies = [ [[package]] name = "reth-revm" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", - "reth-primitives-traits 1.8.1", - "reth-storage-api 1.8.1", - "reth-storage-errors 1.8.1", - "reth-trie 1.8.1", - "revm", -] - -[[package]] -name = "reth-revm" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" -dependencies = [ - "alloy-primitives 1.4.1", - "reth-primitives-traits 1.8.2", - "reth-storage-api 1.8.2", - "reth-storage-errors 1.8.2", - "reth-trie 1.8.2", + "reth-primitives-traits", + "reth-storage-api", + "reth-storage-errors", + "reth-trie", "revm", ] [[package]] name = "reth-rpc" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-dyn-abi", @@ -11362,32 +10735,32 @@ dependencies = [ "jsonwebtoken", "parking_lot", "pin-project", - "reth-chain-state 1.8.2", - "reth-chainspec 1.8.2", - "reth-consensus 1.8.2", - "reth-consensus-common 1.8.2", - "reth-engine-primitives 1.8.2", - "reth-errors 1.8.2", - "reth-evm 1.8.2", + "reth-chain-state", + "reth-chainspec", + "reth-consensus", + "reth-consensus-common", + "reth-engine-primitives", + "reth-errors", + "reth-evm", "reth-evm-ethereum", - "reth-execution-types 1.8.2", - "reth-metrics 1.8.2", + "reth-execution-types", + "reth-metrics", "reth-network-api", - "reth-network-peers 1.8.2", + "reth-network-peers", "reth-network-types", "reth-node-api", - "reth-primitives-traits 1.8.2", - "reth-revm 1.8.2", + "reth-primitives-traits", + "reth-revm", "reth-rpc-api", "reth-rpc-convert", "reth-rpc-engine-api", "reth-rpc-eth-api", "reth-rpc-eth-types", "reth-rpc-server-types", - "reth-storage-api 1.8.2", - "reth-tasks 1.8.2", - "reth-transaction-pool 1.8.2", - "reth-trie-common 1.8.2", + "reth-storage-api", + "reth-tasks", + "reth-transaction-pool", + "reth-trie-common", "revm", "revm-inspectors", "revm-primitives", @@ -11404,8 +10777,8 @@ dependencies = [ [[package]] name = "reth-rpc-api" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-eips", "alloy-genesis", @@ -11423,17 +10796,17 @@ dependencies = [ "alloy-rpc-types-txpool", "alloy-serde", "jsonrpsee 0.26.0", - "reth-chain-state 1.8.2", - "reth-engine-primitives 1.8.2", - "reth-network-peers 1.8.2", + "reth-chain-state", + "reth-engine-primitives", + "reth-network-peers", "reth-rpc-eth-api", - "reth-trie-common 1.8.2", + "reth-trie-common", ] [[package]] name = "reth-rpc-builder" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-network", "alloy-provider", @@ -11442,24 +10815,24 @@ dependencies = [ "jsonrpsee 0.26.0", "metrics", "pin-project", - "reth-chain-state 1.8.2", - "reth-chainspec 1.8.2", - "reth-consensus 1.8.2", - "reth-evm 1.8.2", + "reth-chain-state", + "reth-chainspec", + "reth-consensus", + "reth-evm", "reth-ipc", - "reth-metrics 1.8.2", + "reth-metrics", "reth-network-api", "reth-node-core", - "reth-primitives-traits 1.8.2", + "reth-primitives-traits", "reth-rpc", "reth-rpc-api", "reth-rpc-eth-api", "reth-rpc-eth-types", "reth-rpc-layer", "reth-rpc-server-types", - "reth-storage-api 1.8.2", - "reth-tasks 1.8.2", - "reth-transaction-pool 1.8.2", + "reth-storage-api", + "reth-tasks", + "reth-transaction-pool", "serde", "thiserror 2.0.17", "tokio", @@ -11471,8 +10844,8 @@ dependencies = [ [[package]] name = "reth-rpc-convert" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-json-rpc", @@ -11487,19 +10860,19 @@ dependencies = [ "op-alloy-network", "op-alloy-rpc-types", "op-revm", - "reth-ethereum-primitives 1.8.2", - "reth-evm 1.8.2", - "reth-optimism-primitives 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-storage-api 1.8.2", + "reth-ethereum-primitives", + "reth-evm", + "reth-optimism-primitives", + "reth-primitives-traits", + "reth-storage-api", "revm-context", "thiserror 2.0.17", ] [[package]] name = "reth-rpc-engine-api" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-eips", "alloy-primitives 1.4.1", @@ -11509,17 +10882,17 @@ dependencies = [ "jsonrpsee-types 0.26.0", "metrics", "parking_lot", - "reth-chainspec 1.8.2", - "reth-engine-primitives 1.8.2", - "reth-metrics 1.8.2", - "reth-payload-builder 1.8.2", - "reth-payload-builder-primitives 1.8.2", - "reth-payload-primitives 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-chainspec", + "reth-engine-primitives", + "reth-metrics", + "reth-payload-builder", + "reth-payload-builder-primitives", + "reth-payload-primitives", + "reth-primitives-traits", "reth-rpc-api", - "reth-storage-api 1.8.2", - "reth-tasks 1.8.2", - "reth-transaction-pool 1.8.2", + "reth-storage-api", + "reth-tasks", + "reth-transaction-pool", "serde", "thiserror 2.0.17", "tokio", @@ -11528,8 +10901,8 @@ dependencies = [ [[package]] name = "reth-rpc-eth-api" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-dyn-abi", @@ -11549,21 +10922,21 @@ dependencies = [ "jsonrpsee 0.26.0", "jsonrpsee-types 0.26.0", "parking_lot", - "reth-chain-state 1.8.2", - "reth-chainspec 1.8.2", - "reth-errors 1.8.2", - "reth-evm 1.8.2", + "reth-chain-state", + "reth-chainspec", + "reth-errors", + "reth-evm", "reth-network-api", "reth-node-api", - "reth-primitives-traits 1.8.2", - "reth-revm 1.8.2", + "reth-primitives-traits", + "reth-revm", "reth-rpc-convert", "reth-rpc-eth-types", "reth-rpc-server-types", - "reth-storage-api 1.8.2", - "reth-tasks 1.8.2", - "reth-transaction-pool 1.8.2", - "reth-trie-common 1.8.2", + "reth-storage-api", + "reth-tasks", + "reth-transaction-pool", + "reth-trie-common", "revm", "revm-inspectors", "tokio", @@ -11572,8 +10945,8 @@ dependencies = [ [[package]] name = "reth-rpc-eth-types" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -11592,21 +10965,21 @@ dependencies = [ "metrics", "rand 0.9.2", "reqwest", - "reth-chain-state 1.8.2", - "reth-chainspec 1.8.2", - "reth-errors 1.8.2", - "reth-ethereum-primitives 1.8.2", - "reth-evm 1.8.2", - "reth-execution-types 1.8.2", - "reth-metrics 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-revm 1.8.2", + "reth-chain-state", + "reth-chainspec", + "reth-errors", + "reth-ethereum-primitives", + "reth-evm", + "reth-execution-types", + "reth-metrics", + "reth-primitives-traits", + "reth-revm", "reth-rpc-convert", "reth-rpc-server-types", - "reth-storage-api 1.8.2", - "reth-tasks 1.8.2", - "reth-transaction-pool 1.8.2", - "reth-trie 1.8.2", + "reth-storage-api", + "reth-tasks", + "reth-transaction-pool", + "reth-trie", "revm", "revm-inspectors", "schnellru", @@ -11619,8 +10992,8 @@ dependencies = [ [[package]] name = "reth-rpc-layer" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-rpc-types-engine", "http", @@ -11633,15 +11006,15 @@ dependencies = [ [[package]] name = "reth-rpc-server-types" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-eips", "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "jsonrpsee-core 0.26.0", "jsonrpsee-types 0.26.0", - "reth-errors 1.8.2", + "reth-errors", "reth-network-api", "serde", "strum 0.27.2", @@ -11649,8 +11022,8 @@ dependencies = [ [[package]] name = "reth-stages" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -11662,32 +11035,32 @@ dependencies = [ "num-traits", "rayon", "reqwest", - "reth-chainspec 1.8.2", - "reth-codecs 1.8.2", + "reth-chainspec", + "reth-codecs", "reth-config", - "reth-consensus 1.8.2", + "reth-consensus", "reth-db", "reth-db-api", "reth-era", "reth-era-downloader", "reth-era-utils", - "reth-ethereum-primitives 1.8.2", + "reth-ethereum-primitives", "reth-etl", - "reth-evm 1.8.2", - "reth-execution-types 1.8.2", + "reth-evm", + "reth-execution-types", "reth-exex", - "reth-fs-util 1.8.2", + "reth-fs-util", "reth-network-p2p", - "reth-primitives-traits 1.8.2", + "reth-primitives-traits", "reth-provider", "reth-prune", - "reth-prune-types 1.8.2", - "reth-revm 1.8.2", + "reth-prune-types", + "reth-revm", "reth-stages-api", - "reth-static-file-types 1.8.2", - "reth-storage-errors 1.8.2", + "reth-static-file-types", + "reth-storage-errors", "reth-testing-utils", - "reth-trie 1.8.2", + "reth-trie", "reth-trie-db", "tempfile", "thiserror 2.0.17", @@ -11697,8 +11070,8 @@ dependencies = [ [[package]] name = "reth-stages-api" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-eips", "alloy-primitives 1.4.1", @@ -11706,16 +11079,16 @@ dependencies = [ "auto_impl", "futures-util", "metrics", - "reth-consensus 1.8.2", - "reth-errors 1.8.2", - "reth-metrics 1.8.2", + "reth-consensus", + "reth-errors", + "reth-metrics", "reth-network-p2p", - "reth-primitives-traits 1.8.2", + "reth-primitives-traits", "reth-provider", "reth-prune", - "reth-stages-types 1.8.2", + "reth-stages-types", "reth-static-file", - "reth-static-file-types 1.8.2", + "reth-static-file-types", "reth-tokio-util", "thiserror 2.0.17", "tokio", @@ -11724,62 +11097,42 @@ dependencies = [ [[package]] name = "reth-stages-types" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-primitives 1.4.1", - "reth-trie-common 1.8.1", -] - -[[package]] -name = "reth-stages-types" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", "arbitrary", "bytes", "modular-bitfield", - "reth-codecs 1.8.2", - "reth-trie-common 1.8.2", + "reth-codecs", + "reth-trie-common", "serde", ] [[package]] name = "reth-static-file" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", "parking_lot", "rayon", - "reth-codecs 1.8.2", + "reth-codecs", "reth-db-api", - "reth-primitives-traits 1.8.2", + "reth-primitives-traits", "reth-provider", - "reth-prune-types 1.8.2", - "reth-stages-types 1.8.2", - "reth-static-file-types 1.8.2", - "reth-storage-errors 1.8.2", + "reth-prune-types", + "reth-stages-types", + "reth-static-file-types", + "reth-storage-errors", "reth-tokio-util", "tracing", ] [[package]] name = "reth-static-file-types" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-primitives 1.4.1", - "derive_more", - "serde", - "strum 0.27.2", -] - -[[package]] -name = "reth-static-file-types" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", "clap", @@ -11790,101 +11143,47 @@ dependencies = [ [[package]] name = "reth-storage-api" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "auto_impl", - "reth-chainspec 1.8.1", - "reth-db-models 1.8.1", - "reth-ethereum-primitives 1.8.1", - "reth-execution-types 1.8.1", - "reth-primitives-traits 1.8.1", - "reth-prune-types 1.8.1", - "reth-stages-types 1.8.1", - "reth-storage-errors 1.8.1", - "reth-trie-common 1.8.1", - "revm-database", -] - -[[package]] -name = "reth-storage-api" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives 1.4.1", - "alloy-rpc-types-engine", - "auto_impl", - "reth-chainspec 1.8.2", + "reth-chainspec", "reth-db-api", - "reth-db-models 1.8.2", - "reth-ethereum-primitives 1.8.2", - "reth-execution-types 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-prune-types 1.8.2", - "reth-stages-types 1.8.2", - "reth-storage-errors 1.8.2", - "reth-trie-common 1.8.2", + "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.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-eips", - "alloy-primitives 1.4.1", - "alloy-rlp", - "derive_more", - "reth-primitives-traits 1.8.1", - "reth-prune-types 1.8.1", - "reth-static-file-types 1.8.1", - "revm-database-interface", - "thiserror 2.0.17", -] - -[[package]] -name = "reth-storage-errors" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-eips", "alloy-primitives 1.4.1", "alloy-rlp", "derive_more", - "reth-primitives-traits 1.8.2", - "reth-prune-types 1.8.2", - "reth-static-file-types 1.8.2", + "reth-primitives-traits", + "reth-prune-types", + "reth-static-file-types", "revm-database-interface", "thiserror 2.0.17", ] [[package]] name = "reth-tasks" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "auto_impl", - "dyn-clone", - "futures-util", - "metrics", - "reth-metrics 1.8.1", - "thiserror 2.0.17", - "tokio", - "tracing", - "tracing-futures", -] - -[[package]] -name = "reth-tasks" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "auto_impl", "dyn-clone", @@ -11892,7 +11191,7 @@ dependencies = [ "metrics", "pin-project", "rayon", - "reth-metrics 1.8.2", + "reth-metrics", "thiserror 2.0.17", "tokio", "tracing", @@ -11901,8 +11200,8 @@ dependencies = [ [[package]] name = "reth-testing-utils" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -11910,15 +11209,15 @@ dependencies = [ "alloy-primitives 1.4.1", "rand 0.8.5", "rand 0.9.2", - "reth-ethereum-primitives 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-ethereum-primitives", + "reth-primitives-traits", "secp256k1 0.30.0", ] [[package]] name = "reth-tokio-util" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "tokio", "tokio-stream", @@ -11927,8 +11226,8 @@ dependencies = [ [[package]] name = "reth-tracing" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "clap", "eyre", @@ -11942,8 +11241,8 @@ dependencies = [ [[package]] name = "reth-tracing-otlp" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "opentelemetry 0.29.1", "opentelemetry-otlp 0.29.0", @@ -11956,47 +11255,8 @@ dependencies = [ [[package]] name = "reth-transaction-pool" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives 1.4.1", - "alloy-rlp", - "aquamarine", - "auto_impl", - "bitflags 2.9.4", - "futures-util", - "metrics", - "parking_lot", - "pin-project", - "reth-chain-state 1.8.1", - "reth-chainspec 1.8.1", - "reth-eth-wire-types 1.8.1", - "reth-ethereum-primitives 1.8.1", - "reth-execution-types 1.8.1", - "reth-fs-util 1.8.1", - "reth-metrics 1.8.1", - "reth-primitives-traits 1.8.1", - "reth-storage-api 1.8.1", - "reth-tasks 1.8.1", - "revm-interpreter", - "revm-primitives", - "rustc-hash 2.1.1", - "schnellru", - "serde", - "serde_json", - "smallvec", - "thiserror 2.0.17", - "tokio", - "tokio-stream", - "tracing", -] - -[[package]] -name = "reth-transaction-pool" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -12011,16 +11271,16 @@ dependencies = [ "paste", "pin-project", "rand 0.9.2", - "reth-chain-state 1.8.2", - "reth-chainspec 1.8.2", - "reth-eth-wire-types 1.8.2", - "reth-ethereum-primitives 1.8.2", - "reth-execution-types 1.8.2", - "reth-fs-util 1.8.2", - "reth-metrics 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-storage-api 1.8.2", - "reth-tasks 1.8.2", + "reth-chain-state", + "reth-chainspec", + "reth-eth-wire-types", + "reth-ethereum-primitives", + "reth-execution-types", + "reth-fs-util", + "reth-metrics", + "reth-primitives-traits", + "reth-storage-api", + "reth-tasks", "revm-interpreter", "revm-primitives", "rustc-hash 2.1.1", @@ -12036,30 +11296,8 @@ dependencies = [ [[package]] name = "reth-trie" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives 1.4.1", - "alloy-rlp", - "alloy-trie", - "auto_impl", - "itertools 0.14.0", - "reth-execution-errors 1.8.1", - "reth-primitives-traits 1.8.1", - "reth-stages-types 1.8.1", - "reth-storage-errors 1.8.1", - "reth-trie-common 1.8.1", - "reth-trie-sparse 1.8.1", - "revm-database", - "tracing", -] - -[[package]] -name = "reth-trie" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -12069,13 +11307,13 @@ dependencies = [ "auto_impl", "itertools 0.14.0", "metrics", - "reth-execution-errors 1.8.2", - "reth-metrics 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-stages-types 1.8.2", - "reth-storage-errors 1.8.2", - "reth-trie-common 1.8.2", - "reth-trie-sparse 1.8.2", + "reth-execution-errors", + "reth-metrics", + "reth-primitives-traits", + "reth-stages-types", + "reth-storage-errors", + "reth-trie-common", + "reth-trie-sparse", "revm-database", "tracing", "triehash", @@ -12083,25 +11321,8 @@ dependencies = [ [[package]] name = "reth-trie-common" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-consensus", - "alloy-primitives 1.4.1", - "alloy-rlp", - "alloy-trie", - "derive_more", - "itertools 0.14.0", - "nybbles", - "rayon", - "reth-primitives-traits 1.8.1", - "revm-database", -] - -[[package]] -name = "reth-trie-common" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", @@ -12117,8 +11338,8 @@ dependencies = [ "nybbles", "plain_hasher", "rayon", - "reth-codecs 1.8.2", - "reth-primitives-traits 1.8.2", + "reth-codecs", + "reth-primitives-traits", "revm-database", "serde", "serde_with", @@ -12126,21 +11347,21 @@ dependencies = [ [[package]] name = "reth-trie-db" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", "reth-db-api", - "reth-execution-errors 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-trie 1.8.2", + "reth-execution-errors", + "reth-primitives-traits", + "reth-trie", "tracing", ] [[package]] name = "reth-trie-parallel" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", "alloy-rlp", @@ -12149,14 +11370,14 @@ dependencies = [ "metrics", "rayon", "reth-db-api", - "reth-execution-errors 1.8.2", - "reth-metrics 1.8.2", + "reth-execution-errors", + "reth-metrics", "reth-provider", - "reth-storage-errors 1.8.2", - "reth-trie 1.8.2", - "reth-trie-common 1.8.2", + "reth-storage-errors", + "reth-trie", + "reth-trie-common", "reth-trie-db", - "reth-trie-sparse 1.8.2", + "reth-trie-sparse", "thiserror 2.0.17", "tokio", "tracing", @@ -12164,24 +11385,8 @@ dependencies = [ [[package]] name = "reth-trie-sparse" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "alloy-primitives 1.4.1", - "alloy-rlp", - "alloy-trie", - "auto_impl", - "reth-execution-errors 1.8.1", - "reth-primitives-traits 1.8.1", - "reth-trie-common 1.8.1", - "smallvec", - "tracing", -] - -[[package]] -name = "reth-trie-sparse" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", "alloy-rlp", @@ -12189,44 +11394,36 @@ dependencies = [ "auto_impl", "metrics", "rayon", - "reth-execution-errors 1.8.2", - "reth-metrics 1.8.2", - "reth-primitives-traits 1.8.2", - "reth-trie-common 1.8.2", + "reth-execution-errors", + "reth-metrics", + "reth-primitives-traits", + "reth-trie-common", "smallvec", "tracing", ] [[package]] name = "reth-trie-sparse-parallel" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", "alloy-rlp", "alloy-trie", "metrics", "rayon", - "reth-execution-errors 1.8.2", - "reth-metrics 1.8.2", - "reth-trie-common 1.8.2", - "reth-trie-sparse 1.8.2", + "reth-execution-errors", + "reth-metrics", + "reth-trie-common", + "reth-trie-sparse", "smallvec", "tracing", ] [[package]] name = "reth-zstd-compressors" -version = "1.8.1" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.1#e6608be51ea34424b8e3693cf1f946a3eb224736" -dependencies = [ - "zstd", -] - -[[package]] -name = "reth-zstd-compressors" -version = "1.8.2" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.2#9c30bf7af5e0d45deaf5917375c9922c16654b28" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "zstd", ] @@ -12543,7 +11740,7 @@ dependencies = [ [[package]] name = "rollup-boost" version = "0.1.0" -source = "git+http://github.com/flashbots/rollup-boost?rev=b86af43969557bee18f17ec1d6bcd3e984f910b2#b86af43969557bee18f17ec1d6bcd3e984f910b2" +source = "git+http://github.com/flashbots/rollup-boost?rev=dd12e8e8366004b4758bfa0cfa98efa6929b7e9f#dd12e8e8366004b4758bfa0cfa98efa6929b7e9f" dependencies = [ "alloy-primitives 1.4.1", "alloy-rpc-types-engine", @@ -12571,12 +11768,11 @@ dependencies = [ "opentelemetry_sdk 0.28.0", "parking_lot", "paste", - "reth-optimism-payload-builder 1.8.1", + "reth-optimism-payload-builder", "rustls", "serde", "serde_json", "sha2 0.10.9", - "testcontainers 0.23.3", "thiserror 2.0.17", "tokio", "tokio-tungstenite", @@ -13787,35 +12983,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "testcontainers" -version = "0.23.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59a4f01f39bb10fc2a5ab23eb0d888b1e2bb168c157f61a1b98e6c501c639c74" -dependencies = [ - "async-trait", - "bollard", - "bollard-stubs", - "bytes", - "docker_credential", - "either", - "etcetera 0.8.0", - "futures", - "log", - "memchr", - "parse-display", - "pin-project-lite", - "serde", - "serde_json", - "serde_with", - "thiserror 2.0.17", - "tokio", - "tokio-stream", - "tokio-tar", - "tokio-util", - "url", -] - [[package]] name = "testcontainers" version = "0.24.0" @@ -13828,7 +12995,7 @@ dependencies = [ "bytes", "docker_credential", "either", - "etcetera 0.10.0", + "etcetera", "futures", "log", "memchr", diff --git a/Cargo.toml b/Cargo.toml index 04ec70e8c..406f132df 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,63 +46,63 @@ unreachable_pub = "deny" unused_async = "warn" [workspace.dependencies] -reth = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-chain-state = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-cli = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-cli-commands = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-cli-util = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-db = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-db-common = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-errors = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-payload-builder = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-node-api = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-rpc-engine-api = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-node-ethereum = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-trie = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-trie-parallel = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-basic-payload-builder = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-node-core = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-primitives = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-primitives-traits = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-provider = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2", features = [ +reth = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-chain-state = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-cli = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-cli-commands = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-cli-util = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-db = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-db-common = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-errors = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-payload-builder = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-node-api = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-rpc-engine-api = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-node-ethereum = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-trie = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-trie-parallel = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-basic-payload-builder = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-node-core = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-primitives = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-primitives-traits = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-provider = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3", features = [ "test-utils", ] } -reth-chainspec = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-storage-api = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-rpc-api = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-evm = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-evm-ethereum = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-execution-errors = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-exex = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-tasks = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-metrics = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-trie-db = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-payload-primitives = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-transaction-pool = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-execution-types = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-revm = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-payload-builder-primitives = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-payload-util = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-rpc-layer = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-network-peers = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-testing-utils = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-node-builder = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-rpc-eth-types = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-tracing-otlp = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-ipc = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } +reth-chainspec = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-storage-api = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-rpc-api = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-evm = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-evm-ethereum = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-execution-errors = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-exex = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-tasks = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-metrics = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-trie-db = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-payload-primitives = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-transaction-pool = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-execution-types = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-revm = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-payload-builder-primitives = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-payload-util = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-rpc-layer = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-network-peers = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-testing-utils = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-node-builder = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-rpc-eth-types = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-tracing-otlp = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-ipc = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } # reth optimism -reth-optimism-primitives = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-optimism-consensus = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-optimism-cli = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-optimism-forks = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-optimism-evm = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-optimism-node = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-optimism-payload-builder = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-optimism-chainspec = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-optimism-txpool = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2" } -reth-optimism-rpc = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2", features = [ +reth-optimism-primitives = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-optimism-consensus = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-optimism-cli = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-optimism-forks = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-optimism-evm = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-optimism-node = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-optimism-payload-builder = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-optimism-chainspec = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-optimism-txpool = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3" } +reth-optimism-rpc = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.3", features = [ "client", ] } @@ -120,14 +120,14 @@ ethereum_ssz = "0.9.0" alloy-primitives = { version = "1.3.1", default-features = false } alloy-rlp = "0.3.10" alloy-chains = "0.2.5" -alloy-contract = { version = "1.0.37" } -alloy-evm = { version = "0.21.0", default-features = false } +alloy-evm = { version = "0.21.3", default-features = false } alloy-provider = { version = "1.0.37", features = [ "ipc", "pubsub", "txpool-api", "engine-api", ] } +alloy-contract = { version = "1.0.37" } alloy-pubsub = { version = "1.0.37" } alloy-eips = { version = "1.0.37" } alloy-rpc-types = { version = "1.0.37" } @@ -139,17 +139,18 @@ alloy-transport = { version = "1.0.37" } alloy-node-bindings = { version = "1.0.37" } alloy-consensus = { version = "1.0.37", features = ["kzg"] } alloy-serde = { version = "1.0.37" } -alloy-sol-types = { version = "1.2.1", features = ["json"] } alloy-rpc-types-beacon = { version = "1.0.37", features = ["ssz"] } alloy-rpc-types-engine = { version = "1.0.37", features = ["ssz"] } alloy-rpc-types-eth = { version = "1.0.37" } alloy-signer-local = { version = "1.0.37" } alloy-rpc-client = { version = "1.0.37" } alloy-genesis = { version = "1.0.37" } + +alloy-sol-types = { version = "1.3.1", features = ["json"] } alloy-trie = { version = "0.9.1" } # optimism -alloy-op-evm = { version = "0.21.0", default-features = false } +alloy-op-evm = { version = "0.21.3", default-features = false } op-alloy-rpc-types = { version = "0.20.0", default-features = false } op-alloy-rpc-types-engine = { version = "0.20.0", default-features = false } op-alloy-rpc-jsonrpsee = { version = "0.20.0", default-features = false } diff --git a/crates/op-rbuilder/Cargo.toml b/crates/op-rbuilder/Cargo.toml index d49d49518..da1481013 100644 --- a/crates/op-rbuilder/Cargo.toml +++ b/crates/op-rbuilder/Cargo.toml @@ -130,7 +130,7 @@ sha3 = "0.10" reqwest = "0.12.23" k256 = "0.13.4" -rollup-boost = { git = "http://github.com/flashbots/rollup-boost", rev = "b86af43969557bee18f17ec1d6bcd3e984f910b2" } +rollup-boost = { git = "http://github.com/flashbots/rollup-boost", rev = "dd12e8e8366004b4758bfa0cfa98efa6929b7e9f" } nanoid = { version = "0.4", optional = true } reth-ipc = { workspace = true, optional = true } From e6d72ad46bb94ae7a94adcd7bae06649ba7c9191 Mon Sep 17 00:00:00 2001 From: Ash Kunda <18058966+akundaz@users.noreply.github.com> Date: Mon, 3 Nov 2025 10:12:35 -0500 Subject: [PATCH 13/19] docs: clarify bundle block + fb number param interaction (#307) --- docs/eth_sendBundle.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/docs/eth_sendBundle.md b/docs/eth_sendBundle.md index 30b47630a..7dfa4daa1 100644 --- a/docs/eth_sendBundle.md +++ b/docs/eth_sendBundle.md @@ -59,6 +59,17 @@ The `eth_sendBundle` endpoint is only available when revert protection is enable If both `minFlashblockNumber` and `maxFlashblockNumber` are specified, min ≤ max. +### Block Number + Flashblock Number interaction + +When both block number and flashblock number ranges are specified, they act independently of each other. For example, if the builder receives a bundle request with parameters like +``` +"minBlockNumber": 100, +"maxBlockNumber": 105, +"minFlashblockNumber": 1, +"maxFlashblockNumber": 3, +``` +Then the builder will only execute the bundle if the current block number is between 100 and 105 AND the current flashblock number is between 1 and 3. + ### Transaction Constraints 1. **Single Transaction**: Bundles must contain exactly one transaction @@ -123,8 +134,8 @@ curl -X POST http://localhost:8545 \ "method": "eth_sendBundle", "params": [{ "txs": ["0x02f86c0182..."], - "minFlashblockNumber": 100, // Flashblock 100 - "maxFlashblockNumber": 104 // Flashblock 104 + "minFlashblockNumber": 1, // Flashblock 1 + "maxFlashblockNumber": 4 // Flashblock 4 }], "id": 1, "jsonrpc": "2.0" From 21046aaa1a5b382bcdda2b20969da1341fa28965 Mon Sep 17 00:00:00 2001 From: noot <36753753+noot@users.noreply.github.com> Date: Mon, 3 Nov 2025 08:02:59 -0800 Subject: [PATCH 14/19] feat: publish synced flashblocks to ws (#310) --- .../src/builders/flashblocks/ctx.rs | 4 +++ .../src/builders/flashblocks/payload.rs | 9 +++--- .../builders/flashblocks/payload_handler.rs | 28 +++++++++++++++++-- .../src/builders/flashblocks/service.rs | 11 ++++++-- 4 files changed, 44 insertions(+), 8 deletions(-) diff --git a/crates/op-rbuilder/src/builders/flashblocks/ctx.rs b/crates/op-rbuilder/src/builders/flashblocks/ctx.rs index c465445f5..b5a1bd477 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/ctx.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/ctx.rs @@ -56,6 +56,10 @@ impl OpPayloadSyncerCtx { self.max_gas_per_txn } + pub(super) fn metrics(&self) -> &Arc { + &self.metrics + } + pub(super) fn into_op_payload_builder_ctx( self, payload_config: PayloadConfig>, diff --git a/crates/op-rbuilder/src/builders/flashblocks/payload.rs b/crates/op-rbuilder/src/builders/flashblocks/payload.rs index 89f192100..01b8bc152 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/payload.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/payload.rs @@ -151,6 +151,7 @@ pub(super) struct OpPayloadBuilder { impl OpPayloadBuilder { /// `OpPayloadBuilder` constructor. + #[allow(clippy::too_many_arguments)] pub(super) fn new( evm_config: OpEvmConfig, pool: Pool, @@ -158,11 +159,11 @@ impl OpPayloadBuilder { config: BuilderConfig, builder_tx: BuilderTx, payload_tx: mpsc::Sender, + ws_pub: Arc, metrics: Arc, - ) -> eyre::Result { - let ws_pub = WebSocketPublisher::new(config.specific.ws_addr, Arc::clone(&metrics))?.into(); + ) -> Self { let address_gas_limiter = AddressGasLimiter::new(config.gas_limiter_config.clone()); - Ok(Self { + Self { evm_config, pool, client, @@ -172,7 +173,7 @@ impl OpPayloadBuilder { metrics, builder_tx, address_gas_limiter, - }) + } } } diff --git a/crates/op-rbuilder/src/builders/flashblocks/payload_handler.rs b/crates/op-rbuilder/src/builders/flashblocks/payload_handler.rs index 4927a0479..e39f74fb1 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/payload_handler.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/payload_handler.rs @@ -1,6 +1,7 @@ use crate::{ builders::flashblocks::{ ctx::OpPayloadSyncerCtx, p2p::Message, payload::FlashblocksExecutionInfo, + wspub::WebSocketPublisher, }, primitives::reth::ExecutionInfo, traits::ClientBounds, @@ -37,6 +38,9 @@ pub(crate) struct PayloadHandler { p2p_tx: mpsc::Sender, // sends a `Events::BuiltPayload` to the reth payload builder when a new payload is received. payload_events_handle: tokio::sync::broadcast::Sender>, + /// WebSocket publisher for broadcasting flashblocks + /// to all connected subscribers. + ws_pub: Arc, // context required for execution of blocks during syncing ctx: OpPayloadSyncerCtx, // chain client @@ -55,6 +59,7 @@ where p2p_tx: mpsc::Sender, payload_events_handle: tokio::sync::broadcast::Sender>, ctx: OpPayloadSyncerCtx, + ws_pub: Arc, client: Client, cancel: tokio_util::sync::CancellationToken, ) -> Self { @@ -63,6 +68,7 @@ where p2p_rx, p2p_tx, payload_events_handle, + ws_pub, ctx, client, cancel, @@ -76,6 +82,7 @@ where p2p_tx, payload_events_handle, ctx, + ws_pub, client, cancel, } = self; @@ -98,11 +105,13 @@ where let ctx = ctx.clone(); let client = client.clone(); let payload_events_handle = payload_events_handle.clone(); + let ws_pub = ws_pub.clone(); let cancel = cancel.clone(); // execute the flashblock on a thread where blocking is acceptable, // as it's potentially a heavy operation tokio::task::spawn_blocking(move || { + let metrics = ctx.metrics().clone(); let res = execute_flashblock( payload, ctx, @@ -110,9 +119,24 @@ where cancel, ); match res { - Ok((payload, _)) => { + Ok((payload, fb_payload)) => { tracing::info!(hash = payload.block().hash().to_string(), block_number = payload.block().header().number, "successfully executed received flashblock"); - let _ = payload_events_handle.send(Events::BuiltPayload(payload)); + if let Err(e) = payload_events_handle.send(Events::BuiltPayload(payload)) { + warn!(e = ?e, "failed to send BuiltPayload event on synced block"); + } + + match ws_pub + .publish(&fb_payload) { + Ok(flashblock_byte_size) => { + metrics + .flashblock_byte_size_histogram + .record(flashblock_byte_size as f64); + } + Err(e) => { + tracing::warn!(error = ?e, "failed to publish flashblock to websocket subscribers"); + } + } + } Err(e) => { tracing::error!(error = ?e, "failed to execute received flashblock"); diff --git a/crates/op-rbuilder/src/builders/flashblocks/service.rs b/crates/op-rbuilder/src/builders/flashblocks/service.rs index e11fa2f2f..a2d61e939 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/service.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/service.rs @@ -8,6 +8,7 @@ use crate::{ p2p::{AGENT_VERSION, FLASHBLOCKS_STREAM_PROTOCOL, Message}, payload::{FlashblocksExecutionInfo, FlashblocksExtraCtx}, payload_handler::PayloadHandler, + wspub::WebSocketPublisher, }, generator::BlockPayloadJobGenerator, }, @@ -106,6 +107,11 @@ impl FlashblocksServiceBuilder { let metrics = Arc::new(OpRBuilderMetrics::default()); let (built_payload_tx, built_payload_rx) = tokio::sync::mpsc::channel(16); + + let ws_pub: Arc = + WebSocketPublisher::new(self.0.specific.ws_addr, metrics.clone()) + .wrap_err("failed to create ws publisher")? + .into(); let payload_builder = OpPayloadBuilder::new( OpEvmConfig::optimism(ctx.chain_spec()), pool, @@ -113,9 +119,9 @@ impl FlashblocksServiceBuilder { self.0.clone(), builder_tx, built_payload_tx, + ws_pub.clone(), metrics.clone(), - ) - .wrap_err("failed to create flashblocks payload builder")?; + ); let payload_job_config = BasicPayloadJobGeneratorConfig::default(); let payload_generator = BlockPayloadJobGenerator::with_builder( @@ -144,6 +150,7 @@ impl FlashblocksServiceBuilder { outgoing_message_tx, payload_service.payload_events_handle(), syncer_ctx, + ws_pub, ctx.provider().clone(), cancel, ); From 0019a7b93aca1c604fd6ff898e1639ce873c8122 Mon Sep 17 00:00:00 2001 From: shana Date: Tue, 4 Nov 2025 10:28:32 -0800 Subject: [PATCH 15/19] Add permit functions for flashblocks number contract (#287) * Add permit flashtestations tx calls from builder * move simumlation calls to builder tx * Add permit functions for flashblocks number contract * refactor to simulate call * fix tests --- crates/op-rbuilder/src/args/op.rs | 9 + crates/op-rbuilder/src/builders/builder_tx.rs | 2 +- .../src/builders/flashblocks/builder_tx.rs | 266 ++++++++++-------- .../src/builders/flashblocks/config.rs | 8 + .../src/builders/flashblocks/service.rs | 9 +- .../src/flashtestations/builder_tx.rs | 31 +- crates/op-rbuilder/src/tests/flashblocks.rs | 2 +- .../op-rbuilder/src/tests/flashtestations.rs | 116 +++++++- .../src/tests/framework/instance.rs | 2 - .../op-rbuilder/src/tests/framework/utils.rs | 8 + 10 files changed, 311 insertions(+), 142 deletions(-) diff --git a/crates/op-rbuilder/src/args/op.rs b/crates/op-rbuilder/src/args/op.rs index b0b90f848..1d81c3828 100644 --- a/crates/op-rbuilder/src/args/op.rs +++ b/crates/op-rbuilder/src/args/op.rs @@ -167,6 +167,15 @@ pub struct FlashblocksArgs { )] pub flashblocks_number_contract_address: Option

, + /// Use permit signatures if flashtestations is enabled with the flashtestation key + /// to increment the flashblocks number + #[arg( + long = "flashblocks.number-contract-use-permit", + env = "FLASHBLOCK_NUMBER_CONTRACT_USE_PERMIT", + default_value = "false" + )] + pub flashblocks_number_contract_use_permit: bool, + /// Flashblocks p2p configuration #[command(flatten)] pub p2p: FlashblocksP2pArgs, diff --git a/crates/op-rbuilder/src/builders/builder_tx.rs b/crates/op-rbuilder/src/builders/builder_tx.rs index 11194a384..7cc56b07d 100644 --- a/crates/op-rbuilder/src/builders/builder_tx.rs +++ b/crates/op-rbuilder/src/builders/builder_tx.rs @@ -126,7 +126,7 @@ impl From for PayloadBuilderError { BuilderTransactionError::EvmExecutionError(e) => { PayloadBuilderError::EvmExecutionError(e) } - _ => PayloadBuilderError::Other(Box::new(error)), + _ => PayloadBuilderError::other(error), } } } diff --git a/crates/op-rbuilder/src/builders/flashblocks/builder_tx.rs b/crates/op-rbuilder/src/builders/flashblocks/builder_tx.rs index 04afc64d9..a53d67cd9 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/builder_tx.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/builder_tx.rs @@ -1,31 +1,25 @@ -use alloy_consensus::TxEip1559; use alloy_eips::Encodable2718; use alloy_evm::{Database, Evm}; use alloy_op_evm::OpEvm; -use alloy_primitives::{Address, TxKind}; -use alloy_sol_types::{Error, SolCall, SolEvent, SolInterface, sol}; +use alloy_primitives::{Address, B256, Signature, U256}; +use alloy_rpc_types_eth::TransactionInput; +use alloy_sol_types::{SolCall, SolEvent, sol}; use core::fmt::Debug; -use op_alloy_consensus::OpTypedTransaction; -use op_revm::OpHaltReason; +use op_alloy_rpc_types::OpTransactionRequest; use reth_evm::{ConfigureEvm, precompiles::PrecompilesMap}; -use reth_optimism_primitives::OpTransactionSigned; -use reth_primitives::Recovered; use reth_provider::StateProvider; use reth_revm::State; -use revm::{ - DatabaseRef, - context::result::{ExecutionResult, ResultAndState}, - inspector::NoOpInspector, -}; +use revm::{DatabaseRef, inspector::NoOpInspector}; use tracing::warn; use crate::{ builders::{ BuilderTransactionCtx, BuilderTransactionError, BuilderTransactions, - InvalidContractDataError, - builder_tx::{BuilderTxBase, get_nonce}, + SimulationSuccessResult, + builder_tx::BuilderTxBase, context::OpPayloadBuilderCtx, flashblocks::payload::{FlashblocksExecutionInfo, FlashblocksExtraCtx}, + get_nonce, }, flashtestations::builder_tx::FlashtestationsBuilderTx, primitives::reth::ExecutionInfo, @@ -37,8 +31,17 @@ sol!( #[sol(rpc, abi)] #[derive(Debug)] interface IFlashblockNumber { + uint256 public flashblockNumber; + function incrementFlashblockNumber() external; + function permitIncrementFlashblockNumber(uint256 currentFlashblockNumber, bytes memory signature) external; + + function computeStructHash(uint256 currentFlashblockNumber) external pure returns (bytes32); + + function hashTypedDataV4(bytes32 structHash) external view returns (bytes32); + + // @notice Emitted when flashblock index is incremented // @param newFlashblockIndex The new flashblock index (0-indexed within each L2 block) event FlashblockIncremented(uint256 newFlashblockIndex); @@ -51,16 +54,6 @@ sol!( } ); -#[derive(Debug, thiserror::Error)] -pub(super) enum FlashblockNumberError { - #[error("flashblocks number contract tx reverted: {0:?}")] - Revert(IFlashblockNumber::IFlashblockNumberErrors), - #[error("unknown revert: {0} err: {1}")] - Unknown(String, Error), - #[error("halt: {0:?}")] - Halt(OpHaltReason), -} - // This will be the end of block transaction of a regular block #[derive(Debug, Clone)] pub(super) struct FlashblocksBuilderTx { @@ -133,8 +126,9 @@ impl BuilderTransactions for Flas // This will be the end of block transaction of a regular block #[derive(Debug, Clone)] pub(super) struct FlashblocksNumberBuilderTx { - pub signer: Option, + pub signer: Signer, pub flashblock_number_address: Address, + pub use_permit: bool, pub base_builder_tx: BuilderTxBase, pub flashtestations_builder_tx: Option>, @@ -142,85 +136,128 @@ pub(super) struct FlashblocksNumberBuilderTx { impl FlashblocksNumberBuilderTx { pub(super) fn new( - signer: Option, + signer: Signer, flashblock_number_address: Address, + use_permit: bool, flashtestations_builder_tx: Option< FlashtestationsBuilderTx, >, ) -> Self { - let base_builder_tx = BuilderTxBase::new(signer); + let base_builder_tx = BuilderTxBase::new(Some(signer)); Self { signer, flashblock_number_address, + use_permit, base_builder_tx, flashtestations_builder_tx, } } - // TODO: remove and clean up in favour of simulate_call() - fn estimate_flashblock_number_tx_gas( + fn signed_increment_flashblocks_tx( &self, ctx: &OpPayloadBuilderCtx, - evm: &mut OpEvm, - signer: &Signer, - nonce: u64, - ) -> Result { - let tx = self.signed_flashblock_number_tx(ctx, ctx.block_gas_limit(), nonce, signer)?; - let ResultAndState { result, .. } = match evm.transact(&tx) { - Ok(res) => res, - Err(err) => { - return Err(BuilderTransactionError::EvmExecutionError(Box::new(err))); - } + evm: &mut OpEvm, + ) -> Result { + let calldata = IFlashblockNumber::incrementFlashblockNumberCall {}; + self.increment_flashblocks_tx(calldata, ctx, evm) + } + + fn increment_flashblocks_permit_signature( + &self, + flashtestations_signer: &Signer, + current_flashblock_number: U256, + ctx: &OpPayloadBuilderCtx, + evm: &mut OpEvm, + ) -> Result { + let struct_hash_calldata = IFlashblockNumber::computeStructHashCall { + currentFlashblockNumber: current_flashblock_number, }; + let SimulationSuccessResult { output, .. } = + self.simulate_flashblocks_readonly_call(struct_hash_calldata, ctx, evm)?; + let typed_data_hash_calldata = + IFlashblockNumber::hashTypedDataV4Call { structHash: output }; + let SimulationSuccessResult { output, .. } = + self.simulate_flashblocks_readonly_call(typed_data_hash_calldata, ctx, evm)?; + let signature = flashtestations_signer.sign_message(output)?; + Ok(signature) + } - match result { - ExecutionResult::Success { gas_used, logs, .. } => { - if logs.iter().any(|log| { - log.topics().first() - == Some(&IFlashblockNumber::FlashblockIncremented::SIGNATURE_HASH) - }) { - Ok(gas_used) - } else { - Err(BuilderTransactionError::InvalidContract( - self.flashblock_number_address, - InvalidContractDataError::InvalidLogs( - vec![IFlashblockNumber::FlashblockIncremented::SIGNATURE_HASH], - vec![], - ), - )) - } - } - ExecutionResult::Revert { output, .. } => Err(BuilderTransactionError::other( - IFlashblockNumber::IFlashblockNumberErrors::abi_decode(&output) - .map(FlashblockNumberError::Revert) - .unwrap_or_else(|e| FlashblockNumberError::Unknown(hex::encode(output), e)), - )), - ExecutionResult::Halt { reason, .. } => Err(BuilderTransactionError::other( - FlashblockNumberError::Halt(reason), - )), - } + fn signed_increment_flashblocks_permit_tx( + &self, + flashtestations_signer: &Signer, + ctx: &OpPayloadBuilderCtx, + evm: &mut OpEvm, + ) -> Result { + let current_flashblock_calldata = IFlashblockNumber::flashblockNumberCall {}; + let SimulationSuccessResult { output, .. } = + self.simulate_flashblocks_readonly_call(current_flashblock_calldata, ctx, evm)?; + let signature = + self.increment_flashblocks_permit_signature(flashtestations_signer, output, ctx, evm)?; + let calldata = IFlashblockNumber::permitIncrementFlashblockNumberCall { + currentFlashblockNumber: output, + signature: signature.as_bytes().into(), + }; + self.increment_flashblocks_tx(calldata, ctx, evm) + } + + fn increment_flashblocks_tx( + &self, + calldata: T, + ctx: &OpPayloadBuilderCtx, + evm: &mut OpEvm, + ) -> Result { + let SimulationSuccessResult { gas_used, .. } = self.simulate_flashblocks_call( + calldata.clone(), + vec![IFlashblockNumber::FlashblockIncremented::SIGNATURE_HASH], + ctx, + evm, + )?; + let signed_tx = self.sign_tx( + self.flashblock_number_address, + self.signer, + gas_used, + calldata.abi_encode().into(), + ctx, + evm.db_mut(), + )?; + let da_size = + op_alloy_flz::tx_estimated_size_fjord_bytes(signed_tx.encoded_2718().as_slice()); + Ok(BuilderTransactionCtx { + signed_tx, + gas_used, + da_size, + is_top_of_block: true, + }) + } + + fn simulate_flashblocks_readonly_call( + &self, + calldata: T, + ctx: &OpPayloadBuilderCtx, + evm: &mut OpEvm, + ) -> Result, BuilderTransactionError> { + self.simulate_flashblocks_call(calldata, vec![], ctx, evm) } - fn signed_flashblock_number_tx( + fn simulate_flashblocks_call( &self, + calldata: T, + expected_logs: Vec, ctx: &OpPayloadBuilderCtx, - gas_limit: u64, - nonce: u64, - signer: &Signer, - ) -> Result, secp256k1::Error> { - let calldata = IFlashblockNumber::incrementFlashblockNumberCall {}.abi_encode(); - // Create the EIP-1559 transaction - let tx = OpTypedTransaction::Eip1559(TxEip1559 { - chain_id: ctx.chain_id(), - nonce, - gas_limit, - max_fee_per_gas: ctx.base_fee().into(), - max_priority_fee_per_gas: 0, - to: TxKind::Call(self.flashblock_number_address), - input: calldata.into(), - ..Default::default() - }); - signer.sign_tx(tx) + evm: &mut OpEvm, + ) -> Result, BuilderTransactionError> { + let tx_req = OpTransactionRequest::default() + .gas_limit(ctx.block_gas_limit()) + .max_fee_per_gas(ctx.base_fee().into()) + .to(self.flashblock_number_address) + .from(self.signer.address) // use tee key as signer for simulations + .nonce(get_nonce(evm.db(), self.signer.address)?) + .input(TransactionInput::new(calldata.abi_encode().into())); + self.simulate_call::( + tx_req, + expected_logs, + evm, + ) } } @@ -242,46 +279,35 @@ impl BuilderTransactions builder_txs.extend(self.base_builder_tx.simulate_builder_tx(ctx, &mut *db)?); } else { // we increment the flashblock number for the next flashblock so we don't increment in the last flashblock - if let Some(signer) = &self.signer { - let mut evm = ctx.evm_config.evm_with_env(&mut *db, ctx.evm_env.clone()); - evm.modify_cfg(|cfg| { - cfg.disable_balance_check = true; - cfg.disable_block_gas_limit = true; - }); - - let nonce = get_nonce(evm.db_mut(), signer.address)?; + let mut evm = ctx.evm_config.evm_with_env(&mut *db, ctx.evm_env.clone()); + evm.modify_cfg(|cfg| { + cfg.disable_balance_check = true; + cfg.disable_block_gas_limit = true; + }); - let tx = match self.estimate_flashblock_number_tx_gas(ctx, &mut evm, signer, nonce) - { - Ok(gas_used) => { - // Due to EIP-150, 63/64 of available gas is forwarded to external calls so need to add a buffer - let signed_tx = self.signed_flashblock_number_tx( - ctx, - gas_used * 64 / 63, - nonce, - signer, - )?; + let flashblocks_num_tx = if let Some(flashtestations) = &self.flashtestations_builder_tx + && self.use_permit + { + self.signed_increment_flashblocks_permit_tx( + flashtestations.tee_signer(), + ctx, + &mut evm, + ) + } else { + self.signed_increment_flashblocks_tx(ctx, &mut evm) + }; - let da_size = op_alloy_flz::tx_estimated_size_fjord_bytes( - signed_tx.encoded_2718().as_slice(), - ); - Some(BuilderTransactionCtx { - gas_used, - da_size, - signed_tx, - is_top_of_block: true, // number tx at top of flashblock - }) - } - Err(e) => { - warn!(target: "builder_tx", error = ?e, "Flashblocks number contract tx simulation failed, defaulting to fallback builder tx"); - self.base_builder_tx - .simulate_builder_tx(ctx, &mut *db)? - .map(|tx| tx.set_top_of_block()) - } - }; + let tx = match flashblocks_num_tx { + Ok(tx) => Some(tx), + Err(e) => { + warn!(target: "builder_tx", error = ?e, "flashblocks number contract tx simulation failed, defaulting to fallback builder tx"); + self.base_builder_tx + .simulate_builder_tx(ctx, &mut *db)? + .map(|tx| tx.set_top_of_block()) + } + }; - builder_txs.extend(tx); - } + builder_txs.extend(tx); } if ctx.is_last_flashblock() { diff --git a/crates/op-rbuilder/src/builders/flashblocks/config.rs b/crates/op-rbuilder/src/builders/flashblocks/config.rs index a3345edbd..a47cc0467 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/config.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/config.rs @@ -39,6 +39,9 @@ pub struct FlashblocksConfig { /// If set a builder tx will be added to the start of every flashblock instead of the regular builder tx. pub flashblocks_number_contract_address: Option
, + /// whether to use permit signatures for the contract calls + pub flashblocks_number_contract_use_permit: bool, + /// Whether to enable the p2p node for flashblocks pub p2p_enabled: bool, @@ -64,6 +67,7 @@ impl Default for FlashblocksConfig { fixed: false, calculate_state_root: true, flashblocks_number_contract_address: None, + flashblocks_number_contract_use_permit: false, p2p_enabled: false, p2p_port: 9009, p2p_private_key_file: None, @@ -93,6 +97,9 @@ impl TryFrom for FlashblocksConfig { let flashblocks_number_contract_address = args.flashblocks.flashblocks_number_contract_address; + let flashblocks_number_contract_use_permit = + args.flashblocks.flashblocks_number_contract_use_permit; + Ok(Self { ws_addr, interval, @@ -100,6 +107,7 @@ impl TryFrom for FlashblocksConfig { fixed, calculate_state_root, flashblocks_number_contract_address, + flashblocks_number_contract_use_permit, p2p_enabled: args.flashblocks.p2p.p2p_enabled, p2p_port: args.flashblocks.p2p.p2p_port, p2p_private_key_file: args.flashblocks.p2p.p2p_private_key_file, diff --git a/crates/op-rbuilder/src/builders/flashblocks/service.rs b/crates/op-rbuilder/src/builders/flashblocks/service.rs index a2d61e939..f947ab4ef 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/service.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/service.rs @@ -195,15 +195,18 @@ where None }; - if let Some(flashblocks_number_contract_address) = - self.0.specific.flashblocks_number_contract_address + if let Some(builder_signer) = signer + && let Some(flashblocks_number_contract_address) = + self.0.specific.flashblocks_number_contract_address { + let use_permit = self.0.specific.flashblocks_number_contract_use_permit; self.spawn_payload_builder_service( ctx, pool, FlashblocksNumberBuilderTx::new( - signer, + builder_signer, flashblocks_number_contract_address, + use_permit, flashtestations_builder_tx, ), ) diff --git a/crates/op-rbuilder/src/flashtestations/builder_tx.rs b/crates/op-rbuilder/src/flashtestations/builder_tx.rs index 005dcab58..7651b846e 100644 --- a/crates/op-rbuilder/src/flashtestations/builder_tx.rs +++ b/crates/op-rbuilder/src/flashtestations/builder_tx.rs @@ -89,6 +89,10 @@ where } } + pub fn tee_signer(&self) -> &Signer { + &self.tee_service_signer + } + /// Computes the block content hash according to the formula: /// keccak256(abi.encode(parentHash, blockNumber, timestamp, transactionHashes)) /// https://github.com/flashbots/rollup-boost/blob/main/specs/flashtestations.md#block-building-process @@ -136,12 +140,13 @@ where .evm_with_env(&mut simulation_state, ctx.evm_env.clone()); evm.modify_cfg(|cfg| { cfg.disable_balance_check = true; + cfg.disable_nonce_check = true; }); let calldata = IFlashtestationRegistry::getRegistrationStatusCall { teeAddress: self.tee_service_signer.address, }; let SimulationSuccessResult { output, .. } = - self.flashtestation_contract_read(self.registry_address, calldata, ctx, &mut evm)?; + self.flashtestations_contract_read(self.registry_address, calldata, ctx, &mut evm)?; if output.isValid { self.registered .store(true, std::sync::atomic::Ordering::SeqCst); @@ -159,7 +164,7 @@ where owner: self.tee_service_signer.address, }; let SimulationSuccessResult { output, .. } = - self.flashtestation_contract_read(contract_address, calldata, ctx, evm)?; + self.flashtestations_contract_read(contract_address, calldata, ctx, evm)?; Ok(output) } @@ -175,7 +180,7 @@ where nonce: permit_nonce, deadline: U256::from(ctx.timestamp()), }; - let SimulationSuccessResult { output, .. } = self.flashtestation_contract_read( + let SimulationSuccessResult { output, .. } = self.flashtestations_contract_read( self.registry_address, struct_hash_calldata, ctx, @@ -183,7 +188,7 @@ where )?; let typed_data_hash_calldata = IFlashtestationRegistry::hashTypedDataV4Call { structHash: output }; - let SimulationSuccessResult { output, .. } = self.flashtestation_contract_read( + let SimulationSuccessResult { output, .. } = self.flashtestations_contract_read( self.registry_address, typed_data_hash_calldata, ctx, @@ -211,7 +216,7 @@ where gas_used, state_changes, .. - } = self.flashtestation_call( + } = self.flashtestations_call( self.registry_address, calldata.clone(), vec![TEEServiceRegistered::SIGNATURE_HASH], @@ -250,7 +255,7 @@ where blockContentHash: block_content_hash, nonce: permit_nonce, }; - let SimulationSuccessResult { output, .. } = self.flashtestation_contract_read( + let SimulationSuccessResult { output, .. } = self.flashtestations_contract_read( self.builder_policy_address, struct_hash_calldata, ctx, @@ -258,7 +263,7 @@ where )?; let typed_data_hash_calldata = IBlockBuilderPolicy::getHashedTypeDataV4Call { structHash: output }; - let SimulationSuccessResult { output, .. } = self.flashtestation_contract_read( + let SimulationSuccessResult { output, .. } = self.flashtestations_contract_read( self.builder_policy_address, typed_data_hash_calldata, ctx, @@ -289,7 +294,7 @@ where version: self.builder_proof_version, eip712Sig: signature.as_bytes().into(), }; - let SimulationSuccessResult { gas_used, .. } = self.flashtestation_call( + let SimulationSuccessResult { gas_used, .. } = self.flashtestations_call( self.builder_policy_address, calldata.clone(), vec![BlockBuilderProofVerified::SIGNATURE_HASH], @@ -314,17 +319,17 @@ where }) } - fn flashtestation_contract_read( + fn flashtestations_contract_read( &self, contract_address: Address, calldata: T, ctx: &OpPayloadBuilderCtx, evm: &mut OpEvm, ) -> Result, BuilderTransactionError> { - self.flashtestation_call(contract_address, calldata, vec![], ctx, evm) + self.flashtestations_call(contract_address, calldata, vec![], ctx, evm) } - fn flashtestation_call( + fn flashtestations_call( &self, contract_address: Address, calldata: T, @@ -336,8 +341,8 @@ where .gas_limit(ctx.block_gas_limit()) .max_fee_per_gas(ctx.base_fee().into()) .to(contract_address) - .from(self.tee_service_signer.address) // use tee key as signer for simulations - .nonce(get_nonce(evm.db(), self.tee_service_signer.address)?) + .from(self.builder_signer.address) + .nonce(get_nonce(evm.db(), self.builder_signer.address)?) .input(TransactionInput::new(calldata.abi_encode().into())); if contract_address == self.registry_address { self.simulate_call::( diff --git a/crates/op-rbuilder/src/tests/flashblocks.rs b/crates/op-rbuilder/src/tests/flashblocks.rs index a623aaffd..cd92da9fa 100644 --- a/crates/op-rbuilder/src/tests/flashblocks.rs +++ b/crates/op-rbuilder/src/tests/flashblocks.rs @@ -526,7 +526,7 @@ async fn test_flashblocks_number_contract_builder_tx(rbuilder: LocalInstance) -> let init_tx = driver .create_transaction() .init_flashblock_number_contract(true) - .with_to(contract_address) + .with_to(FLASHBLOCKS_NUMBER_ADDRESS) .with_bundle(BundleOpts::default()) .send() .await?; diff --git a/crates/op-rbuilder/src/tests/flashtestations.rs b/crates/op-rbuilder/src/tests/flashtestations.rs index c0cc02508..002ce5cfc 100644 --- a/crates/op-rbuilder/src/tests/flashtestations.rs +++ b/crates/op-rbuilder/src/tests/flashtestations.rs @@ -97,7 +97,6 @@ async fn test_flashtestations_unauthorized_workload(rbuilder: LocalInstance) -> // check that only the regular builder tx is in the block let (tx_hash, block) = driver.build_new_block_with_valid_transaction().await?; let txs = block.transactions.into_transactions_vec(); - if_flashblocks!( assert_eq!(txs.len(), 4, "Expected 4 transactions in block"); // deposit + valid tx + 2 builder tx // Check builder tx @@ -312,7 +311,6 @@ async fn test_flashtestations_permit_with_flashblocks_number_contract( .send() .await?; let block = driver.build_new_block_with_current_timestamp(None).await?; - // check the builder tx, funding tx and registration tx is in the block let num_txs = block.transactions.len(); let txs = block.transactions.into_transactions_vec(); // // 1 deposit tx, 1 regular builder tx, 4 flashblocks number tx, 1 user tx, 1 block proof tx @@ -358,6 +356,120 @@ async fn test_flashtestations_permit_with_flashblocks_number_contract( Ok(()) } +#[rb_test(flashblocks, args = OpRbuilderArgs { + chain_block_time: 1000, + enable_revert_protection: true, + flashblocks: FlashblocksArgs { + flashblocks_number_contract_address: Some(FLASHBLOCKS_NUMBER_ADDRESS), + flashblocks_number_contract_use_permit: true, + ..Default::default() + }, + flashtestations: FlashtestationsArgs { + flashtestations_enabled: true, + registry_address: Some(FLASHTESTATION_REGISTRY_ADDRESS), + builder_policy_address: Some(BLOCK_BUILDER_POLICY_ADDRESS), + debug: true, + enable_block_proofs: true, + ..Default::default() + }, + ..Default::default() +})] +async fn test_flashtestations_permit_with_flashblocks_number_permit( + rbuilder: LocalInstance, +) -> eyre::Result<()> { + let driver = rbuilder.driver().await?; + let provider = rbuilder.provider().await?; + setup_flashblock_number_contract(&driver, &provider, false).await?; + setup_flashtestation_contracts(&driver, &provider, true, true).await?; + // Verify flashblock number is not incremented and builder address is not authorized + let contract = FlashblocksNumber::new(FLASHBLOCKS_NUMBER_ADDRESS, provider.clone()); + let current_number = contract.getFlashblockNumber().call().await?; + assert!( + current_number.is_zero(), // contract deployments incremented the number but we built at least 1 full block + "Flashblock number should not be incremented" + ); + let is_authorized = contract.isBuilder(builder_signer().address).call().await?; + assert!(!is_authorized, "builder should not be authorized"); + + // add tee signer address to authorized builders + let add_builder_tx = driver + .create_transaction() + .add_authorized_builder(TEE_DEBUG_ADDRESS) + .with_to(FLASHBLOCKS_NUMBER_ADDRESS) + .with_bundle(BundleOpts::default().with_flashblock_number_min(4)) + .send() + .await?; + let block = driver.build_new_block_with_current_timestamp(None).await?; + provider + .get_transaction_receipt(*add_builder_tx.tx_hash()) + .await? + .expect("add builder tx not mined"); + let num_txs = block.transactions.len(); + let txs = block.transactions.into_transactions_vec(); + // 1 deposit tx, 5 regular builder tx, 1 add builder tx, 1 block proof tx + assert_eq!(num_txs, 8, "Expected 8 transactions in block"); + // Check no transactions to the flashblocks number contract as tee signer is not authorized + for i in 1..6 { + assert_eq!( + txs[i].to(), + Some(Address::ZERO), + "builder tx should send to flashblocks number contract at index {}", + i + ); + } + // add builder tx + assert_eq!( + txs[6].tx_hash(), + *add_builder_tx.tx_hash(), + "add builder tx should be in correct position in block" + ); + assert_eq!( + txs[7].to(), + Some(BLOCK_BUILDER_POLICY_ADDRESS), + "builder tx should send verify block builder proof" + ); + + let tx = driver + .create_transaction() + .random_valid_transfer() + .with_bundle(BundleOpts::default().with_flashblock_number_min(4)) + .send() + .await?; + let block = driver.build_new_block_with_current_timestamp(None).await?; + let txs = block.transactions.into_transactions_vec(); + // 1 deposit tx, 1 regular builder tx, 4 flashblocks builder tx, 1 user tx, 1 block proof tx + assert_eq!(txs.len(), 8, "Expected 8 transactions in block"); + // flashblocks number contract + for i in 2..6 { + assert_eq!( + txs[i].to(), + Some(FLASHBLOCKS_NUMBER_ADDRESS), + "builder tx should send to flashblocks number contract at index {}", + i + ); + } + // user tx + assert_eq!( + txs[6].tx_hash(), + *tx.tx_hash(), + "user tx should be in correct position in block" + ); + // check that the tee signer did not send any transactions + let balance = provider.get_balance(TEE_DEBUG_ADDRESS).await?; + assert!(balance.is_zero()); + let nonce = provider.get_transaction_count(TEE_DEBUG_ADDRESS).await?; + assert_eq!(nonce, 0); + // Verify flashblock number incremented correctly + let contract = FlashblocksNumber::new(FLASHBLOCKS_NUMBER_ADDRESS, provider.clone()); + let current_number = contract.getFlashblockNumber().call().await?; + assert_eq!( + current_number, + U256::from(4), + "Flashblock number not incremented correctly" + ); + Ok(()) +} + async fn setup_flashtestation_contracts( driver: &ChainDriver, provider: &RootProvider, diff --git a/crates/op-rbuilder/src/tests/framework/instance.rs b/crates/op-rbuilder/src/tests/framework/instance.rs index ccfadaf04..d698bf458 100644 --- a/crates/op-rbuilder/src/tests/framework/instance.rs +++ b/crates/op-rbuilder/src/tests/framework/instance.rs @@ -52,7 +52,6 @@ use std::{ use tokio::{net::TcpListener, sync::oneshot, task::JoinHandle}; use tokio_tungstenite::{connect_async, tungstenite::Message}; use tokio_util::sync::CancellationToken; -use tracing::warn; /// Represents a type that emulates a local in-process instance of the OP builder node. /// This node uses IPC as the communication channel for the RPC server Engine API. @@ -410,7 +409,6 @@ impl FlashblocksListener { } Some(Ok(Message::Text(text))) = read.next() => { let fb = serde_json::from_str(&text).unwrap(); - warn!("GOT FB: {fb:#?}"); flashblocks_clone.lock().push(fb); } } diff --git a/crates/op-rbuilder/src/tests/framework/utils.rs b/crates/op-rbuilder/src/tests/framework/utils.rs index 35a5f2a51..99772de19 100644 --- a/crates/op-rbuilder/src/tests/framework/utils.rs +++ b/crates/op-rbuilder/src/tests/framework/utils.rs @@ -33,6 +33,7 @@ pub trait TransactionBuilderExt { // flashblocks number methods fn deploy_flashblock_number_contract(self) -> Self; fn init_flashblock_number_contract(self, register_builder: bool) -> Self; + fn add_authorized_builder(self, builder: Address) -> Self; // flashtestations methods fn deploy_flashtestation_registry_contract(self) -> Self; fn init_flashtestation_registry_contract(self, dcap_address: Address) -> Self; @@ -85,6 +86,13 @@ impl TransactionBuilderExt for TransactionBuilder { .with_signer(flashblocks_number_signer()) } + fn add_authorized_builder(self, builder: Address) -> Self { + let calldata = FlashblocksNumber::addBuilderCall { builder }.abi_encode(); + + self.with_input(calldata.into()) + .with_signer(flashblocks_number_signer()) + } + fn deploy_flashtestation_registry_contract(self) -> Self { self.with_create() .with_input(FlashtestationRegistry::BYTECODE.clone()) From b473f4e791fc081416f7dcc128ff7b85476b6fcb Mon Sep 17 00:00:00 2001 From: noot <36753753+noot@users.noreply.github.com> Date: Tue, 4 Nov 2025 10:38:25 -0800 Subject: [PATCH 16/19] remove ws publishing from synced flashblocks (#312) --- .../src/builders/flashblocks/ctx.rs | 4 ---- .../builders/flashblocks/payload_handler.rs | 24 +------------------ .../src/builders/flashblocks/service.rs | 1 - 3 files changed, 1 insertion(+), 28 deletions(-) diff --git a/crates/op-rbuilder/src/builders/flashblocks/ctx.rs b/crates/op-rbuilder/src/builders/flashblocks/ctx.rs index b5a1bd477..c465445f5 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/ctx.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/ctx.rs @@ -56,10 +56,6 @@ impl OpPayloadSyncerCtx { self.max_gas_per_txn } - pub(super) fn metrics(&self) -> &Arc { - &self.metrics - } - pub(super) fn into_op_payload_builder_ctx( self, payload_config: PayloadConfig>, diff --git a/crates/op-rbuilder/src/builders/flashblocks/payload_handler.rs b/crates/op-rbuilder/src/builders/flashblocks/payload_handler.rs index e39f74fb1..bc02c34ec 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/payload_handler.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/payload_handler.rs @@ -1,7 +1,6 @@ use crate::{ builders::flashblocks::{ ctx::OpPayloadSyncerCtx, p2p::Message, payload::FlashblocksExecutionInfo, - wspub::WebSocketPublisher, }, primitives::reth::ExecutionInfo, traits::ClientBounds, @@ -38,9 +37,6 @@ pub(crate) struct PayloadHandler { p2p_tx: mpsc::Sender, // sends a `Events::BuiltPayload` to the reth payload builder when a new payload is received. payload_events_handle: tokio::sync::broadcast::Sender>, - /// WebSocket publisher for broadcasting flashblocks - /// to all connected subscribers. - ws_pub: Arc, // context required for execution of blocks during syncing ctx: OpPayloadSyncerCtx, // chain client @@ -59,7 +55,6 @@ where p2p_tx: mpsc::Sender, payload_events_handle: tokio::sync::broadcast::Sender>, ctx: OpPayloadSyncerCtx, - ws_pub: Arc, client: Client, cancel: tokio_util::sync::CancellationToken, ) -> Self { @@ -68,7 +63,6 @@ where p2p_rx, p2p_tx, payload_events_handle, - ws_pub, ctx, client, cancel, @@ -82,7 +76,6 @@ where p2p_tx, payload_events_handle, ctx, - ws_pub, client, cancel, } = self; @@ -105,13 +98,11 @@ where let ctx = ctx.clone(); let client = client.clone(); let payload_events_handle = payload_events_handle.clone(); - let ws_pub = ws_pub.clone(); let cancel = cancel.clone(); // execute the flashblock on a thread where blocking is acceptable, // as it's potentially a heavy operation tokio::task::spawn_blocking(move || { - let metrics = ctx.metrics().clone(); let res = execute_flashblock( payload, ctx, @@ -119,24 +110,11 @@ where cancel, ); match res { - Ok((payload, fb_payload)) => { + Ok((payload, _)) => { tracing::info!(hash = payload.block().hash().to_string(), block_number = payload.block().header().number, "successfully executed received flashblock"); if let Err(e) = payload_events_handle.send(Events::BuiltPayload(payload)) { warn!(e = ?e, "failed to send BuiltPayload event on synced block"); } - - match ws_pub - .publish(&fb_payload) { - Ok(flashblock_byte_size) => { - metrics - .flashblock_byte_size_histogram - .record(flashblock_byte_size as f64); - } - Err(e) => { - tracing::warn!(error = ?e, "failed to publish flashblock to websocket subscribers"); - } - } - } Err(e) => { tracing::error!(error = ?e, "failed to execute received flashblock"); diff --git a/crates/op-rbuilder/src/builders/flashblocks/service.rs b/crates/op-rbuilder/src/builders/flashblocks/service.rs index f947ab4ef..2c1e684bc 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/service.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/service.rs @@ -150,7 +150,6 @@ impl FlashblocksServiceBuilder { outgoing_message_tx, payload_service.payload_events_handle(), syncer_ctx, - ws_pub, ctx.provider().clone(), cancel, ); From 77952e0cae19a17ce67888209d8c39ebb7865c14 Mon Sep 17 00:00:00 2001 From: Tobi Akerele Date: Sun, 9 Nov 2025 23:22:20 -0500 Subject: [PATCH 17/19] fix: Add gas_limit_config field and make block_gas_limit() public - Added gas_limit_config initialization in flashblocks context - Changed block_gas_limit() visibility from pub(super) to pub for flashtestations access - Removed unused Events import Note: Tests currently fail due to rollup-boost dependency version mismatch (op-alloy 0.20.0 vs 0.22.0) --- Cargo.lock | 2515 +++++++++++++---- crates/op-rbuilder/src/builders/context.rs | 2 +- .../src/builders/flashblocks/ctx.rs | 6 +- .../src/builders/flashblocks/payload.rs | 2 +- 4 files changed, 1941 insertions(+), 584 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 58a0e91ff..e51e8b9d1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -299,7 +299,30 @@ dependencies = [ "ethereum_ssz_derive", "serde", "serde_with", - "sha2", + "sha2 0.10.9", + "thiserror 2.0.17", +] + +[[package]] +name = "alloy-evm" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f1bfade4de9f464719b5aca30cf5bb02b9fda7036f0cf43addc3a0e66a0340c" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-hardforks 0.3.5", + "alloy-op-hardforks 0.3.5", + "alloy-primitives 1.4.1", + "alloy-rpc-types-engine", + "alloy-rpc-types-eth", + "alloy-sol-types 1.4.1", + "auto_impl", + "derive_more", + "op-alloy-consensus 0.20.0", + "op-alloy-rpc-types-engine 0.20.0", + "op-revm 10.1.1", + "revm 29.0.1", "thiserror 2.0.17", ] @@ -311,18 +334,18 @@ checksum = "428b58c17ab5f9f71765dc5f116acb6580f599ce243b8ce391de3ba859670c61" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-hardforks", - "alloy-op-hardforks", + "alloy-hardforks 0.4.4", + "alloy-op-hardforks 0.4.4", "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "alloy-rpc-types-eth", "alloy-sol-types 1.4.1", "auto_impl", "derive_more", - "op-alloy-consensus", - "op-alloy-rpc-types-engine", - "op-revm", - "revm", + "op-alloy-consensus 0.22.0", + "op-alloy-rpc-types-engine 0.22.0", + "op-revm 12.0.1", + "revm 31.0.1", "thiserror 2.0.17", ] @@ -340,6 +363,19 @@ dependencies = [ "serde_with", ] +[[package]] +name = "alloy-hardforks" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "889eb3949b58368a09d4f16931c660275ef5fb08e5fbd4a96573b19c7085c41f" +dependencies = [ + "alloy-chains", + "alloy-eip2124", + "alloy-primitives 1.4.1", + "auto_impl", + "dyn-clone", +] + [[package]] name = "alloy-hardforks" version = "0.4.4" @@ -432,6 +468,23 @@ dependencies = [ "serde", ] +[[package]] +name = "alloy-op-evm" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0b6679dc8854285d6c34ef6a9f9ade06dec1f5db8aab96e941d99b8abcefb72" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-evm 0.21.3", + "alloy-op-hardforks 0.3.5", + "alloy-primitives 1.4.1", + "auto_impl", + "op-alloy-consensus 0.20.0", + "op-revm 10.1.1", + "revm 29.0.1", +] + [[package]] name = "alloy-op-evm" version = "0.23.1" @@ -440,16 +493,28 @@ checksum = "eaa49899e2b0e59a5325e2042a6c5bd4c17e1255fce1e66a9312816f52e886f1" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm", - "alloy-op-hardforks", + "alloy-evm 0.23.1", + "alloy-op-hardforks 0.4.4", "alloy-primitives 1.4.1", "auto_impl", - "op-alloy-consensus", - "op-revm", - "revm", + "op-alloy-consensus 0.22.0", + "op-revm 12.0.1", + "revm 31.0.1", "thiserror 2.0.17", ] +[[package]] +name = "alloy-op-hardforks" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "599c1d7dfbccb66603cb93fde00980d12848d32fe5e814f50562104a92df6487" +dependencies = [ + "alloy-chains", + "alloy-hardforks 0.3.5", + "alloy-primitives 1.4.1", + "auto_impl", +] + [[package]] name = "alloy-op-hardforks" version = "0.4.4" @@ -457,7 +522,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95ac97adaba4c26e17192d81f49186ac20c1e844e35a00e169c8d3d58bc84e6b" dependencies = [ "alloy-chains", - "alloy-hardforks", + "alloy-hardforks 0.4.4", "alloy-primitives 1.4.1", "auto_impl", ] @@ -1499,8 +1564,8 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" dependencies = [ - "asn1-rs-derive", - "asn1-rs-impl", + "asn1-rs-derive 0.4.0", + "asn1-rs-impl 0.1.0", "displaydoc", "nom", "num-traits", @@ -1509,6 +1574,22 @@ dependencies = [ "time", ] +[[package]] +name = "asn1-rs" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56624a96882bb8c26d61312ae18cb45868e5a9992ea73c58e45c3101e56a1e60" +dependencies = [ + "asn1-rs-derive 0.6.0", + "asn1-rs-impl 0.2.0", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror 2.0.17", + "time", +] + [[package]] name = "asn1-rs-derive" version = "0.4.0" @@ -1521,6 +1602,18 @@ dependencies = [ "synstructure 0.12.6", ] +[[package]] +name = "asn1-rs-derive" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", + "synstructure 0.13.2", +] + [[package]] name = "asn1-rs-impl" version = "0.1.0" @@ -1532,6 +1625,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "asn1-rs-impl" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "asn1_der" version = "0.7.6" @@ -1554,6 +1658,24 @@ dependencies = [ "zstd-safe", ] +[[package]] +name = "async-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" +dependencies = [ + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix 1.0.8", + "slab", + "windows-sys 0.61.2", +] + [[package]] name = "async-lock" version = "3.4.1" @@ -1609,12 +1731,37 @@ dependencies = [ "rustc_version 0.4.1", ] +[[package]] +name = "asynchronous-codec" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a860072022177f903e59730004fb5dc13db9275b79bb2aef7ba8ce831956c233" +dependencies = [ + "bytes", + "futures-sink", + "futures-util", + "memchr", + "pin-project-lite", +] + [[package]] name = "atomic-waker" version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +[[package]] +name = "attohttpc" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e2cdb6d5ed835199484bb92bb8b3edd526effe995c61732580439c1a67e2e9" +dependencies = [ + "base64 0.22.1", + "http", + "log", + "url", +] + [[package]] name = "aurora-engine-modexp" version = "1.2.0" @@ -2001,6 +2148,24 @@ dependencies = [ "wyz", ] +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + [[package]] name = "block-buffer" version = "0.10.4" @@ -2121,7 +2286,7 @@ dependencies = [ "hashbrown 0.16.0", "indexmap 2.12.0", "once_cell", - "phf", + "phf 0.13.1", "rustc-hash 2.1.1", "static_assertions", ] @@ -2258,7 +2423,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" dependencies = [ - "sha2", + "sha2 0.10.9", "tinyvec", ] @@ -2410,6 +2575,15 @@ dependencies = [ "toml", ] +[[package]] +name = "cbor4ii" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "472931dd4dfcc785075b09be910147f9c6258883fc4591d0dac6116392b2daa6" +dependencies = [ + "serde", +] + [[package]] name = "cc" version = "1.2.15" @@ -2448,6 +2622,30 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "chacha20poly1305" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +dependencies = [ + "aead", + "chacha20", + "cipher", + "poly1305", + "zeroize", +] + [[package]] name = "chrono" version = "0.4.41" @@ -2460,7 +2658,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -2471,6 +2669,7 @@ checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", + "zeroize", ] [[package]] @@ -2564,7 +2763,7 @@ dependencies = [ "hmac", "k256", "serde", - "sha2", + "sha2 0.10.9", "thiserror 1.0.69", ] @@ -2580,7 +2779,7 @@ dependencies = [ "once_cell", "pbkdf2", "rand 0.8.5", - "sha2", + "sha2 0.10.9", "thiserror 1.0.69", ] @@ -2598,7 +2797,7 @@ dependencies = [ "generic-array", "ripemd", "serde", - "sha2", + "sha2 0.10.9", "sha3", "thiserror 1.0.69", ] @@ -3075,10 +3274,10 @@ dependencies = [ "p256", "serde", "serde_json", - "sha2", + "sha2 0.10.9", "sha3", "time", - "x509-parser", + "x509-parser 0.15.1", ] [[package]] @@ -3115,7 +3314,21 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" dependencies = [ - "asn1-rs", + "asn1-rs 0.5.2", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "der-parser" +version = "10.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6" +dependencies = [ + "asn1-rs 0.7.1", "displaydoc", "nom", "num-bigint", @@ -3246,7 +3459,7 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", + "block-buffer 0.10.4", "const-oid", "crypto-common", "subtle", @@ -3361,6 +3574,12 @@ version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" +[[package]] +name = "dtoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" + [[package]] name = "dtor" version = "0.0.6" @@ -3443,7 +3662,7 @@ dependencies = [ "ed25519", "rand_core 0.6.4", "serde", - "sha2", + "sha2 0.10.9", "subtle", "zeroize", ] @@ -3622,17 +3841,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "etcetera" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" -dependencies = [ - "cfg-if", - "home", - "windows-sys 0.48.0", -] - [[package]] name = "etcetera" version = "0.10.0" @@ -3652,7 +3860,7 @@ checksum = "c853bd72c9e5787f8aafc3df2907c2ed03cff3150c3acd94e2e53a98ab70a8ab" dependencies = [ "cpufeatures", "ring", - "sha2", + "sha2 0.10.9", ] [[package]] @@ -3914,6 +4122,16 @@ dependencies = [ "futures-util", ] +[[package]] +name = "futures-bounded" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91f328e7fb845fc832912fb6a34f40cf6d1888c92f974d1893a54e97b5ff542e" +dependencies = [ + "futures-timer", + "futures-util", +] + [[package]] name = "futures-buffered" version = "0.2.12" @@ -3967,6 +4185,7 @@ dependencies = [ "futures-core", "futures-task", "futures-util", + "num_cpus", ] [[package]] @@ -3999,6 +4218,17 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "futures-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" +dependencies = [ + "futures-io", + "rustls", + "rustls-pki-types", +] + [[package]] name = "futures-sink" version = "0.3.31" @@ -4337,6 +4567,7 @@ dependencies = [ "rand 0.9.2", "ring", "serde", + "socket2 0.5.10", "thiserror 2.0.17", "tinyvec", "tokio", @@ -4739,6 +4970,16 @@ dependencies = [ "icu_properties", ] +[[package]] +name = "if-addrs" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cabb0019d51a643781ff15c9c8a3e5dedc365c47211270f4e8f82812fedd8f0a" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "if-addrs" version = "0.14.0" @@ -4749,6 +4990,50 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "if-watch" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf9d64cfcf380606e64f9a0bcf493616b65331199f984151a6fa11a7b3cde38" +dependencies = [ + "async-io", + "core-foundation 0.9.4", + "fnv", + "futures", + "if-addrs 0.10.2", + "ipnet", + "log", + "netlink-packet-core", + "netlink-packet-route", + "netlink-proto", + "netlink-sys", + "rtnetlink", + "system-configuration", + "tokio", + "windows 0.53.0", +] + +[[package]] +name = "igd-next" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "516893339c97f6011282d5825ac94fc1c7aad5cad26bdc2d0cee068c0bf97f97" +dependencies = [ + "async-trait", + "attohttpc", + "bytes", + "futures", + "http", + "http-body-util", + "hyper", + "hyper-util", + "log", + "rand 0.9.2", + "tokio", + "url", + "xmltree", +] + [[package]] name = "impl-codec" version = "0.6.0" @@ -5333,7 +5618,7 @@ dependencies = [ "elliptic-curve", "once_cell", "serdect", - "sha2", + "sha2 0.10.9", "signature", ] @@ -5423,24 +5708,396 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] -name = "libp2p-identity" -version = "0.2.12" +name = "libp2p" +version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3104e13b51e4711ff5738caa1fb54467c8604c2e94d607e27745bcf709068774" +checksum = "ce71348bf5838e46449ae240631117b487073d5f347c06d434caddcb91dceb5a" dependencies = [ - "asn1_der", - "bs58", - "ed25519-dalek", - "hkdf", - "k256", - "multihash", - "quick-protobuf", - "sha2", + "bytes", + "either", + "futures", + "futures-timer", + "getrandom 0.2.16", + "libp2p-allow-block-list", + "libp2p-autonat", + "libp2p-connection-limits", + "libp2p-core", + "libp2p-dns", + "libp2p-identify", + "libp2p-identity", + "libp2p-mdns", + "libp2p-metrics", + "libp2p-noise", + "libp2p-ping", + "libp2p-quic", + "libp2p-request-response", + "libp2p-swarm", + "libp2p-tcp", + "libp2p-upnp", + "libp2p-yamux", + "multiaddr", + "pin-project", + "rw-stream-sink", + "thiserror 2.0.17", +] + +[[package]] +name = "libp2p-allow-block-list" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d16ccf824ee859ca83df301e1c0205270206223fd4b1f2e512a693e1912a8f4a" +dependencies = [ + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", +] + +[[package]] +name = "libp2p-autonat" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fab5e25c49a7d48dac83d95d8f3bac0a290d8a5df717012f6e34ce9886396c0b" +dependencies = [ + "async-trait", + "asynchronous-codec", + "either", + "futures", + "futures-bounded", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-request-response", + "libp2p-swarm", + "quick-protobuf", + "quick-protobuf-codec", + "rand 0.8.5", + "rand_core 0.6.4", + "thiserror 2.0.17", + "tracing", + "web-time", +] + +[[package]] +name = "libp2p-connection-limits" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18b8b607cf3bfa2f8c57db9c7d8569a315d5cc0a282e6bfd5ebfc0a9840b2a0" +dependencies = [ + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", +] + +[[package]] +name = "libp2p-core" +version = "0.43.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d28e2d2def7c344170f5c6450c0dbe3dfef655610dbfde2f6ac28a527abbe36" +dependencies = [ + "either", + "fnv", + "futures", + "futures-timer", + "libp2p-identity", + "multiaddr", + "multihash", + "multistream-select", + "parking_lot", + "pin-project", + "quick-protobuf", + "rand 0.8.5", + "rw-stream-sink", + "thiserror 2.0.17", + "tracing", + "unsigned-varint 0.8.0", + "web-time", +] + +[[package]] +name = "libp2p-dns" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b770c1c8476736ca98c578cba4b505104ff8e842c2876b528925f9766379f9a" +dependencies = [ + "async-trait", + "futures", + "hickory-resolver", + "libp2p-core", + "libp2p-identity", + "parking_lot", + "smallvec", + "tracing", +] + +[[package]] +name = "libp2p-identify" +version = "0.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ab792a8b68fdef443a62155b01970c81c3aadab5e659621b063ef252a8e65e8" +dependencies = [ + "asynchronous-codec", + "either", + "futures", + "futures-bounded", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "quick-protobuf", + "quick-protobuf-codec", + "smallvec", + "thiserror 2.0.17", + "tracing", +] + +[[package]] +name = "libp2p-identity" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3104e13b51e4711ff5738caa1fb54467c8604c2e94d607e27745bcf709068774" +dependencies = [ + "asn1_der", + "bs58", + "ed25519-dalek", + "hkdf", + "k256", + "multihash", + "quick-protobuf", + "rand 0.8.5", + "sha2 0.10.9", "thiserror 2.0.17", "tracing", "zeroize", ] +[[package]] +name = "libp2p-mdns" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c66872d0f1ffcded2788683f76931be1c52e27f343edb93bc6d0bcd8887be443" +dependencies = [ + "futures", + "hickory-proto", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "smallvec", + "socket2 0.5.10", + "tokio", + "tracing", +] + +[[package]] +name = "libp2p-metrics" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "805a555148522cb3414493a5153451910cb1a146c53ffbf4385708349baf62b7" +dependencies = [ + "futures", + "libp2p-core", + "libp2p-identify", + "libp2p-identity", + "libp2p-ping", + "libp2p-swarm", + "pin-project", + "prometheus-client", + "web-time", +] + +[[package]] +name = "libp2p-noise" +version = "0.46.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc73eacbe6462a0eb92a6527cac6e63f02026e5407f8831bde8293f19217bfbf" +dependencies = [ + "asynchronous-codec", + "bytes", + "futures", + "libp2p-core", + "libp2p-identity", + "multiaddr", + "multihash", + "quick-protobuf", + "rand 0.8.5", + "snow", + "static_assertions", + "thiserror 2.0.17", + "tracing", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "libp2p-ping" +version = "0.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74bb7fcdfd9fead4144a3859da0b49576f171a8c8c7c0bfc7c541921d25e60d3" +dependencies = [ + "futures", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "tracing", + "web-time", +] + +[[package]] +name = "libp2p-quic" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dc448b2de9f4745784e3751fe8bc6c473d01b8317edd5ababcb0dec803d843f" +dependencies = [ + "futures", + "futures-timer", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-tls", + "quinn", + "rand 0.8.5", + "ring", + "rustls", + "socket2 0.5.10", + "thiserror 2.0.17", + "tokio", + "tracing", +] + +[[package]] +name = "libp2p-request-response" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9f1cca83488b90102abac7b67d5c36fc65bc02ed47620228af7ed002e6a1478" +dependencies = [ + "async-trait", + "cbor4ii", + "futures", + "futures-bounded", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "serde", + "smallvec", + "tracing", +] + +[[package]] +name = "libp2p-stream" +version = "0.4.0-alpha" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6bd8025c80205ec2810cfb28b02f362ab48a01bee32c50ab5f12761e033464" +dependencies = [ + "futures", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "tracing", +] + +[[package]] +name = "libp2p-swarm" +version = "0.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aa762e5215919a34e31c35d4b18bf2e18566ecab7f8a3d39535f4a3068f8b62" +dependencies = [ + "either", + "fnv", + "futures", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm-derive", + "lru 0.12.5", + "multistream-select", + "rand 0.8.5", + "smallvec", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "libp2p-swarm-derive" +version = "0.35.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd297cf53f0cb3dee4d2620bb319ae47ef27c702684309f682bdb7e55a18ae9c" +dependencies = [ + "heck", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "libp2p-tcp" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65b4e030c52c46c8d01559b2b8ca9b7c4185f10576016853129ca1fe5cd1a644" +dependencies = [ + "futures", + "futures-timer", + "if-watch", + "libc", + "libp2p-core", + "socket2 0.5.10", + "tokio", + "tracing", +] + +[[package]] +name = "libp2p-tls" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96ff65a82e35375cbc31ebb99cacbbf28cb6c4fefe26bf13756ddcf708d40080" +dependencies = [ + "futures", + "futures-rustls", + "libp2p-core", + "libp2p-identity", + "rcgen", + "ring", + "rustls", + "rustls-webpki", + "thiserror 2.0.17", + "x509-parser 0.17.0", + "yasna", +] + +[[package]] +name = "libp2p-upnp" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4757e65fe69399c1a243bbb90ec1ae5a2114b907467bf09f3575e899815bb8d3" +dependencies = [ + "futures", + "futures-timer", + "igd-next", + "libp2p-core", + "libp2p-swarm", + "tokio", + "tracing", +] + +[[package]] +name = "libp2p-yamux" +version = "0.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f15df094914eb4af272acf9adaa9e287baa269943f32ea348ba29cfb9bfc60d8" +dependencies = [ + "either", + "futures", + "libp2p-core", + "thiserror 2.0.17", + "tracing", + "yamux 0.12.1", + "yamux 0.13.8", +] + [[package]] name = "libproc" version = "0.14.10" @@ -5463,6 +6120,52 @@ dependencies = [ "redox_syscall 0.5.17", ] +[[package]] +name = "libsecp256k1" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79019718125edc905a079a70cfa5f3820bc76139fc91d6f9abc27ea2a887139" +dependencies = [ + "arrayref", + "base64 0.22.1", + "digest 0.9.0", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand 0.8.5", + "serde", + "sha2 0.9.9", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +dependencies = [ + "libsecp256k1-core", +] + [[package]] name = "libz-sys" version = "1.1.22" @@ -5911,7 +6614,7 @@ dependencies = [ "percent-encoding", "serde", "static_assertions", - "unsigned-varint", + "unsigned-varint 0.8.0", "url", ] @@ -5921,45 +6624,123 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" dependencies = [ - "base-x", - "data-encoding", - "data-encoding-macro", + "base-x", + "data-encoding", + "data-encoding-macro", +] + +[[package]] +name = "multihash" +version = "0.19.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" +dependencies = [ + "core2", + "unsigned-varint 0.8.0", +] + +[[package]] +name = "multistream-select" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea0df8e5eec2298a62b326ee4f0d7fe1a6b90a09dfcf9df37b38f947a8c42f19" +dependencies = [ + "bytes", + "futures", + "log", + "pin-project", + "smallvec", + "unsigned-varint 0.7.2", +] + +[[package]] +name = "nanoid" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ffa00dec017b5b1a8b7cf5e2c008bfda1aa7e0697ac1508b491fdf2622fb4d8" +dependencies = [ + "rand 0.8.5", +] + +[[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 2.11.1", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "netlink-packet-core" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" +dependencies = [ + "anyhow", + "byteorder", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-route" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053998cea5a306971f88580d0829e90f270f940befd7cf928da179d4187a5a66" +dependencies = [ + "anyhow", + "bitflags 1.3.2", + "byteorder", + "libc", + "netlink-packet-core", + "netlink-packet-utils", ] [[package]] -name = "multihash" -version = "0.19.3" +name = "netlink-packet-utils" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" +checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" dependencies = [ - "core2", - "unsigned-varint", + "anyhow", + "byteorder", + "paste", + "thiserror 1.0.69", ] [[package]] -name = "nanoid" -version = "0.4.0" +name = "netlink-proto" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ffa00dec017b5b1a8b7cf5e2c008bfda1aa7e0697ac1508b491fdf2622fb4d8" +checksum = "72452e012c2f8d612410d89eea01e2d9b56205274abb35d53f60200b2ec41d60" dependencies = [ - "rand 0.8.5", + "bytes", + "futures", + "log", + "netlink-packet-core", + "netlink-sys", + "thiserror 2.0.17", ] [[package]] -name = "native-tls" -version = "0.2.14" +name = "netlink-sys" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" dependencies = [ + "bytes", + "futures", "libc", "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework 2.11.1", - "security-framework-sys", - "tempfile", + "tokio", ] [[package]] @@ -5971,6 +6752,23 @@ dependencies = [ "smallvec", ] +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + [[package]] name = "nom" version = "7.1.3" @@ -6214,7 +7012,16 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ - "asn1-rs", + "asn1-rs 0.5.2", +] + +[[package]] +name = "oid-registry" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f40cff3dde1b6087cc5d5f5d4d65712f34016a03ed60e9c08dcc392736b5b7" +dependencies = [ + "asn1-rs 0.7.1", ] [[package]] @@ -6233,6 +7040,22 @@ version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +[[package]] +name = "op-alloy-consensus" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a501241474c3118833d6195312ae7eb7cc90bbb0d5f524cbb0b06619e49ff67" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives 1.4.1", + "alloy-rlp", + "alloy-serde", + "derive_more", + "serde", + "thiserror 2.0.17", +] + [[package]] name = "op-alloy-consensus" version = "0.22.0" @@ -6271,8 +7094,8 @@ dependencies = [ "alloy-provider", "alloy-rpc-types-eth", "alloy-signer", - "op-alloy-consensus", - "op-alloy-rpc-types", + "op-alloy-consensus 0.22.0", + "op-alloy-rpc-types 0.22.0", ] [[package]] @@ -6285,6 +7108,25 @@ dependencies = [ "jsonrpsee 0.26.0", ] +[[package]] +name = "op-alloy-rpc-types" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "753d6f6b03beca1ba9cbd344c05fee075a2ce715ee9d61981c10b9c764a824a2" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-network-primitives", + "alloy-primitives 1.4.1", + "alloy-rpc-types-eth", + "alloy-serde", + "derive_more", + "op-alloy-consensus 0.20.0", + "serde", + "serde_json", + "thiserror 2.0.17", +] + [[package]] name = "op-alloy-rpc-types" version = "0.22.0" @@ -6298,12 +7140,33 @@ dependencies = [ "alloy-rpc-types-eth", "alloy-serde", "derive_more", - "op-alloy-consensus", + "op-alloy-consensus 0.22.0", "serde", "serde_json", "thiserror 2.0.17", ] +[[package]] +name = "op-alloy-rpc-types-engine" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14e50c94013a1d036a529df259151991dbbd6cf8dc215e3b68b784f95eec60e6" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives 1.4.1", + "alloy-rlp", + "alloy-rpc-types-engine", + "alloy-serde", + "derive_more", + "ethereum_ssz", + "ethereum_ssz_derive", + "op-alloy-consensus 0.20.0", + "serde", + "snap", + "thiserror 2.0.17", +] + [[package]] name = "op-alloy-rpc-types-engine" version = "0.22.0" @@ -6319,7 +7182,7 @@ dependencies = [ "derive_more", "ethereum_ssz", "ethereum_ssz_derive", - "op-alloy-consensus", + "op-alloy-consensus 0.22.0", "serde", "snap", "thiserror 2.0.17", @@ -6327,15 +7190,15 @@ dependencies = [ [[package]] name = "op-rbuilder" -version = "0.2.6" +version = "0.2.8" dependencies = [ "alloy-consensus", "alloy-contract", "alloy-eips", - "alloy-evm", + "alloy-evm 0.23.1", "alloy-json-rpc", "alloy-network", - "alloy-op-evm", + "alloy-op-evm 0.23.1", "alloy-primitives 1.4.1", "alloy-provider", "alloy-rpc-client", @@ -6373,13 +7236,14 @@ dependencies = [ "metrics", "moka", "nanoid", - "op-alloy-consensus", + "op-alloy-consensus 0.22.0", "op-alloy-flz", "op-alloy-network", - "op-alloy-rpc-types", - "op-alloy-rpc-types-engine", - "op-revm", + "op-alloy-rpc-types 0.22.0", + "op-alloy-rpc-types-engine 0.22.0", + "op-revm 12.0.1", "opentelemetry 0.31.0", + "p2p", "parking_lot", "rand 0.9.2", "reqwest", @@ -6429,7 +7293,7 @@ dependencies = [ "reth-tracing-otlp", "reth-transaction-pool 1.9.1", "reth-trie 1.9.1", - "revm", + "revm 31.0.1", "rlimit", "rollup-boost", "secp256k1 0.30.0", @@ -6441,7 +7305,7 @@ dependencies = [ "shellexpand", "tar", "tempfile", - "testcontainers 0.24.0", + "testcontainers", "thiserror 1.0.69", "tikv-jemallocator", "time", @@ -6457,6 +7321,17 @@ dependencies = [ "vergen-git2", ] +[[package]] +name = "op-revm" +version = "10.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826f43a5b1613c224f561847c152bfbaefcb593a9ae2c612ff4dc4661c6e625f" +dependencies = [ + "auto_impl", + "revm 29.0.1", + "serde", +] + [[package]] name = "op-revm" version = "12.0.1" @@ -6464,7 +7339,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcd8cb3274e87936b595eb2247ad3bda146695fceb7159afa76010529af53553" dependencies = [ "auto_impl", - "revm", + "revm 31.0.1", "serde", ] @@ -6708,7 +7583,26 @@ dependencies = [ "ecdsa", "elliptic-curve", "primeorder", - "sha2", + "sha2 0.10.9", +] + +[[package]] +name = "p2p" +version = "0.2.8" +dependencies = [ + "derive_more", + "eyre", + "futures", + "futures-util", + "hex", + "libp2p", + "libp2p-stream", + "multiaddr", + "serde", + "serde_json", + "tokio", + "tokio-util", + "tracing", ] [[package]] @@ -6867,17 +7761,37 @@ dependencies = [ "rustc_version 0.4.1", ] +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros 0.11.3", + "phf_shared 0.11.3", +] + [[package]] name = "phf" version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" dependencies = [ - "phf_macros", - "phf_shared", + "phf_macros 0.13.1", + "phf_shared 0.13.1", "serde", ] +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared 0.11.3", + "rand 0.8.5", +] + [[package]] name = "phf_generator" version = "0.13.1" @@ -6885,7 +7799,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" dependencies = [ "fastrand", - "phf_shared", + "phf_shared 0.13.1", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] @@ -6894,13 +7821,22 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" dependencies = [ - "phf_generator", - "phf_shared", + "phf_generator 0.13.1", + "phf_shared 0.13.1", "proc-macro2", "quote", "syn 2.0.106", ] +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher", +] + [[package]] name = "phf_shared" version = "0.13.1" @@ -7002,6 +7938,31 @@ dependencies = [ "crunchy", ] +[[package]] +name = "polling" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix 1.0.8", + "windows-sys 0.61.2", +] + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug", + "universal-hash", +] + [[package]] name = "polyval" version = "0.6.2" @@ -7149,6 +8110,29 @@ dependencies = [ "hex", ] +[[package]] +name = "prometheus-client" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf41c1a7c32ed72abe5082fb19505b969095c12da9f5732a4bc9878757fd087c" +dependencies = [ + "dtoa", + "itoa", + "parking_lot", + "prometheus-client-derive-encode", +] + +[[package]] +name = "prometheus-client-derive-encode" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "proptest" version = "1.7.0" @@ -7288,6 +8272,19 @@ dependencies = [ "byteorder", ] +[[package]] +name = "quick-protobuf-codec" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15a0580ab32b169745d7a39db2ba969226ca16738931be152a3209b409de2474" +dependencies = [ + "asynchronous-codec", + "bytes", + "quick-protobuf", + "thiserror 1.0.69", + "unsigned-varint 0.8.0", +] + [[package]] name = "quinn" version = "0.11.8" @@ -7296,6 +8293,7 @@ checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" dependencies = [ "bytes", "cfg_aliases", + "futures-io", "pin-project-lite", "quinn-proto", "quinn-udp", @@ -7504,6 +8502,19 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "rcgen" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2" +dependencies = [ + "pem", + "ring", + "rustls-pki-types", + "time", + "yasna", +] + [[package]] name = "recvmsg" version = "1.0.0" @@ -7712,8 +8723,8 @@ dependencies = [ [[package]] name = "reth-basic-payload-builder" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7721,15 +8732,15 @@ dependencies = [ "futures-core", "futures-util", "metrics", - "reth-chain-state 1.9.0", - "reth-metrics 1.9.0", - "reth-payload-builder 1.9.0", - "reth-payload-builder-primitives 1.9.0", - "reth-payload-primitives 1.9.0", - "reth-primitives-traits 1.9.0", - "reth-revm 1.9.0", - "reth-storage-api 1.9.0", - "reth-tasks 1.9.0", + "reth-chain-state 1.8.3", + "reth-metrics 1.8.3", + "reth-payload-builder 1.8.3", + "reth-payload-builder-primitives 1.8.3", + "reth-payload-primitives 1.8.3", + "reth-primitives-traits 1.8.3", + "reth-revm 1.8.3", + "reth-storage-api 1.8.3", + "reth-tasks 1.8.3", "tokio", "tracing", ] @@ -7760,8 +8771,8 @@ dependencies = [ [[package]] name = "reth-chain-state" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7770,15 +8781,15 @@ dependencies = [ "metrics", "parking_lot", "pin-project", - "reth-chainspec 1.9.0", - "reth-errors 1.9.0", - "reth-ethereum-primitives 1.9.0", - "reth-execution-types 1.9.0", - "reth-metrics 1.9.0", - "reth-primitives-traits 1.9.0", - "reth-storage-api 1.9.0", - "reth-trie 1.9.0", - "revm-database", + "reth-chainspec 1.8.3", + "reth-errors 1.8.3", + "reth-ethereum-primitives 1.8.3", + "reth-execution-types 1.8.3", + "reth-metrics 1.8.3", + "reth-primitives-traits 1.8.3", + "reth-storage-api 1.8.3", + "reth-trie 1.8.3", + "revm-database 7.0.5", "tokio", "tokio-stream", "tracing", @@ -7807,8 +8818,8 @@ dependencies = [ "reth-primitives-traits 1.9.1", "reth-storage-api 1.9.1", "reth-trie 1.9.1", - "revm-database", - "revm-state", + "revm-database 9.0.4", + "revm-state 8.1.1", "serde", "tokio", "tokio-stream", @@ -7817,21 +8828,21 @@ dependencies = [ [[package]] name = "reth-chainspec" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", - "alloy-evm", + "alloy-evm 0.21.3", "alloy-genesis", "alloy-primitives 1.4.1", "alloy-trie", "auto_impl", "derive_more", - "reth-ethereum-forks 1.9.0", - "reth-network-peers 1.9.0", - "reth-primitives-traits 1.9.0", + "reth-ethereum-forks 1.8.3", + "reth-network-peers 1.8.3", + "reth-primitives-traits 1.8.3", "serde_json", ] @@ -7843,7 +8854,7 @@ dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", - "alloy-evm", + "alloy-evm 0.23.1", "alloy-genesis", "alloy-primitives 1.4.1", "alloy-trie", @@ -7974,8 +8985,8 @@ dependencies = [ [[package]] name = "reth-codecs" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -7984,9 +8995,9 @@ dependencies = [ "alloy-trie", "bytes", "modular-bitfield", - "op-alloy-consensus", - "reth-codecs-derive 1.9.0", - "reth-zstd-compressors 1.9.0", + "op-alloy-consensus 0.20.0", + "reth-codecs-derive 1.8.3", + "reth-zstd-compressors 1.8.3", "serde", ] @@ -8003,7 +9014,7 @@ dependencies = [ "arbitrary", "bytes", "modular-bitfield", - "op-alloy-consensus", + "op-alloy-consensus 0.22.0", "reth-codecs-derive 1.9.1", "reth-zstd-compressors 1.9.1", "serde", @@ -8012,9 +9023,10 @@ dependencies = [ [[package]] name = "reth-codecs-derive" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ + "convert_case", "proc-macro2", "quote", "syn 2.0.106", @@ -8047,14 +9059,14 @@ dependencies = [ [[package]] name = "reth-consensus" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", "auto_impl", - "reth-execution-types 1.9.0", - "reth-primitives-traits 1.9.0", + "reth-execution-types 1.8.3", + "reth-primitives-traits 1.8.3", "thiserror 2.0.17", ] @@ -8073,14 +9085,14 @@ dependencies = [ [[package]] name = "reth-consensus-common" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", - "reth-chainspec 1.9.0", - "reth-consensus 1.9.0", - "reth-primitives-traits 1.9.0", + "reth-chainspec 1.8.3", + "reth-consensus 1.8.3", + "reth-primitives-traits 1.8.3", ] [[package]] @@ -8207,12 +9219,12 @@ dependencies = [ [[package]] name = "reth-db-models" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-eips", "alloy-primitives 1.4.1", - "reth-primitives-traits 1.9.0", + "reth-primitives-traits 1.8.3", ] [[package]] @@ -8358,7 +9370,7 @@ dependencies = [ "rand 0.8.5", "reth-network-peers 1.9.1", "secp256k1 0.30.0", - "sha2", + "sha2 0.10.9", "sha3", "thiserror 2.0.17", "tokio", @@ -8377,7 +9389,7 @@ dependencies = [ "alloy-rpc-types-engine", "eyre", "futures-util", - "op-alloy-rpc-types-engine", + "op-alloy-rpc-types-engine 0.22.0", "reth-chainspec 1.9.1", "reth-engine-primitives 1.9.1", "reth-ethereum-engine-primitives 1.9.1", @@ -8393,23 +9405,23 @@ dependencies = [ [[package]] name = "reth-engine-primitives" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "auto_impl", - "reth-chain-state 1.9.0", - "reth-errors 1.9.0", - "reth-ethereum-primitives 1.9.0", - "reth-evm 1.9.0", - "reth-execution-types 1.9.0", - "reth-payload-builder-primitives 1.9.0", - "reth-payload-primitives 1.9.0", - "reth-primitives-traits 1.9.0", - "reth-trie-common 1.9.0", + "reth-chain-state 1.8.3", + "reth-errors 1.8.3", + "reth-ethereum-primitives 1.8.3", + "reth-evm 1.8.3", + "reth-execution-types 1.8.3", + "reth-payload-builder-primitives 1.8.3", + "reth-payload-primitives 1.8.3", + "reth-primitives-traits 1.8.3", + "reth-trie-common 1.8.3", "serde", "thiserror 2.0.17", ] @@ -8468,7 +9480,7 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm", + "alloy-evm 0.23.1", "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-engine", @@ -8507,8 +9519,8 @@ dependencies = [ "reth-trie-parallel", "reth-trie-sparse 1.9.1", "reth-trie-sparse-parallel", - "revm", - "revm-primitives", + "revm 31.0.1", + "revm-primitives 21.0.2", "schnellru", "smallvec", "thiserror 2.0.17", @@ -8571,7 +9583,7 @@ dependencies = [ "futures-util", "reqwest", "reth-fs-util 1.9.1", - "sha2", + "sha2 0.10.9", "tokio", ] @@ -8599,12 +9611,12 @@ dependencies = [ [[package]] name = "reth-errors" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ - "reth-consensus 1.9.0", - "reth-execution-errors 1.9.0", - "reth-storage-errors 1.9.0", + "reth-consensus 1.8.3", + "reth-execution-errors 1.8.3", + "reth-storage-errors 1.8.3", "thiserror 2.0.17", ] @@ -8649,21 +9661,21 @@ dependencies = [ [[package]] name = "reth-eth-wire-types" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", - "alloy-hardforks", + "alloy-hardforks 0.3.5", "alloy-primitives 1.4.1", "alloy-rlp", "bytes", "derive_more", - "reth-chainspec 1.9.0", - "reth-codecs-derive 1.9.0", - "reth-ethereum-primitives 1.9.0", - "reth-primitives-traits 1.9.0", + "reth-chainspec 1.8.3", + "reth-codecs-derive 1.8.3", + "reth-ethereum-primitives 1.8.3", + "reth-primitives-traits 1.8.3", "serde", "thiserror 2.0.17", ] @@ -8676,7 +9688,7 @@ dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", - "alloy-hardforks", + "alloy-hardforks 0.4.4", "alloy-primitives 1.4.1", "alloy-rlp", "bytes", @@ -8731,19 +9743,19 @@ dependencies = [ [[package]] name = "reth-ethereum-engine-primitives" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-eips", "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-engine", - "reth-engine-primitives 1.9.0", - "reth-ethereum-primitives 1.9.0", - "reth-payload-primitives 1.9.0", - "reth-primitives-traits 1.9.0", + "reth-engine-primitives 1.8.3", + "reth-ethereum-primitives 1.8.3", + "reth-payload-primitives 1.8.3", + "reth-primitives-traits 1.8.3", "serde", - "sha2", + "sha2 0.10.9", "thiserror 2.0.17", ] @@ -8761,17 +9773,17 @@ dependencies = [ "reth-payload-primitives 1.9.1", "reth-primitives-traits 1.9.1", "serde", - "sha2", + "sha2 0.10.9", "thiserror 2.0.17", ] [[package]] name = "reth-ethereum-forks" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-eip2124", - "alloy-hardforks", + "alloy-hardforks 0.3.5", "alloy-primitives 1.4.1", "auto_impl", "once_cell", @@ -8784,7 +9796,7 @@ version = "1.9.1" source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03235164855c" dependencies = [ "alloy-eip2124", - "alloy-hardforks", + "alloy-hardforks 0.4.4", "alloy-primitives 1.4.1", "auto_impl", "once_cell", @@ -8816,14 +9828,14 @@ dependencies = [ "reth-revm 1.9.1", "reth-storage-api 1.9.1", "reth-transaction-pool 1.9.1", - "revm", + "revm 31.0.1", "tracing", ] [[package]] name = "reth-ethereum-primitives" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8831,8 +9843,8 @@ dependencies = [ "alloy-rlp", "alloy-rpc-types-eth", "alloy-serde", - "reth-primitives-traits 1.9.0", - "reth-zstd-compressors 1.9.0", + "reth-primitives-traits 1.8.3", + "reth-zstd-compressors 1.8.3", "serde", "serde_with", ] @@ -8869,23 +9881,23 @@ dependencies = [ [[package]] name = "reth-evm" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm", + "alloy-evm 0.21.3", "alloy-primitives 1.4.1", "auto_impl", "derive_more", "futures-util", - "reth-execution-errors 1.9.0", - "reth-execution-types 1.9.0", - "reth-primitives-traits 1.9.0", - "reth-storage-api 1.9.0", - "reth-storage-errors 1.9.0", - "reth-trie-common 1.9.0", - "revm", + "reth-execution-errors 1.8.3", + "reth-execution-types 1.8.3", + "reth-primitives-traits 1.8.3", + "reth-storage-api 1.8.3", + "reth-storage-errors 1.8.3", + "reth-trie-common 1.8.3", + "revm 29.0.1", ] [[package]] @@ -8895,7 +9907,7 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm", + "alloy-evm 0.23.1", "alloy-primitives 1.4.1", "auto_impl", "derive_more", @@ -8908,7 +9920,7 @@ dependencies = [ "reth-storage-api 1.9.1", "reth-storage-errors 1.9.1", "reth-trie-common 1.9.1", - "revm", + "revm 31.0.1", ] [[package]] @@ -8918,7 +9930,7 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm", + "alloy-evm 0.23.1", "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "reth-chainspec 1.9.1", @@ -8928,19 +9940,19 @@ dependencies = [ "reth-execution-types 1.9.1", "reth-primitives-traits 1.9.1", "reth-storage-errors 1.9.1", - "revm", + "revm 31.0.1", ] [[package]] name = "reth-execution-errors" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ - "alloy-evm", + "alloy-evm 0.21.3", "alloy-primitives 1.4.1", "alloy-rlp", "nybbles", - "reth-storage-errors 1.9.0", + "reth-storage-errors 1.8.3", "thiserror 2.0.17", ] @@ -8949,7 +9961,7 @@ name = "reth-execution-errors" version = "1.9.1" source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03235164855c" dependencies = [ - "alloy-evm", + "alloy-evm 0.23.1", "alloy-primitives 1.4.1", "alloy-rlp", "nybbles", @@ -8959,18 +9971,18 @@ dependencies = [ [[package]] name = "reth-execution-types" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm", + "alloy-evm 0.21.3", "alloy-primitives 1.4.1", "derive_more", - "reth-ethereum-primitives 1.9.0", - "reth-primitives-traits 1.9.0", - "reth-trie-common 1.9.0", - "revm", + "reth-ethereum-primitives 1.8.3", + "reth-primitives-traits 1.8.3", + "reth-trie-common 1.8.3", + "revm 29.0.1", ] [[package]] @@ -8980,13 +9992,13 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm", + "alloy-evm 0.23.1", "alloy-primitives 1.4.1", "derive_more", "reth-ethereum-primitives 1.9.1", "reth-primitives-traits 1.9.1", "reth-trie-common 1.9.1", - "revm", + "revm 31.0.1", "serde", "serde_with", ] @@ -9045,8 +10057,8 @@ dependencies = [ [[package]] name = "reth-fs-util" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "serde", "serde_json", @@ -9084,9 +10096,9 @@ dependencies = [ "reth-rpc-api", "reth-tracing", "reth-trie 1.9.1", - "revm", - "revm-bytecode", - "revm-database", + "revm 31.0.1", + "revm-bytecode 7.1.1", + "revm-database 9.0.4", "serde", "serde_json", ] @@ -9138,8 +10150,8 @@ dependencies = [ [[package]] name = "reth-metrics" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "metrics", "metrics-derive", @@ -9171,7 +10183,7 @@ version = "1.9.1" source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03235164855c" dependencies = [ "futures-util", - "if-addrs", + "if-addrs 0.14.0", "reqwest", "serde_with", "thiserror 2.0.17", @@ -9284,8 +10296,8 @@ dependencies = [ [[package]] name = "reth-network-peers" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", "alloy-rlp", @@ -9519,7 +10531,7 @@ dependencies = [ "reth-rpc-server-types", "reth-tracing", "reth-transaction-pool 1.9.1", - "revm", + "revm 31.0.1", "tokio", ] @@ -9607,24 +10619,24 @@ dependencies = [ [[package]] name = "reth-optimism-chainspec" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", "alloy-genesis", - "alloy-hardforks", + "alloy-hardforks 0.3.5", "alloy-primitives 1.4.1", "derive_more", - "op-alloy-consensus", - "op-alloy-rpc-types", - "reth-chainspec 1.9.0", - "reth-ethereum-forks 1.9.0", - "reth-network-peers 1.9.0", - "reth-optimism-forks 1.9.0", - "reth-optimism-primitives 1.9.0", - "reth-primitives-traits 1.9.0", + "op-alloy-consensus 0.20.0", + "op-alloy-rpc-types 0.20.0", + "reth-chainspec 1.8.3", + "reth-ethereum-forks 1.8.3", + "reth-network-peers 1.8.3", + "reth-optimism-forks 1.8.3", + "reth-optimism-primitives 1.8.3", + "reth-primitives-traits 1.8.3", "serde_json", ] @@ -9637,12 +10649,12 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-genesis", - "alloy-hardforks", + "alloy-hardforks 0.4.4", "alloy-primitives 1.4.1", "derive_more", "miniz_oxide", - "op-alloy-consensus", - "op-alloy-rpc-types", + "op-alloy-consensus 0.22.0", + "op-alloy-rpc-types 0.22.0", "paste", "reth-chainspec 1.9.1", "reth-ethereum-forks 1.9.1", @@ -9669,7 +10681,7 @@ dependencies = [ "derive_more", "eyre", "futures-util", - "op-alloy-consensus", + "op-alloy-consensus 0.22.0", "reth-chainspec 1.9.1", "reth-cli", "reth-cli-commands", @@ -9708,25 +10720,25 @@ dependencies = [ [[package]] name = "reth-optimism-consensus" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives 1.4.1", "alloy-trie", - "reth-chainspec 1.9.0", - "reth-consensus 1.9.0", - "reth-consensus-common 1.9.0", - "reth-execution-types 1.9.0", - "reth-optimism-chainspec 1.9.0", - "reth-optimism-forks 1.9.0", - "reth-optimism-primitives 1.9.0", - "reth-primitives-traits 1.9.0", - "reth-storage-api 1.9.0", - "reth-storage-errors 1.9.0", - "reth-trie-common 1.9.0", - "revm", + "reth-chainspec 1.8.3", + "reth-consensus 1.8.3", + "reth-consensus-common 1.8.3", + "reth-execution-types 1.8.3", + "reth-optimism-chainspec 1.8.3", + "reth-optimism-forks 1.8.3", + "reth-optimism-primitives 1.8.3", + "reth-primitives-traits 1.8.3", + "reth-storage-api 1.8.3", + "reth-storage-errors 1.8.3", + "reth-trie-common 1.8.3", + "revm 29.0.1", "thiserror 2.0.17", "tracing", ] @@ -9751,35 +10763,35 @@ dependencies = [ "reth-storage-api 1.9.1", "reth-storage-errors 1.9.1", "reth-trie-common 1.9.1", - "revm", + "revm 31.0.1", "thiserror 2.0.17", "tracing", ] [[package]] name = "reth-optimism-evm" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm", - "alloy-op-evm", + "alloy-evm 0.21.3", + "alloy-op-evm 0.21.3", "alloy-primitives 1.4.1", - "op-alloy-consensus", - "op-alloy-rpc-types-engine", - "op-revm", - "reth-chainspec 1.9.0", - "reth-evm 1.9.0", - "reth-execution-errors 1.9.0", - "reth-execution-types 1.9.0", - "reth-optimism-chainspec 1.9.0", - "reth-optimism-consensus 1.9.0", - "reth-optimism-forks 1.9.0", - "reth-optimism-primitives 1.9.0", - "reth-primitives-traits 1.9.0", - "reth-storage-errors 1.9.0", - "revm", + "op-alloy-consensus 0.20.0", + "op-alloy-rpc-types-engine 0.20.0", + "op-revm 10.1.1", + "reth-chainspec 1.8.3", + "reth-evm 1.8.3", + "reth-execution-errors 1.8.3", + "reth-execution-types 1.8.3", + "reth-optimism-chainspec 1.8.3", + "reth-optimism-consensus 1.8.3", + "reth-optimism-forks 1.8.3", + "reth-optimism-primitives 1.8.3", + "reth-primitives-traits 1.8.3", + "reth-storage-errors 1.8.3", + "revm 29.0.1", "thiserror 2.0.17", ] @@ -9790,12 +10802,12 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm", - "alloy-op-evm", + "alloy-evm 0.23.1", + "alloy-op-evm 0.23.1", "alloy-primitives 1.4.1", - "op-alloy-consensus", - "op-alloy-rpc-types-engine", - "op-revm", + "op-alloy-consensus 0.22.0", + "op-alloy-rpc-types-engine 0.22.0", + "op-revm 12.0.1", "reth-chainspec 1.9.1", "reth-evm 1.9.1", "reth-execution-errors 1.9.1", @@ -9807,7 +10819,7 @@ dependencies = [ "reth-primitives-traits 1.9.1", "reth-rpc-eth-api", "reth-storage-errors 1.9.1", - "revm", + "revm 31.0.1", "thiserror 2.0.17", ] @@ -9852,13 +10864,13 @@ dependencies = [ [[package]] name = "reth-optimism-forks" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ - "alloy-op-hardforks", + "alloy-op-hardforks 0.3.5", "alloy-primitives 1.4.1", "once_cell", - "reth-ethereum-forks 1.9.0", + "reth-ethereum-forks 1.8.3", ] [[package]] @@ -9866,7 +10878,7 @@ name = "reth-optimism-forks" version = "1.9.1" source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03235164855c" dependencies = [ - "alloy-op-hardforks", + "alloy-op-hardforks 0.4.4", "alloy-primitives 1.4.1", "once_cell", "reth-ethereum-forks 1.9.1", @@ -9883,9 +10895,9 @@ dependencies = [ "alloy-rpc-types-eth", "clap", "eyre", - "op-alloy-consensus", - "op-alloy-rpc-types-engine", - "op-revm", + "op-alloy-consensus 0.22.0", + "op-alloy-rpc-types-engine 0.22.0", + "op-revm 12.0.1", "reth-chainspec 1.9.1", "reth-consensus 1.9.1", "reth-engine-local", @@ -9912,7 +10924,7 @@ dependencies = [ "reth-tracing", "reth-transaction-pool 1.9.1", "reth-trie-common 1.9.1", - "revm", + "revm 31.0.1", "serde", "tokio", "url", @@ -9920,40 +10932,39 @@ dependencies = [ [[package]] name = "reth-optimism-payload-builder" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm", "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-debug", "alloy-rpc-types-engine", "derive_more", - "op-alloy-consensus", - "op-alloy-rpc-types-engine", - "reth-basic-payload-builder 1.9.0", - "reth-chain-state 1.9.0", - "reth-chainspec 1.9.0", - "reth-evm 1.9.0", - "reth-execution-types 1.9.0", - "reth-optimism-evm 1.9.0", - "reth-optimism-forks 1.9.0", - "reth-optimism-primitives 1.9.0", - "reth-optimism-txpool 1.9.0", - "reth-payload-builder 1.9.0", - "reth-payload-builder-primitives 1.9.0", - "reth-payload-primitives 1.9.0", - "reth-payload-util 1.9.0", - "reth-payload-validator 1.9.0", - "reth-primitives-traits 1.9.0", - "reth-revm 1.9.0", - "reth-storage-api 1.9.0", - "reth-transaction-pool 1.9.0", - "revm", - "serde", - "sha2", + "op-alloy-consensus 0.20.0", + "op-alloy-rpc-types-engine 0.20.0", + "reth-basic-payload-builder 1.8.3", + "reth-chain-state 1.8.3", + "reth-chainspec 1.8.3", + "reth-evm 1.8.3", + "reth-execution-types 1.8.3", + "reth-optimism-evm 1.8.3", + "reth-optimism-forks 1.8.3", + "reth-optimism-primitives 1.8.3", + "reth-optimism-txpool 1.8.3", + "reth-payload-builder 1.8.3", + "reth-payload-builder-primitives 1.8.3", + "reth-payload-primitives 1.8.3", + "reth-payload-util 1.8.3", + "reth-payload-validator 1.8.3", + "reth-primitives-traits 1.8.3", + "reth-revm 1.8.3", + "reth-storage-api 1.8.3", + "reth-transaction-pool 1.8.3", + "revm 29.0.1", + "serde", + "sha2 0.10.9", "thiserror 2.0.17", "tracing", ] @@ -9965,15 +10976,15 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm", + "alloy-evm 0.23.1", "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-debug", "alloy-rpc-types-engine", "derive_more", "either", - "op-alloy-consensus", - "op-alloy-rpc-types-engine", + "op-alloy-consensus 0.22.0", + "op-alloy-rpc-types-engine 0.22.0", "reth-basic-payload-builder 1.9.1", "reth-chainspec 1.9.1", "reth-evm 1.9.1", @@ -9991,24 +11002,24 @@ dependencies = [ "reth-revm 1.9.1", "reth-storage-api 1.9.1", "reth-transaction-pool 1.9.1", - "revm", + "revm 31.0.1", "serde", - "sha2", + "sha2 0.10.9", "thiserror 2.0.17", "tracing", ] [[package]] name = "reth-optimism-primitives" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives 1.4.1", "alloy-rlp", - "op-alloy-consensus", - "reth-primitives-traits 1.9.0", + "op-alloy-consensus 0.20.0", + "reth-primitives-traits 1.8.3", ] [[package]] @@ -10023,7 +11034,7 @@ dependencies = [ "arbitrary", "bytes", "modular-bitfield", - "op-alloy-consensus", + "op-alloy-consensus 0.22.0", "reth-codecs 1.9.1", "reth-primitives-traits 1.9.1", "reth-zstd-compressors 1.9.1", @@ -10054,12 +11065,12 @@ dependencies = [ "jsonrpsee-core 0.26.0", "jsonrpsee-types 0.26.0", "metrics", - "op-alloy-consensus", + "op-alloy-consensus 0.22.0", "op-alloy-network", "op-alloy-rpc-jsonrpsee", - "op-alloy-rpc-types", - "op-alloy-rpc-types-engine", - "op-revm", + "op-alloy-rpc-types 0.22.0", + "op-alloy-rpc-types-engine 0.22.0", + "op-revm 12.0.1", "reqwest", "reth-chain-state 1.9.1", "reth-chainspec 1.9.1", @@ -10083,7 +11094,7 @@ dependencies = [ "reth-storage-api 1.9.1", "reth-tasks 1.9.1", "reth-transaction-pool 1.9.1", - "revm", + "revm 31.0.1", "serde_json", "thiserror 2.0.17", "tokio", @@ -10104,8 +11115,8 @@ dependencies = [ [[package]] name = "reth-optimism-txpool" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -10118,20 +11129,20 @@ dependencies = [ "derive_more", "futures-util", "metrics", - "op-alloy-consensus", + "op-alloy-consensus 0.20.0", "op-alloy-flz", - "op-alloy-rpc-types", - "op-revm", + "op-alloy-rpc-types 0.20.0", + "op-revm 10.1.1", "parking_lot", - "reth-chain-state 1.9.0", - "reth-chainspec 1.9.0", - "reth-metrics 1.9.0", - "reth-optimism-evm 1.9.0", - "reth-optimism-forks 1.9.0", - "reth-optimism-primitives 1.9.0", - "reth-primitives-traits 1.9.0", - "reth-storage-api 1.9.0", - "reth-transaction-pool 1.9.0", + "reth-chain-state 1.8.3", + "reth-chainspec 1.8.3", + "reth-metrics 1.8.3", + "reth-optimism-evm 1.8.3", + "reth-optimism-forks 1.8.3", + "reth-optimism-primitives 1.8.3", + "reth-primitives-traits 1.8.3", + "reth-storage-api 1.8.3", + "reth-transaction-pool 1.8.3", "serde", "thiserror 2.0.17", "tokio", @@ -10154,10 +11165,10 @@ dependencies = [ "derive_more", "futures-util", "metrics", - "op-alloy-consensus", + "op-alloy-consensus 0.22.0", "op-alloy-flz", - "op-alloy-rpc-types", - "op-revm", + "op-alloy-rpc-types 0.22.0", + "op-revm 12.0.1", "parking_lot", "reth-chain-state 1.9.1", "reth-chainspec 1.9.1", @@ -10176,20 +11187,20 @@ dependencies = [ [[package]] name = "reth-payload-builder" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", "alloy-rpc-types", "futures-util", "metrics", - "reth-chain-state 1.9.0", - "reth-ethereum-engine-primitives 1.9.0", - "reth-metrics 1.9.0", - "reth-payload-builder-primitives 1.9.0", - "reth-payload-primitives 1.9.0", - "reth-primitives-traits 1.9.0", + "reth-chain-state 1.8.3", + "reth-ethereum-engine-primitives 1.8.3", + "reth-metrics 1.8.3", + "reth-payload-builder-primitives 1.8.3", + "reth-payload-primitives 1.8.3", + "reth-primitives-traits 1.8.3", "tokio", "tokio-stream", "tracing", @@ -10218,11 +11229,11 @@ dependencies = [ [[package]] name = "reth-payload-builder-primitives" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "pin-project", - "reth-payload-primitives 1.9.0", + "reth-payload-primitives 1.8.3", "tokio", "tokio-stream", "tracing", @@ -10242,19 +11253,19 @@ dependencies = [ [[package]] name = "reth-payload-primitives" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-eips", "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "auto_impl", "either", - "op-alloy-rpc-types-engine", - "reth-chain-state 1.9.0", - "reth-chainspec 1.9.0", - "reth-errors 1.9.0", - "reth-primitives-traits 1.9.0", + "op-alloy-rpc-types-engine 0.20.0", + "reth-chain-state 1.8.3", + "reth-chainspec 1.8.3", + "reth-errors 1.8.3", + "reth-primitives-traits 1.8.3", "serde", "thiserror 2.0.17", "tokio", @@ -10270,7 +11281,7 @@ dependencies = [ "alloy-rpc-types-engine", "auto_impl", "either", - "op-alloy-rpc-types-engine", + "op-alloy-rpc-types-engine 0.22.0", "reth-chain-state 1.9.1", "reth-chainspec 1.9.1", "reth-errors 1.9.1", @@ -10284,12 +11295,12 @@ dependencies = [ [[package]] name = "reth-payload-util" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", - "reth-transaction-pool 1.9.0", + "reth-transaction-pool 1.8.3", ] [[package]] @@ -10304,12 +11315,12 @@ dependencies = [ [[package]] name = "reth-payload-validator" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-rpc-types-engine", - "reth-primitives-traits 1.9.0", + "reth-primitives-traits 1.8.3", ] [[package]] @@ -10338,8 +11349,8 @@ dependencies = [ [[package]] name = "reth-primitives-traits" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -10352,11 +11363,11 @@ dependencies = [ "bytes", "derive_more", "once_cell", - "op-alloy-consensus", - "reth-codecs 1.9.0", - "revm-bytecode", - "revm-primitives", - "revm-state", + "op-alloy-consensus 0.20.0", + "reth-codecs 1.8.3", + "revm-bytecode 6.2.2", + "revm-primitives 20.2.1", + "revm-state 7.0.5", "secp256k1 0.30.0", "serde", "serde_with", @@ -10382,14 +11393,14 @@ dependencies = [ "derive_more", "modular-bitfield", "once_cell", - "op-alloy-consensus", + "op-alloy-consensus 0.22.0", "proptest", "proptest-arbitrary-interop", "rayon", "reth-codecs 1.9.1", - "revm-bytecode", - "revm-primitives", - "revm-state", + "revm-bytecode 7.1.1", + "revm-primitives 21.0.2", + "revm-state 8.1.1", "secp256k1 0.30.0", "serde", "serde_with", @@ -10433,8 +11444,8 @@ dependencies = [ "reth-storage-errors 1.9.1", "reth-trie 1.9.1", "reth-trie-db", - "revm-database", - "revm-state", + "revm-database 9.0.4", + "revm-state 8.1.1", "strum 0.27.2", "tokio", "tracing", @@ -10468,12 +11479,11 @@ dependencies = [ [[package]] name = "reth-prune-types" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", "derive_more", - "strum 0.27.2", "thiserror 2.0.17", ] @@ -10540,15 +11550,15 @@ dependencies = [ [[package]] name = "reth-revm" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", - "reth-primitives-traits 1.9.0", - "reth-storage-api 1.9.0", - "reth-storage-errors 1.9.0", - "reth-trie 1.9.0", - "revm", + "reth-primitives-traits 1.8.3", + "reth-storage-api 1.8.3", + "reth-storage-errors 1.8.3", + "reth-trie 1.8.3", + "revm 29.0.1", ] [[package]] @@ -10561,7 +11571,7 @@ dependencies = [ "reth-storage-api 1.9.1", "reth-storage-errors 1.9.1", "reth-trie 1.9.1", - "revm", + "revm 31.0.1", ] [[package]] @@ -10572,7 +11582,7 @@ dependencies = [ "alloy-consensus", "alloy-dyn-abi", "alloy-eips", - "alloy-evm", + "alloy-evm 0.23.1", "alloy-genesis", "alloy-network", "alloy-primitives 1.4.1", @@ -10629,12 +11639,12 @@ dependencies = [ "reth-tasks 1.9.1", "reth-transaction-pool 1.9.1", "reth-trie-common 1.9.1", - "revm", + "revm 31.0.1", "revm-inspectors", - "revm-primitives", + "revm-primitives 21.0.2", "serde", "serde_json", - "sha2", + "sha2 0.10.9", "thiserror 2.0.17", "tokio", "tokio-stream", @@ -10724,16 +11734,16 @@ dependencies = [ "auto_impl", "dyn-clone", "jsonrpsee-types 0.26.0", - "op-alloy-consensus", + "op-alloy-consensus 0.22.0", "op-alloy-network", - "op-alloy-rpc-types", - "op-revm", + "op-alloy-rpc-types 0.22.0", + "op-revm 12.0.1", "reth-ethereum-primitives 1.9.1", "reth-evm 1.9.1", "reth-optimism-primitives 1.9.1", "reth-primitives-traits 1.9.1", "reth-storage-api 1.9.1", - "revm-context", + "revm-context 11.0.1", "thiserror 2.0.17", ] @@ -10774,7 +11784,7 @@ dependencies = [ "alloy-consensus", "alloy-dyn-abi", "alloy-eips", - "alloy-evm", + "alloy-evm 0.23.1", "alloy-json-rpc", "alloy-network", "alloy-primitives 1.4.1", @@ -10804,7 +11814,7 @@ dependencies = [ "reth-tasks 1.9.1", "reth-transaction-pool 1.9.1", "reth-trie-common 1.9.1", - "revm", + "revm 31.0.1", "revm-inspectors", "tokio", "tracing", @@ -10817,7 +11827,7 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm", + "alloy-evm 0.23.1", "alloy-network", "alloy-primitives 1.4.1", "alloy-rpc-client", @@ -10847,7 +11857,7 @@ dependencies = [ "reth-tasks 1.9.1", "reth-transaction-pool 1.9.1", "reth-trie 1.9.1", - "revm", + "revm 31.0.1", "revm-inspectors", "schnellru", "serde", @@ -10964,11 +11974,11 @@ dependencies = [ [[package]] name = "reth-stages-types" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", - "reth-trie-common 1.9.0", + "reth-trie-common 1.8.3", ] [[package]] @@ -11007,8 +12017,8 @@ dependencies = [ [[package]] name = "reth-static-file-types" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", "derive_more", @@ -11030,24 +12040,24 @@ dependencies = [ [[package]] name = "reth-storage-api" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "auto_impl", - "reth-chainspec 1.9.0", - "reth-db-models 1.9.0", - "reth-ethereum-primitives 1.9.0", - "reth-execution-types 1.9.0", - "reth-primitives-traits 1.9.0", - "reth-prune-types 1.9.0", - "reth-stages-types 1.9.0", - "reth-storage-errors 1.9.0", - "reth-trie-common 1.9.0", - "revm-database", + "reth-chainspec 1.8.3", + "reth-db-models 1.8.3", + "reth-ethereum-primitives 1.8.3", + "reth-execution-types 1.8.3", + "reth-primitives-traits 1.8.3", + "reth-prune-types 1.8.3", + "reth-stages-types 1.8.3", + "reth-storage-errors 1.8.3", + "reth-trie-common 1.8.3", + "revm-database 7.0.5", ] [[package]] @@ -11070,23 +12080,23 @@ dependencies = [ "reth-stages-types 1.9.1", "reth-storage-errors 1.9.1", "reth-trie-common 1.9.1", - "revm-database", + "revm-database 9.0.4", "serde_json", ] [[package]] name = "reth-storage-errors" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-eips", "alloy-primitives 1.4.1", "alloy-rlp", "derive_more", - "reth-primitives-traits 1.9.0", - "reth-prune-types 1.9.0", - "reth-static-file-types 1.9.0", - "revm-database-interface", + "reth-primitives-traits 1.8.3", + "reth-prune-types 1.8.3", + "reth-static-file-types 1.8.3", + "revm-database-interface 7.0.5", "thiserror 2.0.17", ] @@ -11102,20 +12112,20 @@ dependencies = [ "reth-primitives-traits 1.9.1", "reth-prune-types 1.9.1", "reth-static-file-types 1.9.1", - "revm-database-interface", + "revm-database-interface 8.0.5", "thiserror 2.0.17", ] [[package]] name = "reth-tasks" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "auto_impl", "dyn-clone", "futures-util", "metrics", - "reth-metrics 1.9.0", + "reth-metrics 1.8.3", "thiserror 2.0.17", "tokio", "tracing", @@ -11202,8 +12212,8 @@ dependencies = [ [[package]] name = "reth-transaction-pool" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -11216,18 +12226,18 @@ dependencies = [ "metrics", "parking_lot", "pin-project", - "reth-chain-state 1.9.0", - "reth-chainspec 1.9.0", - "reth-eth-wire-types 1.9.0", - "reth-ethereum-primitives 1.9.0", - "reth-execution-types 1.9.0", - "reth-fs-util 1.9.0", - "reth-metrics 1.9.0", - "reth-primitives-traits 1.9.0", - "reth-storage-api 1.9.0", - "reth-tasks 1.9.0", - "revm-interpreter", - "revm-primitives", + "reth-chain-state 1.8.3", + "reth-chainspec 1.8.3", + "reth-eth-wire-types 1.8.3", + "reth-ethereum-primitives 1.8.3", + "reth-execution-types 1.8.3", + "reth-fs-util 1.8.3", + "reth-metrics 1.8.3", + "reth-primitives-traits 1.8.3", + "reth-storage-api 1.8.3", + "reth-tasks 1.8.3", + "revm-interpreter 25.0.3", + "revm-primitives 20.2.1", "rustc-hash 2.1.1", "schnellru", "serde", @@ -11267,8 +12277,8 @@ dependencies = [ "reth-primitives-traits 1.9.1", "reth-storage-api 1.9.1", "reth-tasks 1.9.1", - "revm-interpreter", - "revm-primitives", + "revm-interpreter 29.0.1", + "revm-primitives 21.0.2", "rustc-hash 2.1.1", "schnellru", "serde", @@ -11282,8 +12292,8 @@ dependencies = [ [[package]] name = "reth-trie" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-eips", @@ -11292,13 +12302,13 @@ dependencies = [ "alloy-trie", "auto_impl", "itertools 0.14.0", - "reth-execution-errors 1.9.0", - "reth-primitives-traits 1.9.0", - "reth-stages-types 1.9.0", - "reth-storage-errors 1.9.0", - "reth-trie-common 1.9.0", - "reth-trie-sparse 1.9.0", - "revm-database", + "reth-execution-errors 1.8.3", + "reth-primitives-traits 1.8.3", + "reth-stages-types 1.8.3", + "reth-storage-errors 1.8.3", + "reth-trie-common 1.8.3", + "reth-trie-sparse 1.8.3", + "revm-database 7.0.5", "tracing", ] @@ -11322,15 +12332,15 @@ dependencies = [ "reth-storage-errors 1.9.1", "reth-trie-common 1.9.1", "reth-trie-sparse 1.9.1", - "revm-database", + "revm-database 9.0.4", "tracing", "triehash", ] [[package]] name = "reth-trie-common" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", @@ -11340,8 +12350,8 @@ dependencies = [ "itertools 0.14.0", "nybbles", "rayon", - "reth-primitives-traits 1.9.0", - "revm-database", + "reth-primitives-traits 1.8.3", + "revm-database 7.0.5", ] [[package]] @@ -11366,7 +12376,7 @@ dependencies = [ "rayon", "reth-codecs 1.9.1", "reth-primitives-traits 1.9.1", - "revm-database", + "revm-database 9.0.4", "serde", "serde_with", ] @@ -11411,16 +12421,16 @@ dependencies = [ [[package]] name = "reth-trie-sparse" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "alloy-primitives 1.4.1", "alloy-rlp", "alloy-trie", "auto_impl", - "reth-execution-errors 1.9.0", - "reth-primitives-traits 1.9.0", - "reth-trie-common 1.9.0", + "reth-execution-errors 1.8.3", + "reth-primitives-traits 1.8.3", + "reth-trie-common 1.8.3", "smallvec", "tracing", ] @@ -11464,8 +12474,8 @@ dependencies = [ [[package]] name = "reth-zstd-compressors" -version = "1.9.0" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.0#84785f025eac5eed123997454998db77a299e1e5" +version = "1.8.3" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" dependencies = [ "zstd", ] @@ -11478,23 +12488,54 @@ dependencies = [ "zstd", ] +[[package]] +name = "revm" +version = "29.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "718d90dce5f07e115d0e66450b1b8aa29694c1cf3f89ebddaddccc2ccbd2f13e" +dependencies = [ + "revm-bytecode 6.2.2", + "revm-context 9.1.0", + "revm-context-interface 10.2.0", + "revm-database 7.0.5", + "revm-database-interface 7.0.5", + "revm-handler 10.0.1", + "revm-inspector 10.0.1", + "revm-interpreter 25.0.3", + "revm-precompile 27.0.0", + "revm-primitives 20.2.1", + "revm-state 7.0.5", +] + [[package]] name = "revm" version = "31.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93df0ff5eb70facbc872f82da4b815d7bd8e36b7ee525c637cabcb2a6af8a708" 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", + "revm-bytecode 7.1.1", + "revm-context 11.0.1", + "revm-context-interface 12.0.1", + "revm-database 9.0.4", + "revm-database-interface 8.0.5", + "revm-handler 12.0.1", + "revm-inspector 12.0.1", + "revm-interpreter 29.0.1", + "revm-precompile 29.0.1", + "revm-primitives 21.0.2", + "revm-state 8.1.1", +] + +[[package]] +name = "revm-bytecode" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66c52031b73cae95d84cd1b07725808b5fd1500da3e5e24574a3b2dc13d9f16d" +dependencies = [ + "bitvec", + "phf 0.11.3", + "revm-primitives 20.2.1", + "serde", ] [[package]] @@ -11504,8 +12545,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2c6b5e6e8dd1e28a4a60e5f46615d4ef0809111c9e63208e55b5c7058200fb0" dependencies = [ "bitvec", - "phf", - "revm-primitives", + "phf 0.13.1", + "revm-primitives 21.0.2", + "serde", +] + +[[package]] +name = "revm-context" +version = "9.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a20c98e7008591a6f012550c2a00aa36cba8c14cc88eb88dec32eb9102554b4" +dependencies = [ + "bitvec", + "cfg-if", + "derive-where", + "revm-bytecode 6.2.2", + "revm-context-interface 10.2.0", + "revm-database-interface 7.0.5", + "revm-primitives 20.2.1", + "revm-state 7.0.5", "serde", ] @@ -11513,16 +12571,32 @@ dependencies = [ name = "revm-context" version = "11.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583c80d674f51b28a0d0a7309bda0867bcb0fd41b4e34976eded145edbb089fc" +checksum = "583c80d674f51b28a0d0a7309bda0867bcb0fd41b4e34976eded145edbb089fc" +dependencies = [ + "bitvec", + "cfg-if", + "derive-where", + "revm-bytecode 7.1.1", + "revm-context-interface 12.0.1", + "revm-database-interface 8.0.5", + "revm-primitives 21.0.2", + "revm-state 8.1.1", + "serde", +] + +[[package]] +name = "revm-context-interface" +version = "10.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b50d241ed1ce647b94caf174fcd0239b7651318b2c4c06b825b59b973dfb8495" dependencies = [ - "bitvec", - "cfg-if", - "derive-where", - "revm-bytecode", - "revm-context-interface", - "revm-database-interface", - "revm-primitives", - "revm-state", + "alloy-eip2930", + "alloy-eip7702", + "auto_impl", + "either", + "revm-database-interface 7.0.5", + "revm-primitives 20.2.1", + "revm-state 7.0.5", "serde", ] @@ -11536,9 +12610,23 @@ dependencies = [ "alloy-eip7702", "auto_impl", "either", - "revm-database-interface", - "revm-primitives", - "revm-state", + "revm-database-interface 8.0.5", + "revm-primitives 21.0.2", + "revm-state 8.1.1", + "serde", +] + +[[package]] +name = "revm-database" +version = "7.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39a276ed142b4718dcf64bc9624f474373ed82ef20611025045c3fb23edbef9c" +dependencies = [ + "alloy-eips", + "revm-bytecode 6.2.2", + "revm-database-interface 7.0.5", + "revm-primitives 20.2.1", + "revm-state 7.0.5", "serde", ] @@ -11549,10 +12637,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a4505d9688482fe0c3b8c09d9afbc4656e2bf9b48855e1c86c93bd4508e496a" dependencies = [ "alloy-eips", - "revm-bytecode", - "revm-database-interface", - "revm-primitives", - "revm-state", + "revm-bytecode 7.1.1", + "revm-database-interface 8.0.5", + "revm-primitives 21.0.2", + "revm-state 8.1.1", + "serde", +] + +[[package]] +name = "revm-database-interface" +version = "7.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c523c77e74eeedbac5d6f7c092e3851dbe9c7fec6f418b85992bd79229db361" +dependencies = [ + "auto_impl", + "either", + "revm-primitives 20.2.1", + "revm-state 7.0.5", "serde", ] @@ -11564,8 +12665,27 @@ checksum = "8cce03e3780287b07abe58faf4a7f5d8be7e81321f93ccf3343c8f7755602bae" dependencies = [ "auto_impl", "either", - "revm-primitives", - "revm-state", + "revm-primitives 21.0.2", + "revm-state 8.1.1", + "serde", +] + +[[package]] +name = "revm-handler" +version = "10.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "550331ea85c1d257686e672081576172fe3d5a10526248b663bbf54f1bef226a" +dependencies = [ + "auto_impl", + "derive-where", + "revm-bytecode 6.2.2", + "revm-context 9.1.0", + "revm-context-interface 10.2.0", + "revm-database-interface 7.0.5", + "revm-interpreter 25.0.3", + "revm-precompile 27.0.0", + "revm-primitives 20.2.1", + "revm-state 7.0.5", "serde", ] @@ -11577,15 +12697,33 @@ checksum = "b3da9e26f05ed723cf423b92f012a7775eef9e7d897633d11ec83535e92cda2d" dependencies = [ "auto_impl", "derive-where", - "revm-bytecode", - "revm-context", - "revm-context-interface", - "revm-database-interface", - "revm-interpreter", - "revm-precompile", - "revm-primitives", - "revm-state", + "revm-bytecode 7.1.1", + "revm-context 11.0.1", + "revm-context-interface 12.0.1", + "revm-database-interface 8.0.5", + "revm-interpreter 29.0.1", + "revm-precompile 29.0.1", + "revm-primitives 21.0.2", + "revm-state 8.1.1", + "serde", +] + +[[package]] +name = "revm-inspector" +version = "10.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c0a6e9ccc2ae006f5bed8bd80cd6f8d3832cd55c5e861b9402fdd556098512f" +dependencies = [ + "auto_impl", + "either", + "revm-context 9.1.0", + "revm-database-interface 7.0.5", + "revm-handler 10.0.1", + "revm-interpreter 25.0.3", + "revm-primitives 20.2.1", + "revm-state 7.0.5", "serde", + "serde_json", ] [[package]] @@ -11596,12 +12734,12 @@ checksum = "57afb06e5985dbd2e8a48a3e6727cb0dd45148e4e6e028ac8222e262e440d3de" dependencies = [ "auto_impl", "either", - "revm-context", - "revm-database-interface", - "revm-handler", - "revm-interpreter", - "revm-primitives", - "revm-state", + "revm-context 11.0.1", + "revm-database-interface 8.0.5", + "revm-handler 12.0.1", + "revm-interpreter 29.0.1", + "revm-primitives 21.0.2", + "revm-state 8.1.1", "serde", "serde_json", ] @@ -11620,25 +12758,62 @@ dependencies = [ "boa_engine", "boa_gc", "colorchoice", - "revm", + "revm 31.0.1", "serde", "serde_json", "thiserror 2.0.17", ] +[[package]] +name = "revm-interpreter" +version = "25.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06575dc51b1d8f5091daa12a435733a90b4a132dca7ccee0666c7db3851bc30c" +dependencies = [ + "revm-bytecode 6.2.2", + "revm-context-interface 10.2.0", + "revm-primitives 20.2.1", + "serde", +] + [[package]] name = "revm-interpreter" version = "29.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22789ce92c5808c70185e3bc49732f987dc6fd907f77828c8d3470b2299c9c65" dependencies = [ - "revm-bytecode", - "revm-context-interface", - "revm-primitives", - "revm-state", + "revm-bytecode 7.1.1", + "revm-context-interface 12.0.1", + "revm-primitives 21.0.2", + "revm-state 8.1.1", "serde", ] +[[package]] +name = "revm-precompile" +version = "27.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25b57d4bd9e6b5fe469da5452a8a137bc2d030a3cd47c46908efc615bbc699da" +dependencies = [ + "ark-bls12-381", + "ark-bn254", + "ark-ec", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "arrayref", + "aurora-engine-modexp", + "c-kzg", + "cfg-if", + "k256", + "libsecp256k1", + "p256", + "revm-primitives 20.2.1", + "ripemd", + "rug", + "secp256k1 0.31.1", + "sha2 0.10.9", +] + [[package]] name = "revm-precompile" version = "29.0.1" @@ -11657,11 +12832,23 @@ dependencies = [ "cfg-if", "k256", "p256", - "revm-primitives", + "revm-primitives 21.0.2", "ripemd", "rug", "secp256k1 0.31.1", - "sha2", + "sha2 0.10.9", +] + +[[package]] +name = "revm-primitives" +version = "20.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa29d9da06fe03b249b6419b33968ecdf92ad6428e2f012dc57bcd619b5d94e" +dependencies = [ + "alloy-primitives 1.4.1", + "num_enum", + "once_cell", + "serde", ] [[package]] @@ -11676,6 +12863,18 @@ dependencies = [ "serde", ] +[[package]] +name = "revm-state" +version = "7.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f64fbacb86008394aaebd3454f9643b7d5a782bd251135e17c5b33da592d84d" +dependencies = [ + "bitflags 2.9.4", + "revm-bytecode 6.2.2", + "revm-primitives 20.2.1", + "serde", +] + [[package]] name = "revm-state" version = "8.1.1" @@ -11683,8 +12882,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d8be953b7e374dbdea0773cf360debed8df394ea8d82a8b240a6b5da37592fc" dependencies = [ "bitflags 2.9.4", - "revm-bytecode", - "revm-primitives", + "revm-bytecode 7.1.1", + "revm-primitives 21.0.2", "serde", ] @@ -11790,7 +12989,7 @@ dependencies = [ [[package]] name = "rollup-boost" version = "0.1.0" -source = "git+http://github.com/base/rollup-boost?rev=34fe1377635baf067b54b810564f18d069f63105#34fe1377635baf067b54b810564f18d069f63105" +source = "git+http://github.com/flashbots/rollup-boost?rev=dd12e8e8366004b4758bfa0cfa98efa6929b7e9f#dd12e8e8366004b4758bfa0cfa98efa6929b7e9f" dependencies = [ "alloy-primitives 1.4.1", "alloy-rpc-types-engine", @@ -11812,18 +13011,17 @@ dependencies = [ "metrics-exporter-prometheus 0.16.2", "metrics-util 0.19.1", "moka", - "op-alloy-rpc-types-engine", + "op-alloy-rpc-types-engine 0.20.0", "opentelemetry 0.28.0", "opentelemetry-otlp 0.28.0", "opentelemetry_sdk 0.28.0", "parking_lot", "paste", - "reth-optimism-payload-builder 1.9.0", + "reth-optimism-payload-builder 1.8.3", "rustls", "serde", "serde_json", - "sha2", - "testcontainers 0.23.3", + "sha2 0.10.9", "thiserror 2.0.17", "tokio", "tokio-tungstenite", @@ -11844,6 +13042,24 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" +[[package]] +name = "rtnetlink" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a552eb82d19f38c3beed3f786bd23aa434ceb9ac43ab44419ca6d67a7e186c0" +dependencies = [ + "futures", + "log", + "netlink-packet-core", + "netlink-packet-route", + "netlink-packet-utils", + "netlink-proto", + "netlink-sys", + "nix", + "thiserror 1.0.69", + "tokio", +] + [[package]] name = "rug" version = "1.28.0" @@ -12084,6 +13300,17 @@ dependencies = [ "wait-timeout", ] +[[package]] +name = "rw-stream-sink" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8c9026ff5d2f23da5e45bbc283f156383001bfb09c4e44256d02c1a685fe9a1" +dependencies = [ + "futures", + "pin-project", + "static_assertions", +] + [[package]] name = "ryu" version = "1.0.20" @@ -12483,6 +13710,19 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + [[package]] name = "sha2" version = "0.10.9" @@ -12648,6 +13888,23 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" +[[package]] +name = "snow" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" +dependencies = [ + "aes-gcm", + "blake2", + "chacha20poly1305", + "curve25519-dalek", + "rand_core 0.6.4", + "ring", + "rustc_version 0.4.1", + "sha2 0.10.9", + "subtle", +] + [[package]] name = "socket2" version = "0.5.10" @@ -12980,7 +14237,7 @@ dependencies = [ "serde", "tokio", "ureq", - "x509-parser", + "x509-parser 0.15.1", ] [[package]] @@ -13018,35 +14275,6 @@ dependencies = [ "windows-sys 0.60.2", ] -[[package]] -name = "testcontainers" -version = "0.23.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59a4f01f39bb10fc2a5ab23eb0d888b1e2bb168c157f61a1b98e6c501c639c74" -dependencies = [ - "async-trait", - "bollard", - "bollard-stubs", - "bytes", - "docker_credential", - "either", - "etcetera 0.8.0", - "futures", - "log", - "memchr", - "parse-display", - "pin-project-lite", - "serde", - "serde_json", - "serde_with", - "thiserror 2.0.17", - "tokio", - "tokio-stream", - "tokio-tar", - "tokio-util", - "url", -] - [[package]] name = "testcontainers" version = "0.24.0" @@ -13059,7 +14287,7 @@ dependencies = [ "bytes", "docker_credential", "either", - "etcetera 0.10.0", + "etcetera", "futures", "log", "memchr", @@ -13913,6 +15141,12 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" +[[package]] +name = "unsigned-varint" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" + [[package]] name = "unsigned-varint" version = "0.8.0" @@ -14308,6 +15542,16 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efc5cf48f83140dcaab716eeaea345f9e93d0018fb81162753a3f76c3397b538" +dependencies = [ + "windows-core 0.53.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows" version = "0.57.0" @@ -14337,7 +15581,7 @@ dependencies = [ "windows-collections", "windows-core 0.61.2", "windows-future", - "windows-link", + "windows-link 0.1.3", "windows-numerics", ] @@ -14350,6 +15594,16 @@ dependencies = [ "windows-core 0.61.2", ] +[[package]] +name = "windows-core" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dcc5b895a6377f1ab9fa55acedab1fd5ac0db66ad1e6c7f47e28a22e446a5dd" +dependencies = [ + "windows-result 0.1.2", + "windows-targets 0.52.6", +] + [[package]] name = "windows-core" version = "0.57.0" @@ -14383,7 +15637,7 @@ checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ "windows-implement 0.60.0", "windows-interface 0.59.1", - "windows-link", + "windows-link 0.1.3", "windows-result 0.3.4", "windows-strings 0.4.2", ] @@ -14395,7 +15649,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ "windows-core 0.61.2", - "windows-link", + "windows-link 0.1.3", "windows-threading", ] @@ -14471,6 +15725,12 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + [[package]] name = "windows-numerics" version = "0.2.0" @@ -14478,7 +15738,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ "windows-core 0.61.2", - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -14487,7 +15747,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" dependencies = [ - "windows-link", + "windows-link 0.1.3", "windows-result 0.3.4", "windows-strings 0.4.2", ] @@ -14516,7 +15776,7 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -14535,7 +15795,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -14583,6 +15843,15 @@ dependencies = [ "windows-targets 0.53.3", ] +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -14635,7 +15904,7 @@ version = "0.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" dependencies = [ - "windows-link", + "windows-link 0.1.3", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", @@ -14652,7 +15921,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" dependencies = [ - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -14903,23 +16172,52 @@ dependencies = [ "tap", ] +[[package]] +name = "x25519-dalek" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +dependencies = [ + "curve25519-dalek", + "rand_core 0.6.4", + "serde", + "zeroize", +] + [[package]] name = "x509-parser" version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7069fba5b66b9193bd2c5d3d4ff12b839118f6bcbef5328efafafb5395cf63da" dependencies = [ - "asn1-rs", + "asn1-rs 0.5.2", "data-encoding", - "der-parser", + "der-parser 8.2.0", "lazy_static", "nom", - "oid-registry", + "oid-registry 0.6.1", "rusticata-macros", "thiserror 1.0.69", "time", ] +[[package]] +name = "x509-parser" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4569f339c0c402346d4a75a9e39cf8dad310e287eef1ff56d4c68e5067f53460" +dependencies = [ + "asn1-rs 0.7.1", + "data-encoding", + "der-parser 10.0.0", + "lazy_static", + "nom", + "oid-registry 0.8.1", + "rusticata-macros", + "thiserror 2.0.17", + "time", +] + [[package]] name = "xattr" version = "1.5.1" @@ -14930,18 +16228,73 @@ dependencies = [ "rustix 1.0.8", ] +[[package]] +name = "xml-rs" +version = "0.8.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" + +[[package]] +name = "xmltree" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7d8a75eaf6557bb84a65ace8609883db44a29951042ada9b393151532e41fcb" +dependencies = [ + "xml-rs", +] + [[package]] name = "xsum" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0637d3a5566a82fa5214bae89087bc8c9fb94cd8e8a3c07feb691bb8d9c632db" +[[package]] +name = "yamux" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed0164ae619f2dc144909a9f082187ebb5893693d8c0196e8085283ccd4b776" +dependencies = [ + "futures", + "log", + "nohash-hasher", + "parking_lot", + "pin-project", + "rand 0.8.5", + "static_assertions", +] + +[[package]] +name = "yamux" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deab71f2e20691b4728b349c6cee8fc7223880fa67b6b4f92225ec32225447e5" +dependencies = [ + "futures", + "log", + "nohash-hasher", + "parking_lot", + "pin-project", + "rand 0.9.2", + "static_assertions", + "web-time", +] + [[package]] name = "yansi" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" +[[package]] +name = "yasna" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" +dependencies = [ + "time", +] + [[package]] name = "yoke" version = "0.8.0" diff --git a/crates/op-rbuilder/src/builders/context.rs b/crates/op-rbuilder/src/builders/context.rs index 15c32315b..d8652831f 100644 --- a/crates/op-rbuilder/src/builders/context.rs +++ b/crates/op-rbuilder/src/builders/context.rs @@ -116,7 +116,7 @@ impl OpPayloadBuilderCtx { } /// Returns the block gas limit to target. - pub(super) fn block_gas_limit(&self) -> u64 { + pub fn block_gas_limit(&self) -> u64 { match self.gas_limit_config.gas_limit() { Some(gas_limit) => gas_limit, None => self diff --git a/crates/op-rbuilder/src/builders/flashblocks/ctx.rs b/crates/op-rbuilder/src/builders/flashblocks/ctx.rs index c465445f5..16d1a71ce 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/ctx.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/ctx.rs @@ -9,7 +9,10 @@ use reth_basic_payload_builder::PayloadConfig; use reth_evm::EvmEnv; use reth_optimism_chainspec::OpChainSpec; use reth_optimism_evm::{OpEvmConfig, OpNextBlockEnvAttributes}; -use reth_optimism_payload_builder::{OpPayloadBuilderAttributes, config::OpDAConfig}; +use reth_optimism_payload_builder::{ + OpPayloadBuilderAttributes, + config::{OpDAConfig, OpGasLimitConfig}, +}; use reth_optimism_primitives::OpTransactionSigned; use std::sync::Arc; use tokio_util::sync::CancellationToken; @@ -66,6 +69,7 @@ impl OpPayloadSyncerCtx { OpPayloadBuilderCtx { evm_config: self.evm_config, da_config: self.da_config, + gas_limit_config: OpGasLimitConfig::default(), chain_spec: self.chain_spec, config: payload_config, evm_env, diff --git a/crates/op-rbuilder/src/builders/flashblocks/payload.rs b/crates/op-rbuilder/src/builders/flashblocks/payload.rs index 371e70e74..c73cc2c36 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/payload.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/payload.rs @@ -29,7 +29,6 @@ use reth_optimism_evm::{OpEvmConfig, OpNextBlockEnvAttributes}; use reth_optimism_forks::OpHardforks; use reth_optimism_node::{OpBuiltPayload, OpPayloadBuilderAttributes}; use reth_optimism_primitives::{OpPrimitives, OpReceipt, OpTransactionSigned}; -use reth_payload_builder_primitives::Events; use reth_payload_primitives::BuiltPayloadExecutedBlock; use reth_payload_util::BestPayloadTransactions; use reth_primitives_traits::RecoveredBlock; @@ -258,6 +257,7 @@ where block_env_attributes, cancel, da_config: self.config.da_config.clone(), + gas_limit_config: self.config.gas_limit_config.clone(), builder_signer: self.config.builder_signer, metrics: Default::default(), extra_ctx, From 78d079a97c8af9dc2dc81d48bd316ea6eba31c31 Mon Sep 17 00:00:00 2001 From: Tobi Akerele Date: Sun, 9 Nov 2025 23:41:42 -0500 Subject: [PATCH 18/19] chore: Update rollup-boost to v0.7.8 for reth 1.9.1 compatibility - Updated rollup-boost dependency from rev dd12e8e to tag v0.7.8 - Resolves op-alloy version mismatch (0.20.0 -> 0.22.0) - All tests now pass (94/94 passing) --- Cargo.lock | 2747 ++++++++++++++------------------- crates/op-rbuilder/Cargo.toml | 2 +- 2 files changed, 1176 insertions(+), 1573 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e51e8b9d1..d115b7615 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -142,9 +142,9 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "1.0.42" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3abecb92ba478a285fbf5689100dbafe4003ded4a09bf4b5ef62cca87cd4f79e" +checksum = "90d103d3e440ad6f703dd71a5b58a6abd24834563bde8a5fabe706e00242f810" dependencies = [ "alloy-eips", "alloy-primitives 1.4.1", @@ -169,9 +169,9 @@ dependencies = [ [[package]] name = "alloy-consensus-any" -version = "1.0.42" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e864d4f11d1fb8d3ac2fd8f3a15f1ee46d55ec6d116b342ed1b2cb737f25894" +checksum = "48ead76c8c84ab3a50c31c56bc2c748c2d64357ad2131c32f9b10ab790a25e1a" dependencies = [ "alloy-consensus", "alloy-eips", @@ -280,9 +280,9 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "1.0.42" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07d9a64522a0db6ebcc4ff9c904e329e77dd737c2c25d30f1bdc32ca6c6ce334" +checksum = "7bdbec74583d0067798d77afa43d58f00d93035335d7ceaa5d3f93857d461bb9" dependencies = [ "alloy-eip2124", "alloy-eip2930", @@ -299,30 +299,7 @@ dependencies = [ "ethereum_ssz_derive", "serde", "serde_with", - "sha2 0.10.9", - "thiserror 2.0.17", -] - -[[package]] -name = "alloy-evm" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f1bfade4de9f464719b5aca30cf5bb02b9fda7036f0cf43addc3a0e66a0340c" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-hardforks 0.3.5", - "alloy-op-hardforks 0.3.5", - "alloy-primitives 1.4.1", - "alloy-rpc-types-engine", - "alloy-rpc-types-eth", - "alloy-sol-types 1.4.1", - "auto_impl", - "derive_more", - "op-alloy-consensus 0.20.0", - "op-alloy-rpc-types-engine 0.20.0", - "op-revm 10.1.1", - "revm 29.0.1", + "sha2", "thiserror 2.0.17", ] @@ -334,18 +311,18 @@ checksum = "428b58c17ab5f9f71765dc5f116acb6580f599ce243b8ce391de3ba859670c61" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-hardforks 0.4.4", - "alloy-op-hardforks 0.4.4", + "alloy-hardforks", + "alloy-op-hardforks", "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "alloy-rpc-types-eth", "alloy-sol-types 1.4.1", "auto_impl", "derive_more", - "op-alloy-consensus 0.22.0", - "op-alloy-rpc-types-engine 0.22.0", - "op-revm 12.0.1", - "revm 31.0.1", + "op-alloy-consensus", + "op-alloy-rpc-types-engine", + "op-revm", + "revm", "thiserror 2.0.17", ] @@ -363,19 +340,6 @@ dependencies = [ "serde_with", ] -[[package]] -name = "alloy-hardforks" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "889eb3949b58368a09d4f16931c660275ef5fb08e5fbd4a96573b19c7085c41f" -dependencies = [ - "alloy-chains", - "alloy-eip2124", - "alloy-primitives 1.4.1", - "auto_impl", - "dyn-clone", -] - [[package]] name = "alloy-hardforks" version = "0.4.4" @@ -457,9 +421,9 @@ dependencies = [ [[package]] name = "alloy-network-primitives" -version = "1.0.42" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219dccd2cf753a43bd9b0fbb7771a16927ffdb56e43e3a15755bef1a74d614aa" +checksum = "a0e7918396eecd69d9c907046ec8a93fb09b89e2f325d5e7ea9c4e3929aa0dd2" dependencies = [ "alloy-consensus", "alloy-eips", @@ -468,23 +432,6 @@ dependencies = [ "serde", ] -[[package]] -name = "alloy-op-evm" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0b6679dc8854285d6c34ef6a9f9ade06dec1f5db8aab96e941d99b8abcefb72" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-evm 0.21.3", - "alloy-op-hardforks 0.3.5", - "alloy-primitives 1.4.1", - "auto_impl", - "op-alloy-consensus 0.20.0", - "op-revm 10.1.1", - "revm 29.0.1", -] - [[package]] name = "alloy-op-evm" version = "0.23.1" @@ -493,28 +440,16 @@ checksum = "eaa49899e2b0e59a5325e2042a6c5bd4c17e1255fce1e66a9312816f52e886f1" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm 0.23.1", - "alloy-op-hardforks 0.4.4", + "alloy-evm", + "alloy-op-hardforks", "alloy-primitives 1.4.1", "auto_impl", - "op-alloy-consensus 0.22.0", - "op-revm 12.0.1", - "revm 31.0.1", + "op-alloy-consensus", + "op-revm", + "revm", "thiserror 2.0.17", ] -[[package]] -name = "alloy-op-hardforks" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "599c1d7dfbccb66603cb93fde00980d12848d32fe5e814f50562104a92df6487" -dependencies = [ - "alloy-chains", - "alloy-hardforks 0.3.5", - "alloy-primitives 1.4.1", - "auto_impl", -] - [[package]] name = "alloy-op-hardforks" version = "0.4.4" @@ -522,7 +457,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95ac97adaba4c26e17192d81f49186ac20c1e844e35a00e169c8d3d58bc84e6b" dependencies = [ "alloy-chains", - "alloy-hardforks 0.4.4", + "alloy-hardforks", "alloy-primitives 1.4.1", "auto_impl", ] @@ -780,9 +715,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-engine" -version = "1.0.42" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aabc17f0eac3f747eeddebc768c8e30763d6f6c53188f5335a935dedc57ddfbd" +checksum = "07da696cc7fbfead4b1dda8afe408685cae80975cbb024f843ba74d9639cd0d3" dependencies = [ "alloy-consensus", "alloy-eips", @@ -800,9 +735,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "1.0.42" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0185f68a0f8391ab996d335a887087d7ccdbc97952efab3516f6307d456ba2cd" +checksum = "a15e4831b71eea9d20126a411c1c09facf1d01d5cac84fd51d532d3c429cfc26" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -863,9 +798,9 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "1.0.42" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "596cfa360922ba9af901cc7370c68640e4f72adb6df0ab064de32f21fec498d7" +checksum = "751d1887f7d202514a82c5b3caf28ee8bd4a2ad9549e4f498b6f0bff99b52add" dependencies = [ "alloy-primitives 1.4.1", "arbitrary", @@ -1149,9 +1084,9 @@ dependencies = [ [[package]] name = "alloy-tx-macros" -version = "1.0.42" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab54221eccefa254ce9f65b079c097b1796e48c21c7ce358230f8988d75392fb" +checksum = "cd7ce8ed34106acd6e21942022b6a15be6454c2c3ead4d76811d3bdcd63cf771" dependencies = [ "darling 0.21.3", "proc-macro2", @@ -1919,6 +1854,17 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" +[[package]] +name = "backoff" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" +dependencies = [ + "getrandom 0.2.16", + "instant", + "rand 0.8.5", +] + [[package]] name = "backon" version = "1.5.2" @@ -2157,15 +2103,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", -] - [[package]] name = "block-buffer" version = "0.10.4" @@ -2286,7 +2223,7 @@ dependencies = [ "hashbrown 0.16.0", "indexmap 2.12.0", "once_cell", - "phf 0.13.1", + "phf", "rustc-hash 2.1.1", "static_assertions", ] @@ -2423,7 +2360,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" dependencies = [ - "sha2 0.10.9", + "sha2", "tinyvec", ] @@ -2763,7 +2700,7 @@ dependencies = [ "hmac", "k256", "serde", - "sha2 0.10.9", + "sha2", "thiserror 1.0.69", ] @@ -2779,7 +2716,7 @@ dependencies = [ "once_cell", "pbkdf2", "rand 0.8.5", - "sha2 0.10.9", + "sha2", "thiserror 1.0.69", ] @@ -2797,7 +2734,7 @@ dependencies = [ "generic-array", "ripemd", "serde", - "sha2 0.10.9", + "sha2", "sha3", "thiserror 1.0.69", ] @@ -3274,7 +3211,7 @@ dependencies = [ "p256", "serde", "serde_json", - "sha2 0.10.9", + "sha2", "sha3", "time", "x509-parser 0.15.1", @@ -3459,7 +3396,7 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer 0.10.4", + "block-buffer", "const-oid", "crypto-common", "subtle", @@ -3493,7 +3430,7 @@ dependencies = [ "libc", "option-ext", "redox_users 0.5.2", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -3662,7 +3599,7 @@ dependencies = [ "ed25519", "rand_core 0.6.4", "serde", - "sha2 0.10.9", + "sha2", "subtle", "zeroize", ] @@ -3860,7 +3797,7 @@ checksum = "c853bd72c9e5787f8aafc3df2907c2ed03cff3150c3acd94e2e53a98ab70a8ab" dependencies = [ "cpufeatures", "ring", - "sha2 0.10.9", + "sha2", ] [[package]] @@ -4843,7 +4780,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.61.2", + "windows-core 0.57.0", ] [[package]] @@ -5152,6 +5089,15 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + [[package]] name = "interprocess" version = "2.2.3" @@ -5618,7 +5564,7 @@ dependencies = [ "elliptic-curve", "once_cell", "serdect", - "sha2 0.10.9", + "sha2", "signature", ] @@ -5698,7 +5644,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", - "windows-targets 0.53.3", + "windows-targets 0.48.5", ] [[package]] @@ -5864,7 +5810,7 @@ dependencies = [ "multihash", "quick-protobuf", "rand 0.8.5", - "sha2 0.10.9", + "sha2", "thiserror 2.0.17", "tracing", "zeroize", @@ -6120,52 +6066,6 @@ dependencies = [ "redox_syscall 0.5.17", ] -[[package]] -name = "libsecp256k1" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79019718125edc905a079a70cfa5f3820bc76139fc91d6f9abc27ea2a887139" -dependencies = [ - "arrayref", - "base64 0.22.1", - "digest 0.9.0", - "libsecp256k1-core", - "libsecp256k1-gen-ecmult", - "libsecp256k1-gen-genmult", - "rand 0.8.5", - "serde", - "sha2 0.9.9", -] - -[[package]] -name = "libsecp256k1-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" -dependencies = [ - "crunchy", - "digest 0.9.0", - "subtle", -] - -[[package]] -name = "libsecp256k1-gen-ecmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" -dependencies = [ - "libsecp256k1-core", -] - -[[package]] -name = "libsecp256k1-gen-genmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" -dependencies = [ - "libsecp256k1-core", -] - [[package]] name = "libz-sys" version = "1.1.22" @@ -6260,6 +6160,15 @@ dependencies = [ "hashbrown 0.15.5", ] +[[package]] +name = "lru" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96051b46fc183dc9cd4a223960ef37b9af631b55191852a8274bfef064cda20f" +dependencies = [ + "hashbrown 0.16.0", +] + [[package]] name = "lru-slab" version = "0.1.2" @@ -7040,22 +6949,6 @@ version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" -[[package]] -name = "op-alloy-consensus" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a501241474c3118833d6195312ae7eb7cc90bbb0d5f524cbb0b06619e49ff67" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives 1.4.1", - "alloy-rlp", - "alloy-serde", - "derive_more", - "serde", - "thiserror 2.0.17", -] - [[package]] name = "op-alloy-consensus" version = "0.22.0" @@ -7094,8 +6987,8 @@ dependencies = [ "alloy-provider", "alloy-rpc-types-eth", "alloy-signer", - "op-alloy-consensus 0.22.0", - "op-alloy-rpc-types 0.22.0", + "op-alloy-consensus", + "op-alloy-rpc-types", ] [[package]] @@ -7108,25 +7001,6 @@ dependencies = [ "jsonrpsee 0.26.0", ] -[[package]] -name = "op-alloy-rpc-types" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "753d6f6b03beca1ba9cbd344c05fee075a2ce715ee9d61981c10b9c764a824a2" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-network-primitives", - "alloy-primitives 1.4.1", - "alloy-rpc-types-eth", - "alloy-serde", - "derive_more", - "op-alloy-consensus 0.20.0", - "serde", - "serde_json", - "thiserror 2.0.17", -] - [[package]] name = "op-alloy-rpc-types" version = "0.22.0" @@ -7140,33 +7014,12 @@ dependencies = [ "alloy-rpc-types-eth", "alloy-serde", "derive_more", - "op-alloy-consensus 0.22.0", + "op-alloy-consensus", "serde", "serde_json", "thiserror 2.0.17", ] -[[package]] -name = "op-alloy-rpc-types-engine" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14e50c94013a1d036a529df259151991dbbd6cf8dc215e3b68b784f95eec60e6" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives 1.4.1", - "alloy-rlp", - "alloy-rpc-types-engine", - "alloy-serde", - "derive_more", - "ethereum_ssz", - "ethereum_ssz_derive", - "op-alloy-consensus 0.20.0", - "serde", - "snap", - "thiserror 2.0.17", -] - [[package]] name = "op-alloy-rpc-types-engine" version = "0.22.0" @@ -7182,7 +7035,7 @@ dependencies = [ "derive_more", "ethereum_ssz", "ethereum_ssz_derive", - "op-alloy-consensus 0.22.0", + "op-alloy-consensus", "serde", "snap", "thiserror 2.0.17", @@ -7195,10 +7048,10 @@ dependencies = [ "alloy-consensus", "alloy-contract", "alloy-eips", - "alloy-evm 0.23.1", + "alloy-evm", "alloy-json-rpc", "alloy-network", - "alloy-op-evm 0.23.1", + "alloy-op-evm", "alloy-primitives 1.4.1", "alloy-provider", "alloy-rpc-client", @@ -7236,64 +7089,64 @@ dependencies = [ "metrics", "moka", "nanoid", - "op-alloy-consensus 0.22.0", + "op-alloy-consensus", "op-alloy-flz", "op-alloy-network", - "op-alloy-rpc-types 0.22.0", - "op-alloy-rpc-types-engine 0.22.0", - "op-revm 12.0.1", + "op-alloy-rpc-types", + "op-alloy-rpc-types-engine", + "op-revm", "opentelemetry 0.31.0", "p2p", "parking_lot", "rand 0.9.2", "reqwest", "reth", - "reth-basic-payload-builder 1.9.1", - "reth-chain-state 1.9.1", - "reth-chainspec 1.9.1", + "reth-basic-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-cli", "reth-cli-commands", "reth-cli-util", "reth-db", - "reth-evm 1.9.1", - "reth-execution-types 1.9.1", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-exex", "reth-ipc", - "reth-metrics 1.9.1", - "reth-network-peers 1.9.1", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-network-peers 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-node-api", "reth-node-builder", "reth-node-core", "reth-node-ethereum", - "reth-optimism-chainspec 1.9.1", + "reth-optimism-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-optimism-cli", - "reth-optimism-consensus 1.9.1", - "reth-optimism-evm 1.9.1", - "reth-optimism-forks 1.9.1", + "reth-optimism-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-forks 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-optimism-node", - "reth-optimism-payload-builder 1.9.1", - "reth-optimism-primitives 1.9.1", + "reth-optimism-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-optimism-rpc", - "reth-optimism-txpool 1.9.1", - "reth-payload-builder 1.9.1", - "reth-payload-builder-primitives 1.9.1", - "reth-payload-primitives 1.9.1", - "reth-payload-util 1.9.1", + "reth-optimism-txpool 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-builder-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-util 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-primitives", - "reth-primitives-traits 1.9.1", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-provider", - "reth-revm 1.9.1", + "reth-revm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-rpc-api", "reth-rpc-engine-api", "reth-rpc-eth-types", "reth-rpc-layer", - "reth-storage-api 1.9.1", - "reth-tasks 1.9.1", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-testing-utils", "reth-tracing-otlp", - "reth-transaction-pool 1.9.1", - "reth-trie 1.9.1", - "revm 31.0.1", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm", "rlimit", "rollup-boost", "secp256k1 0.30.0", @@ -7321,17 +7174,6 @@ dependencies = [ "vergen-git2", ] -[[package]] -name = "op-revm" -version = "10.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "826f43a5b1613c224f561847c152bfbaefcb593a9ae2c612ff4dc4661c6e625f" -dependencies = [ - "auto_impl", - "revm 29.0.1", - "serde", -] - [[package]] name = "op-revm" version = "12.0.1" @@ -7339,7 +7181,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcd8cb3274e87936b595eb2247ad3bda146695fceb7159afa76010529af53553" dependencies = [ "auto_impl", - "revm 31.0.1", + "revm", "serde", ] @@ -7583,7 +7425,7 @@ dependencies = [ "ecdsa", "elliptic-curve", "primeorder", - "sha2 0.10.9", + "sha2", ] [[package]] @@ -7761,37 +7603,17 @@ dependencies = [ "rustc_version 0.4.1", ] -[[package]] -name = "phf" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" -dependencies = [ - "phf_macros 0.11.3", - "phf_shared 0.11.3", -] - [[package]] name = "phf" version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" dependencies = [ - "phf_macros 0.13.1", - "phf_shared 0.13.1", + "phf_macros", + "phf_shared", "serde", ] -[[package]] -name = "phf_generator" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" -dependencies = [ - "phf_shared 0.11.3", - "rand 0.8.5", -] - [[package]] name = "phf_generator" version = "0.13.1" @@ -7799,20 +7621,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" dependencies = [ "fastrand", - "phf_shared 0.13.1", -] - -[[package]] -name = "phf_macros" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" -dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", - "proc-macro2", - "quote", - "syn 2.0.106", + "phf_shared", ] [[package]] @@ -7821,22 +7630,13 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" dependencies = [ - "phf_generator 0.13.1", - "phf_shared 0.13.1", + "phf_generator", + "phf_shared", "proc-macro2", "quote", "syn 2.0.106", ] -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher", -] - [[package]] name = "phf_shared" version = "0.13.1" @@ -8684,16 +8484,16 @@ dependencies = [ "aquamarine", "clap", "eyre", - "reth-chainspec 1.9.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-cli-runner", "reth-cli-util", - "reth-consensus 1.9.1", - "reth-consensus-common 1.9.1", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-consensus-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-db", "reth-ethereum-cli", "reth-ethereum-payload-builder", - "reth-ethereum-primitives 1.9.1", - "reth-evm 1.9.1", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-network", "reth-network-api", "reth-node-api", @@ -8701,30 +8501,30 @@ dependencies = [ "reth-node-core", "reth-node-ethereum", "reth-node-metrics", - "reth-payload-builder 1.9.1", - "reth-payload-primitives 1.9.1", + "reth-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-primitives", "reth-provider", "reth-ress-protocol", "reth-ress-provider", - "reth-revm 1.9.1", + "reth-revm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-rpc", "reth-rpc-api", "reth-rpc-builder", "reth-rpc-convert", "reth-rpc-eth-types", "reth-rpc-server-types", - "reth-tasks 1.9.1", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-tokio-util", - "reth-transaction-pool 1.9.1", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth)", "tokio", "tracing", ] [[package]] name = "reth-basic-payload-builder" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8732,15 +8532,15 @@ dependencies = [ "futures-core", "futures-util", "metrics", - "reth-chain-state 1.8.3", - "reth-metrics 1.8.3", - "reth-payload-builder 1.8.3", - "reth-payload-builder-primitives 1.8.3", - "reth-payload-primitives 1.8.3", - "reth-primitives-traits 1.8.3", - "reth-revm 1.8.3", - "reth-storage-api 1.8.3", - "reth-tasks 1.8.3", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-payload-builder-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-revm 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", "tokio", "tracing", ] @@ -8756,23 +8556,23 @@ dependencies = [ "futures-core", "futures-util", "metrics", - "reth-chain-state 1.9.1", - "reth-metrics 1.9.1", - "reth-payload-builder 1.9.1", - "reth-payload-builder-primitives 1.9.1", - "reth-payload-primitives 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-revm 1.9.1", - "reth-storage-api 1.9.1", - "reth-tasks 1.9.1", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-builder-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-revm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth)", "tokio", "tracing", ] [[package]] name = "reth-chain-state" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8781,15 +8581,15 @@ dependencies = [ "metrics", "parking_lot", "pin-project", - "reth-chainspec 1.8.3", - "reth-errors 1.8.3", - "reth-ethereum-primitives 1.8.3", - "reth-execution-types 1.8.3", - "reth-metrics 1.8.3", - "reth-primitives-traits 1.8.3", - "reth-storage-api 1.8.3", - "reth-trie 1.8.3", - "revm-database 7.0.5", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-errors 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-trie 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "revm-database", "tokio", "tokio-stream", "tracing", @@ -8810,16 +8610,16 @@ dependencies = [ "parking_lot", "pin-project", "rand 0.9.2", - "reth-chainspec 1.9.1", - "reth-errors 1.9.1", - "reth-ethereum-primitives 1.9.1", - "reth-execution-types 1.9.1", - "reth-metrics 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-storage-api 1.9.1", - "reth-trie 1.9.1", - "revm-database 9.0.4", - "revm-state 8.1.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm-database", + "revm-state", "serde", "tokio", "tokio-stream", @@ -8828,21 +8628,21 @@ dependencies = [ [[package]] name = "reth-chainspec" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", - "alloy-evm 0.21.3", + "alloy-evm", "alloy-genesis", "alloy-primitives 1.4.1", "alloy-trie", "auto_impl", "derive_more", - "reth-ethereum-forks 1.8.3", - "reth-network-peers 1.8.3", - "reth-primitives-traits 1.8.3", + "reth-ethereum-forks 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-network-peers 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", "serde_json", ] @@ -8854,15 +8654,15 @@ dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", - "alloy-evm 0.23.1", + "alloy-evm", "alloy-genesis", "alloy-primitives 1.4.1", "alloy-trie", "auto_impl", "derive_more", - "reth-ethereum-forks 1.9.1", - "reth-network-peers 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-ethereum-forks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-network-peers 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde_json", ] @@ -8903,13 +8703,13 @@ dependencies = [ "lz4", "ratatui", "reqwest", - "reth-chainspec 1.9.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-cli", "reth-cli-runner", "reth-cli-util", - "reth-codecs 1.9.1", + "reth-codecs 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-config", - "reth-consensus 1.9.1", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-db", "reth-db-api", "reth-db-common", @@ -8922,27 +8722,27 @@ dependencies = [ "reth-era-utils", "reth-eth-wire", "reth-etl", - "reth-evm 1.9.1", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-exex", - "reth-fs-util 1.9.1", + "reth-fs-util 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-net-nat", "reth-network", "reth-network-p2p", - "reth-network-peers 1.9.1", + "reth-network-peers 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-node-api", "reth-node-builder", "reth-node-core", "reth-node-events", "reth-node-metrics", - "reth-primitives-traits 1.9.1", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-provider", "reth-prune", - "reth-revm 1.9.1", + "reth-revm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-stages", "reth-static-file", - "reth-static-file-types 1.9.1", - "reth-trie 1.9.1", - "reth-trie-common 1.9.1", + "reth-static-file-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-trie-db", "secp256k1 0.30.0", "serde", @@ -8960,7 +8760,7 @@ name = "reth-cli-runner" version = "1.9.1" source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03235164855c" dependencies = [ - "reth-tasks 1.9.1", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth)", "tokio", "tracing", ] @@ -8976,7 +8776,7 @@ dependencies = [ "eyre", "libc", "rand 0.8.5", - "reth-fs-util 1.9.1", + "reth-fs-util 1.9.1 (git+https://github.com/paradigmxyz/reth)", "secp256k1 0.30.0", "serde", "thiserror 2.0.17", @@ -8985,8 +8785,8 @@ dependencies = [ [[package]] name = "reth-codecs" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-eips", @@ -8995,9 +8795,9 @@ dependencies = [ "alloy-trie", "bytes", "modular-bitfield", - "op-alloy-consensus 0.20.0", - "reth-codecs-derive 1.8.3", - "reth-zstd-compressors 1.8.3", + "op-alloy-consensus", + "reth-codecs-derive 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-zstd-compressors 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", "serde", ] @@ -9014,19 +8814,18 @@ dependencies = [ "arbitrary", "bytes", "modular-bitfield", - "op-alloy-consensus 0.22.0", - "reth-codecs-derive 1.9.1", - "reth-zstd-compressors 1.9.1", + "op-alloy-consensus", + "reth-codecs-derive 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-zstd-compressors 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde", "visibility", ] [[package]] name = "reth-codecs-derive" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ - "convert_case", "proc-macro2", "quote", "syn 2.0.106", @@ -9050,8 +8849,8 @@ dependencies = [ "eyre", "humantime-serde", "reth-network-types", - "reth-prune-types 1.9.1", - "reth-stages-types 1.9.1", + "reth-prune-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-stages-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde", "toml", "url", @@ -9059,14 +8858,14 @@ dependencies = [ [[package]] name = "reth-consensus" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", "auto_impl", - "reth-execution-types 1.8.3", - "reth-primitives-traits 1.8.3", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", "thiserror 2.0.17", ] @@ -9078,21 +8877,21 @@ dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", "auto_impl", - "reth-execution-types 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "thiserror 2.0.17", ] [[package]] name = "reth-consensus-common" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-eips", - "reth-chainspec 1.8.3", - "reth-consensus 1.8.3", - "reth-primitives-traits 1.8.3", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", ] [[package]] @@ -9102,9 +8901,9 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "alloy-consensus", "alloy-eips", - "reth-chainspec 1.9.1", - "reth-consensus 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", ] [[package]] @@ -9125,7 +8924,7 @@ dependencies = [ "futures", "reqwest", "reth-node-api", - "reth-primitives-traits 1.9.1", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-tracing", "ringbuffer", "serde", @@ -9145,12 +8944,12 @@ dependencies = [ "page_size", "parking_lot", "reth-db-api", - "reth-fs-util 1.9.1", + "reth-fs-util 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-libmdbx", - "reth-metrics 1.9.1", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-nippy-jar", - "reth-static-file-types 1.9.1", - "reth-storage-errors 1.9.1", + "reth-static-file-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-tracing", "rustc-hash 2.1.1", "strum 0.27.2", @@ -9174,15 +8973,15 @@ dependencies = [ "modular-bitfield", "parity-scale-codec", "proptest", - "reth-codecs 1.9.1", - "reth-db-models 1.9.1", - "reth-ethereum-primitives 1.9.1", - "reth-optimism-primitives 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-prune-types 1.9.1", - "reth-stages-types 1.9.1", - "reth-storage-errors 1.9.1", - "reth-trie-common 1.9.1", + "reth-codecs 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-db-models 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-prune-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-stages-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", "roaring", "serde", ] @@ -9197,19 +8996,19 @@ dependencies = [ "alloy-primitives 1.4.1", "boyer-moore-magiclen", "eyre", - "reth-chainspec 1.9.1", - "reth-codecs 1.9.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-codecs 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-config", "reth-db-api", "reth-etl", - "reth-execution-errors 1.9.1", - "reth-fs-util 1.9.1", + "reth-execution-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-fs-util 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-node-types", - "reth-primitives-traits 1.9.1", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-provider", - "reth-stages-types 1.9.1", - "reth-static-file-types 1.9.1", - "reth-trie 1.9.1", + "reth-stages-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-static-file-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-trie-db", "serde", "serde_json", @@ -9219,12 +9018,12 @@ dependencies = [ [[package]] name = "reth-db-models" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-eips", "alloy-primitives 1.4.1", - "reth-primitives-traits 1.8.3", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", ] [[package]] @@ -9237,8 +9036,8 @@ dependencies = [ "arbitrary", "bytes", "modular-bitfield", - "reth-codecs 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-codecs 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde", ] @@ -9254,10 +9053,10 @@ dependencies = [ "itertools 0.14.0", "parking_lot", "rand 0.8.5", - "reth-ethereum-forks 1.9.1", + "reth-ethereum-forks 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-net-banlist", "reth-net-nat", - "reth-network-peers 1.9.1", + "reth-network-peers 1.9.1 (git+https://github.com/paradigmxyz/reth)", "schnellru", "secp256k1 0.30.0", "serde", @@ -9281,10 +9080,10 @@ dependencies = [ "itertools 0.14.0", "metrics", "rand 0.9.2", - "reth-chainspec 1.9.1", - "reth-ethereum-forks 1.9.1", - "reth-metrics 1.9.1", - "reth-network-peers 1.9.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-forks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-network-peers 1.9.1 (git+https://github.com/paradigmxyz/reth)", "secp256k1 0.30.0", "thiserror 2.0.17", "tokio", @@ -9302,8 +9101,8 @@ dependencies = [ "hickory-resolver", "linked_hash_set", "parking_lot", - "reth-ethereum-forks 1.9.1", - "reth-network-peers 1.9.1", + "reth-ethereum-forks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-network-peers 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-tokio-util", "schnellru", "secp256k1 0.30.0", @@ -9332,15 +9131,15 @@ dependencies = [ "pin-project", "rayon", "reth-config", - "reth-consensus 1.9.1", - "reth-ethereum-primitives 1.9.1", - "reth-metrics 1.9.1", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-network-p2p", - "reth-network-peers 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-network-peers 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-provider", - "reth-storage-api 1.9.1", - "reth-tasks 1.9.1", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-testing-utils", "tempfile", "thiserror 2.0.17", @@ -9368,9 +9167,9 @@ dependencies = [ "hmac", "pin-project", "rand 0.8.5", - "reth-network-peers 1.9.1", + "reth-network-peers 1.9.1 (git+https://github.com/paradigmxyz/reth)", "secp256k1 0.30.0", - "sha2 0.10.9", + "sha2", "sha3", "thiserror 2.0.17", "tokio", @@ -9389,15 +9188,15 @@ dependencies = [ "alloy-rpc-types-engine", "eyre", "futures-util", - "op-alloy-rpc-types-engine 0.22.0", - "reth-chainspec 1.9.1", - "reth-engine-primitives 1.9.1", - "reth-ethereum-engine-primitives 1.9.1", - "reth-optimism-chainspec 1.9.1", - "reth-payload-builder 1.9.1", - "reth-payload-primitives 1.9.1", - "reth-storage-api 1.9.1", - "reth-transaction-pool 1.9.1", + "op-alloy-rpc-types-engine", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth)", "tokio", "tokio-stream", "tracing", @@ -9405,23 +9204,23 @@ dependencies = [ [[package]] name = "reth-engine-primitives" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "auto_impl", - "reth-chain-state 1.8.3", - "reth-errors 1.8.3", - "reth-ethereum-primitives 1.8.3", - "reth-evm 1.8.3", - "reth-execution-types 1.8.3", - "reth-payload-builder-primitives 1.8.3", - "reth-payload-primitives 1.8.3", - "reth-primitives-traits 1.8.3", - "reth-trie-common 1.8.3", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-errors 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-payload-builder-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", "serde", "thiserror 2.0.17", ] @@ -9437,15 +9236,15 @@ dependencies = [ "alloy-rpc-types-engine", "auto_impl", "futures", - "reth-chain-state 1.9.1", - "reth-errors 1.9.1", - "reth-ethereum-primitives 1.9.1", - "reth-evm 1.9.1", - "reth-execution-types 1.9.1", - "reth-payload-builder-primitives 1.9.1", - "reth-payload-primitives 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-trie-common 1.9.1", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-builder-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde", "thiserror 2.0.17", "tokio", @@ -9458,19 +9257,19 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "futures", "pin-project", - "reth-chainspec 1.9.1", - "reth-consensus 1.9.1", - "reth-engine-primitives 1.9.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-engine-tree", - "reth-ethereum-primitives 1.9.1", - "reth-evm 1.9.1", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-network-p2p", "reth-node-types", - "reth-payload-builder 1.9.1", + "reth-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-provider", "reth-prune", "reth-stages-api", - "reth-tasks 1.9.1", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth)", ] [[package]] @@ -9480,7 +9279,7 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm 0.23.1", + "alloy-evm", "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-engine", @@ -9492,35 +9291,35 @@ dependencies = [ "mini-moka", "parking_lot", "rayon", - "reth-chain-state 1.9.1", - "reth-chainspec 1.9.1", - "reth-consensus 1.9.1", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-db", - "reth-engine-primitives 1.9.1", - "reth-errors 1.9.1", - "reth-ethereum-primitives 1.9.1", - "reth-evm 1.9.1", - "reth-execution-types 1.9.1", - "reth-metrics 1.9.1", + "reth-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-network-p2p", - "reth-payload-builder 1.9.1", - "reth-payload-primitives 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-provider", "reth-prune", - "reth-prune-types 1.9.1", - "reth-revm 1.9.1", + "reth-prune-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-revm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-stages", "reth-stages-api", "reth-static-file", - "reth-tasks 1.9.1", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-tracing", - "reth-trie 1.9.1", + "reth-trie 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-trie-parallel", - "reth-trie-sparse 1.9.1", + "reth-trie-sparse 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-trie-sparse-parallel", - "revm 31.0.1", - "revm-primitives 21.0.2", + "revm", + "revm-primitives", "schnellru", "smallvec", "thiserror 2.0.17", @@ -9539,16 +9338,16 @@ dependencies = [ "futures", "itertools 0.14.0", "pin-project", - "reth-chainspec 1.9.1", - "reth-engine-primitives 1.9.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-engine-tree", - "reth-errors 1.9.1", - "reth-evm 1.9.1", - "reth-fs-util 1.9.1", - "reth-payload-primitives 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-revm 1.9.1", - "reth-storage-api 1.9.1", + "reth-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-fs-util 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-revm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde", "serde_json", "tokio", @@ -9567,7 +9366,7 @@ dependencies = [ "alloy-rlp", "ethereum_ssz", "ethereum_ssz_derive", - "reth-ethereum-primitives 1.9.1", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", "snap", "thiserror 2.0.17", ] @@ -9582,8 +9381,8 @@ dependencies = [ "eyre", "futures-util", "reqwest", - "reth-fs-util 1.9.1", - "sha2 0.10.9", + "reth-fs-util 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "sha2", "tokio", ] @@ -9600,23 +9399,23 @@ dependencies = [ "reth-era", "reth-era-downloader", "reth-etl", - "reth-fs-util 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-fs-util 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-provider", - "reth-stages-types 1.9.1", - "reth-storage-api 1.9.1", + "reth-stages-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", "tokio", "tracing", ] [[package]] name = "reth-errors" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ - "reth-consensus 1.8.3", - "reth-execution-errors 1.8.3", - "reth-storage-errors 1.8.3", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-execution-errors 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", "thiserror 2.0.17", ] @@ -9625,9 +9424,9 @@ name = "reth-errors" version = "1.9.1" source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03235164855c" dependencies = [ - "reth-consensus 1.9.1", - "reth-execution-errors 1.9.1", - "reth-storage-errors 1.9.1", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-execution-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", "thiserror 2.0.17", ] @@ -9643,13 +9442,13 @@ dependencies = [ "derive_more", "futures", "pin-project", - "reth-codecs 1.9.1", + "reth-codecs 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-ecies", - "reth-eth-wire-types 1.9.1", - "reth-ethereum-forks 1.9.1", - "reth-metrics 1.9.1", - "reth-network-peers 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-eth-wire-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-forks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-network-peers 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde", "snap", "thiserror 2.0.17", @@ -9661,21 +9460,21 @@ dependencies = [ [[package]] name = "reth-eth-wire-types" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", - "alloy-hardforks 0.3.5", + "alloy-hardforks", "alloy-primitives 1.4.1", "alloy-rlp", "bytes", "derive_more", - "reth-chainspec 1.8.3", - "reth-codecs-derive 1.8.3", - "reth-ethereum-primitives 1.8.3", - "reth-primitives-traits 1.8.3", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-codecs-derive 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", "serde", "thiserror 2.0.17", ] @@ -9688,15 +9487,15 @@ dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", - "alloy-hardforks 0.4.4", + "alloy-hardforks", "alloy-primitives 1.4.1", "alloy-rlp", "bytes", "derive_more", - "reth-chainspec 1.9.1", - "reth-codecs-derive 1.9.1", - "reth-ethereum-primitives 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-codecs-derive 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde", "thiserror 2.0.17", ] @@ -9708,7 +9507,7 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "clap", "eyre", - "reth-chainspec 1.9.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-cli", "reth-cli-commands", "reth-cli-runner", @@ -9733,29 +9532,29 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives 1.4.1", - "reth-chainspec 1.9.1", - "reth-consensus 1.9.1", - "reth-consensus-common 1.9.1", - "reth-execution-types 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-consensus-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "tracing", ] [[package]] name = "reth-ethereum-engine-primitives" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-eips", "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-engine", - "reth-engine-primitives 1.8.3", - "reth-ethereum-primitives 1.8.3", - "reth-payload-primitives 1.8.3", - "reth-primitives-traits 1.8.3", + "reth-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", "serde", - "sha2 0.10.9", + "sha2", "thiserror 2.0.17", ] @@ -9768,22 +9567,22 @@ dependencies = [ "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-engine", - "reth-engine-primitives 1.9.1", - "reth-ethereum-primitives 1.9.1", - "reth-payload-primitives 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde", - "sha2 0.10.9", + "sha2", "thiserror 2.0.17", ] [[package]] name = "reth-ethereum-forks" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-eip2124", - "alloy-hardforks 0.3.5", + "alloy-hardforks", "alloy-primitives 1.4.1", "auto_impl", "once_cell", @@ -9796,7 +9595,7 @@ version = "1.9.1" source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03235164855c" dependencies = [ "alloy-eip2124", - "alloy-hardforks 0.4.4", + "alloy-hardforks", "alloy-primitives 1.4.1", "auto_impl", "once_cell", @@ -9813,29 +9612,29 @@ dependencies = [ "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-engine", - "reth-basic-payload-builder 1.9.1", - "reth-chainspec 1.9.1", - "reth-consensus-common 1.9.1", - "reth-errors 1.9.1", - "reth-ethereum-primitives 1.9.1", - "reth-evm 1.9.1", + "reth-basic-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-consensus-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-evm-ethereum", - "reth-payload-builder 1.9.1", - "reth-payload-builder-primitives 1.9.1", - "reth-payload-primitives 1.9.1", - "reth-payload-validator 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-revm 1.9.1", - "reth-storage-api 1.9.1", - "reth-transaction-pool 1.9.1", - "revm 31.0.1", + "reth-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-builder-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-validator 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-revm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm", "tracing", ] [[package]] name = "reth-ethereum-primitives" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-eips", @@ -9843,8 +9642,8 @@ dependencies = [ "alloy-rlp", "alloy-rpc-types-eth", "alloy-serde", - "reth-primitives-traits 1.8.3", - "reth-zstd-compressors 1.8.3", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-zstd-compressors 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", "serde", "serde_with", ] @@ -9862,9 +9661,9 @@ dependencies = [ "alloy-serde", "arbitrary", "modular-bitfield", - "reth-codecs 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-zstd-compressors 1.9.1", + "reth-codecs 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-zstd-compressors 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde", "serde_with", ] @@ -9881,23 +9680,23 @@ dependencies = [ [[package]] name = "reth-evm" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm 0.21.3", + "alloy-evm", "alloy-primitives 1.4.1", "auto_impl", "derive_more", "futures-util", - "reth-execution-errors 1.8.3", - "reth-execution-types 1.8.3", - "reth-primitives-traits 1.8.3", - "reth-storage-api 1.8.3", - "reth-storage-errors 1.8.3", - "reth-trie-common 1.8.3", - "revm 29.0.1", + "reth-execution-errors 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "revm", ] [[package]] @@ -9907,20 +9706,20 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm 0.23.1", + "alloy-evm", "alloy-primitives 1.4.1", "auto_impl", "derive_more", "futures-util", "metrics", - "reth-execution-errors 1.9.1", - "reth-execution-types 1.9.1", - "reth-metrics 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-storage-api 1.9.1", - "reth-storage-errors 1.9.1", - "reth-trie-common 1.9.1", - "revm 31.0.1", + "reth-execution-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm", ] [[package]] @@ -9930,29 +9729,29 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm 0.23.1", + "alloy-evm", "alloy-primitives 1.4.1", "alloy-rpc-types-engine", - "reth-chainspec 1.9.1", - "reth-ethereum-forks 1.9.1", - "reth-ethereum-primitives 1.9.1", - "reth-evm 1.9.1", - "reth-execution-types 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-storage-errors 1.9.1", - "revm 31.0.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-forks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm", ] [[package]] name = "reth-execution-errors" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ - "alloy-evm 0.21.3", + "alloy-evm", "alloy-primitives 1.4.1", "alloy-rlp", "nybbles", - "reth-storage-errors 1.8.3", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", "thiserror 2.0.17", ] @@ -9961,28 +9760,28 @@ name = "reth-execution-errors" version = "1.9.1" source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03235164855c" dependencies = [ - "alloy-evm 0.23.1", + "alloy-evm", "alloy-primitives 1.4.1", "alloy-rlp", "nybbles", - "reth-storage-errors 1.9.1", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", "thiserror 2.0.17", ] [[package]] name = "reth-execution-types" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm 0.21.3", + "alloy-evm", "alloy-primitives 1.4.1", "derive_more", - "reth-ethereum-primitives 1.8.3", - "reth-primitives-traits 1.8.3", - "reth-trie-common 1.8.3", - "revm 29.0.1", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "revm", ] [[package]] @@ -9992,13 +9791,13 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm 0.23.1", + "alloy-evm", "alloy-primitives 1.4.1", "derive_more", - "reth-ethereum-primitives 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-trie-common 1.9.1", - "revm 31.0.1", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm", "serde", "serde_with", ] @@ -10016,23 +9815,23 @@ dependencies = [ "itertools 0.14.0", "metrics", "parking_lot", - "reth-chain-state 1.9.1", - "reth-chainspec 1.9.1", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-config", - "reth-ethereum-primitives 1.9.1", - "reth-evm 1.9.1", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-exex-types", - "reth-fs-util 1.9.1", - "reth-metrics 1.9.1", + "reth-fs-util 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-node-api", "reth-node-core", - "reth-payload-builder 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-provider", - "reth-prune-types 1.9.1", - "reth-revm 1.9.1", + "reth-prune-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-revm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-stages-api", - "reth-tasks 1.9.1", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-tracing", "rmp-serde", "thiserror 2.0.17", @@ -10048,17 +9847,17 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "alloy-eips", "alloy-primitives 1.4.1", - "reth-chain-state 1.9.1", - "reth-execution-types 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde", "serde_with", ] [[package]] name = "reth-fs-util" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "serde", "serde_json", @@ -10088,17 +9887,17 @@ dependencies = [ "futures", "jsonrpsee 0.26.0", "pretty_assertions", - "reth-engine-primitives 1.9.1", - "reth-evm 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-provider", - "reth-revm 1.9.1", + "reth-revm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-rpc-api", "reth-tracing", - "reth-trie 1.9.1", - "revm 31.0.1", - "revm-bytecode 7.1.1", - "revm-database 9.0.4", + "reth-trie 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm", + "revm-bytecode", + "revm-database", "serde", "serde_json", ] @@ -10150,8 +9949,8 @@ dependencies = [ [[package]] name = "reth-metrics" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "metrics", "metrics-derive", @@ -10212,28 +10011,28 @@ dependencies = [ "pin-project", "rand 0.8.5", "rand 0.9.2", - "reth-chainspec 1.9.1", - "reth-consensus 1.9.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-discv4", "reth-discv5", "reth-dns-discovery", "reth-ecies", "reth-eth-wire", - "reth-eth-wire-types 1.9.1", - "reth-ethereum-forks 1.9.1", - "reth-ethereum-primitives 1.9.1", - "reth-fs-util 1.9.1", - "reth-metrics 1.9.1", + "reth-eth-wire-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-forks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-fs-util 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-net-banlist", "reth-network-api", "reth-network-p2p", - "reth-network-peers 1.9.1", + "reth-network-peers 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-network-types", - "reth-primitives-traits 1.9.1", - "reth-storage-api 1.9.1", - "reth-tasks 1.9.1", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-tokio-util", - "reth-transaction-pool 1.9.1", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth)", "rustc-hash 2.1.1", "schnellru", "secp256k1 0.30.0", @@ -10259,10 +10058,10 @@ dependencies = [ "derive_more", "enr", "futures", - "reth-eth-wire-types 1.9.1", - "reth-ethereum-forks 1.9.1", + "reth-eth-wire-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-forks 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-network-p2p", - "reth-network-peers 1.9.1", + "reth-network-peers 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-network-types", "reth-tokio-util", "serde", @@ -10283,21 +10082,21 @@ dependencies = [ "derive_more", "futures", "parking_lot", - "reth-consensus 1.9.1", - "reth-eth-wire-types 1.9.1", - "reth-ethereum-primitives 1.9.1", - "reth-network-peers 1.9.1", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-eth-wire-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-network-peers 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-network-types", - "reth-primitives-traits 1.9.1", - "reth-storage-errors 1.9.1", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", "tokio", "tracing", ] [[package]] name = "reth-network-peers" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-primitives 1.4.1", "alloy-rlp", @@ -10330,7 +10129,7 @@ dependencies = [ "alloy-eip2124", "humantime-serde", "reth-net-banlist", - "reth-network-peers 1.9.1", + "reth-network-peers 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde", "serde_json", "tracing", @@ -10346,7 +10145,7 @@ dependencies = [ "derive_more", "lz4_flex", "memmap2", - "reth-fs-util 1.9.1", + "reth-fs-util 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde", "thiserror 2.0.17", "tracing", @@ -10360,21 +10159,21 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "alloy-rpc-types-engine", "eyre", - "reth-basic-payload-builder 1.9.1", - "reth-consensus 1.9.1", + "reth-basic-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-db-api", - "reth-engine-primitives 1.9.1", - "reth-evm 1.9.1", + "reth-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-network-api", "reth-node-core", "reth-node-types", - "reth-payload-builder 1.9.1", - "reth-payload-builder-primitives 1.9.1", - "reth-payload-primitives 1.9.1", + "reth-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-builder-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-provider", - "reth-tasks 1.9.1", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-tokio-util", - "reth-transaction-pool 1.9.1", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth)", ] [[package]] @@ -10394,25 +10193,25 @@ dependencies = [ "futures", "jsonrpsee 0.26.0", "rayon", - "reth-basic-payload-builder 1.9.1", - "reth-chain-state 1.9.1", - "reth-chainspec 1.9.1", + "reth-basic-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-cli-util", "reth-config", - "reth-consensus 1.9.1", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-consensus-debug-client", "reth-db", "reth-db-api", "reth-db-common", "reth-downloaders", "reth-engine-local", - "reth-engine-primitives 1.9.1", + "reth-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-engine-service", "reth-engine-tree", "reth-engine-util", - "reth-evm 1.9.1", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-exex", - "reth-fs-util 1.9.1", + "reth-fs-util 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-invalid-block-hooks", "reth-network", "reth-network-api", @@ -10422,8 +10221,8 @@ dependencies = [ "reth-node-ethstats", "reth-node-events", "reth-node-metrics", - "reth-payload-builder 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-provider", "reth-prune", "reth-rpc", @@ -10434,10 +10233,10 @@ dependencies = [ "reth-rpc-layer", "reth-stages", "reth-static-file", - "reth-tasks 1.9.1", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-tokio-util", "reth-tracing", - "reth-transaction-pool 1.9.1", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth)", "secp256k1 0.30.0", "serde_json", "tokio", @@ -10461,31 +10260,31 @@ dependencies = [ "futures", "humantime", "rand 0.9.2", - "reth-chainspec 1.9.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-cli-util", "reth-config", - "reth-consensus 1.9.1", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-db", "reth-discv4", "reth-discv5", "reth-engine-local", - "reth-engine-primitives 1.9.1", - "reth-ethereum-forks 1.9.1", + "reth-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-forks 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-net-nat", "reth-network", "reth-network-p2p", - "reth-network-peers 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-prune-types 1.9.1", + "reth-network-peers 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-prune-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-rpc-convert", "reth-rpc-eth-types", "reth-rpc-server-types", - "reth-stages-types 1.9.1", - "reth-storage-api 1.9.1", - "reth-storage-errors 1.9.1", + "reth-stages-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-tracing", "reth-tracing-otlp", - "reth-transaction-pool 1.9.1", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth)", "secp256k1 0.30.0", "serde", "shellexpand", @@ -10507,22 +10306,22 @@ dependencies = [ "alloy-rpc-types-engine", "alloy-rpc-types-eth", "eyre", - "reth-chainspec 1.9.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-engine-local", - "reth-engine-primitives 1.9.1", + "reth-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-ethereum-consensus", - "reth-ethereum-engine-primitives 1.9.1", + "reth-ethereum-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-ethereum-payload-builder", - "reth-ethereum-primitives 1.9.1", - "reth-evm 1.9.1", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-evm-ethereum", "reth-network", "reth-node-api", "reth-node-builder", - "reth-payload-primitives 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-provider", - "reth-revm 1.9.1", + "reth-revm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-rpc", "reth-rpc-api", "reth-rpc-builder", @@ -10530,8 +10329,8 @@ dependencies = [ "reth-rpc-eth-types", "reth-rpc-server-types", "reth-tracing", - "reth-transaction-pool 1.9.1", - "revm 31.0.1", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm", "tokio", ] @@ -10544,11 +10343,11 @@ dependencies = [ "alloy-primitives 1.4.1", "chrono", "futures-util", - "reth-chain-state 1.9.1", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-network-api", - "reth-primitives-traits 1.9.1", - "reth-storage-api 1.9.1", - "reth-transaction-pool 1.9.1", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde", "serde_json", "thiserror 2.0.17", @@ -10572,13 +10371,13 @@ dependencies = [ "futures", "humantime", "pin-project", - "reth-engine-primitives 1.9.1", + "reth-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-network-api", - "reth-primitives-traits 1.9.1", - "reth-prune-types 1.9.1", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-prune-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-stages", - "reth-static-file-types 1.9.1", - "reth-storage-api 1.9.1", + "reth-static-file-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", "tokio", "tracing", ] @@ -10597,8 +10396,8 @@ dependencies = [ "metrics-util 0.19.1", "procfs", "reqwest", - "reth-metrics 1.9.1", - "reth-tasks 1.9.1", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth)", "tikv-jemalloc-ctl", "tokio", "tower 0.5.2", @@ -10610,33 +10409,33 @@ name = "reth-node-types" version = "1.9.1" source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03235164855c" dependencies = [ - "reth-chainspec 1.9.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-db-api", - "reth-engine-primitives 1.9.1", - "reth-payload-primitives 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", ] [[package]] name = "reth-optimism-chainspec" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", "alloy-genesis", - "alloy-hardforks 0.3.5", + "alloy-hardforks", "alloy-primitives 1.4.1", "derive_more", - "op-alloy-consensus 0.20.0", - "op-alloy-rpc-types 0.20.0", - "reth-chainspec 1.8.3", - "reth-ethereum-forks 1.8.3", - "reth-network-peers 1.8.3", - "reth-optimism-forks 1.8.3", - "reth-optimism-primitives 1.8.3", - "reth-primitives-traits 1.8.3", + "op-alloy-consensus", + "op-alloy-rpc-types", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-ethereum-forks 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-network-peers 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-optimism-forks 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-optimism-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", "serde_json", ] @@ -10649,19 +10448,19 @@ dependencies = [ "alloy-consensus", "alloy-eips", "alloy-genesis", - "alloy-hardforks 0.4.4", + "alloy-hardforks", "alloy-primitives 1.4.1", "derive_more", "miniz_oxide", - "op-alloy-consensus 0.22.0", - "op-alloy-rpc-types 0.22.0", + "op-alloy-consensus", + "op-alloy-rpc-types", "paste", - "reth-chainspec 1.9.1", - "reth-ethereum-forks 1.9.1", - "reth-network-peers 1.9.1", - "reth-optimism-forks 1.9.1", - "reth-optimism-primitives 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-forks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-network-peers 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-forks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde", "serde_json", "tar-no-std", @@ -10681,34 +10480,34 @@ dependencies = [ "derive_more", "eyre", "futures-util", - "op-alloy-consensus 0.22.0", - "reth-chainspec 1.9.1", + "op-alloy-consensus", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-cli", "reth-cli-commands", "reth-cli-runner", - "reth-consensus 1.9.1", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-db", "reth-db-api", "reth-db-common", "reth-downloaders", - "reth-execution-types 1.9.1", - "reth-fs-util 1.9.1", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-fs-util 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-node-builder", "reth-node-core", "reth-node-events", "reth-node-metrics", - "reth-optimism-chainspec 1.9.1", - "reth-optimism-consensus 1.9.1", - "reth-optimism-evm 1.9.1", + "reth-optimism-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-optimism-node", - "reth-optimism-primitives 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-optimism-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-provider", "reth-prune", "reth-rpc-server-types", "reth-stages", "reth-static-file", - "reth-static-file-types 1.9.1", + "reth-static-file-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-tracing", "reth-tracing-otlp", "serde", @@ -10720,25 +10519,25 @@ dependencies = [ [[package]] name = "reth-optimism-consensus" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives 1.4.1", "alloy-trie", - "reth-chainspec 1.8.3", - "reth-consensus 1.8.3", - "reth-consensus-common 1.8.3", - "reth-execution-types 1.8.3", - "reth-optimism-chainspec 1.8.3", - "reth-optimism-forks 1.8.3", - "reth-optimism-primitives 1.8.3", - "reth-primitives-traits 1.8.3", - "reth-storage-api 1.8.3", - "reth-storage-errors 1.8.3", - "reth-trie-common 1.8.3", - "revm 29.0.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-consensus-common 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-optimism-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-optimism-forks 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-optimism-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "revm", "thiserror 2.0.17", "tracing", ] @@ -10752,46 +10551,46 @@ dependencies = [ "alloy-eips", "alloy-primitives 1.4.1", "alloy-trie", - "reth-chainspec 1.9.1", - "reth-consensus 1.9.1", - "reth-consensus-common 1.9.1", - "reth-execution-types 1.9.1", - "reth-optimism-chainspec 1.9.1", - "reth-optimism-forks 1.9.1", - "reth-optimism-primitives 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-storage-api 1.9.1", - "reth-storage-errors 1.9.1", - "reth-trie-common 1.9.1", - "revm 31.0.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-consensus-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-forks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm", "thiserror 2.0.17", "tracing", ] [[package]] name = "reth-optimism-evm" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm 0.21.3", - "alloy-op-evm 0.21.3", + "alloy-evm", + "alloy-op-evm", "alloy-primitives 1.4.1", - "op-alloy-consensus 0.20.0", - "op-alloy-rpc-types-engine 0.20.0", - "op-revm 10.1.1", - "reth-chainspec 1.8.3", - "reth-evm 1.8.3", - "reth-execution-errors 1.8.3", - "reth-execution-types 1.8.3", - "reth-optimism-chainspec 1.8.3", - "reth-optimism-consensus 1.8.3", - "reth-optimism-forks 1.8.3", - "reth-optimism-primitives 1.8.3", - "reth-primitives-traits 1.8.3", - "reth-storage-errors 1.8.3", - "revm 29.0.1", + "op-alloy-consensus", + "op-alloy-rpc-types-engine", + "op-revm", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-execution-errors 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-optimism-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-optimism-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-optimism-forks 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-optimism-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "revm", "thiserror 2.0.17", ] @@ -10802,24 +10601,24 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm 0.23.1", - "alloy-op-evm 0.23.1", - "alloy-primitives 1.4.1", - "op-alloy-consensus 0.22.0", - "op-alloy-rpc-types-engine 0.22.0", - "op-revm 12.0.1", - "reth-chainspec 1.9.1", - "reth-evm 1.9.1", - "reth-execution-errors 1.9.1", - "reth-execution-types 1.9.1", - "reth-optimism-chainspec 1.9.1", - "reth-optimism-consensus 1.9.1", - "reth-optimism-forks 1.9.1", - "reth-optimism-primitives 1.9.1", - "reth-primitives-traits 1.9.1", + "alloy-evm", + "alloy-op-evm", + "alloy-primitives 1.4.1", + "op-alloy-consensus", + "op-alloy-rpc-types-engine", + "op-revm", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-execution-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-forks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-rpc-eth-api", - "reth-storage-errors 1.9.1", - "revm 31.0.1", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm", "thiserror 2.0.17", ] @@ -10838,21 +10637,21 @@ dependencies = [ "eyre", "futures-util", "metrics", - "reth-chain-state 1.9.1", - "reth-engine-primitives 1.9.1", - "reth-errors 1.9.1", - "reth-evm 1.9.1", - "reth-execution-types 1.9.1", - "reth-metrics 1.9.1", - "reth-optimism-evm 1.9.1", - "reth-optimism-payload-builder 1.9.1", - "reth-optimism-primitives 1.9.1", - "reth-payload-primitives 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-revm 1.9.1", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-revm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-rpc-eth-types", - "reth-storage-api 1.9.1", - "reth-tasks 1.9.1", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth)", "ringbuffer", "serde", "serde_json", @@ -10864,13 +10663,13 @@ dependencies = [ [[package]] name = "reth-optimism-forks" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ - "alloy-op-hardforks 0.3.5", + "alloy-op-hardforks", "alloy-primitives 1.4.1", "once_cell", - "reth-ethereum-forks 1.8.3", + "reth-ethereum-forks 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", ] [[package]] @@ -10878,10 +10677,10 @@ name = "reth-optimism-forks" version = "1.9.1" source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03235164855c" dependencies = [ - "alloy-op-hardforks 0.4.4", + "alloy-op-hardforks", "alloy-primitives 1.4.1", "once_cell", - "reth-ethereum-forks 1.9.1", + "reth-ethereum-forks 1.9.1 (git+https://github.com/paradigmxyz/reth)", ] [[package]] @@ -10895,36 +10694,36 @@ dependencies = [ "alloy-rpc-types-eth", "clap", "eyre", - "op-alloy-consensus 0.22.0", - "op-alloy-rpc-types-engine 0.22.0", - "op-revm 12.0.1", - "reth-chainspec 1.9.1", - "reth-consensus 1.9.1", + "op-alloy-consensus", + "op-alloy-rpc-types-engine", + "op-revm", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-engine-local", - "reth-evm 1.9.1", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-network", "reth-node-api", "reth-node-builder", "reth-node-core", - "reth-optimism-chainspec 1.9.1", - "reth-optimism-consensus 1.9.1", - "reth-optimism-evm 1.9.1", - "reth-optimism-forks 1.9.1", - "reth-optimism-payload-builder 1.9.1", - "reth-optimism-primitives 1.9.1", + "reth-optimism-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-forks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-optimism-rpc", "reth-optimism-storage", - "reth-optimism-txpool 1.9.1", - "reth-payload-builder 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-optimism-txpool 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-provider", "reth-rpc-api", "reth-rpc-engine-api", "reth-rpc-server-types", "reth-tracing", - "reth-transaction-pool 1.9.1", - "reth-trie-common 1.9.1", - "revm 31.0.1", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm", "serde", "tokio", "url", @@ -10932,39 +10731,40 @@ dependencies = [ [[package]] name = "reth-optimism-payload-builder" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-eips", + "alloy-evm", "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-debug", "alloy-rpc-types-engine", "derive_more", - "op-alloy-consensus 0.20.0", - "op-alloy-rpc-types-engine 0.20.0", - "reth-basic-payload-builder 1.8.3", - "reth-chain-state 1.8.3", - "reth-chainspec 1.8.3", - "reth-evm 1.8.3", - "reth-execution-types 1.8.3", - "reth-optimism-evm 1.8.3", - "reth-optimism-forks 1.8.3", - "reth-optimism-primitives 1.8.3", - "reth-optimism-txpool 1.8.3", - "reth-payload-builder 1.8.3", - "reth-payload-builder-primitives 1.8.3", - "reth-payload-primitives 1.8.3", - "reth-payload-util 1.8.3", - "reth-payload-validator 1.8.3", - "reth-primitives-traits 1.8.3", - "reth-revm 1.8.3", - "reth-storage-api 1.8.3", - "reth-transaction-pool 1.8.3", - "revm 29.0.1", - "serde", - "sha2 0.10.9", + "op-alloy-consensus", + "op-alloy-rpc-types-engine", + "reth-basic-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-optimism-evm 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-optimism-forks 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-optimism-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-optimism-txpool 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-payload-builder-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-payload-util 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-payload-validator 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-revm 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "revm", + "serde", + "sha2", "thiserror 2.0.17", "tracing", ] @@ -10976,50 +10776,50 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm 0.23.1", + "alloy-evm", "alloy-primitives 1.4.1", "alloy-rlp", "alloy-rpc-types-debug", "alloy-rpc-types-engine", "derive_more", "either", - "op-alloy-consensus 0.22.0", - "op-alloy-rpc-types-engine 0.22.0", - "reth-basic-payload-builder 1.9.1", - "reth-chainspec 1.9.1", - "reth-evm 1.9.1", - "reth-execution-types 1.9.1", - "reth-optimism-evm 1.9.1", - "reth-optimism-forks 1.9.1", - "reth-optimism-primitives 1.9.1", - "reth-optimism-txpool 1.9.1", - "reth-payload-builder 1.9.1", - "reth-payload-builder-primitives 1.9.1", - "reth-payload-primitives 1.9.1", - "reth-payload-util 1.9.1", - "reth-payload-validator 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-revm 1.9.1", - "reth-storage-api 1.9.1", - "reth-transaction-pool 1.9.1", - "revm 31.0.1", + "op-alloy-consensus", + "op-alloy-rpc-types-engine", + "reth-basic-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-forks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-txpool 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-builder-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-util 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-validator 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-revm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm", "serde", - "sha2 0.10.9", + "sha2", "thiserror 2.0.17", "tracing", ] [[package]] name = "reth-optimism-primitives" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives 1.4.1", "alloy-rlp", - "op-alloy-consensus 0.20.0", - "reth-primitives-traits 1.8.3", + "op-alloy-consensus", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", ] [[package]] @@ -11034,10 +10834,10 @@ dependencies = [ "arbitrary", "bytes", "modular-bitfield", - "op-alloy-consensus 0.22.0", - "reth-codecs 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-zstd-compressors 1.9.1", + "op-alloy-consensus", + "reth-codecs 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-zstd-compressors 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde", "serde_with", ] @@ -11065,36 +10865,36 @@ dependencies = [ "jsonrpsee-core 0.26.0", "jsonrpsee-types 0.26.0", "metrics", - "op-alloy-consensus 0.22.0", + "op-alloy-consensus", "op-alloy-network", "op-alloy-rpc-jsonrpsee", - "op-alloy-rpc-types 0.22.0", - "op-alloy-rpc-types-engine 0.22.0", - "op-revm 12.0.1", + "op-alloy-rpc-types", + "op-alloy-rpc-types-engine", + "op-revm", "reqwest", - "reth-chain-state 1.9.1", - "reth-chainspec 1.9.1", - "reth-evm 1.9.1", - "reth-metrics 1.9.1", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-node-api", "reth-node-builder", - "reth-optimism-evm 1.9.1", + "reth-optimism-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-optimism-flashblocks", - "reth-optimism-forks 1.9.1", - "reth-optimism-payload-builder 1.9.1", - "reth-optimism-primitives 1.9.1", - "reth-optimism-txpool 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-optimism-forks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-txpool 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-rpc", "reth-rpc-api", "reth-rpc-engine-api", "reth-rpc-eth-api", "reth-rpc-eth-types", "reth-rpc-server-types", - "reth-storage-api 1.9.1", - "reth-tasks 1.9.1", - "reth-transaction-pool 1.9.1", - "revm 31.0.1", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm", "serde_json", "thiserror 2.0.17", "tokio", @@ -11109,14 +10909,14 @@ version = "1.9.1" source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03235164855c" dependencies = [ "alloy-consensus", - "reth-optimism-primitives 1.9.1", - "reth-storage-api 1.9.1", + "reth-optimism-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", ] [[package]] name = "reth-optimism-txpool" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-eips", @@ -11129,20 +10929,20 @@ dependencies = [ "derive_more", "futures-util", "metrics", - "op-alloy-consensus 0.20.0", + "op-alloy-consensus", "op-alloy-flz", - "op-alloy-rpc-types 0.20.0", - "op-revm 10.1.1", + "op-alloy-rpc-types", + "op-revm", "parking_lot", - "reth-chain-state 1.8.3", - "reth-chainspec 1.8.3", - "reth-metrics 1.8.3", - "reth-optimism-evm 1.8.3", - "reth-optimism-forks 1.8.3", - "reth-optimism-primitives 1.8.3", - "reth-primitives-traits 1.8.3", - "reth-storage-api 1.8.3", - "reth-transaction-pool 1.8.3", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-optimism-evm 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-optimism-forks 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-optimism-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", "serde", "thiserror 2.0.17", "tokio", @@ -11165,20 +10965,20 @@ dependencies = [ "derive_more", "futures-util", "metrics", - "op-alloy-consensus 0.22.0", + "op-alloy-consensus", "op-alloy-flz", - "op-alloy-rpc-types 0.22.0", - "op-revm 12.0.1", + "op-alloy-rpc-types", + "op-revm", "parking_lot", - "reth-chain-state 1.9.1", - "reth-chainspec 1.9.1", - "reth-metrics 1.9.1", - "reth-optimism-evm 1.9.1", - "reth-optimism-forks 1.9.1", - "reth-optimism-primitives 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-storage-api 1.9.1", - "reth-transaction-pool 1.9.1", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-forks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde", "thiserror 2.0.17", "tokio", @@ -11187,20 +10987,20 @@ dependencies = [ [[package]] name = "reth-payload-builder" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", "alloy-rpc-types", "futures-util", "metrics", - "reth-chain-state 1.8.3", - "reth-ethereum-engine-primitives 1.8.3", - "reth-metrics 1.8.3", - "reth-payload-builder-primitives 1.8.3", - "reth-payload-primitives 1.8.3", - "reth-primitives-traits 1.8.3", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-ethereum-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-payload-builder-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", "tokio", "tokio-stream", "tracing", @@ -11216,12 +11016,12 @@ dependencies = [ "alloy-rpc-types", "futures-util", "metrics", - "reth-chain-state 1.9.1", - "reth-ethereum-engine-primitives 1.9.1", - "reth-metrics 1.9.1", - "reth-payload-builder-primitives 1.9.1", - "reth-payload-primitives 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-builder-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "tokio", "tokio-stream", "tracing", @@ -11229,11 +11029,11 @@ dependencies = [ [[package]] name = "reth-payload-builder-primitives" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "pin-project", - "reth-payload-primitives 1.8.3", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", "tokio", "tokio-stream", "tracing", @@ -11245,7 +11045,7 @@ version = "1.9.1" source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03235164855c" dependencies = [ "pin-project", - "reth-payload-primitives 1.9.1", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", "tokio", "tokio-stream", "tracing", @@ -11253,19 +11053,19 @@ dependencies = [ [[package]] name = "reth-payload-primitives" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-eips", "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "auto_impl", "either", - "op-alloy-rpc-types-engine 0.20.0", - "reth-chain-state 1.8.3", - "reth-chainspec 1.8.3", - "reth-errors 1.8.3", - "reth-primitives-traits 1.8.3", + "op-alloy-rpc-types-engine", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-errors 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", "serde", "thiserror 2.0.17", "tokio", @@ -11281,13 +11081,13 @@ dependencies = [ "alloy-rpc-types-engine", "auto_impl", "either", - "op-alloy-rpc-types-engine 0.22.0", - "reth-chain-state 1.9.1", - "reth-chainspec 1.9.1", - "reth-errors 1.9.1", - "reth-execution-types 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-trie-common 1.9.1", + "op-alloy-rpc-types-engine", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde", "thiserror 2.0.17", "tokio", @@ -11295,12 +11095,12 @@ dependencies = [ [[package]] name = "reth-payload-util" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", - "reth-transaction-pool 1.8.3", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", ] [[package]] @@ -11310,17 +11110,17 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", - "reth-transaction-pool 1.9.1", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth)", ] [[package]] name = "reth-payload-validator" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-rpc-types-engine", - "reth-primitives-traits 1.8.3", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", ] [[package]] @@ -11330,7 +11130,7 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "alloy-consensus", "alloy-rpc-types-engine", - "reth-primitives-traits 1.9.1", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", ] [[package]] @@ -11341,16 +11141,16 @@ dependencies = [ "alloy-consensus", "c-kzg", "once_cell", - "reth-ethereum-forks 1.9.1", - "reth-ethereum-primitives 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-static-file-types 1.9.1", + "reth-ethereum-forks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-static-file-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", ] [[package]] name = "reth-primitives-traits" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-eips", @@ -11363,11 +11163,11 @@ dependencies = [ "bytes", "derive_more", "once_cell", - "op-alloy-consensus 0.20.0", - "reth-codecs 1.8.3", - "revm-bytecode 6.2.2", - "revm-primitives 20.2.1", - "revm-state 7.0.5", + "op-alloy-consensus", + "reth-codecs 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "revm-bytecode", + "revm-primitives", + "revm-state", "secp256k1 0.30.0", "serde", "serde_with", @@ -11393,14 +11193,14 @@ dependencies = [ "derive_more", "modular-bitfield", "once_cell", - "op-alloy-consensus 0.22.0", + "op-alloy-consensus", "proptest", "proptest-arbitrary-interop", "rayon", - "reth-codecs 1.9.1", - "revm-bytecode 7.1.1", - "revm-primitives 21.0.2", - "revm-state 8.1.1", + "reth-codecs 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm-bytecode", + "revm-primitives", + "revm-state", "secp256k1 0.30.0", "serde", "serde_with", @@ -11423,29 +11223,29 @@ dependencies = [ "notify", "parking_lot", "rayon", - "reth-chain-state 1.9.1", - "reth-chainspec 1.9.1", - "reth-codecs 1.9.1", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-codecs 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-db", "reth-db-api", - "reth-errors 1.9.1", - "reth-ethereum-engine-primitives 1.9.1", - "reth-ethereum-primitives 1.9.1", - "reth-execution-types 1.9.1", - "reth-fs-util 1.9.1", - "reth-metrics 1.9.1", + "reth-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-fs-util 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-nippy-jar", "reth-node-types", - "reth-primitives-traits 1.9.1", - "reth-prune-types 1.9.1", - "reth-stages-types 1.9.1", - "reth-static-file-types 1.9.1", - "reth-storage-api 1.9.1", - "reth-storage-errors 1.9.1", - "reth-trie 1.9.1", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-prune-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-stages-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-static-file-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-trie-db", - "revm-database 9.0.4", - "revm-state 8.1.1", + "revm-database", + "revm-state", "strum 0.27.2", "tokio", "tracing", @@ -11463,13 +11263,13 @@ dependencies = [ "rayon", "reth-config", "reth-db-api", - "reth-errors 1.9.1", + "reth-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-exex-types", - "reth-metrics 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-provider", - "reth-prune-types 1.9.1", - "reth-static-file-types 1.9.1", + "reth-prune-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-static-file-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-tokio-util", "rustc-hash 2.1.1", "thiserror 2.0.17", @@ -11479,11 +11279,12 @@ dependencies = [ [[package]] name = "reth-prune-types" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-primitives 1.4.1", "derive_more", + "strum 0.27.2", "thiserror 2.0.17", ] @@ -11496,7 +11297,7 @@ dependencies = [ "arbitrary", "derive_more", "modular-bitfield", - "reth-codecs 1.9.1", + "reth-codecs 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde", "strum 0.27.2", "thiserror 2.0.17", @@ -11512,10 +11313,10 @@ dependencies = [ "alloy-rlp", "futures", "reth-eth-wire", - "reth-ethereum-primitives 1.9.1", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-network", "reth-network-api", - "reth-storage-errors 1.9.1", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", "tokio", "tokio-stream", "tracing", @@ -11531,18 +11332,18 @@ dependencies = [ "eyre", "futures", "parking_lot", - "reth-chain-state 1.9.1", - "reth-errors 1.9.1", - "reth-ethereum-primitives 1.9.1", - "reth-evm 1.9.1", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-node-api", - "reth-primitives-traits 1.9.1", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-ress-protocol", - "reth-revm 1.9.1", - "reth-storage-api 1.9.1", - "reth-tasks 1.9.1", + "reth-revm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-tokio-util", - "reth-trie 1.9.1", + "reth-trie 1.9.1 (git+https://github.com/paradigmxyz/reth)", "schnellru", "tokio", "tracing", @@ -11550,15 +11351,15 @@ dependencies = [ [[package]] name = "reth-revm" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-primitives 1.4.1", - "reth-primitives-traits 1.8.3", - "reth-storage-api 1.8.3", - "reth-storage-errors 1.8.3", - "reth-trie 1.8.3", - "revm 29.0.1", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-trie 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "revm", ] [[package]] @@ -11567,11 +11368,11 @@ version = "1.9.1" source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03235164855c" dependencies = [ "alloy-primitives 1.4.1", - "reth-primitives-traits 1.9.1", - "reth-storage-api 1.9.1", - "reth-storage-errors 1.9.1", - "reth-trie 1.9.1", - "revm 31.0.1", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm", ] [[package]] @@ -11582,7 +11383,7 @@ dependencies = [ "alloy-consensus", "alloy-dyn-abi", "alloy-eips", - "alloy-evm 0.23.1", + "alloy-evm", "alloy-genesis", "alloy-network", "alloy-primitives 1.4.1", @@ -11613,38 +11414,38 @@ dependencies = [ "jsonwebtoken", "parking_lot", "pin-project", - "reth-chain-state 1.9.1", - "reth-chainspec 1.9.1", - "reth-consensus 1.9.1", - "reth-consensus-common 1.9.1", - "reth-engine-primitives 1.9.1", - "reth-errors 1.9.1", - "reth-evm 1.9.1", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-consensus-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-evm-ethereum", - "reth-execution-types 1.9.1", - "reth-metrics 1.9.1", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-network-api", - "reth-network-peers 1.9.1", + "reth-network-peers 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-network-types", "reth-node-api", - "reth-primitives-traits 1.9.1", - "reth-revm 1.9.1", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-revm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-rpc-api", "reth-rpc-convert", "reth-rpc-engine-api", "reth-rpc-eth-api", "reth-rpc-eth-types", "reth-rpc-server-types", - "reth-storage-api 1.9.1", - "reth-tasks 1.9.1", - "reth-transaction-pool 1.9.1", - "reth-trie-common 1.9.1", - "revm 31.0.1", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm", "revm-inspectors", - "revm-primitives 21.0.2", + "revm-primitives", "serde", "serde_json", - "sha2 0.10.9", + "sha2", "thiserror 2.0.17", "tokio", "tokio-stream", @@ -11674,11 +11475,11 @@ dependencies = [ "alloy-rpc-types-txpool", "alloy-serde", "jsonrpsee 0.26.0", - "reth-chain-state 1.9.1", - "reth-engine-primitives 1.9.1", - "reth-network-peers 1.9.1", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-network-peers 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-rpc-eth-api", - "reth-trie-common 1.9.1", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", ] [[package]] @@ -11693,24 +11494,24 @@ dependencies = [ "jsonrpsee 0.26.0", "metrics", "pin-project", - "reth-chain-state 1.9.1", - "reth-chainspec 1.9.1", - "reth-consensus 1.9.1", - "reth-evm 1.9.1", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-ipc", - "reth-metrics 1.9.1", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-network-api", "reth-node-core", - "reth-primitives-traits 1.9.1", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-rpc", "reth-rpc-api", "reth-rpc-eth-api", "reth-rpc-eth-types", "reth-rpc-layer", "reth-rpc-server-types", - "reth-storage-api 1.9.1", - "reth-tasks 1.9.1", - "reth-transaction-pool 1.9.1", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde", "thiserror 2.0.17", "tokio", @@ -11734,16 +11535,16 @@ dependencies = [ "auto_impl", "dyn-clone", "jsonrpsee-types 0.26.0", - "op-alloy-consensus 0.22.0", + "op-alloy-consensus", "op-alloy-network", - "op-alloy-rpc-types 0.22.0", - "op-revm 12.0.1", - "reth-ethereum-primitives 1.9.1", - "reth-evm 1.9.1", - "reth-optimism-primitives 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-storage-api 1.9.1", - "revm-context 11.0.1", + "op-alloy-rpc-types", + "op-revm", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-optimism-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm-context", "thiserror 2.0.17", ] @@ -11759,17 +11560,17 @@ dependencies = [ "jsonrpsee-core 0.26.0", "jsonrpsee-types 0.26.0", "metrics", - "reth-chainspec 1.9.1", - "reth-engine-primitives 1.9.1", - "reth-metrics 1.9.1", - "reth-payload-builder 1.9.1", - "reth-payload-builder-primitives 1.9.1", - "reth-payload-primitives 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-engine-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-builder-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-payload-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-rpc-api", - "reth-storage-api 1.9.1", - "reth-tasks 1.9.1", - "reth-transaction-pool 1.9.1", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde", "thiserror 2.0.17", "tokio", @@ -11784,7 +11585,7 @@ dependencies = [ "alloy-consensus", "alloy-dyn-abi", "alloy-eips", - "alloy-evm 0.23.1", + "alloy-evm", "alloy-json-rpc", "alloy-network", "alloy-primitives 1.4.1", @@ -11799,22 +11600,22 @@ dependencies = [ "jsonrpsee 0.26.0", "jsonrpsee-types 0.26.0", "parking_lot", - "reth-chain-state 1.9.1", - "reth-chainspec 1.9.1", - "reth-errors 1.9.1", - "reth-evm 1.9.1", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-network-api", "reth-node-api", - "reth-primitives-traits 1.9.1", - "reth-revm 1.9.1", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-revm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-rpc-convert", "reth-rpc-eth-types", "reth-rpc-server-types", - "reth-storage-api 1.9.1", - "reth-tasks 1.9.1", - "reth-transaction-pool 1.9.1", - "reth-trie-common 1.9.1", - "revm 31.0.1", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm", "revm-inspectors", "tokio", "tracing", @@ -11827,7 +11628,7 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-evm 0.23.1", + "alloy-evm", "alloy-network", "alloy-primitives 1.4.1", "alloy-rpc-client", @@ -11842,22 +11643,22 @@ dependencies = [ "metrics", "rand 0.9.2", "reqwest", - "reth-chain-state 1.9.1", - "reth-chainspec 1.9.1", - "reth-errors 1.9.1", - "reth-ethereum-primitives 1.9.1", - "reth-evm 1.9.1", - "reth-execution-types 1.9.1", - "reth-metrics 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-revm 1.9.1", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-revm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-rpc-convert", "reth-rpc-server-types", - "reth-storage-api 1.9.1", - "reth-tasks 1.9.1", - "reth-transaction-pool 1.9.1", - "reth-trie 1.9.1", - "revm 31.0.1", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-transaction-pool 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm", "revm-inspectors", "schnellru", "serde", @@ -11891,7 +11692,7 @@ dependencies = [ "alloy-rpc-types-engine", "jsonrpsee-core 0.26.0", "jsonrpsee-types 0.26.0", - "reth-errors 1.9.1", + "reth-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-network-api", "serde", "strum 0.27.2", @@ -11912,32 +11713,32 @@ dependencies = [ "num-traits", "rayon", "reqwest", - "reth-chainspec 1.9.1", - "reth-codecs 1.9.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-codecs 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-config", - "reth-consensus 1.9.1", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-db", "reth-db-api", "reth-era", "reth-era-downloader", "reth-era-utils", - "reth-ethereum-primitives 1.9.1", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-etl", - "reth-evm 1.9.1", - "reth-execution-types 1.9.1", + "reth-evm 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-exex", - "reth-fs-util 1.9.1", + "reth-fs-util 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-network-p2p", - "reth-primitives-traits 1.9.1", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-provider", "reth-prune", - "reth-prune-types 1.9.1", - "reth-revm 1.9.1", + "reth-prune-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-revm 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-stages-api", - "reth-static-file-types 1.9.1", - "reth-storage-errors 1.9.1", + "reth-static-file-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-testing-utils", - "reth-trie 1.9.1", + "reth-trie 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-trie-db", "tempfile", "thiserror 2.0.17", @@ -11956,16 +11757,16 @@ dependencies = [ "auto_impl", "futures-util", "metrics", - "reth-consensus 1.9.1", - "reth-errors 1.9.1", - "reth-metrics 1.9.1", + "reth-consensus 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-network-p2p", - "reth-primitives-traits 1.9.1", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-provider", "reth-prune", - "reth-stages-types 1.9.1", + "reth-stages-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-static-file", - "reth-static-file-types 1.9.1", + "reth-static-file-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-tokio-util", "thiserror 2.0.17", "tokio", @@ -11974,11 +11775,11 @@ dependencies = [ [[package]] name = "reth-stages-types" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-primitives 1.4.1", - "reth-trie-common 1.8.3", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", ] [[package]] @@ -11990,8 +11791,8 @@ dependencies = [ "arbitrary", "bytes", "modular-bitfield", - "reth-codecs 1.9.1", - "reth-trie-common 1.9.1", + "reth-codecs 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", "serde", ] @@ -12003,22 +11804,22 @@ dependencies = [ "alloy-primitives 1.4.1", "parking_lot", "rayon", - "reth-codecs 1.9.1", + "reth-codecs 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-db-api", - "reth-primitives-traits 1.9.1", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-provider", - "reth-prune-types 1.9.1", - "reth-stages-types 1.9.1", - "reth-static-file-types 1.9.1", - "reth-storage-errors 1.9.1", + "reth-prune-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-stages-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-static-file-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-tokio-util", "tracing", ] [[package]] name = "reth-static-file-types" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-primitives 1.4.1", "derive_more", @@ -12040,24 +11841,24 @@ dependencies = [ [[package]] name = "reth-storage-api" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "auto_impl", - "reth-chainspec 1.8.3", - "reth-db-models 1.8.3", - "reth-ethereum-primitives 1.8.3", - "reth-execution-types 1.8.3", - "reth-primitives-traits 1.8.3", - "reth-prune-types 1.8.3", - "reth-stages-types 1.8.3", - "reth-storage-errors 1.8.3", - "reth-trie-common 1.8.3", - "revm-database 7.0.5", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-db-models 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-prune-types 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-stages-types 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "revm-database", ] [[package]] @@ -12070,33 +11871,33 @@ dependencies = [ "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "auto_impl", - "reth-chainspec 1.9.1", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-db-api", - "reth-db-models 1.9.1", - "reth-ethereum-primitives 1.9.1", - "reth-execution-types 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-prune-types 1.9.1", - "reth-stages-types 1.9.1", - "reth-storage-errors 1.9.1", - "reth-trie-common 1.9.1", - "revm-database 9.0.4", + "reth-db-models 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-prune-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-stages-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm-database", "serde_json", ] [[package]] name = "reth-storage-errors" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-eips", "alloy-primitives 1.4.1", "alloy-rlp", "derive_more", - "reth-primitives-traits 1.8.3", - "reth-prune-types 1.8.3", - "reth-static-file-types 1.8.3", - "revm-database-interface 7.0.5", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-prune-types 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-static-file-types 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "revm-database-interface", "thiserror 2.0.17", ] @@ -12109,23 +11910,23 @@ dependencies = [ "alloy-primitives 1.4.1", "alloy-rlp", "derive_more", - "reth-primitives-traits 1.9.1", - "reth-prune-types 1.9.1", - "reth-static-file-types 1.9.1", - "revm-database-interface 8.0.5", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-prune-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-static-file-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm-database-interface", "thiserror 2.0.17", ] [[package]] name = "reth-tasks" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "auto_impl", "dyn-clone", "futures-util", "metrics", - "reth-metrics 1.8.3", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", "thiserror 2.0.17", "tokio", "tracing", @@ -12143,7 +11944,7 @@ dependencies = [ "metrics", "pin-project", "rayon", - "reth-metrics 1.9.1", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", "thiserror 2.0.17", "tokio", "tracing", @@ -12161,8 +11962,8 @@ dependencies = [ "alloy-primitives 1.4.1", "rand 0.8.5", "rand 0.9.2", - "reth-ethereum-primitives 1.9.1", - "reth-primitives-traits 1.9.1", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", "secp256k1 0.30.0", ] @@ -12212,8 +12013,8 @@ dependencies = [ [[package]] name = "reth-transaction-pool" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-eips", @@ -12226,18 +12027,18 @@ dependencies = [ "metrics", "parking_lot", "pin-project", - "reth-chain-state 1.8.3", - "reth-chainspec 1.8.3", - "reth-eth-wire-types 1.8.3", - "reth-ethereum-primitives 1.8.3", - "reth-execution-types 1.8.3", - "reth-fs-util 1.8.3", - "reth-metrics 1.8.3", - "reth-primitives-traits 1.8.3", - "reth-storage-api 1.8.3", - "reth-tasks 1.8.3", - "revm-interpreter 25.0.3", - "revm-primitives 20.2.1", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-eth-wire-types 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-fs-util 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "revm-interpreter", + "revm-primitives", "rustc-hash 2.1.1", "schnellru", "serde", @@ -12267,18 +12068,18 @@ dependencies = [ "paste", "pin-project", "rand 0.9.2", - "reth-chain-state 1.9.1", - "reth-chainspec 1.9.1", - "reth-eth-wire-types 1.9.1", - "reth-ethereum-primitives 1.9.1", - "reth-execution-types 1.9.1", - "reth-fs-util 1.9.1", - "reth-metrics 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-storage-api 1.9.1", - "reth-tasks 1.9.1", - "revm-interpreter 29.0.1", - "revm-primitives 21.0.2", + "reth-chain-state 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-chainspec 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-eth-wire-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-ethereum-primitives 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-execution-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-fs-util 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-api 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-tasks 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm-interpreter", + "revm-primitives", "rustc-hash 2.1.1", "schnellru", "serde", @@ -12292,8 +12093,8 @@ dependencies = [ [[package]] name = "reth-trie" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-eips", @@ -12302,13 +12103,13 @@ dependencies = [ "alloy-trie", "auto_impl", "itertools 0.14.0", - "reth-execution-errors 1.8.3", - "reth-primitives-traits 1.8.3", - "reth-stages-types 1.8.3", - "reth-storage-errors 1.8.3", - "reth-trie-common 1.8.3", - "reth-trie-sparse 1.8.3", - "revm-database 7.0.5", + "reth-execution-errors 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-stages-types 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-trie-sparse 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "revm-database", "tracing", ] @@ -12325,22 +12126,22 @@ dependencies = [ "auto_impl", "itertools 0.14.0", "metrics", - "reth-execution-errors 1.9.1", - "reth-metrics 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-stages-types 1.9.1", - "reth-storage-errors 1.9.1", - "reth-trie-common 1.9.1", - "reth-trie-sparse 1.9.1", - "revm-database 9.0.4", + "reth-execution-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-stages-types 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie-sparse 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm-database", "tracing", "triehash", ] [[package]] name = "reth-trie-common" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-consensus", "alloy-primitives 1.4.1", @@ -12350,8 +12151,8 @@ dependencies = [ "itertools 0.14.0", "nybbles", "rayon", - "reth-primitives-traits 1.8.3", - "revm-database 7.0.5", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "revm-database", ] [[package]] @@ -12374,9 +12175,9 @@ dependencies = [ "nybbles", "plain_hasher", "rayon", - "reth-codecs 1.9.1", - "reth-primitives-traits 1.9.1", - "revm-database 9.0.4", + "reth-codecs 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "revm-database", "serde", "serde_with", ] @@ -12388,9 +12189,9 @@ source = "git+https://github.com/paradigmxyz/reth#7faddbaaeef308d5117234d91fbe03 dependencies = [ "alloy-primitives 1.4.1", "reth-db-api", - "reth-execution-errors 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-trie 1.9.1", + "reth-execution-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie 1.9.1 (git+https://github.com/paradigmxyz/reth)", "tracing", ] @@ -12407,13 +12208,13 @@ dependencies = [ "itertools 0.14.0", "metrics", "rayon", - "reth-execution-errors 1.9.1", - "reth-metrics 1.9.1", + "reth-execution-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", "reth-provider", - "reth-storage-errors 1.9.1", - "reth-trie 1.9.1", - "reth-trie-common 1.9.1", - "reth-trie-sparse 1.9.1", + "reth-storage-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie-sparse 1.9.1 (git+https://github.com/paradigmxyz/reth)", "thiserror 2.0.17", "tokio", "tracing", @@ -12421,16 +12222,16 @@ dependencies = [ [[package]] name = "reth-trie-sparse" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "alloy-primitives 1.4.1", "alloy-rlp", "alloy-trie", "auto_impl", - "reth-execution-errors 1.8.3", - "reth-primitives-traits 1.8.3", - "reth-trie-common 1.8.3", + "reth-execution-errors 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", "smallvec", "tracing", ] @@ -12446,10 +12247,10 @@ dependencies = [ "auto_impl", "metrics", "rayon", - "reth-execution-errors 1.9.1", - "reth-metrics 1.9.1", - "reth-primitives-traits 1.9.1", - "reth-trie-common 1.9.1", + "reth-execution-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-primitives-traits 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", "smallvec", "tracing", ] @@ -12464,18 +12265,18 @@ dependencies = [ "alloy-trie", "metrics", "rayon", - "reth-execution-errors 1.9.1", - "reth-metrics 1.9.1", - "reth-trie-common 1.9.1", - "reth-trie-sparse 1.9.1", + "reth-execution-errors 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-metrics 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie-common 1.9.1 (git+https://github.com/paradigmxyz/reth)", + "reth-trie-sparse 1.9.1 (git+https://github.com/paradigmxyz/reth)", "smallvec", "tracing", ] [[package]] name = "reth-zstd-compressors" -version = "1.8.3" -source = "git+https://github.com/paradigmxyz/reth?tag=v1.8.3#42197415102b7a20be42e4fe919f024b81ceb55b" +version = "1.9.1" +source = "git+https://github.com/paradigmxyz/reth?tag=v1.9.1#3afe69a5738459a7cb5f46c598c7f541a1510f32" dependencies = [ "zstd", ] @@ -12488,54 +12289,23 @@ dependencies = [ "zstd", ] -[[package]] -name = "revm" -version = "29.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "718d90dce5f07e115d0e66450b1b8aa29694c1cf3f89ebddaddccc2ccbd2f13e" -dependencies = [ - "revm-bytecode 6.2.2", - "revm-context 9.1.0", - "revm-context-interface 10.2.0", - "revm-database 7.0.5", - "revm-database-interface 7.0.5", - "revm-handler 10.0.1", - "revm-inspector 10.0.1", - "revm-interpreter 25.0.3", - "revm-precompile 27.0.0", - "revm-primitives 20.2.1", - "revm-state 7.0.5", -] - [[package]] name = "revm" version = "31.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93df0ff5eb70facbc872f82da4b815d7bd8e36b7ee525c637cabcb2a6af8a708" dependencies = [ - "revm-bytecode 7.1.1", - "revm-context 11.0.1", - "revm-context-interface 12.0.1", - "revm-database 9.0.4", - "revm-database-interface 8.0.5", - "revm-handler 12.0.1", - "revm-inspector 12.0.1", - "revm-interpreter 29.0.1", - "revm-precompile 29.0.1", - "revm-primitives 21.0.2", - "revm-state 8.1.1", -] - -[[package]] -name = "revm-bytecode" -version = "6.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66c52031b73cae95d84cd1b07725808b5fd1500da3e5e24574a3b2dc13d9f16d" -dependencies = [ - "bitvec", - "phf 0.11.3", - "revm-primitives 20.2.1", - "serde", + "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]] @@ -12545,25 +12315,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2c6b5e6e8dd1e28a4a60e5f46615d4ef0809111c9e63208e55b5c7058200fb0" dependencies = [ "bitvec", - "phf 0.13.1", - "revm-primitives 21.0.2", - "serde", -] - -[[package]] -name = "revm-context" -version = "9.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a20c98e7008591a6f012550c2a00aa36cba8c14cc88eb88dec32eb9102554b4" -dependencies = [ - "bitvec", - "cfg-if", - "derive-where", - "revm-bytecode 6.2.2", - "revm-context-interface 10.2.0", - "revm-database-interface 7.0.5", - "revm-primitives 20.2.1", - "revm-state 7.0.5", + "phf", + "revm-primitives", "serde", ] @@ -12576,27 +12329,11 @@ dependencies = [ "bitvec", "cfg-if", "derive-where", - "revm-bytecode 7.1.1", - "revm-context-interface 12.0.1", - "revm-database-interface 8.0.5", - "revm-primitives 21.0.2", - "revm-state 8.1.1", - "serde", -] - -[[package]] -name = "revm-context-interface" -version = "10.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b50d241ed1ce647b94caf174fcd0239b7651318b2c4c06b825b59b973dfb8495" -dependencies = [ - "alloy-eip2930", - "alloy-eip7702", - "auto_impl", - "either", - "revm-database-interface 7.0.5", - "revm-primitives 20.2.1", - "revm-state 7.0.5", + "revm-bytecode", + "revm-context-interface", + "revm-database-interface", + "revm-primitives", + "revm-state", "serde", ] @@ -12610,23 +12347,9 @@ dependencies = [ "alloy-eip7702", "auto_impl", "either", - "revm-database-interface 8.0.5", - "revm-primitives 21.0.2", - "revm-state 8.1.1", - "serde", -] - -[[package]] -name = "revm-database" -version = "7.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39a276ed142b4718dcf64bc9624f474373ed82ef20611025045c3fb23edbef9c" -dependencies = [ - "alloy-eips", - "revm-bytecode 6.2.2", - "revm-database-interface 7.0.5", - "revm-primitives 20.2.1", - "revm-state 7.0.5", + "revm-database-interface", + "revm-primitives", + "revm-state", "serde", ] @@ -12637,23 +12360,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a4505d9688482fe0c3b8c09d9afbc4656e2bf9b48855e1c86c93bd4508e496a" dependencies = [ "alloy-eips", - "revm-bytecode 7.1.1", - "revm-database-interface 8.0.5", - "revm-primitives 21.0.2", - "revm-state 8.1.1", - "serde", -] - -[[package]] -name = "revm-database-interface" -version = "7.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c523c77e74eeedbac5d6f7c092e3851dbe9c7fec6f418b85992bd79229db361" -dependencies = [ - "auto_impl", - "either", - "revm-primitives 20.2.1", - "revm-state 7.0.5", + "revm-bytecode", + "revm-database-interface", + "revm-primitives", + "revm-state", "serde", ] @@ -12665,27 +12375,8 @@ checksum = "8cce03e3780287b07abe58faf4a7f5d8be7e81321f93ccf3343c8f7755602bae" dependencies = [ "auto_impl", "either", - "revm-primitives 21.0.2", - "revm-state 8.1.1", - "serde", -] - -[[package]] -name = "revm-handler" -version = "10.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "550331ea85c1d257686e672081576172fe3d5a10526248b663bbf54f1bef226a" -dependencies = [ - "auto_impl", - "derive-where", - "revm-bytecode 6.2.2", - "revm-context 9.1.0", - "revm-context-interface 10.2.0", - "revm-database-interface 7.0.5", - "revm-interpreter 25.0.3", - "revm-precompile 27.0.0", - "revm-primitives 20.2.1", - "revm-state 7.0.5", + "revm-primitives", + "revm-state", "serde", ] @@ -12697,35 +12388,17 @@ checksum = "b3da9e26f05ed723cf423b92f012a7775eef9e7d897633d11ec83535e92cda2d" dependencies = [ "auto_impl", "derive-where", - "revm-bytecode 7.1.1", - "revm-context 11.0.1", - "revm-context-interface 12.0.1", - "revm-database-interface 8.0.5", - "revm-interpreter 29.0.1", - "revm-precompile 29.0.1", - "revm-primitives 21.0.2", - "revm-state 8.1.1", + "revm-bytecode", + "revm-context", + "revm-context-interface", + "revm-database-interface", + "revm-interpreter", + "revm-precompile", + "revm-primitives", + "revm-state", "serde", ] -[[package]] -name = "revm-inspector" -version = "10.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c0a6e9ccc2ae006f5bed8bd80cd6f8d3832cd55c5e861b9402fdd556098512f" -dependencies = [ - "auto_impl", - "either", - "revm-context 9.1.0", - "revm-database-interface 7.0.5", - "revm-handler 10.0.1", - "revm-interpreter 25.0.3", - "revm-primitives 20.2.1", - "revm-state 7.0.5", - "serde", - "serde_json", -] - [[package]] name = "revm-inspector" version = "12.0.1" @@ -12734,12 +12407,12 @@ checksum = "57afb06e5985dbd2e8a48a3e6727cb0dd45148e4e6e028ac8222e262e440d3de" dependencies = [ "auto_impl", "either", - "revm-context 11.0.1", - "revm-database-interface 8.0.5", - "revm-handler 12.0.1", - "revm-interpreter 29.0.1", - "revm-primitives 21.0.2", - "revm-state 8.1.1", + "revm-context", + "revm-database-interface", + "revm-handler", + "revm-interpreter", + "revm-primitives", + "revm-state", "serde", "serde_json", ] @@ -12758,62 +12431,25 @@ dependencies = [ "boa_engine", "boa_gc", "colorchoice", - "revm 31.0.1", + "revm", "serde", "serde_json", "thiserror 2.0.17", ] -[[package]] -name = "revm-interpreter" -version = "25.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06575dc51b1d8f5091daa12a435733a90b4a132dca7ccee0666c7db3851bc30c" -dependencies = [ - "revm-bytecode 6.2.2", - "revm-context-interface 10.2.0", - "revm-primitives 20.2.1", - "serde", -] - [[package]] name = "revm-interpreter" version = "29.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22789ce92c5808c70185e3bc49732f987dc6fd907f77828c8d3470b2299c9c65" dependencies = [ - "revm-bytecode 7.1.1", - "revm-context-interface 12.0.1", - "revm-primitives 21.0.2", - "revm-state 8.1.1", + "revm-bytecode", + "revm-context-interface", + "revm-primitives", + "revm-state", "serde", ] -[[package]] -name = "revm-precompile" -version = "27.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25b57d4bd9e6b5fe469da5452a8a137bc2d030a3cd47c46908efc615bbc699da" -dependencies = [ - "ark-bls12-381", - "ark-bn254", - "ark-ec", - "ark-ff 0.5.0", - "ark-serialize 0.5.0", - "arrayref", - "aurora-engine-modexp", - "c-kzg", - "cfg-if", - "k256", - "libsecp256k1", - "p256", - "revm-primitives 20.2.1", - "ripemd", - "rug", - "secp256k1 0.31.1", - "sha2 0.10.9", -] - [[package]] name = "revm-precompile" version = "29.0.1" @@ -12832,23 +12468,11 @@ dependencies = [ "cfg-if", "k256", "p256", - "revm-primitives 21.0.2", + "revm-primitives", "ripemd", "rug", "secp256k1 0.31.1", - "sha2 0.10.9", -] - -[[package]] -name = "revm-primitives" -version = "20.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa29d9da06fe03b249b6419b33968ecdf92ad6428e2f012dc57bcd619b5d94e" -dependencies = [ - "alloy-primitives 1.4.1", - "num_enum", - "once_cell", - "serde", + "sha2", ] [[package]] @@ -12863,18 +12487,6 @@ dependencies = [ "serde", ] -[[package]] -name = "revm-state" -version = "7.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f64fbacb86008394aaebd3454f9643b7d5a782bd251135e17c5b33da592d84d" -dependencies = [ - "bitflags 2.9.4", - "revm-bytecode 6.2.2", - "revm-primitives 20.2.1", - "serde", -] - [[package]] name = "revm-state" version = "8.1.1" @@ -12882,8 +12494,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d8be953b7e374dbdea0773cf360debed8df394ea8d82a8b240a6b5da37592fc" dependencies = [ "bitflags 2.9.4", - "revm-bytecode 7.1.1", - "revm-primitives 21.0.2", + "revm-bytecode", + "revm-primitives", "serde", ] @@ -12989,12 +12601,14 @@ dependencies = [ [[package]] name = "rollup-boost" version = "0.1.0" -source = "git+http://github.com/flashbots/rollup-boost?rev=dd12e8e8366004b4758bfa0cfa98efa6929b7e9f#dd12e8e8366004b4758bfa0cfa98efa6929b7e9f" +source = "git+http://github.com/flashbots/rollup-boost?tag=v0.7.8#1b66d7d743c7c9688a19f922129fe07423bf9baa" dependencies = [ "alloy-primitives 1.4.1", "alloy-rpc-types-engine", "alloy-rpc-types-eth", "alloy-serde", + "backoff", + "bytes", "clap", "dashmap 6.1.0", "dotenvy", @@ -13006,22 +12620,23 @@ dependencies = [ "hyper-rustls", "hyper-util", "jsonrpsee 0.25.1", + "lru 0.16.2", "metrics", "metrics-derive", "metrics-exporter-prometheus 0.16.2", "metrics-util 0.19.1", "moka", - "op-alloy-rpc-types-engine 0.20.0", + "op-alloy-rpc-types-engine", "opentelemetry 0.28.0", "opentelemetry-otlp 0.28.0", "opentelemetry_sdk 0.28.0", "parking_lot", "paste", - "reth-optimism-payload-builder 1.8.3", + "reth-optimism-payload-builder 1.9.1 (git+https://github.com/paradigmxyz/reth?tag=v1.9.1)", "rustls", "serde", "serde_json", - "sha2 0.10.9", + "sha2", "thiserror 2.0.17", "tokio", "tokio-tungstenite", @@ -13032,6 +12647,7 @@ dependencies = [ "tracing-opentelemetry 0.29.0", "tracing-subscriber 0.3.20", "url", + "uuid", "vergen", "vergen-git2", ] @@ -13710,19 +13326,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - [[package]] name = "sha2" version = "0.10.9" @@ -13901,7 +13504,7 @@ dependencies = [ "rand_core 0.6.4", "ring", "rustc_version 0.4.1", - "sha2 0.10.9", + "sha2", "subtle", ] @@ -15533,7 +15136,7 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.48.0", ] [[package]] diff --git a/crates/op-rbuilder/Cargo.toml b/crates/op-rbuilder/Cargo.toml index 26e0923b3..7a118df4d 100644 --- a/crates/op-rbuilder/Cargo.toml +++ b/crates/op-rbuilder/Cargo.toml @@ -131,7 +131,7 @@ sha3 = "0.10" reqwest = "0.12.23" k256 = "0.13.4" -rollup-boost = { git = "http://github.com/flashbots/rollup-boost", rev = "dd12e8e8366004b4758bfa0cfa98efa6929b7e9f" } +rollup-boost = { git = "http://github.com/flashbots/rollup-boost", tag = "v0.7.8" } nanoid = { version = "0.4", optional = true } reth-ipc = { workspace = true, optional = true } From e56fae5641678170804e8f62e67bb30819824f88 Mon Sep 17 00:00:00 2001 From: Tobi Akerele Date: Mon, 10 Nov 2025 01:27:58 -0500 Subject: [PATCH 19/19] chore: apply nightly formatting fixes Applied formatting fixes from cargo +nightly fmt to ensure code passes lint checks. Changes include proper brace placement and line formatting in flashblocks builder_tx and payload_handler. --- .../src/builders/flashblocks/builder_tx.rs | 4 +--- .../src/builders/flashblocks/payload_handler.rs | 12 ++++++------ 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/crates/op-rbuilder/src/builders/flashblocks/builder_tx.rs b/crates/op-rbuilder/src/builders/flashblocks/builder_tx.rs index 0400f317e..bc1063ac6 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/builder_tx.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/builder_tx.rs @@ -329,9 +329,7 @@ impl BuilderTransactions db, top_of_block, ) { - Ok(flashtestations_builder_txs) => { - builder_txs.extend(flashtestations_builder_txs) - } + Ok(flashtestations_builder_txs) => builder_txs.extend(flashtestations_builder_txs), Err(e) => { warn!(target: "flashtestations", error = ?e, "failed to add flashtestations builder tx") } diff --git a/crates/op-rbuilder/src/builders/flashblocks/payload_handler.rs b/crates/op-rbuilder/src/builders/flashblocks/payload_handler.rs index bc02c34ec..96b6f683a 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/payload_handler.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/payload_handler.rs @@ -346,12 +346,12 @@ fn execute_transactions( } }; - if let Some(max_gas_per_txn) = max_gas_per_txn { - if result.gas_used() > max_gas_per_txn { - return Err(eyre::eyre!( - "transaction exceeded max gas per txn limit in flashblock" - )); - } + if let Some(max_gas_per_txn) = max_gas_per_txn + && result.gas_used() > max_gas_per_txn + { + return Err(eyre::eyre!( + "transaction exceeded max gas per txn limit in flashblock" + )); } let tx_gas_used = result.gas_used();