mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat(rpc): add BlockOverrides in trace_* (#3102)
This commit is contained in:
@ -1,8 +1,9 @@
|
||||
use jsonrpsee::{core::RpcResult, proc_macros::rpc};
|
||||
use reth_primitives::{BlockId, Bytes, H256};
|
||||
use reth_rpc_types::{
|
||||
state::StateOverride,
|
||||
trace::{filter::TraceFilter, parity::*},
|
||||
CallRequest, Index,
|
||||
BlockOverrides, CallRequest, Index,
|
||||
};
|
||||
use std::collections::HashSet;
|
||||
|
||||
@ -17,6 +18,8 @@ pub trait TraceApi {
|
||||
call: CallRequest,
|
||||
trace_types: HashSet<TraceType>,
|
||||
block_id: Option<BlockId>,
|
||||
state_overrides: Option<StateOverride>,
|
||||
block_overrides: Option<Box<BlockOverrides>>,
|
||||
) -> RpcResult<TraceResults>;
|
||||
|
||||
/// Performs multiple call traces on top of the same block. i.e. transaction n will be executed
|
||||
|
||||
@ -2,7 +2,7 @@ use crate::{
|
||||
eth::{
|
||||
cache::EthStateCache,
|
||||
error::{EthApiError, EthResult},
|
||||
revm_utils::{inspect, prepare_call_env},
|
||||
revm_utils::{inspect, prepare_call_env, EvmOverrides},
|
||||
utils::recover_raw_transaction,
|
||||
EthTransactions,
|
||||
},
|
||||
@ -20,8 +20,9 @@ use reth_revm::{
|
||||
};
|
||||
use reth_rpc_api::TraceApiServer;
|
||||
use reth_rpc_types::{
|
||||
state::StateOverride,
|
||||
trace::{filter::TraceFilter, parity::*},
|
||||
BlockError, CallRequest, Index, TransactionInfo,
|
||||
BlockError, BlockOverrides, CallRequest, Index, TransactionInfo,
|
||||
};
|
||||
use reth_tasks::TaskSpawner;
|
||||
use revm::primitives::Env;
|
||||
@ -100,9 +101,17 @@ where
|
||||
call: CallRequest,
|
||||
trace_types: HashSet<TraceType>,
|
||||
block_id: Option<BlockId>,
|
||||
state_overrides: Option<StateOverride>,
|
||||
block_overrides: Option<Box<BlockOverrides>>,
|
||||
) -> EthResult<TraceResults> {
|
||||
self.on_blocking_task(|this| async move {
|
||||
this.try_trace_call(call, trace_types, block_id).await
|
||||
this.try_trace_call(
|
||||
call,
|
||||
trace_types,
|
||||
block_id,
|
||||
EvmOverrides::new(state_overrides, block_overrides),
|
||||
)
|
||||
.await
|
||||
})
|
||||
.await
|
||||
}
|
||||
@ -112,16 +121,14 @@ where
|
||||
call: CallRequest,
|
||||
trace_types: HashSet<TraceType>,
|
||||
block_id: Option<BlockId>,
|
||||
overrides: EvmOverrides,
|
||||
) -> EthResult<TraceResults> {
|
||||
let at = block_id.unwrap_or(BlockId::Number(BlockNumberOrTag::Latest));
|
||||
let config = tracing_config(&trace_types);
|
||||
let mut inspector = TracingInspector::new(config);
|
||||
|
||||
let (res, _) = self
|
||||
.inner
|
||||
.eth_api
|
||||
.inspect_call_at(call, at, Default::default(), &mut inspector)
|
||||
.await?;
|
||||
let (res, _) =
|
||||
self.inner.eth_api.inspect_call_at(call, at, overrides, &mut inspector).await?;
|
||||
|
||||
let trace_res =
|
||||
inspector.into_parity_builder().into_trace_results(res.result, &trace_types);
|
||||
@ -388,9 +395,19 @@ where
|
||||
call: CallRequest,
|
||||
trace_types: HashSet<TraceType>,
|
||||
block_id: Option<BlockId>,
|
||||
state_overrides: Option<StateOverride>,
|
||||
block_overrides: Option<Box<BlockOverrides>>,
|
||||
) -> Result<TraceResults> {
|
||||
let _permit = self.acquire_trace_permit().await;
|
||||
Ok(TraceApi::trace_call(self, call, trace_types, block_id).await?)
|
||||
Ok(TraceApi::trace_call(
|
||||
self,
|
||||
call,
|
||||
trace_types,
|
||||
block_id,
|
||||
state_overrides,
|
||||
block_overrides,
|
||||
)
|
||||
.await?)
|
||||
}
|
||||
|
||||
/// Handler for `trace_callMany`
|
||||
|
||||
Reference in New Issue
Block a user