Skip to content

Commit ea9f774

Browse files
committed
perf: remove some clones around eth tracing in RPC
1 parent 6a79d80 commit ea9f774

File tree

4 files changed

+45
-45
lines changed

4 files changed

+45
-45
lines changed

crates/rpc/rpc-eth-api/src/helpers/call.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -412,8 +412,7 @@ pub trait EthCall: EstimateCall + Call + LoadPendingBlock + LoadBlock + FullEthA
412412

413413
let mut inspector = AccessListInspector::new(initial);
414414

415-
let (result, (evm_env, mut tx_env)) =
416-
self.inspect(&mut db, evm_env, tx_env, &mut inspector)?;
415+
let result = self.inspect(&mut db, evm_env.clone(), tx_env.clone(), &mut inspector)?;
417416
let access_list = inspector.into_access_list();
418417
tx_env.set_access_list(access_list.clone());
419418
match result.result {

crates/rpc/rpc-eth-api/src/helpers/trace.rs

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,26 +25,21 @@ use std::sync::Arc;
2525

2626
/// Executes CPU heavy tasks.
2727
pub trait Trace: LoadState<Error: FromEvmError<Self::Evm>> {
28-
/// Executes the [`reth_evm::EvmEnv`] against the given [Database] without committing state
29-
/// changes.
30-
#[expect(clippy::type_complexity)]
28+
/// Executes the [`TxEnvFor`] with [`EvmEnvFor`] against the given [Database] without committing
29+
/// state changes.
3130
fn inspect<DB, I>(
3231
&self,
3332
db: DB,
3433
evm_env: EvmEnvFor<Self::Evm>,
3534
tx_env: TxEnvFor<Self::Evm>,
3635
inspector: I,
37-
) -> Result<
38-
(ResultAndState<HaltReasonFor<Self::Evm>>, (EvmEnvFor<Self::Evm>, TxEnvFor<Self::Evm>)),
39-
Self::Error,
40-
>
36+
) -> Result<ResultAndState<HaltReasonFor<Self::Evm>>, Self::Error>
4137
where
4238
DB: Database<Error = ProviderError>,
4339
I: InspectorFor<Self::Evm, DB>,
4440
{
45-
let mut evm = self.evm_config().evm_with_env_and_inspector(db, evm_env.clone(), inspector);
46-
let res = evm.transact(tx_env.clone()).map_err(Self::Error::from_evm_err)?;
47-
Ok((res, (evm_env, tx_env)))
41+
let mut evm = self.evm_config().evm_with_env_and_inspector(db, evm_env, inspector);
42+
evm.transact(tx_env).map_err(Self::Error::from_evm_err)
4843
}
4944

5045
/// Executes the transaction on top of the given [`BlockId`] with a tracer configured by the
@@ -72,7 +67,7 @@ pub trait Trace: LoadState<Error: FromEvmError<Self::Evm>> {
7267
self.with_state_at_block(at, |state| {
7368
let mut db = CacheDB::new(StateProviderDatabase::new(state));
7469
let mut inspector = TracingInspector::new(config);
75-
let (res, _) = self.inspect(&mut db, evm_env, tx_env, &mut inspector)?;
70+
let res = self.inspect(&mut db, evm_env, tx_env, &mut inspector)?;
7671
f(inspector, res)
7772
})
7873
}
@@ -107,7 +102,7 @@ pub trait Trace: LoadState<Error: FromEvmError<Self::Evm>> {
107102
self.spawn_with_state_at_block(at, move |state| {
108103
let mut db = CacheDB::new(StateProviderDatabase::new(state));
109104
let mut inspector = TracingInspector::new(config);
110-
let (res, _) = this.inspect(&mut db, evm_env, tx_env, &mut inspector)?;
105+
let res = this.inspect(&mut db, evm_env, tx_env, &mut inspector)?;
111106
f(inspector, res, db)
112107
})
113108
}
@@ -195,7 +190,7 @@ pub trait Trace: LoadState<Error: FromEvmError<Self::Evm>> {
195190
this.replay_transactions_until(&mut db, evm_env.clone(), block_txs, *tx.tx_hash())?;
196191

197192
let tx_env = this.evm_config().tx_env(tx);
198-
let (res, _) = this.inspect(
193+
let res = this.inspect(
199194
StateCacheDbRefMutWrapper(&mut db),
200195
evm_env,
201196
tx_env,

crates/rpc/rpc/src/debug.rs

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -302,10 +302,11 @@ where
302302
let frame = self
303303
.eth_api()
304304
.spawn_with_call_at(call, at, overrides, move |db, evm_env, tx_env| {
305-
let (res, (_, tx_env)) =
305+
let gas_limit = tx_env.gas_limit();
306+
let res =
306307
this.eth_api().inspect(db, evm_env, tx_env, &mut inspector)?;
307308
let frame = inspector
308-
.with_transaction_gas_limit(tx_env.gas_limit())
309+
.with_transaction_gas_limit(gas_limit)
309310
.into_geth_builder()
310311
.geth_call_traces(call_config, res.result.gas_used());
311312
Ok(frame.into())
@@ -328,14 +329,15 @@ where
328329
// see <https://github.com/rust-lang/rust/issues/100013>
329330
let db = db.0;
330331

331-
let (res, (_, tx_env)) = this.eth_api().inspect(
332+
let gas_limit = tx_env.gas_limit();
333+
let res = this.eth_api().inspect(
332334
&mut *db,
333335
evm_env,
334336
tx_env,
335337
&mut inspector,
336338
)?;
337339
let frame = inspector
338-
.with_transaction_gas_limit(tx_env.gas_limit())
340+
.with_transaction_gas_limit(gas_limit)
339341
.into_geth_builder()
340342
.geth_prestate_traces(&res, &prestate_config, db)
341343
.map_err(Eth::Error::from_eth_err)?;
@@ -369,7 +371,7 @@ where
369371
index: None,
370372
};
371373

372-
let (res, _) = this.eth_api().inspect(
374+
let res = this.eth_api().inspect(
373375
&mut *db,
374376
evm_env,
375377
tx_env,
@@ -396,11 +398,11 @@ where
396398
.inner
397399
.eth_api
398400
.spawn_with_call_at(call, at, overrides, move |db, evm_env, tx_env| {
399-
let (_res, (_, tx_env)) =
400-
this.eth_api().inspect(db, evm_env, tx_env, &mut inspector)?;
401+
let gas_limit = tx_env.gas_limit();
402+
this.eth_api().inspect(db, evm_env, tx_env, &mut inspector)?;
401403
let tx_info = TransactionInfo::default();
402404
let frame: FlatCallFrame = inspector
403-
.with_transaction_gas_limit(tx_env.gas_limit())
405+
.with_transaction_gas_limit(gas_limit)
404406
.into_parity_builder()
405407
.into_localized_transaction_traces(tx_info);
406408
Ok(frame)
@@ -430,7 +432,7 @@ where
430432
let mut inspector =
431433
revm_inspectors::tracing::js::JsInspector::new(code, config)
432434
.map_err(Eth::Error::from_eth_err)?;
433-
let (res, _) = this.eth_api().inspect(
435+
let res = this.eth_api().inspect(
434436
&mut *db,
435437
evm_env.clone(),
436438
tx_env.clone(),
@@ -460,9 +462,9 @@ where
460462
let (res, tx_gas_limit, inspector) = self
461463
.eth_api()
462464
.spawn_with_call_at(call, at, overrides, move |db, evm_env, tx_env| {
463-
let (res, (_, tx_env)) =
464-
this.eth_api().inspect(db, evm_env, tx_env, &mut inspector)?;
465-
Ok((res, tx_env.gas_limit(), inspector))
465+
let gas_limit = tx_env.gas_limit();
466+
let res = this.eth_api().inspect(db, evm_env, tx_env, &mut inspector)?;
467+
Ok((res, gas_limit, inspector))
466468
})
467469
.await?;
468470
let gas_used = res.result.gas_used();
@@ -742,8 +744,7 @@ where
742744
GethDebugTracerType::BuiltInTracer(tracer) => match tracer {
743745
GethDebugBuiltInTracerType::FourByteTracer => {
744746
let mut inspector = FourByteInspector::default();
745-
let (res, _) =
746-
self.eth_api().inspect(db, evm_env, tx_env, &mut inspector)?;
747+
let res = self.eth_api().inspect(db, evm_env, tx_env, &mut inspector)?;
747748
return Ok((FourByteFrame::from(&inspector).into(), res.state))
748749
}
749750
GethDebugBuiltInTracerType::CallTracer => {
@@ -758,10 +759,10 @@ where
758759
))
759760
});
760761

761-
let (res, (_, tx_env)) =
762-
self.eth_api().inspect(db, evm_env, tx_env, &mut inspector)?;
762+
let gas_limit = tx_env.gas_limit();
763+
let res = self.eth_api().inspect(db, evm_env, tx_env, &mut inspector)?;
763764

764-
inspector.set_transaction_gas_limit(tx_env.gas_limit());
765+
inspector.set_transaction_gas_limit(gas_limit);
765766

766767
let frame = inspector
767768
.geth_builder()
@@ -780,10 +781,11 @@ where
780781
TracingInspectorConfig::from_geth_prestate_config(&prestate_config),
781782
)
782783
});
783-
let (res, (_, tx_env)) =
784+
let gas_limit = tx_env.gas_limit();
785+
let res =
784786
self.eth_api().inspect(&mut *db, evm_env, tx_env, &mut inspector)?;
785787

786-
inspector.set_transaction_gas_limit(tx_env.gas_limit());
788+
inspector.set_transaction_gas_limit(gas_limit);
787789
let frame = inspector
788790
.geth_builder()
789791
.geth_prestate_traces(&res, &prestate_config, db)
@@ -803,7 +805,7 @@ where
803805
let mut inspector = MuxInspector::try_from_config(mux_config)
804806
.map_err(Eth::Error::from_eth_err)?;
805807

806-
let (res, _) =
808+
let res =
807809
self.eth_api().inspect(&mut *db, evm_env, tx_env, &mut inspector)?;
808810
let frame = inspector
809811
.try_into_mux_frame(&res, db, tx_info)
@@ -820,10 +822,10 @@ where
820822
TracingInspectorConfig::from_flat_call_config(&flat_call_config),
821823
);
822824

823-
let (res, (_, tx_env)) =
824-
self.eth_api().inspect(db, evm_env, tx_env, &mut inspector)?;
825+
let gas_limit = tx_env.gas_limit();
826+
let res = self.eth_api().inspect(db, evm_env, tx_env, &mut inspector)?;
825827
let frame: FlatCallFrame = inspector
826-
.with_transaction_gas_limit(tx_env.gas_limit())
828+
.with_transaction_gas_limit(gas_limit)
827829
.into_parity_builder()
828830
.into_localized_transaction_traces(tx_info);
829831

@@ -844,8 +846,12 @@ where
844846
transaction_context.unwrap_or_default(),
845847
)
846848
.map_err(Eth::Error::from_eth_err)?;
847-
let (res, (evm_env, tx_env)) =
848-
self.eth_api().inspect(&mut *db, evm_env, tx_env, &mut inspector)?;
849+
let res = self.eth_api().inspect(
850+
&mut *db,
851+
evm_env.clone(),
852+
tx_env.clone(),
853+
&mut inspector,
854+
)?;
849855

850856
let state = res.state.clone();
851857
let result = inspector
@@ -866,10 +872,11 @@ where
866872
let inspector_config = TracingInspectorConfig::from_geth_config(config);
867873
TracingInspector::new(inspector_config)
868874
});
869-
let (res, (_, tx_env)) = self.eth_api().inspect(db, evm_env, tx_env, &mut inspector)?;
875+
let gas_limit = tx_env.gas_limit();
876+
let res = self.eth_api().inspect(db, evm_env, tx_env, &mut inspector)?;
870877
let gas_used = res.result.gas_used();
871878
let return_value = res.result.into_output().unwrap_or_default();
872-
inspector.set_transaction_gas_limit(tx_env.gas_limit());
879+
inspector.set_transaction_gas_limit(gas_limit);
873880
let frame = inspector.geth_builder().geth_traces(gas_used, return_value, *config);
874881

875882
Ok((frame.into(), res.state))

crates/rpc/rpc/src/trace.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ where
101101
// <https://github.com/rust-lang/rust/issues/100013>
102102
let db = db.0;
103103

104-
let (res, _) = this.eth_api().inspect(&mut *db, evm_env, tx_env, &mut inspector)?;
104+
let res = this.eth_api().inspect(&mut *db, evm_env, tx_env, &mut inspector)?;
105105
let trace_res = inspector
106106
.into_parity_builder()
107107
.into_trace_results_with_state(&res, &trace_request.trace_types, &db)
@@ -166,8 +166,7 @@ where
166166
)?;
167167
let config = TracingInspectorConfig::from_parity_config(&trace_types);
168168
let mut inspector = TracingInspector::new(config);
169-
let (res, _) =
170-
this.eth_api().inspect(&mut db, evm_env, tx_env, &mut inspector)?;
169+
let res = this.eth_api().inspect(&mut db, evm_env, tx_env, &mut inspector)?;
171170

172171
let trace_res = inspector
173172
.into_parity_builder()

0 commit comments

Comments
 (0)