diff --git a/Cargo.toml b/Cargo.toml index aa4e222de..bc677be47 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [workspace.package] version = "0.1.0" -edition = "2021" +edition = "2024" rust-version = "1.86" license = "MIT OR Apache-2.0" homepage = "https://github.com/flashbots/op-rbuilder" diff --git a/crates/op-rbuilder/src/args/mod.rs b/crates/op-rbuilder/src/args/mod.rs index 994e67dbc..4188e39cc 100644 --- a/crates/op-rbuilder/src/args/mod.rs +++ b/crates/op-rbuilder/src/args/mod.rs @@ -56,10 +56,7 @@ impl CliExt for Cli { return self; }; - let options = match PlaygroundOptions::new(playground_dir) { - Ok(options) => options, - Err(e) => exit(e), - }; + let options = PlaygroundOptions::new(playground_dir).unwrap_or_else(|e| exit(e)); options.apply(self) } diff --git a/crates/op-rbuilder/src/args/op.rs b/crates/op-rbuilder/src/args/op.rs index f25fcd30c..9c1d1fc20 100644 --- a/crates/op-rbuilder/src/args/op.rs +++ b/crates/op-rbuilder/src/args/op.rs @@ -5,7 +5,7 @@ //! clap [Args](clap::Args) for optimism rollup configuration use crate::{flashtestations::args::FlashtestationsArgs, tx_signer::Signer}; -use anyhow::{anyhow, Result}; +use anyhow::{Result, anyhow}; use clap::Parser; use reth_optimism_cli::commands::Commands; use reth_optimism_node::args::RollupArgs; diff --git a/crates/op-rbuilder/src/args/playground.rs b/crates/op-rbuilder/src/args/playground.rs index b836f45bd..c4cf2470a 100644 --- a/crates/op-rbuilder/src/args/playground.rs +++ b/crates/op-rbuilder/src/args/playground.rs @@ -28,13 +28,13 @@ //! configurations. use alloy_primitives::hex; -use clap::{parser::ValueSource, CommandFactory}; +use clap::{CommandFactory, parser::ValueSource}; use core::{ net::{IpAddr, Ipv4Addr, SocketAddr}, ops::Range, time::Duration, }; -use eyre::{eyre, Result}; +use eyre::{Result, eyre}; use reth_cli::chainspec::ChainSpecParser; use reth_network_peers::TrustedPeer; use reth_optimism_chainspec::OpChainSpec; diff --git a/crates/op-rbuilder/src/builders/context.rs b/crates/op-rbuilder/src/builders/context.rs index cfa061361..4fac34c80 100644 --- a/crates/op-rbuilder/src/builders/context.rs +++ b/crates/op-rbuilder/src/builders/context.rs @@ -1,7 +1,7 @@ use alloy_consensus::{ - conditional::BlockConditionalAttributes, Eip658Value, Transaction, TxEip1559, + Eip658Value, Transaction, TxEip1559, conditional::BlockConditionalAttributes, }; -use alloy_eips::{eip7623::TOTAL_COST_FLOOR_PER_TOKEN, Encodable2718, Typed2718}; +use alloy_eips::{Encodable2718, Typed2718, eip7623::TOTAL_COST_FLOOR_PER_TOKEN}; use alloy_op_evm::block::receipt_builder::OpReceiptBuilder; use alloy_primitives::{Address, Bytes, TxKind, U256}; use alloy_rpc_types_eth::Withdrawals; @@ -12,7 +12,7 @@ use reth::payload::PayloadBuilderAttributes; use reth_basic_payload_builder::PayloadConfig; use reth_chainspec::{EthChainSpec, EthereumHardforks}; use reth_evm::{ - eth::receipt_builder::ReceiptBuilderCtx, ConfigureEvm, Evm, EvmEnv, EvmError, InvalidTxError, + ConfigureEvm, Evm, EvmEnv, EvmError, InvalidTxError, eth::receipt_builder::ReceiptBuilderCtx, }; use reth_node_api::PayloadBuilderError; use reth_optimism_chainspec::OpChainSpec; @@ -24,16 +24,16 @@ use reth_optimism_primitives::{OpReceipt, OpTransactionSigned}; use reth_optimism_txpool::{ conditional::MaybeConditionalTransaction, estimated_da_size::DataAvailabilitySized, - interop::{is_valid_interop, MaybeInteropTransaction}, + interop::{MaybeInteropTransaction, is_valid_interop}, }; use reth_payload_builder::PayloadId; use reth_primitives::{Recovered, SealedHeader}; use reth_primitives_traits::{InMemorySize, SignedTransaction}; use reth_provider::ProviderError; -use reth_revm::{context::Block, State}; +use reth_revm::{State, context::Block}; use reth_transaction_pool::{BestTransactionsAttributes, PoolTransaction}; use revm::{ - context::result::ResultAndState, interpreter::as_u64_saturated, Database, DatabaseCommit, + Database, DatabaseCommit, context::result::ResultAndState, interpreter::as_u64_saturated, }; use std::{sync::Arc, time::Instant}; use tokio_util::sync::CancellationToken; @@ -397,24 +397,24 @@ impl OpPayloadBuilderCtx { num_txs_considered += 1; - if let Some(conditional) = conditional { - // TODO: ideally we should get this from the txpool stream - if !conditional.matches_block_attributes(&block_attr) { - best_txs.mark_invalid(tx.signer(), tx.nonce()); - continue; - } + // TODO: ideally we should get this from the txpool stream + if let Some(conditional) = conditional + && !conditional.matches_block_attributes(&block_attr) + { + best_txs.mark_invalid(tx.signer(), tx.nonce()); + continue; } // TODO: remove this condition and feature once we are comfortable enabling interop for everything if cfg!(feature = "interop") { // We skip invalid cross chain txs, they would be removed on the next block update in // the maintenance job - if let Some(interop) = interop { - if !is_valid_interop(interop, self.config.attributes.timestamp()) { - log_txn(TxnExecutionResult::InteropFailed); - best_txs.mark_invalid(tx.signer(), tx.nonce()); - continue; - } + if let Some(interop) = interop + && !is_valid_interop(interop, self.config.attributes.timestamp()) + { + log_txn(TxnExecutionResult::InteropFailed); + best_txs.mark_invalid(tx.signer(), tx.nonce()); + continue; } } diff --git a/crates/op-rbuilder/src/builders/flashblocks/best_txs.rs b/crates/op-rbuilder/src/builders/flashblocks/best_txs.rs index 9f224d4d0..e8d73bad5 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/best_txs.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/best_txs.rs @@ -103,7 +103,7 @@ mod tests { }; use alloy_consensus::Transaction; use reth_payload_util::{BestPayloadTransactions, PayloadTransactions}; - use reth_transaction_pool::{pool::PendingPool, CoinbaseTipOrdering, PoolTransaction}; + use reth_transaction_pool::{CoinbaseTipOrdering, PoolTransaction, pool::PendingPool}; use std::sync::Arc; #[test] diff --git a/crates/op-rbuilder/src/builders/flashblocks/payload.rs b/crates/op-rbuilder/src/builders/flashblocks/payload.rs index 8f109e296..04d366275 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/payload.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/payload.rs @@ -1,25 +1,25 @@ use super::{config::FlashblocksConfig, wspub::WebSocketPublisher}; use crate::{ builders::{ - context::{estimate_gas_for_builder_tx, OpPayloadBuilderCtx}, + BuilderConfig, BuilderTx, + context::{OpPayloadBuilderCtx, estimate_gas_for_builder_tx}, flashblocks::{best_txs::BestFlashblocksTxs, config::FlashBlocksConfigExt}, generator::{BlockCell, BuildArguments}, - BuilderConfig, BuilderTx, }, metrics::OpRBuilderMetrics, primitives::reth::ExecutionInfo, traits::{ClientBounds, PoolBounds}, }; use alloy_consensus::{ - constants::EMPTY_WITHDRAWALS, proofs, BlockBody, Header, EMPTY_OMMER_ROOT_HASH, + BlockBody, EMPTY_OMMER_ROOT_HASH, Header, constants::EMPTY_WITHDRAWALS, proofs, }; -use alloy_eips::{eip7685::EMPTY_REQUESTS_HASH, merge::BEACON_NONCE, Encodable2718}; -use alloy_primitives::{map::foldhash::HashMap, Address, B256, U256}; +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 reth::payload::PayloadBuilderAttributes; use reth_basic_payload_builder::BuildOutcome; use reth_chain_state::{ExecutedBlock, ExecutedBlockWithTrieUpdates, ExecutedTrieUpdates}; -use reth_evm::{execute::BlockBuilder, ConfigureEvm}; +use reth_evm::{ConfigureEvm, execute::BlockBuilder}; use reth_node_api::{Block, NodePrimitives, PayloadBuilderError}; use reth_optimism_consensus::{calculate_receipt_root_no_memo_optimism, isthmus}; use reth_optimism_evm::{OpEvmConfig, OpNextBlockEnvAttributes}; @@ -34,7 +34,7 @@ use reth_provider::{ StorageRootProvider, }; use reth_revm::{ - database::StateProviderDatabase, db::states::bundle_state::BundleRetention, State, + State, database::StateProviderDatabase, db::states::bundle_state::BundleRetention, }; use revm::Database; use rollup_boost::{ @@ -48,7 +48,7 @@ use std::{ }; use tokio::sync::{ mpsc, - mpsc::{error::SendError, Sender}, + mpsc::{Sender, error::SendError}, }; use tokio_util::sync::CancellationToken; use tracing::{debug, error, info, metadata::Level, span, warn}; @@ -362,7 +362,9 @@ where if let Some(da_limit) = da_per_batch { // We error if we can't insert any tx aside from builder tx in flashblock if da_limit / 2 < builder_tx_da_size { - error!("Builder tx da size subtraction caused max_da_block_size to be 0. No transaction would be included."); + error!( + "Builder tx da size subtraction caused max_da_block_size to be 0. No transaction would be included." + ); } } let mut total_da_per_batch = da_per_batch; @@ -568,7 +570,9 @@ where if let Some(da) = total_da_per_batch.as_mut() { *da += da_limit; } else { - error!("Builder end up in faulty invariant, if da_per_batch is set then total_da_per_batch must be set"); + error!( + "Builder end up in faulty invariant, if da_per_batch is set then total_da_per_batch must be set" + ); } } diff --git a/crates/op-rbuilder/src/builders/flashblocks/service.rs b/crates/op-rbuilder/src/builders/flashblocks/service.rs index 412c3cabf..ceea02f1b 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/service.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/service.rs @@ -1,15 +1,15 @@ -use super::{payload::OpPayloadBuilder, FlashblocksConfig}; +use super::{FlashblocksConfig, payload::OpPayloadBuilder}; use crate::{ builders::{ - builder_tx::StandardBuilderTx, generator::BlockPayloadJobGenerator, BuilderConfig, - BuilderTx, + BuilderConfig, BuilderTx, builder_tx::StandardBuilderTx, + generator::BlockPayloadJobGenerator, }, flashtestations::service::spawn_flashtestations_service, traits::{NodeBounds, PoolBounds}, }; use reth_basic_payload_builder::BasicPayloadJobGeneratorConfig; use reth_node_api::NodeTypes; -use reth_node_builder::{components::PayloadServiceBuilder, BuilderContext}; +use reth_node_builder::{BuilderContext, components::PayloadServiceBuilder}; use reth_optimism_evm::OpEvmConfig; use reth_payload_builder::{PayloadBuilderHandle, PayloadBuilderService}; use reth_provider::CanonStateSubscriptions; diff --git a/crates/op-rbuilder/src/builders/flashblocks/wspub.rs b/crates/op-rbuilder/src/builders/flashblocks/wspub.rs index aa34ecd7f..cf8c485c8 100644 --- a/crates/op-rbuilder/src/builders/flashblocks/wspub.rs +++ b/crates/op-rbuilder/src/builders/flashblocks/wspub.rs @@ -12,14 +12,13 @@ use std::{io, net::TcpListener, sync::Arc}; use tokio::{ net::TcpStream, sync::{ - broadcast::{self, error::RecvError, Receiver}, + broadcast::{self, Receiver, error::RecvError}, watch, }, }; use tokio_tungstenite::{ - accept_async, + WebSocketStream, accept_async, tungstenite::{Message, Utf8Bytes}, - WebSocketStream, }; use tracing::{debug, warn}; diff --git a/crates/op-rbuilder/src/builders/generator.rs b/crates/op-rbuilder/src/builders/generator.rs index 8b62d2c5c..c77930835 100644 --- a/crates/op-rbuilder/src/builders/generator.rs +++ b/crates/op-rbuilder/src/builders/generator.rs @@ -20,7 +20,7 @@ use std::{ time::{SystemTime, UNIX_EPOCH}, }; use tokio::{ - sync::{oneshot, Notify}, + sync::{Notify, oneshot}, time::{Duration, Sleep}, }; use tokio_util::sync::CancellationToken; @@ -471,14 +471,14 @@ mod tests { use reth::tasks::TokioTaskExecutor; use reth_chain_state::ExecutedBlockWithTrieUpdates; use reth_node_api::NodePrimitives; - use reth_optimism_payload_builder::{payload::OpPayloadBuilderAttributes, OpPayloadPrimitives}; + use reth_optimism_payload_builder::{OpPayloadPrimitives, payload::OpPayloadBuilderAttributes}; use reth_optimism_primitives::OpPrimitives; use reth_primitives::SealedBlock; use reth_provider::test_utils::MockEthProvider; - use reth_testing_utils::generators::{random_block_range, BlockRangeParams}; + use reth_testing_utils::generators::{BlockRangeParams, random_block_range}; use tokio::{ task, - time::{sleep, Duration}, + time::{Duration, sleep}, }; #[tokio::test] diff --git a/crates/op-rbuilder/src/builders/standard/payload.rs b/crates/op-rbuilder/src/builders/standard/payload.rs index 06ed5c707..295302ec4 100644 --- a/crates/op-rbuilder/src/builders/standard/payload.rs +++ b/crates/op-rbuilder/src/builders/standard/payload.rs @@ -1,21 +1,21 @@ use crate::{ - builders::{generator::BuildArguments, BuilderConfig}, + builders::{BuilderConfig, generator::BuildArguments}, flashtestations::service::spawn_flashtestations_service, metrics::OpRBuilderMetrics, primitives::reth::ExecutionInfo, traits::{ClientBounds, NodeBounds, PayloadTxsBounds, PoolBounds}, }; use alloy_consensus::{ - constants::EMPTY_WITHDRAWALS, proofs, BlockBody, Header, EMPTY_OMMER_ROOT_HASH, + BlockBody, EMPTY_OMMER_ROOT_HASH, Header, constants::EMPTY_WITHDRAWALS, proofs, }; use alloy_eips::{eip7685::EMPTY_REQUESTS_HASH, merge::BEACON_NONCE}; use alloy_primitives::U256; use reth::payload::PayloadBuilderAttributes; use reth_basic_payload_builder::{BuildOutcome, BuildOutcomeKind, MissingPayloadBehaviour}; use reth_chain_state::{ExecutedBlock, ExecutedBlockWithTrieUpdates, ExecutedTrieUpdates}; -use reth_evm::{execute::BlockBuilder, ConfigureEvm}; +use reth_evm::{ConfigureEvm, execute::BlockBuilder}; use reth_node_api::{Block, PayloadBuilderError}; -use reth_node_builder::{components::PayloadBuilderBuilder, BuilderContext}; +use reth_node_builder::{BuilderContext, components::PayloadBuilderBuilder}; use reth_optimism_consensus::{calculate_receipt_root_no_memo_optimism, isthmus}; use reth_optimism_evm::{OpEvmConfig, OpNextBlockEnvAttributes}; use reth_optimism_forks::OpHardforks; @@ -28,7 +28,7 @@ use reth_provider::{ StorageRootProvider, }; use reth_revm::{ - database::StateProviderDatabase, db::states::bundle_state::BundleRetention, State, + State, database::StateProviderDatabase, db::states::bundle_state::BundleRetention, }; use reth_transaction_pool::{ BestTransactions, BestTransactionsAttributes, PoolTransaction, TransactionPool, @@ -38,7 +38,7 @@ use std::{sync::Arc, time::Instant}; use tokio_util::sync::CancellationToken; use tracing::{error, info, warn}; -use super::super::context::{estimate_gas_for_builder_tx, OpPayloadBuilderCtx}; +use super::super::context::{OpPayloadBuilderCtx, estimate_gas_for_builder_tx}; pub struct StandardPayloadBuilderBuilder(pub BuilderConfig<()>); diff --git a/crates/op-rbuilder/src/flashtestations/args.rs b/crates/op-rbuilder/src/flashtestations/args.rs index 4af83427f..cc4f36463 100644 --- a/crates/op-rbuilder/src/flashtestations/args.rs +++ b/crates/op-rbuilder/src/flashtestations/args.rs @@ -1,4 +1,4 @@ -use alloy_primitives::{utils::parse_ether, Address, U256}; +use alloy_primitives::{Address, U256, utils::parse_ether}; use crate::tx_signer::Signer; diff --git a/crates/op-rbuilder/src/flashtestations/service.rs b/crates/op-rbuilder/src/flashtestations/service.rs index 650bce03d..411ef4bfc 100644 --- a/crates/op-rbuilder/src/flashtestations/service.rs +++ b/crates/op-rbuilder/src/flashtestations/service.rs @@ -9,12 +9,12 @@ use tracing::{info, warn}; use crate::{ builders::BuilderTx, traits::NodeBounds, - tx_signer::{generate_ethereum_keypair, Signer}, + tx_signer::{Signer, generate_ethereum_keypair}, }; use super::{ args::FlashtestationsArgs, - attestation::{get_attestation_provider, AttestationConfig, AttestationProvider}, + attestation::{AttestationConfig, AttestationProvider, get_attestation_provider}, tx_manager::TxManager, }; diff --git a/crates/op-rbuilder/src/flashtestations/tx_manager.rs b/crates/op-rbuilder/src/flashtestations/tx_manager.rs index d6c6345cc..9eabdd28a 100644 --- a/crates/op-rbuilder/src/flashtestations/tx_manager.rs +++ b/crates/op-rbuilder/src/flashtestations/tx_manager.rs @@ -1,7 +1,7 @@ use alloy_consensus::TxEip1559; use alloy_eips::Encodable2718; use alloy_network::ReceiptResponse; -use alloy_primitives::{keccak256, Address, Bytes, TxHash, TxKind, B256, U256}; +use alloy_primitives::{Address, B256, Bytes, TxHash, TxKind, U256, keccak256}; use alloy_rpc_types_eth::TransactionRequest; use alloy_transport::TransportResult; use op_alloy_consensus::OpTypedTransaction; @@ -12,7 +12,7 @@ use std::time::Duration; use alloy_provider::{PendingTransactionBuilder, Provider, ProviderBuilder}; use alloy_signer_local::PrivateKeySigner; -use alloy_sol_types::{sol, SolCall, SolValue}; +use alloy_sol_types::{SolCall, SolValue, sol}; use op_alloy_network::Optimism; use tracing::{debug, error, info}; diff --git a/crates/op-rbuilder/src/launcher.rs b/crates/op-rbuilder/src/launcher.rs index 7379c91d8..08a541b65 100644 --- a/crates/op-rbuilder/src/launcher.rs +++ b/crates/op-rbuilder/src/launcher.rs @@ -4,7 +4,7 @@ use reth_optimism_rpc::OpEthApiBuilder; use crate::{ args::*, builders::{BuilderConfig, BuilderMode, FlashblocksBuilder, PayloadBuilder, StandardBuilder}, - metrics::{record_flag_gauge_metrics, VERSION}, + metrics::{VERSION, record_flag_gauge_metrics}, monitor_tx_pool::monitor_tx_pool, primitives::reth::engine_api_builder::OpEngineApiBuilder, revert_protection::{EthApiExtServer, RevertProtectionExt}, @@ -18,8 +18,8 @@ use reth_db::mdbx::DatabaseEnv; use reth_optimism_chainspec::OpChainSpec; use reth_optimism_cli::chainspec::OpChainSpecParser; use reth_optimism_node::{ - node::{OpAddOns, OpAddOnsBuilder, OpEngineValidatorBuilder, OpPoolBuilder}, OpNode, + node::{OpAddOns, OpAddOnsBuilder, OpEngineValidatorBuilder, OpPoolBuilder}, }; use reth_transaction_pool::TransactionPool; use std::{marker::PhantomData, sync::Arc}; diff --git a/crates/op-rbuilder/src/metrics.rs b/crates/op-rbuilder/src/metrics.rs index e57269dd8..79658f765 100644 --- a/crates/op-rbuilder/src/metrics.rs +++ b/crates/op-rbuilder/src/metrics.rs @@ -1,7 +1,7 @@ use metrics::IntoF64; use reth_metrics::{ - metrics::{gauge, Counter, Gauge, Histogram}, Metrics, + metrics::{Counter, Gauge, Histogram, gauge}, }; use crate::args::OpRbuilderArgs; diff --git a/crates/op-rbuilder/src/mock_tx.rs b/crates/op-rbuilder/src/mock_tx.rs index 3cfd340e4..3802fa9f8 100644 --- a/crates/op-rbuilder/src/mock_tx.rs +++ b/crates/op-rbuilder/src/mock_tx.rs @@ -1,23 +1,23 @@ use crate::tx::MaybeFlashblockFilter; use alloy_consensus::{ - error::ValueError, transaction::Recovered, EthereumTxEnvelope, TxEip4844, TxEip4844WithSidecar, - TxType, + EthereumTxEnvelope, TxEip4844, TxEip4844WithSidecar, TxType, error::ValueError, + transaction::Recovered, }; use alloy_eips::{ + Typed2718, eip2930::AccessList, - eip4844::{env_settings::KzgSettings, BlobTransactionValidationError}, + eip4844::{BlobTransactionValidationError, env_settings::KzgSettings}, eip7594::BlobTransactionSidecarVariant, eip7702::SignedAuthorization, - Typed2718, }; -use alloy_primitives::{Address, Bytes, TxHash, TxKind, B256, U256}; +use alloy_primitives::{Address, B256, Bytes, TxHash, TxKind, U256}; use reth::primitives::TransactionSigned; use reth_primitives_traits::{InMemorySize, SignedTransaction}; use reth_transaction_pool::{ - identifier::TransactionId, - test_utils::{MockTransaction, MockTransactionFactory}, EthBlobTransactionSidecar, EthPoolTransaction, PoolTransaction, TransactionOrigin, ValidPoolTransaction, + identifier::TransactionId, + test_utils::{MockTransaction, MockTransactionFactory}, }; use std::{sync::Arc, time::Instant}; diff --git a/crates/op-rbuilder/src/primitives/bundle.rs b/crates/op-rbuilder/src/primitives/bundle.rs index d1a4fa7a3..3c415ad5c 100644 --- a/crates/op-rbuilder/src/primitives/bundle.rs +++ b/crates/op-rbuilder/src/primitives/bundle.rs @@ -1,4 +1,4 @@ -use alloy_primitives::{Bytes, B256}; +use alloy_primitives::{B256, Bytes}; use alloy_rpc_types_eth::erc4337::TransactionConditional; use reth_rpc_eth_types::EthApiError; use serde::{Deserialize, Serialize}; diff --git a/crates/op-rbuilder/src/primitives/reth/engine_api_builder.rs b/crates/op-rbuilder/src/primitives/reth/engine_api_builder.rs index c9a31816d..aaa733ca0 100644 --- a/crates/op-rbuilder/src/primitives/reth/engine_api_builder.rs +++ b/crates/op-rbuilder/src/primitives/reth/engine_api_builder.rs @@ -2,22 +2,22 @@ use reth_node_api::AddOnsContext; use reth_node_builder::rpc::{EngineApiBuilder, PayloadValidatorBuilder}; -use reth_node_core::version::{version_metadata, CLIENT_CODE}; +use reth_node_core::version::{CLIENT_CODE, version_metadata}; use reth_optimism_node::OpEngineTypes; -use reth_optimism_rpc::engine::OP_ENGINE_CAPABILITIES; pub use reth_optimism_rpc::OpEngineApi; +use reth_optimism_rpc::engine::OP_ENGINE_CAPABILITIES; use reth_payload_builder::PayloadStore; use reth_rpc_engine_api::EngineCapabilities; use crate::traits::NodeComponents; use alloy_eips::eip7685::Requests; -use alloy_primitives::{BlockHash, B256, U64}; +use alloy_primitives::{B256, BlockHash, U64}; use alloy_rpc_types_engine::{ ClientVersionV1, ExecutionPayloadBodiesV1, ExecutionPayloadInputV2, ExecutionPayloadV3, ForkchoiceState, ForkchoiceUpdated, PayloadId, PayloadStatus, }; use jsonrpsee::proc_macros::rpc; -use jsonrpsee_core::{server::RpcModule, RpcResult}; +use jsonrpsee_core::{RpcResult, server::RpcModule}; use op_alloy_rpc_types_engine::{ OpExecutionPayloadEnvelopeV3, OpExecutionPayloadEnvelopeV4, OpExecutionPayloadV4, OpPayloadAttributes, ProtocolVersion, SuperchainSignal, diff --git a/crates/op-rbuilder/src/primitives/telemetry.rs b/crates/op-rbuilder/src/primitives/telemetry.rs index f663156b8..7e73ef2a9 100644 --- a/crates/op-rbuilder/src/primitives/telemetry.rs +++ b/crates/op-rbuilder/src/primitives/telemetry.rs @@ -1,5 +1,5 @@ use crate::args::TelemetryArgs; -use tracing_subscriber::{filter::Targets, Layer}; +use tracing_subscriber::{Layer, filter::Targets}; /// Setup telemetry layer with sampling and custom endpoint configuration pub fn setup_telemetry_layer( @@ -9,10 +9,10 @@ pub fn setup_telemetry_layer( // Otlp uses evn vars inside if let Some(endpoint) = &args.otlp_endpoint { - std::env::set_var("OTEL_EXPORTER_OTLP_ENDPOINT", endpoint); + unsafe { std::env::set_var("OTEL_EXPORTER_OTLP_ENDPOINT", endpoint) }; } if let Some(headers) = &args.otlp_headers { - std::env::set_var("OTEL_EXPORTER_OTLP_HEADERS", headers); + unsafe { std::env::set_var("OTEL_EXPORTER_OTLP_HEADERS", headers) }; } // Create OTLP layer with custom configuration diff --git a/crates/op-rbuilder/src/revert_protection.rs b/crates/op-rbuilder/src/revert_protection.rs index bbbc1c616..f3fa8924e 100644 --- a/crates/op-rbuilder/src/revert_protection.rs +++ b/crates/op-rbuilder/src/revert_protection.rs @@ -8,14 +8,14 @@ use crate::{ use alloy_json_rpc::RpcObject; use alloy_primitives::B256; use jsonrpsee::{ - core::{async_trait, RpcResult}, + core::{RpcResult, async_trait}, proc_macros::rpc, }; use moka::future::Cache; -use reth::rpc::api::eth::{helpers::FullEthApi, RpcReceipt}; -use reth_optimism_txpool::{conditional::MaybeConditionalTransaction, OpPooledTransaction}; +use reth::rpc::api::eth::{RpcReceipt, helpers::FullEthApi}; +use reth_optimism_txpool::{OpPooledTransaction, conditional::MaybeConditionalTransaction}; use reth_provider::StateProviderFactory; -use reth_rpc_eth_types::{utils::recover_raw_transaction, EthApiError}; +use reth_rpc_eth_types::{EthApiError, utils::recover_raw_transaction}; use reth_transaction_pool::{PoolTransaction, TransactionOrigin, TransactionPool}; use tracing::error; @@ -94,19 +94,16 @@ where &self, hash: B256, ) -> RpcResult>> { - match self.eth_api.transaction_receipt(hash).await.unwrap() { - Some(receipt) => Ok(Some(receipt)), - None => { - // Try to find the transaction in the reverted cache - if self.reverted_cache.get(&hash).await.is_some() { - return Err(EthApiError::InvalidParams( - "the transaction was dropped from the pool".into(), - ) - .into()); - } else { - return Ok(None); - } - } + if let Some(receipt) = self.eth_api.transaction_receipt(hash).await.unwrap() { + Ok(Some(receipt)) + } else if self.reverted_cache.get(&hash).await.is_some() { + // Found the transaction in the reverted cache + Err( + EthApiError::InvalidParams("the transaction was dropped from the pool".into()) + .into(), + ) + } else { + Ok(None) } } } diff --git a/crates/op-rbuilder/src/tests/framework/apis.rs b/crates/op-rbuilder/src/tests/framework/apis.rs index 645fd8b70..6ad0b98a0 100644 --- a/crates/op-rbuilder/src/tests/framework/apis.rs +++ b/crates/op-rbuilder/src/tests/framework/apis.rs @@ -1,11 +1,11 @@ use super::DEFAULT_JWT_TOKEN; -use alloy_eips::{eip7685::Requests, BlockNumberOrTag}; +use alloy_eips::{BlockNumberOrTag, eip7685::Requests}; use alloy_primitives::B256; use alloy_rpc_types_engine::{ForkchoiceUpdated, PayloadStatus}; use core::{future::Future, marker::PhantomData}; use jsonrpsee::{ - core::{client::SubscriptionClientT, RpcResult}, + core::{RpcResult, client::SubscriptionClientT}, proc_macros::rpc, }; use op_alloy_rpc_types_engine::OpExecutionPayloadV4; @@ -74,7 +74,7 @@ pub struct EngineApi { } impl EngineApi

{ - async fn client(&self) -> impl SubscriptionClientT + Send + Sync + Unpin + 'static { + async fn client(&self) -> impl SubscriptionClientT + Send + Sync + Unpin + 'static + use

{ P::client(self.jwt_secret, self.address.clone()).await } } diff --git a/crates/op-rbuilder/src/tests/framework/driver.rs b/crates/op-rbuilder/src/tests/framework/driver.rs index 54e6833be..5f273c1c1 100644 --- a/crates/op-rbuilder/src/tests/framework/driver.rs +++ b/crates/op-rbuilder/src/tests/framework/driver.rs @@ -1,7 +1,7 @@ use core::time::Duration; -use alloy_eips::{eip7685::Requests, BlockNumberOrTag, Encodable2718}; -use alloy_primitives::{address, hex, Bytes, TxKind, B256, U256}; +use alloy_eips::{BlockNumberOrTag, Encodable2718, eip7685::Requests}; +use alloy_primitives::{B256, Bytes, TxKind, U256, address, hex}; use alloy_provider::{Provider, RootProvider}; use alloy_rpc_types_engine::{ForkchoiceUpdated, PayloadAttributes, PayloadStatusEnum}; use alloy_rpc_types_eth::Block; diff --git a/crates/op-rbuilder/src/tests/framework/external.rs b/crates/op-rbuilder/src/tests/framework/external.rs index d8feb7925..8bb99edad 100644 --- a/crates/op-rbuilder/src/tests/framework/external.rs +++ b/crates/op-rbuilder/src/tests/framework/external.rs @@ -1,6 +1,6 @@ use alloy_consensus::constants::EMPTY_WITHDRAWALS; -use alloy_eips::{eip7685::Requests, BlockNumberOrTag, Encodable2718}; -use alloy_primitives::{keccak256, private::alloy_rlp::Encodable, B256, U256}; +use alloy_eips::{BlockNumberOrTag, Encodable2718, eip7685::Requests}; +use alloy_primitives::{B256, U256, keccak256, private::alloy_rlp::Encodable}; use alloy_provider::{Identity, Provider, ProviderBuilder, RootProvider}; use alloy_rpc_types_engine::{ ExecutionPayloadV1, ExecutionPayloadV2, ExecutionPayloadV3, PayloadStatusEnum, @@ -10,6 +10,7 @@ use op_alloy_network::Optimism; use op_alloy_rpc_types_engine::OpExecutionPayloadV4; use std::path::{Path, PathBuf}; use testcontainers::bollard::{ + Docker, container::{ AttachContainerOptions, Config, CreateContainerOptions, RemoveContainerOptions, StartContainerOptions, StopContainerOptions, @@ -17,7 +18,6 @@ use testcontainers::bollard::{ exec::{CreateExecOptions, StartExecResults}, image::CreateImageOptions, secret::{ContainerCreateResponse, HostConfig}, - Docker, }; use tokio::signal; use tracing::{debug, warn}; @@ -353,7 +353,7 @@ async fn relax_permissions(docker: &Docker, container: &str, path: &str) -> eyre return Err(eyre::eyre!( "Failed to relax permissions for {path}: {}", String::from_utf8_lossy(&message) - )) + )); } _ => continue, }; diff --git a/crates/op-rbuilder/src/tests/framework/instance.rs b/crates/op-rbuilder/src/tests/framework/instance.rs index 2b2b486fd..45bf5e62e 100644 --- a/crates/op-rbuilder/src/tests/framework/instance.rs +++ b/crates/op-rbuilder/src/tests/framework/instance.rs @@ -4,9 +4,8 @@ use crate::{ primitives::reth::engine_api_builder::OpEngineApiBuilder, revert_protection::{EthApiExtServer, RevertProtectionExt}, tests::{ - create_test_db, - framework::{driver::ChainDriver, BUILDER_PRIVATE_KEY}, - EngineApi, Ipc, TransactionPoolObserver, + EngineApi, Ipc, TransactionPoolObserver, create_test_db, + framework::{BUILDER_PRIVATE_KEY, driver::ChainDriver}, }, tx::FBPooledTransaction, tx_signer::Signer, @@ -34,8 +33,8 @@ use reth_node_builder::{NodeBuilder, NodeConfig}; use reth_optimism_chainspec::OpChainSpec; use reth_optimism_cli::commands::Commands; use reth_optimism_node::{ - node::{OpAddOns, OpAddOnsBuilder, OpEngineValidatorBuilder, OpPoolBuilder}, OpNode, + node::{OpAddOns, OpAddOnsBuilder, OpEngineValidatorBuilder, OpPoolBuilder}, }; use reth_optimism_rpc::OpEthApiBuilder; use reth_transaction_pool::{AllTransactionsEvents, TransactionPool}; diff --git a/crates/op-rbuilder/src/tests/framework/txs.rs b/crates/op-rbuilder/src/tests/framework/txs.rs index 7b49acdea..24a1748d6 100644 --- a/crates/op-rbuilder/src/tests/framework/txs.rs +++ b/crates/op-rbuilder/src/tests/framework/txs.rs @@ -4,8 +4,8 @@ use crate::{ tx_signer::Signer, }; use alloy_consensus::TxEip1559; -use alloy_eips::{eip2718::Encodable2718, BlockNumberOrTag}; -use alloy_primitives::{hex, Address, Bytes, TxHash, TxKind, B256, U256}; +use alloy_eips::{BlockNumberOrTag, eip2718::Encodable2718}; +use alloy_primitives::{Address, B256, Bytes, TxHash, TxKind, U256, hex}; use alloy_provider::{PendingTransactionBuilder, Provider, RootProvider}; use core::cmp::max; use dashmap::DashMap; @@ -134,15 +134,14 @@ impl TransactionBuilder { } pub async fn build(mut self) -> Recovered { - let signer = match self.signer { - Some(signer) => signer, - None => Signer::try_from_secret( + let signer = self.signer.unwrap_or_else(|| { + Signer::try_from_secret( FUNDED_PRIVATE_KEYS[self.key.unwrap_or(0) as usize] .parse() .expect("invalid hardcoded builder private key"), ) - .expect("Failed to create signer from hardcoded private key"), - }; + .expect("Failed to create signer from hardcoded private key") + }); let nonce = match self.nonce { Some(nonce) => nonce, diff --git a/crates/op-rbuilder/src/tests/framework/utils.rs b/crates/op-rbuilder/src/tests/framework/utils.rs index a667c2173..705a8d988 100644 --- a/crates/op-rbuilder/src/tests/framework/utils.rs +++ b/crates/op-rbuilder/src/tests/framework/utils.rs @@ -1,24 +1,23 @@ use crate::{ - tests::{framework::driver::ChainDriver, Protocol, ONE_ETH}, + tests::{ONE_ETH, Protocol, framework::driver::ChainDriver}, tx_signer::Signer, }; use alloy_eips::Encodable2718; -use alloy_primitives::{hex, Address, BlockHash, TxHash, TxKind, B256, U256}; +use alloy_primitives::{Address, B256, BlockHash, TxHash, TxKind, U256, hex}; use alloy_rpc_types_eth::{Block, BlockTransactionHashes}; use core::future::Future; use op_alloy_consensus::{OpTypedTransaction, TxDeposit}; use op_alloy_rpc_types::Transaction; use reth_db::{ - init_db, - mdbx::{DatabaseArguments, MaxReadTransactionDuration, KILOBYTE, MEGABYTE}, - test_utils::{TempDatabase, ERROR_DB_CREATION}, - ClientVersion, DatabaseEnv, + ClientVersion, DatabaseEnv, init_db, + mdbx::{DatabaseArguments, KILOBYTE, MEGABYTE, MaxReadTransactionDuration}, + test_utils::{ERROR_DB_CREATION, TempDatabase}, }; use reth_node_core::{args::DatadirArgs, dirs::DataDirPath, node_config::NodeConfig}; use reth_optimism_chainspec::OpChainSpec; use std::sync::Arc; -use super::{TransactionBuilder, FUNDED_PRIVATE_KEYS}; +use super::{FUNDED_PRIVATE_KEYS, TransactionBuilder}; pub trait TransactionBuilderExt { fn random_valid_transfer(self) -> Self; @@ -50,7 +49,7 @@ pub trait ChainDriverExt { amount: u128, ) -> impl Future>; fn fund(&self, address: Address, amount: u128) - -> impl Future>; + -> impl Future>; fn first_funded_address(&self) -> Address { FUNDED_PRIVATE_KEYS[0] .parse() diff --git a/crates/op-rbuilder/src/tests/ordering.rs b/crates/op-rbuilder/src/tests/ordering.rs index 11cc496c7..bba31b0ef 100644 --- a/crates/op-rbuilder/src/tests/ordering.rs +++ b/crates/op-rbuilder/src/tests/ordering.rs @@ -1,6 +1,6 @@ -use crate::tests::{framework::ONE_ETH, ChainDriverExt, LocalInstance}; +use crate::tests::{ChainDriverExt, LocalInstance, framework::ONE_ETH}; use alloy_consensus::Transaction; -use futures::{future::join_all, stream, StreamExt}; +use futures::{StreamExt, future::join_all, stream}; use macros::rb_test; /// This test ensures that the transactions are ordered by fee priority in the block. diff --git a/crates/op-rbuilder/src/tests/revert.rs b/crates/op-rbuilder/src/tests/revert.rs index befce2c39..8037f996c 100644 --- a/crates/op-rbuilder/src/tests/revert.rs +++ b/crates/op-rbuilder/src/tests/revert.rs @@ -6,8 +6,8 @@ use crate::{ args::OpRbuilderArgs, primitives::bundle::MAX_BLOCK_RANGE_BLOCKS, tests::{ - BlockTransactionsExt, BundleOpts, ChainDriver, ChainDriverExt, LocalInstance, - OpRbuilderArgsTestExt, TransactionBuilderExt, ONE_ETH, + BlockTransactionsExt, BundleOpts, ChainDriver, ChainDriverExt, LocalInstance, ONE_ETH, + OpRbuilderArgsTestExt, TransactionBuilderExt, }, }; @@ -134,10 +134,12 @@ async fn bundle(rbuilder: LocalInstance) -> eyre::Result<()> { .await?; let block2 = driver.build_new_block().await?; // Block 2 - assert!(block2 - .transactions - .hashes() - .includes(valid_bundle.tx_hash())); + assert!( + block2 + .transactions + .hashes() + .includes(valid_bundle.tx_hash()) + ); let bundle_opts = BundleOpts { block_number_max: Some(4), @@ -285,13 +287,15 @@ async fn bundle_range_limits(rbuilder: LocalInstance) -> eyre::Result<()> { } // A bundle with a block out of range is invalid - assert!(send_bundle( - &driver, - Some(next_valid_block + MAX_BLOCK_RANGE_BLOCKS + 1), - None - ) - .await - .is_err()); + assert!( + send_bundle( + &driver, + Some(next_valid_block + MAX_BLOCK_RANGE_BLOCKS + 1), + None + ) + .await + .is_err() + ); // A bundle with a min block number higher than the max block is invalid assert!(send_bundle(&driver, Some(1), Some(2)).await.is_err()); @@ -302,9 +306,11 @@ async fn bundle_range_limits(rbuilder: LocalInstance) -> eyre::Result<()> { .await .is_ok() ); - assert!(send_bundle(&driver, Some(next_valid_block), Some(0)) - .await - .is_ok()); + assert!( + send_bundle(&driver, Some(next_valid_block), Some(0)) + .await + .is_ok() + ); // A bundle with a min block equal to max block is valid assert!( @@ -316,18 +322,24 @@ async fn bundle_range_limits(rbuilder: LocalInstance) -> eyre::Result<()> { // Test min-only cases (no max specified) // A bundle with only min block that's within the default range is valid let default_max = current_block + MAX_BLOCK_RANGE_BLOCKS; - assert!(send_bundle(&driver, None, Some(current_block)) - .await - .is_ok()); - assert!(send_bundle(&driver, None, Some(default_max - 1)) - .await - .is_ok()); + assert!( + send_bundle(&driver, None, Some(current_block)) + .await + .is_ok() + ); + assert!( + send_bundle(&driver, None, Some(default_max - 1)) + .await + .is_ok() + ); assert!(send_bundle(&driver, None, Some(default_max)).await.is_ok()); // A bundle with only min block that exceeds the default max range is invalid - assert!(send_bundle(&driver, None, Some(default_max + 1)) - .await - .is_err()); + assert!( + send_bundle(&driver, None, Some(default_max + 1)) + .await + .is_err() + ); Ok(()) } diff --git a/crates/op-rbuilder/src/tests/txpool.rs b/crates/op-rbuilder/src/tests/txpool.rs index 41f9b736b..235ccd268 100644 --- a/crates/op-rbuilder/src/tests/txpool.rs +++ b/crates/op-rbuilder/src/tests/txpool.rs @@ -1,5 +1,5 @@ use crate::tests::{ - default_node_config, BlockTransactionsExt, ChainDriverExt, LocalInstance, ONE_ETH, + BlockTransactionsExt, ChainDriverExt, LocalInstance, ONE_ETH, default_node_config, }; use macros::rb_test; use reth::args::TxPoolArgs; diff --git a/crates/op-rbuilder/src/tx.rs b/crates/op-rbuilder/src/tx.rs index 096d375a1..7626fff1d 100644 --- a/crates/op-rbuilder/src/tx.rs +++ b/crates/op-rbuilder/src/tx.rs @@ -1,16 +1,17 @@ -use alloy_consensus::{conditional::BlockConditionalAttributes, BlobTransactionValidationError}; -use alloy_eips::{eip7594::BlobTransactionSidecarVariant, eip7702::SignedAuthorization, Typed2718}; -use alloy_primitives::{Address, Bytes, TxHash, TxKind, B256, U256}; -use alloy_rpc_types_eth::{erc4337::TransactionConditional, AccessList}; +use std::{borrow::Cow, sync::Arc}; + +use alloy_consensus::{BlobTransactionValidationError, conditional::BlockConditionalAttributes}; +use alloy_eips::{Typed2718, eip7594::BlobTransactionSidecarVariant, eip7702::SignedAuthorization}; +use alloy_primitives::{Address, B256, Bytes, TxHash, TxKind, U256}; +use alloy_rpc_types_eth::{AccessList, erc4337::TransactionConditional}; use reth_optimism_primitives::OpTransactionSigned; use reth_optimism_txpool::{ - conditional::MaybeConditionalTransaction, estimated_da_size::DataAvailabilitySized, - interop::MaybeInteropTransaction, OpPooledTransaction, OpPooledTx, + OpPooledTransaction, OpPooledTx, conditional::MaybeConditionalTransaction, + estimated_da_size::DataAvailabilitySized, interop::MaybeInteropTransaction, }; -use reth_primitives::{kzg::KzgSettings, Recovered}; +use reth_primitives::{Recovered, kzg::KzgSettings}; use reth_primitives_traits::InMemorySize; use reth_transaction_pool::{EthBlobTransactionSidecar, EthPoolTransaction, PoolTransaction}; -use std::{borrow::Cow, sync::Arc}; pub trait FBPoolTransaction: MaybeRevertingTransaction + OpPooledTx + MaybeFlashblockFilter diff --git a/crates/op-rbuilder/src/tx_signer.rs b/crates/op-rbuilder/src/tx_signer.rs index f10e5d419..71ef7a4b5 100644 --- a/crates/op-rbuilder/src/tx_signer.rs +++ b/crates/op-rbuilder/src/tx_signer.rs @@ -1,11 +1,11 @@ use std::str::FromStr; use alloy_consensus::SignableTransaction; -use alloy_primitives::{Address, Signature, B256, U256}; +use alloy_primitives::{Address, B256, Signature, U256}; use op_alloy_consensus::OpTypedTransaction; use reth_optimism_primitives::OpTransactionSigned; use reth_primitives::Recovered; -use secp256k1::{rand::rngs::OsRng, Message, PublicKey, Secp256k1, SecretKey, SECP256K1}; +use secp256k1::{Message, PublicKey, SECP256K1, Secp256k1, SecretKey, rand::rngs::OsRng}; use sha3::{Digest, Keccak256}; /// Simple struct to sign txs/messages. @@ -103,8 +103,8 @@ pub fn public_key_to_address(public_key: &PublicKey) -> Address { #[cfg(test)] mod test { use super::*; - use alloy_consensus::{transaction::SignerRecoverable, TxEip1559}; - use alloy_primitives::{address, fixed_bytes, TxKind as TransactionKind}; + use alloy_consensus::{TxEip1559, transaction::SignerRecoverable}; + use alloy_primitives::{TxKind as TransactionKind, address, fixed_bytes}; #[test] fn test_sign_transaction() { let secret = diff --git a/crates/tdx-quote-provider/src/main.rs b/crates/tdx-quote-provider/src/main.rs index ecadead02..a820ce976 100644 --- a/crates/tdx-quote-provider/src/main.rs +++ b/crates/tdx-quote-provider/src/main.rs @@ -1,7 +1,7 @@ use clap::Parser; use dotenvy::dotenv; use metrics_exporter_prometheus::PrometheusBuilder; -use tracing::{info, Level}; +use tracing::{Level, info}; use tracing_subscriber::filter::EnvFilter; use crate::server::{Server, ServerConfig}; diff --git a/crates/tdx-quote-provider/src/provider.rs b/crates/tdx-quote-provider/src/provider.rs index fe6d21c91..0479edf8a 100644 --- a/crates/tdx-quote-provider/src/provider.rs +++ b/crates/tdx-quote-provider/src/provider.rs @@ -1,5 +1,5 @@ use std::{fs::File, io::Read, sync::Arc}; -use tdx::{device::DeviceOptions, error::TdxError, Tdx}; +use tdx::{Tdx, device::DeviceOptions, error::TdxError}; use thiserror::Error; use tracing::info; diff --git a/crates/tdx-quote-provider/src/server.rs b/crates/tdx-quote-provider/src/server.rs index d355727aa..b8d5e2955 100644 --- a/crates/tdx-quote-provider/src/server.rs +++ b/crates/tdx-quote-provider/src/server.rs @@ -1,12 +1,12 @@ use std::{net::SocketAddr, sync::Arc, time::Instant}; use axum::{ + Router, body::Body, extract::{Path, State}, http::{Response, StatusCode}, response::IntoResponse, routing::get, - Router, }; use serde_json::json; use tokio::{net::TcpListener, signal}; @@ -14,7 +14,7 @@ use tracing::info; use crate::{ metrics::Metrics, - provider::{get_attestation_provider, AttestationConfig, AttestationProvider}, + provider::{AttestationConfig, AttestationProvider, get_attestation_provider}, }; /// Server configuration