From dad8d8ea22ef278b09ac7d4ce523a482fd573ade Mon Sep 17 00:00:00 2001 From: nk_ysg Date: Mon, 2 Feb 2026 22:23:18 +0800 Subject: [PATCH] perf(evm): avoid cloning transactions in TxTracer --- crates/evm/src/tracing.rs | 8 ++++---- crates/evm/src/tx.rs | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/crates/evm/src/tracing.rs b/crates/evm/src/tracing.rs index 98c5a73c..6cf40f2d 100644 --- a/crates/evm/src/tracing.rs +++ b/crates/evm/src/tracing.rs @@ -71,7 +71,7 @@ impl> TxTracer { mut f: F, ) -> TracerIter<'_, E, Txs::IntoIter, impl FnMut(TracingCtx<'_, T, E>) -> Result> where - T: IntoTxEnv + Clone, + for<'a> &'a T: IntoTxEnv, Txs: IntoIterator, F: FnMut(TracingCtx<'_, Txs::Item, E>) -> O, { @@ -85,7 +85,7 @@ impl> TxTracer { hook: F, ) -> TracerIter<'_, E, Txs::IntoIter, F> where - T: IntoTxEnv + Clone, + for<'a> &'a T: IntoTxEnv, Txs: IntoIterator, F: FnMut(TracingCtx<'_, T, E>) -> Result, Err: From, @@ -140,7 +140,7 @@ impl TracerIter<'_, E, Txs, F> { impl Iterator for TracerIter<'_, E, Txs, F> where E: Evm, - T: IntoTxEnv + Clone, + for<'a> &'a T: IntoTxEnv, Txs: Iterator, Err: From, F: FnMut(TracingCtx<'_, T, E>) -> Result, @@ -149,7 +149,7 @@ where fn next(&mut self) -> Option { let tx = self.txs.next()?; - let result = self.inner.evm.transact(tx.clone()); + let result = self.inner.evm.transact(&tx); let TxTracer { evm, fused_inspector } = self.inner; let (db, inspector, _) = evm.components_mut(); diff --git a/crates/evm/src/tx.rs b/crates/evm/src/tx.rs index 0564c565..7ed47c9a 100644 --- a/crates/evm/src/tx.rs +++ b/crates/evm/src/tx.rs @@ -49,6 +49,12 @@ impl IntoTxEnv for TxEnv { } } +impl ToTxEnv for &TxEnv { + fn to_tx_env(&self) -> TxEnv { + (*self).clone() + } +} + /// A helper trait to allow implementing [`IntoTxEnv`] for types that build transaction environment /// by cloning data. #[auto_impl::auto_impl(&)] @@ -89,6 +95,16 @@ where } } +#[cfg(feature = "op")] +impl ToTxEnv> for &op_revm::OpTransaction +where + op_revm::OpTransaction: Clone, +{ + fn to_tx_env(&self) -> op_revm::OpTransaction { + (*self).clone() + } +} + /// Helper trait for building a transaction environment from a recovered transaction. /// /// This trait enables the conversion of consensus transaction types (which have been recovered