From b7c824580e593b7ee705352b3bd42e0c59d9e34d Mon Sep 17 00:00:00 2001 From: Federico Gimenez Date: Mon, 10 Mar 2025 13:18:16 +0100 Subject: [PATCH] feat(op, txpool): introduce OpPooledTx trait (#14926) --- Cargo.lock | 1 + crates/optimism/node/src/node.rs | 7 ++++--- crates/optimism/payload/Cargo.toml | 1 + crates/optimism/payload/src/builder.rs | 5 +++-- crates/optimism/rpc/src/witness.rs | 7 +++---- crates/optimism/txpool/src/lib.rs | 2 +- crates/optimism/txpool/src/transaction.rs | 11 +++++++++++ 7 files changed, 24 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bd7ae9f051..31dc5f6ee2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8798,6 +8798,7 @@ dependencies = [ "reth-optimism-evm", "reth-optimism-forks", "reth-optimism-primitives", + "reth-optimism-txpool", "reth-payload-builder", "reth-payload-builder-primitives", "reth-payload-primitives", diff --git a/crates/optimism/node/src/node.rs b/crates/optimism/node/src/node.rs index faf7337179..2d32e8ea27 100644 --- a/crates/optimism/node/src/node.rs +++ b/crates/optimism/node/src/node.rs @@ -40,7 +40,7 @@ use reth_optimism_rpc::{ witness::{DebugExecutionWitnessApiServer, OpDebugWitnessApi}, OpEthApi, OpEthApiError, SequencerClient, }; -use reth_optimism_txpool::conditional::MaybeConditionalTransaction; +use reth_optimism_txpool::{conditional::MaybeConditionalTransaction, OpPooledTx}; use reth_provider::{providers::ProviderFactoryBuilder, CanonStateSubscriptions, EthStorage}; use reth_rpc_eth_api::ext::L2EthApiExtServer; use reth_rpc_eth_types::error::FromEvmError; @@ -280,7 +280,7 @@ where Evm: ConfigureEvm, >, OpEthApiError: FromEvmError, - ::Transaction: MaybeConditionalTransaction, + ::Transaction: OpPooledTx, EvmFactoryFor: EvmFactory>, { type Handle = RpcHandle>; @@ -352,7 +352,7 @@ where Evm: ConfigureEvm, >, OpEthApiError: FromEvmError, - <::Pool as TransactionPool>::Transaction: MaybeConditionalTransaction, + <::Pool as TransactionPool>::Transaction: OpPooledTx, EvmFactoryFor: EvmFactory>, { type EthApi = OpEthApi; @@ -680,6 +680,7 @@ where + Unpin + 'static, Txs: OpPayloadTransactions, + ::Transaction: OpPooledTx, { type PayloadBuilder = reth_optimism_payload_builder::OpPayloadBuilder; diff --git a/crates/optimism/payload/Cargo.toml b/crates/optimism/payload/Cargo.toml index 36b4c0d02c..ccb34909c7 100644 --- a/crates/optimism/payload/Cargo.toml +++ b/crates/optimism/payload/Cargo.toml @@ -33,6 +33,7 @@ reth-payload-validator.workspace = true reth-optimism-evm.workspace = true reth-optimism-forks.workspace = true reth-optimism-primitives = { workspace = true, features = ["reth-codec"] } +reth-optimism-txpool.workspace = true # ethereum revm.workspace = true diff --git a/crates/optimism/payload/src/builder.rs b/crates/optimism/payload/src/builder.rs index c770f381f6..949eaf7a28 100644 --- a/crates/optimism/payload/src/builder.rs +++ b/crates/optimism/payload/src/builder.rs @@ -25,6 +25,7 @@ use reth_execution_types::ExecutionOutcome; use reth_optimism_evm::OpNextBlockEnvAttributes; use reth_optimism_forks::OpHardforks; use reth_optimism_primitives::transaction::signed::OpTransaction; +use reth_optimism_txpool::OpPooledTx; use reth_payload_builder_primitives::PayloadBuilderError; use reth_payload_primitives::PayloadBuilderAttributes; use reth_payload_util::{BestPayloadTransactions, NoopPayloadTransactions, PayloadTransactions}; @@ -121,7 +122,7 @@ impl OpPayloadBuilder { impl OpPayloadBuilder where - Pool: TransactionPool>, + Pool: TransactionPool>, Client: StateProviderFactory + ChainSpecProvider, N: OpPayloadPrimitives, Evm: ConfigureEvm, @@ -198,7 +199,7 @@ impl PayloadBuilder for OpPayloadBuilder + Clone, N: OpPayloadPrimitives, - Pool: TransactionPool>, + Pool: TransactionPool>, Evm: ConfigureEvm, Txs: OpPayloadTransactions, { diff --git a/crates/optimism/rpc/src/witness.rs b/crates/optimism/rpc/src/witness.rs index c30e64d1ff..24c661f71b 100644 --- a/crates/optimism/rpc/src/witness.rs +++ b/crates/optimism/rpc/src/witness.rs @@ -10,6 +10,7 @@ use reth_node_api::NodePrimitives; use reth_optimism_chainspec::OpChainSpec; use reth_optimism_evm::OpNextBlockEnvAttributes; use reth_optimism_payload_builder::{OpPayloadBuilder, OpPayloadPrimitives}; +use reth_optimism_txpool::OpPooledTx; use reth_primitives_traits::SealedHeader; use reth_provider::{ BlockReaderIdExt, NodePrimitivesProvider, ProviderError, ProviderResult, StateProviderFactory, @@ -17,7 +18,7 @@ use reth_provider::{ pub use reth_rpc_api::DebugExecutionWitnessApiServer; use reth_rpc_server_types::{result::internal_rpc_err, ToRpcResult}; use reth_tasks::TaskSpawner; -use reth_transaction_pool::{PoolTransaction, TransactionPool}; +use reth_transaction_pool::TransactionPool; use std::{fmt::Debug, sync::Arc}; use tokio::sync::{oneshot, Semaphore}; @@ -58,9 +59,7 @@ impl DebugExecutionWitnessApiServer where Pool: TransactionPool< - Transaction: PoolTransaction< - Consensus = ::SignedTx, - >, + Transaction: OpPooledTx::SignedTx>, > + 'static, Provider: BlockReaderIdExt
+ NodePrimitivesProvider diff --git a/crates/optimism/txpool/src/lib.rs b/crates/optimism/txpool/src/lib.rs index efbcb0e531..c0c252e311 100644 --- a/crates/optimism/txpool/src/lib.rs +++ b/crates/optimism/txpool/src/lib.rs @@ -13,7 +13,7 @@ pub use validator::{OpL1BlockInfo, OpTransactionValidator}; pub mod conditional; mod transaction; -pub use transaction::OpPooledTransaction; +pub use transaction::{OpPooledTransaction, OpPooledTx}; pub mod maintain; use reth_transaction_pool::{CoinbaseTipOrdering, Pool, TransactionValidationTaskExecutor}; diff --git a/crates/optimism/txpool/src/transaction.rs b/crates/optimism/txpool/src/transaction.rs index 6c084529cf..141ddea35f 100644 --- a/crates/optimism/txpool/src/transaction.rs +++ b/crates/optimism/txpool/src/transaction.rs @@ -244,6 +244,17 @@ where } } +/// Helper trait to provide payload builder with access to conditionals and encoded bytes of +/// transaction. +pub trait OpPooledTx: MaybeConditionalTransaction + PoolTransaction {} + +impl OpPooledTx for OpPooledTransaction +where + Cons: SignedTransaction + From, + Pooled: SignedTransaction + TryFrom, +{ +} + #[cfg(test)] mod tests { use crate::{OpPooledTransaction, OpTransactionValidator};