mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
chore: remove unused evm env provider fns (#13272)
This commit is contained in:
@ -2,15 +2,14 @@
|
|||||||
|
|
||||||
use crate::ConfigureEvmEnv;
|
use crate::ConfigureEvmEnv;
|
||||||
use alloy_consensus::Header;
|
use alloy_consensus::Header;
|
||||||
use alloy_eips::BlockHashOrNumber;
|
|
||||||
use reth_storage_errors::provider::ProviderResult;
|
use reth_storage_errors::provider::ProviderResult;
|
||||||
use revm::primitives::{BlockEnv, CfgEnv, CfgEnvWithHandlerCfg, SpecId};
|
use revm::primitives::{BlockEnv, CfgEnvWithHandlerCfg};
|
||||||
|
|
||||||
/// A provider type that knows chain specific information required to configure a
|
/// A provider type that knows chain specific information required to configure a
|
||||||
/// [`CfgEnvWithHandlerCfg`].
|
/// [`CfgEnvWithHandlerCfg`].
|
||||||
///
|
///
|
||||||
/// This type is mainly used to provide required data to configure the EVM environment that is
|
/// This type is mainly used to provide required data to configure the EVM environment that is
|
||||||
/// usually stored on disk.
|
/// not part of the block and stored separately (on disk), for example the total difficulty.
|
||||||
#[auto_impl::auto_impl(&, Arc)]
|
#[auto_impl::auto_impl(&, Arc)]
|
||||||
pub trait EvmEnvProvider<H = Header>: Send + Sync {
|
pub trait EvmEnvProvider<H = Header>: Send + Sync {
|
||||||
/// Fills the default [`CfgEnvWithHandlerCfg`] and [BlockEnv] fields with values specific to the
|
/// Fills the default [`CfgEnvWithHandlerCfg`] and [BlockEnv] fields with values specific to the
|
||||||
@ -20,45 +19,6 @@ pub trait EvmEnvProvider<H = Header>: Send + Sync {
|
|||||||
header: &H,
|
header: &H,
|
||||||
evm_config: EvmConfig,
|
evm_config: EvmConfig,
|
||||||
) -> ProviderResult<(CfgEnvWithHandlerCfg, BlockEnv)>
|
) -> ProviderResult<(CfgEnvWithHandlerCfg, BlockEnv)>
|
||||||
where
|
|
||||||
EvmConfig: ConfigureEvmEnv<Header = H>,
|
|
||||||
{
|
|
||||||
let mut cfg = CfgEnvWithHandlerCfg::new_with_spec_id(CfgEnv::default(), SpecId::LATEST);
|
|
||||||
let mut block_env = BlockEnv::default();
|
|
||||||
self.fill_env_with_header(&mut cfg, &mut block_env, header, evm_config)?;
|
|
||||||
Ok((cfg, block_env))
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Fills the [`CfgEnvWithHandlerCfg`] and [BlockEnv] fields with values specific to the given
|
|
||||||
/// block header.
|
|
||||||
fn fill_env_with_header<EvmConfig>(
|
|
||||||
&self,
|
|
||||||
cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
block_env: &mut BlockEnv,
|
|
||||||
header: &H,
|
|
||||||
evm_config: EvmConfig,
|
|
||||||
) -> ProviderResult<()>
|
|
||||||
where
|
|
||||||
EvmConfig: ConfigureEvmEnv<Header = H>;
|
|
||||||
|
|
||||||
/// Fills the [`CfgEnvWithHandlerCfg`] fields with values specific to the given
|
|
||||||
/// [BlockHashOrNumber].
|
|
||||||
fn fill_cfg_env_at<EvmConfig>(
|
|
||||||
&self,
|
|
||||||
cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
at: BlockHashOrNumber,
|
|
||||||
evm_config: EvmConfig,
|
|
||||||
) -> ProviderResult<()>
|
|
||||||
where
|
|
||||||
EvmConfig: ConfigureEvmEnv<Header = H>;
|
|
||||||
|
|
||||||
/// Fills the [`CfgEnvWithHandlerCfg`] fields with values specific to the given block header.
|
|
||||||
fn fill_cfg_env_with_header<EvmConfig>(
|
|
||||||
&self,
|
|
||||||
cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
header: &H,
|
|
||||||
evm_config: EvmConfig,
|
|
||||||
) -> ProviderResult<()>
|
|
||||||
where
|
where
|
||||||
EvmConfig: ConfigureEvmEnv<Header = H>;
|
EvmConfig: ConfigureEvmEnv<Header = H>;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -493,41 +493,15 @@ impl<N: ProviderNodeTypes> StageCheckpointReader for BlockchainProvider2<N> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<N: ProviderNodeTypes> EvmEnvProvider<HeaderTy<N>> for BlockchainProvider2<N> {
|
impl<N: ProviderNodeTypes> EvmEnvProvider<HeaderTy<N>> for BlockchainProvider2<N> {
|
||||||
fn fill_env_with_header<EvmConfig>(
|
fn env_with_header<EvmConfig>(
|
||||||
&self,
|
&self,
|
||||||
cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
block_env: &mut BlockEnv,
|
|
||||||
header: &HeaderTy<N>,
|
header: &HeaderTy<N>,
|
||||||
evm_config: EvmConfig,
|
evm_config: EvmConfig,
|
||||||
) -> ProviderResult<()>
|
) -> ProviderResult<(CfgEnvWithHandlerCfg, BlockEnv)>
|
||||||
where
|
where
|
||||||
EvmConfig: ConfigureEvmEnv<Header = HeaderTy<N>>,
|
EvmConfig: ConfigureEvmEnv<Header = HeaderTy<N>>,
|
||||||
{
|
{
|
||||||
self.consistent_provider()?.fill_env_with_header(cfg, block_env, header, evm_config)
|
self.consistent_provider()?.env_with_header(header, evm_config)
|
||||||
}
|
|
||||||
|
|
||||||
fn fill_cfg_env_at<EvmConfig>(
|
|
||||||
&self,
|
|
||||||
cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
at: BlockHashOrNumber,
|
|
||||||
evm_config: EvmConfig,
|
|
||||||
) -> ProviderResult<()>
|
|
||||||
where
|
|
||||||
EvmConfig: ConfigureEvmEnv<Header = HeaderTy<N>>,
|
|
||||||
{
|
|
||||||
self.consistent_provider()?.fill_cfg_env_at(cfg, at, evm_config)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn fill_cfg_env_with_header<EvmConfig>(
|
|
||||||
&self,
|
|
||||||
cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
header: &HeaderTy<N>,
|
|
||||||
evm_config: EvmConfig,
|
|
||||||
) -> ProviderResult<()>
|
|
||||||
where
|
|
||||||
EvmConfig: ConfigureEvmEnv<Header = HeaderTy<N>>,
|
|
||||||
{
|
|
||||||
self.consistent_provider()?.fill_cfg_env_with_header(cfg, header, evm_config)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1231,51 +1231,18 @@ impl<N: ProviderNodeTypes> StageCheckpointReader for ConsistentProvider<N> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<N: ProviderNodeTypes> EvmEnvProvider<HeaderTy<N>> for ConsistentProvider<N> {
|
impl<N: ProviderNodeTypes> EvmEnvProvider<HeaderTy<N>> for ConsistentProvider<N> {
|
||||||
fn fill_env_with_header<EvmConfig>(
|
fn env_with_header<EvmConfig>(
|
||||||
&self,
|
&self,
|
||||||
cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
block_env: &mut BlockEnv,
|
|
||||||
header: &HeaderTy<N>,
|
header: &HeaderTy<N>,
|
||||||
evm_config: EvmConfig,
|
evm_config: EvmConfig,
|
||||||
) -> ProviderResult<()>
|
) -> ProviderResult<(CfgEnvWithHandlerCfg, BlockEnv)>
|
||||||
where
|
where
|
||||||
EvmConfig: ConfigureEvmEnv<Header = HeaderTy<N>>,
|
EvmConfig: ConfigureEvmEnv<Header = HeaderTy<N>>,
|
||||||
{
|
{
|
||||||
let total_difficulty = self
|
let total_difficulty = self
|
||||||
.header_td_by_number(header.number())?
|
.header_td_by_number(header.number())?
|
||||||
.ok_or_else(|| ProviderError::HeaderNotFound(header.number().into()))?;
|
.ok_or_else(|| ProviderError::HeaderNotFound(header.number().into()))?;
|
||||||
evm_config.fill_cfg_and_block_env(cfg, block_env, header, total_difficulty);
|
Ok(evm_config.cfg_and_block_env(header, total_difficulty))
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn fill_cfg_env_at<EvmConfig>(
|
|
||||||
&self,
|
|
||||||
cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
at: BlockHashOrNumber,
|
|
||||||
evm_config: EvmConfig,
|
|
||||||
) -> ProviderResult<()>
|
|
||||||
where
|
|
||||||
EvmConfig: ConfigureEvmEnv<Header = HeaderTy<N>>,
|
|
||||||
{
|
|
||||||
let hash = self.convert_number(at)?.ok_or(ProviderError::HeaderNotFound(at))?;
|
|
||||||
let header = self.header(&hash)?.ok_or(ProviderError::HeaderNotFound(at))?;
|
|
||||||
self.fill_cfg_env_with_header(cfg, &header, evm_config)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn fill_cfg_env_with_header<EvmConfig>(
|
|
||||||
&self,
|
|
||||||
cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
header: &HeaderTy<N>,
|
|
||||||
evm_config: EvmConfig,
|
|
||||||
) -> ProviderResult<()>
|
|
||||||
where
|
|
||||||
EvmConfig: ConfigureEvmEnv<Header = HeaderTy<N>>,
|
|
||||||
{
|
|
||||||
let total_difficulty = self
|
|
||||||
.header_td_by_number(header.number())?
|
|
||||||
.ok_or_else(|| ProviderError::HeaderNotFound(header.number().into()))?;
|
|
||||||
evm_config.fill_cfg_env(cfg, header, total_difficulty);
|
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -590,41 +590,15 @@ impl<N: ProviderNodeTypes> StageCheckpointReader for ProviderFactory<N> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<N: ProviderNodeTypes> EvmEnvProvider<HeaderTy<N>> for ProviderFactory<N> {
|
impl<N: ProviderNodeTypes> EvmEnvProvider<HeaderTy<N>> for ProviderFactory<N> {
|
||||||
fn fill_env_with_header<EvmConfig>(
|
fn env_with_header<EvmConfig>(
|
||||||
&self,
|
&self,
|
||||||
cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
block_env: &mut BlockEnv,
|
|
||||||
header: &HeaderTy<N>,
|
header: &HeaderTy<N>,
|
||||||
evm_config: EvmConfig,
|
evm_config: EvmConfig,
|
||||||
) -> ProviderResult<()>
|
) -> ProviderResult<(CfgEnvWithHandlerCfg, BlockEnv)>
|
||||||
where
|
where
|
||||||
EvmConfig: ConfigureEvmEnv<Header = HeaderTy<N>>,
|
EvmConfig: ConfigureEvmEnv<Header = HeaderTy<N>>,
|
||||||
{
|
{
|
||||||
self.provider()?.fill_env_with_header(cfg, block_env, header, evm_config)
|
self.provider()?.env_with_header(header, evm_config)
|
||||||
}
|
|
||||||
|
|
||||||
fn fill_cfg_env_at<EvmConfig>(
|
|
||||||
&self,
|
|
||||||
cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
at: BlockHashOrNumber,
|
|
||||||
evm_config: EvmConfig,
|
|
||||||
) -> ProviderResult<()>
|
|
||||||
where
|
|
||||||
EvmConfig: ConfigureEvmEnv<Header = HeaderTy<N>>,
|
|
||||||
{
|
|
||||||
self.provider()?.fill_cfg_env_at(cfg, at, evm_config)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn fill_cfg_env_with_header<EvmConfig>(
|
|
||||||
&self,
|
|
||||||
cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
header: &HeaderTy<N>,
|
|
||||||
evm_config: EvmConfig,
|
|
||||||
) -> ProviderResult<()>
|
|
||||||
where
|
|
||||||
EvmConfig: ConfigureEvmEnv<Header = HeaderTy<N>>,
|
|
||||||
{
|
|
||||||
self.provider()?.fill_cfg_env_with_header(cfg, header, evm_config)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1638,51 +1638,18 @@ impl<TX: DbTx + 'static, N: NodeTypes<ChainSpec: EthereumHardforks>> Withdrawals
|
|||||||
impl<TX: DbTx + 'static, N: NodeTypesForProvider> EvmEnvProvider<HeaderTy<N>>
|
impl<TX: DbTx + 'static, N: NodeTypesForProvider> EvmEnvProvider<HeaderTy<N>>
|
||||||
for DatabaseProvider<TX, N>
|
for DatabaseProvider<TX, N>
|
||||||
{
|
{
|
||||||
fn fill_env_with_header<EvmConfig>(
|
fn env_with_header<EvmConfig>(
|
||||||
&self,
|
&self,
|
||||||
cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
block_env: &mut BlockEnv,
|
|
||||||
header: &HeaderTy<N>,
|
header: &HeaderTy<N>,
|
||||||
evm_config: EvmConfig,
|
evm_config: EvmConfig,
|
||||||
) -> ProviderResult<()>
|
) -> ProviderResult<(CfgEnvWithHandlerCfg, BlockEnv)>
|
||||||
where
|
where
|
||||||
EvmConfig: ConfigureEvmEnv<Header = HeaderTy<N>>,
|
EvmConfig: ConfigureEvmEnv<Header = HeaderTy<N>>,
|
||||||
{
|
{
|
||||||
let total_difficulty = self
|
let total_difficulty = self
|
||||||
.header_td_by_number(header.number())?
|
.header_td_by_number(header.number())?
|
||||||
.ok_or_else(|| ProviderError::HeaderNotFound(header.number().into()))?;
|
.ok_or_else(|| ProviderError::HeaderNotFound(header.number().into()))?;
|
||||||
evm_config.fill_cfg_and_block_env(cfg, block_env, header, total_difficulty);
|
Ok(evm_config.cfg_and_block_env(header, total_difficulty))
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn fill_cfg_env_at<EvmConfig>(
|
|
||||||
&self,
|
|
||||||
cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
at: BlockHashOrNumber,
|
|
||||||
evm_config: EvmConfig,
|
|
||||||
) -> ProviderResult<()>
|
|
||||||
where
|
|
||||||
EvmConfig: ConfigureEvmEnv<Header = HeaderTy<N>>,
|
|
||||||
{
|
|
||||||
let hash = self.convert_number(at)?.ok_or(ProviderError::HeaderNotFound(at))?;
|
|
||||||
let header = self.header(&hash)?.ok_or(ProviderError::HeaderNotFound(at))?;
|
|
||||||
self.fill_cfg_env_with_header(cfg, &header, evm_config)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn fill_cfg_env_with_header<EvmConfig>(
|
|
||||||
&self,
|
|
||||||
cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
header: &HeaderTy<N>,
|
|
||||||
evm_config: EvmConfig,
|
|
||||||
) -> ProviderResult<()>
|
|
||||||
where
|
|
||||||
EvmConfig: ConfigureEvmEnv<Header = HeaderTy<N>>,
|
|
||||||
{
|
|
||||||
let total_difficulty = self
|
|
||||||
.header_td_by_number(header.number())?
|
|
||||||
.ok_or_else(|| ProviderError::HeaderNotFound(header.number().into()))?;
|
|
||||||
evm_config.fill_cfg_env(cfg, header, total_difficulty);
|
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -598,41 +598,15 @@ impl<N: ProviderNodeTypes> StageCheckpointReader for BlockchainProvider<N> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<N: TreeNodeTypes> EvmEnvProvider for BlockchainProvider<N> {
|
impl<N: TreeNodeTypes> EvmEnvProvider for BlockchainProvider<N> {
|
||||||
fn fill_env_with_header<EvmConfig>(
|
fn env_with_header<EvmConfig>(
|
||||||
&self,
|
&self,
|
||||||
cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
block_env: &mut BlockEnv,
|
|
||||||
header: &Header,
|
header: &Header,
|
||||||
evm_config: EvmConfig,
|
evm_config: EvmConfig,
|
||||||
) -> ProviderResult<()>
|
) -> ProviderResult<(CfgEnvWithHandlerCfg, BlockEnv)>
|
||||||
where
|
where
|
||||||
EvmConfig: ConfigureEvmEnv<Header = Header>,
|
EvmConfig: ConfigureEvmEnv<Header = Header>,
|
||||||
{
|
{
|
||||||
self.database.provider()?.fill_env_with_header(cfg, block_env, header, evm_config)
|
self.database.provider()?.env_with_header(header, evm_config)
|
||||||
}
|
|
||||||
|
|
||||||
fn fill_cfg_env_at<EvmConfig>(
|
|
||||||
&self,
|
|
||||||
cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
at: BlockHashOrNumber,
|
|
||||||
evm_config: EvmConfig,
|
|
||||||
) -> ProviderResult<()>
|
|
||||||
where
|
|
||||||
EvmConfig: ConfigureEvmEnv<Header = Header>,
|
|
||||||
{
|
|
||||||
self.database.provider()?.fill_cfg_env_at(cfg, at, evm_config)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn fill_cfg_env_with_header<EvmConfig>(
|
|
||||||
&self,
|
|
||||||
cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
header: &Header,
|
|
||||||
evm_config: EvmConfig,
|
|
||||||
) -> ProviderResult<()>
|
|
||||||
where
|
|
||||||
EvmConfig: ConfigureEvmEnv<Header = Header>,
|
|
||||||
{
|
|
||||||
self.database.provider()?.fill_cfg_env_with_header(cfg, header, evm_config)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -717,41 +717,15 @@ impl StateProvider for MockEthProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl EvmEnvProvider for MockEthProvider {
|
impl EvmEnvProvider for MockEthProvider {
|
||||||
fn fill_env_with_header<EvmConfig>(
|
fn env_with_header<EvmConfig>(
|
||||||
&self,
|
&self,
|
||||||
_cfg: &mut CfgEnvWithHandlerCfg,
|
header: &Header,
|
||||||
_block_env: &mut BlockEnv,
|
evm_config: EvmConfig,
|
||||||
_header: &Header,
|
) -> ProviderResult<(CfgEnvWithHandlerCfg, BlockEnv)>
|
||||||
_evm_config: EvmConfig,
|
|
||||||
) -> ProviderResult<()>
|
|
||||||
where
|
where
|
||||||
EvmConfig: ConfigureEvmEnv<Header = Header>,
|
EvmConfig: ConfigureEvmEnv<Header = Header>,
|
||||||
{
|
{
|
||||||
Ok(())
|
Ok(evm_config.cfg_and_block_env(header, U256::MAX))
|
||||||
}
|
|
||||||
|
|
||||||
fn fill_cfg_env_at<EvmConfig>(
|
|
||||||
&self,
|
|
||||||
_cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
_at: BlockHashOrNumber,
|
|
||||||
_evm_config: EvmConfig,
|
|
||||||
) -> ProviderResult<()>
|
|
||||||
where
|
|
||||||
EvmConfig: ConfigureEvmEnv<Header = Header>,
|
|
||||||
{
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn fill_cfg_env_with_header<EvmConfig>(
|
|
||||||
&self,
|
|
||||||
_cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
_header: &Header,
|
|
||||||
_evm_config: EvmConfig,
|
|
||||||
) -> ProviderResult<()>
|
|
||||||
where
|
|
||||||
EvmConfig: ConfigureEvmEnv<Header = Header>,
|
|
||||||
{
|
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -436,41 +436,15 @@ impl StateProvider for NoopProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl EvmEnvProvider for NoopProvider {
|
impl EvmEnvProvider for NoopProvider {
|
||||||
fn fill_env_with_header<EvmConfig>(
|
fn env_with_header<EvmConfig>(
|
||||||
&self,
|
&self,
|
||||||
_cfg: &mut CfgEnvWithHandlerCfg,
|
header: &Header,
|
||||||
_block_env: &mut BlockEnv,
|
evm_config: EvmConfig,
|
||||||
_header: &Header,
|
) -> ProviderResult<(CfgEnvWithHandlerCfg, BlockEnv)>
|
||||||
_evm_config: EvmConfig,
|
|
||||||
) -> ProviderResult<()>
|
|
||||||
where
|
where
|
||||||
EvmConfig: ConfigureEvmEnv<Header = Header>,
|
EvmConfig: ConfigureEvmEnv<Header = Header>,
|
||||||
{
|
{
|
||||||
Ok(())
|
Ok(evm_config.cfg_and_block_env(header, U256::MAX))
|
||||||
}
|
|
||||||
|
|
||||||
fn fill_cfg_env_at<EvmConfig>(
|
|
||||||
&self,
|
|
||||||
_cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
_at: BlockHashOrNumber,
|
|
||||||
_evm_config: EvmConfig,
|
|
||||||
) -> ProviderResult<()>
|
|
||||||
where
|
|
||||||
EvmConfig: ConfigureEvmEnv<Header = Header>,
|
|
||||||
{
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn fill_cfg_env_with_header<EvmConfig>(
|
|
||||||
&self,
|
|
||||||
_cfg: &mut CfgEnvWithHandlerCfg,
|
|
||||||
_header: &Header,
|
|
||||||
_evm_config: EvmConfig,
|
|
||||||
) -> ProviderResult<()>
|
|
||||||
where
|
|
||||||
EvmConfig: ConfigureEvmEnv<Header = Header>,
|
|
||||||
{
|
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user