mirror of
https://github.com/paradigmxyz/reth.git
synced 2026-04-30 03:01:58 -04:00
rpc: use eth_api() method (#11516)
This commit is contained in:
@@ -208,8 +208,8 @@ where
|
||||
.ok_or(EthApiError::HeaderNotFound(block_id))?;
|
||||
|
||||
let ((cfg, block_env, _), block) = futures::try_join!(
|
||||
self.inner.eth_api.evm_env_at(block_hash.into()),
|
||||
self.inner.eth_api.block_with_senders(block_id),
|
||||
self.eth_api().evm_env_at(block_hash.into()),
|
||||
self.eth_api().block_with_senders(block_id),
|
||||
)?;
|
||||
|
||||
let block = block.ok_or(EthApiError::HeaderNotFound(block_id))?;
|
||||
@@ -235,11 +235,11 @@ where
|
||||
tx_hash: B256,
|
||||
opts: GethDebugTracingOptions,
|
||||
) -> Result<GethTrace, Eth::Error> {
|
||||
let (transaction, block) = match self.inner.eth_api.transaction_and_block(tx_hash).await? {
|
||||
let (transaction, block) = match self.eth_api().transaction_and_block(tx_hash).await? {
|
||||
None => return Err(EthApiError::TransactionNotFound.into()),
|
||||
Some(res) => res,
|
||||
};
|
||||
let (cfg, block_env, _) = self.inner.eth_api.evm_env_at(block.hash().into()).await?;
|
||||
let (cfg, block_env, _) = self.eth_api().evm_env_at(block.hash().into()).await?;
|
||||
|
||||
// we need to get the state of the parent block because we're essentially replaying the
|
||||
// block the transaction is included in
|
||||
@@ -248,8 +248,7 @@ where
|
||||
let block_txs = block.into_transactions_ecrecovered();
|
||||
|
||||
let this = self.clone();
|
||||
self.inner
|
||||
.eth_api
|
||||
self.eth_api()
|
||||
.spawn_with_state_at_block(state_at, move |state| {
|
||||
// configure env for the target transaction
|
||||
let tx = transaction.into_recovered();
|
||||
@@ -312,8 +311,7 @@ where
|
||||
GethDebugBuiltInTracerType::FourByteTracer => {
|
||||
let mut inspector = FourByteInspector::default();
|
||||
let inspector = self
|
||||
.inner
|
||||
.eth_api
|
||||
.eth_api()
|
||||
.spawn_with_call_at(call, at, overrides, move |db, env| {
|
||||
this.eth_api().inspect(db, env, &mut inspector)?;
|
||||
Ok(inspector)
|
||||
@@ -331,8 +329,7 @@ where
|
||||
);
|
||||
|
||||
let frame = self
|
||||
.inner
|
||||
.eth_api
|
||||
.eth_api()
|
||||
.spawn_with_call_at(call, at, overrides, move |db, env| {
|
||||
let (res, env) = this.eth_api().inspect(db, env, &mut inspector)?;
|
||||
let frame = inspector
|
||||
@@ -353,8 +350,7 @@ where
|
||||
);
|
||||
|
||||
let frame = self
|
||||
.inner
|
||||
.eth_api
|
||||
.eth_api()
|
||||
.spawn_with_call_at(call, at, overrides, move |db, env| {
|
||||
// wrapper is hack to get around 'higher-ranked lifetime error',
|
||||
// see <https://github.com/rust-lang/rust/issues/100013>
|
||||
@@ -434,11 +430,10 @@ where
|
||||
GethDebugTracerType::JsTracer(code) => {
|
||||
let config = tracer_config.into_json();
|
||||
|
||||
let (_, _, at) = self.inner.eth_api.evm_env_at(at).await?;
|
||||
let (_, _, at) = self.eth_api().evm_env_at(at).await?;
|
||||
|
||||
let res = self
|
||||
.inner
|
||||
.eth_api
|
||||
.eth_api()
|
||||
.spawn_with_call_at(call, at, overrides, move |db, env| {
|
||||
// wrapper is hack to get around 'higher-ranked lifetime error', see
|
||||
// <https://github.com/rust-lang/rust/issues/100013>
|
||||
@@ -464,8 +459,7 @@ where
|
||||
let mut inspector = TracingInspector::new(inspector_config);
|
||||
|
||||
let (res, tx_gas_limit, inspector) = self
|
||||
.inner
|
||||
.eth_api
|
||||
.eth_api()
|
||||
.spawn_with_call_at(call, at, overrides, move |db, env| {
|
||||
let (res, env) = this.eth_api().inspect(db, env, &mut inspector)?;
|
||||
Ok((res, env.tx.gas_limit, inspector))
|
||||
@@ -499,8 +493,8 @@ where
|
||||
|
||||
let target_block = block_number.unwrap_or_default();
|
||||
let ((cfg, mut block_env, _), block) = futures::try_join!(
|
||||
self.inner.eth_api.evm_env_at(target_block),
|
||||
self.inner.eth_api.block_with_senders(target_block),
|
||||
self.eth_api().evm_env_at(target_block),
|
||||
self.eth_api().block_with_senders(target_block),
|
||||
)?;
|
||||
|
||||
let opts = opts.unwrap_or_default();
|
||||
@@ -524,8 +518,7 @@ where
|
||||
|
||||
let this = self.clone();
|
||||
|
||||
self.inner
|
||||
.eth_api
|
||||
self.eth_api()
|
||||
.spawn_with_state_at_block(at.into(), move |state| {
|
||||
// the outer vec for the bundles
|
||||
let mut all_bundles = Vec::with_capacity(bundles.len());
|
||||
@@ -546,7 +539,7 @@ where
|
||||
),
|
||||
handler_cfg: cfg.handler_cfg,
|
||||
};
|
||||
let (res, _) = this.inner.eth_api.transact(&mut db, env)?;
|
||||
let (res, _) = this.eth_api().transact(&mut db, env)?;
|
||||
db.commit(res.state);
|
||||
}
|
||||
}
|
||||
@@ -604,14 +597,12 @@ where
|
||||
) -> Result<ExecutionWitness, Eth::Error> {
|
||||
let this = self.clone();
|
||||
let block = this
|
||||
.inner
|
||||
.eth_api
|
||||
.eth_api()
|
||||
.block_with_senders(block_id.into())
|
||||
.await?
|
||||
.ok_or(EthApiError::HeaderNotFound(block_id.into()))?;
|
||||
|
||||
self.inner
|
||||
.eth_api
|
||||
self.eth_api()
|
||||
.spawn_with_state_at_block(block.parent_hash.into(), move |state_provider| {
|
||||
let db = StateProviderDatabase::new(&state_provider);
|
||||
let block_executor = this.inner.block_executor.executor(db);
|
||||
@@ -868,7 +859,7 @@ where
|
||||
///
|
||||
/// Returns the bytes of the transaction for the given hash.
|
||||
async fn raw_transaction(&self, hash: B256) -> RpcResult<Option<Bytes>> {
|
||||
self.inner.eth_api.raw_transaction_by_hash(hash).await.map_err(Into::into)
|
||||
self.eth_api().raw_transaction_by_hash(hash).await.map_err(Into::into)
|
||||
}
|
||||
|
||||
/// Handler for `debug_getRawTransactions`
|
||||
|
||||
@@ -37,6 +37,11 @@ impl<Eth> EthBundle<Eth> {
|
||||
pub fn new(eth_api: Eth, blocking_task_guard: BlockingTaskGuard) -> Self {
|
||||
Self { inner: Arc::new(EthBundleInner { eth_api, blocking_task_guard }) }
|
||||
}
|
||||
|
||||
/// Access the underlying `Eth` API.
|
||||
pub fn eth_api(&self) -> &Eth {
|
||||
&self.inner.eth_api
|
||||
}
|
||||
}
|
||||
|
||||
impl<Eth> EthBundle<Eth>
|
||||
@@ -103,7 +108,7 @@ where
|
||||
|
||||
let block_id: alloy_rpc_types::BlockId = state_block_number.into();
|
||||
// Note: the block number is considered the `parent` block: <https://github.com/flashbots/mev-geth/blob/fddf97beec5877483f879a77b7dea2e58a58d653/internal/ethapi/api.go#L2104>
|
||||
let (cfg, mut block_env, at) = self.inner.eth_api.evm_env_at(block_id).await?;
|
||||
let (cfg, mut block_env, at) = self.eth_api().evm_env_at(block_id).await?;
|
||||
|
||||
// need to adjust the timestamp for the next block
|
||||
if let Some(timestamp) = timestamp {
|
||||
@@ -125,12 +130,12 @@ where
|
||||
} else if cfg.handler_cfg.spec_id.is_enabled_in(SpecId::LONDON) {
|
||||
let parent_block = block_env.number.saturating_to::<u64>();
|
||||
// here we need to fetch the _next_ block's basefee based on the parent block <https://github.com/flashbots/mev-geth/blob/fddf97beec5877483f879a77b7dea2e58a58d653/internal/ethapi/api.go#L2130>
|
||||
let parent = LoadPendingBlock::provider(&self.inner.eth_api)
|
||||
let parent = LoadPendingBlock::provider(self.eth_api())
|
||||
.header_by_number(parent_block)
|
||||
.map_err(Eth::Error::from_eth_err)?
|
||||
.ok_or(EthApiError::HeaderNotFound(parent_block.into()))?;
|
||||
if let Some(base_fee) = parent.next_block_base_fee(
|
||||
LoadPendingBlock::provider(&self.inner.eth_api)
|
||||
LoadPendingBlock::provider(self.eth_api())
|
||||
.chain_spec()
|
||||
.base_fee_params_at_block(parent_block),
|
||||
) {
|
||||
@@ -142,10 +147,9 @@ where
|
||||
// use the block number of the request
|
||||
block_env.number = U256::from(block_number);
|
||||
|
||||
let eth_api = self.inner.eth_api.clone();
|
||||
let eth_api = self.eth_api().clone();
|
||||
|
||||
self.inner
|
||||
.eth_api
|
||||
self.eth_api()
|
||||
.spawn_with_state_at_block(at, move |state| {
|
||||
let coinbase = block_env.coinbase;
|
||||
let basefee = Some(block_env.basefee.to::<u64>());
|
||||
|
||||
@@ -120,7 +120,7 @@ where
|
||||
) -> Result<TraceResults, Eth::Error> {
|
||||
let tx = recover_raw_transaction(tx)?;
|
||||
|
||||
let (cfg, block, at) = self.inner.eth_api.evm_env_at(block_id.unwrap_or_default()).await?;
|
||||
let (cfg, block, at) = self.eth_api().evm_env_at(block_id.unwrap_or_default()).await?;
|
||||
|
||||
let env = EnvWithHandlerCfg::new_with_cfg_env(
|
||||
cfg,
|
||||
@@ -130,8 +130,7 @@ where
|
||||
|
||||
let config = TracingInspectorConfig::from_parity_config(&trace_types);
|
||||
|
||||
self.inner
|
||||
.eth_api
|
||||
self.eth_api()
|
||||
.spawn_trace_at_with_state(env, config, at, move |inspector, res, db| {
|
||||
inspector
|
||||
.into_parity_builder()
|
||||
@@ -151,7 +150,7 @@ where
|
||||
block_id: Option<BlockId>,
|
||||
) -> Result<Vec<TraceResults>, Eth::Error> {
|
||||
let at = block_id.unwrap_or(BlockId::pending());
|
||||
let (cfg, block_env, at) = self.inner.eth_api.evm_env_at(at).await?;
|
||||
let (cfg, block_env, at) = self.eth_api().evm_env_at(at).await?;
|
||||
|
||||
let this = self.clone();
|
||||
// execute all transactions on top of each other and record the traces
|
||||
@@ -202,8 +201,7 @@ where
|
||||
trace_types: HashSet<TraceType>,
|
||||
) -> Result<TraceResults, Eth::Error> {
|
||||
let config = TracingInspectorConfig::from_parity_config(&trace_types);
|
||||
self.inner
|
||||
.eth_api
|
||||
self.eth_api()
|
||||
.spawn_trace_transaction_in_block(hash, config, move |_, inspector, res, db| {
|
||||
let trace_res = inspector
|
||||
.into_parity_builder()
|
||||
@@ -285,7 +283,7 @@ where
|
||||
let mut block_traces = Vec::with_capacity(blocks.len());
|
||||
for block in &blocks {
|
||||
let matcher = matcher.clone();
|
||||
let traces = self.inner.eth_api.trace_block_until(
|
||||
let traces = self.eth_api().trace_block_until(
|
||||
block.number.into(),
|
||||
None,
|
||||
TracingInspectorConfig::default_parity(),
|
||||
@@ -345,8 +343,7 @@ where
|
||||
&self,
|
||||
hash: B256,
|
||||
) -> Result<Option<Vec<LocalizedTransactionTrace>>, Eth::Error> {
|
||||
self.inner
|
||||
.eth_api
|
||||
self.eth_api()
|
||||
.spawn_trace_transaction_in_block(
|
||||
hash,
|
||||
TracingInspectorConfig::default_parity(),
|
||||
@@ -364,7 +361,7 @@ where
|
||||
&self,
|
||||
block_id: BlockId,
|
||||
) -> Result<Option<Vec<LocalizedTransactionTrace>>, Eth::Error> {
|
||||
let traces = self.inner.eth_api.trace_block_with(
|
||||
let traces = self.eth_api().trace_block_with(
|
||||
block_id,
|
||||
TracingInspectorConfig::default_parity(),
|
||||
|tx_info, inspector, _, _, _| {
|
||||
@@ -374,7 +371,7 @@ where
|
||||
},
|
||||
);
|
||||
|
||||
let block = self.inner.eth_api.block(block_id);
|
||||
let block = self.eth_api().block(block_id);
|
||||
let (maybe_traces, maybe_block) = futures::try_join!(traces, block)?;
|
||||
|
||||
let mut maybe_traces =
|
||||
@@ -399,8 +396,7 @@ where
|
||||
block_id: BlockId,
|
||||
trace_types: HashSet<TraceType>,
|
||||
) -> Result<Option<Vec<TraceResultsWithTransactionHash>>, Eth::Error> {
|
||||
self.inner
|
||||
.eth_api
|
||||
self.eth_api()
|
||||
.trace_block_with(
|
||||
block_id,
|
||||
TracingInspectorConfig::from_parity_config(&trace_types),
|
||||
@@ -431,8 +427,7 @@ where
|
||||
&self,
|
||||
tx_hash: B256,
|
||||
) -> Result<Option<TransactionOpcodeGas>, Eth::Error> {
|
||||
self.inner
|
||||
.eth_api
|
||||
self.eth_api()
|
||||
.spawn_trace_transaction_in_block_with_inspector(
|
||||
tx_hash,
|
||||
OpcodeGasInspector::default(),
|
||||
@@ -456,8 +451,7 @@ where
|
||||
block_id: BlockId,
|
||||
) -> Result<Option<BlockOpcodeGas>, Eth::Error> {
|
||||
let res = self
|
||||
.inner
|
||||
.eth_api
|
||||
.eth_api()
|
||||
.trace_block_inspector(
|
||||
block_id,
|
||||
OpcodeGasInspector::default,
|
||||
@@ -473,7 +467,7 @@ where
|
||||
|
||||
let Some(transactions) = res else { return Ok(None) };
|
||||
|
||||
let Some(block) = self.inner.eth_api.block(block_id).await? else { return Ok(None) };
|
||||
let Some(block) = self.eth_api().block(block_id).await? else { return Ok(None) };
|
||||
|
||||
Ok(Some(BlockOpcodeGas {
|
||||
block_hash: block.hash(),
|
||||
|
||||
Reference in New Issue
Block a user