mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
chore: simplify revm specId mapping (#13553)
This commit is contained in:
@ -1,7 +1,13 @@
|
||||
use reth_ethereum_forks::{EthereumHardfork, Head};
|
||||
use alloy_consensus::Header;
|
||||
use reth_optimism_chainspec::OpChainSpec;
|
||||
use reth_optimism_forks::OpHardfork;
|
||||
|
||||
/// Map the latest active hardfork at the given header to a revm
|
||||
/// [`SpecId`](revm_primitives::SpecId).
|
||||
pub fn revm_spec(chain_spec: &OpChainSpec, header: &Header) -> revm_primitives::SpecId {
|
||||
revm_spec_by_timestamp_after_bedrock(chain_spec, header.timestamp)
|
||||
}
|
||||
|
||||
/// Returns the revm [`SpecId`](revm_primitives::SpecId) at the given timestamp.
|
||||
///
|
||||
/// # Note
|
||||
@ -31,58 +37,6 @@ pub fn revm_spec_by_timestamp_after_bedrock(
|
||||
}
|
||||
}
|
||||
|
||||
/// Map the latest active hardfork at the given block to a revm [`SpecId`](revm_primitives::SpecId).
|
||||
pub fn revm_spec(chain_spec: &OpChainSpec, block: &Head) -> revm_primitives::SpecId {
|
||||
if chain_spec.fork(OpHardfork::Isthmus).active_at_head(block) {
|
||||
todo!()
|
||||
} else if chain_spec.fork(OpHardfork::Holocene).active_at_head(block) {
|
||||
revm_primitives::HOLOCENE
|
||||
} else if chain_spec.fork(OpHardfork::Granite).active_at_head(block) {
|
||||
revm_primitives::GRANITE
|
||||
} else if chain_spec.fork(OpHardfork::Fjord).active_at_head(block) {
|
||||
revm_primitives::FJORD
|
||||
} else if chain_spec.fork(OpHardfork::Ecotone).active_at_head(block) {
|
||||
revm_primitives::ECOTONE
|
||||
} else if chain_spec.fork(OpHardfork::Canyon).active_at_head(block) {
|
||||
revm_primitives::CANYON
|
||||
} else if chain_spec.fork(OpHardfork::Regolith).active_at_head(block) {
|
||||
revm_primitives::REGOLITH
|
||||
} else if chain_spec.fork(OpHardfork::Bedrock).active_at_head(block) {
|
||||
revm_primitives::BEDROCK
|
||||
} else if chain_spec.fork(EthereumHardfork::Prague).active_at_head(block) {
|
||||
revm_primitives::PRAGUE
|
||||
} else if chain_spec.fork(EthereumHardfork::Cancun).active_at_head(block) {
|
||||
revm_primitives::CANCUN
|
||||
} else if chain_spec.fork(EthereumHardfork::Shanghai).active_at_head(block) {
|
||||
revm_primitives::SHANGHAI
|
||||
} else if chain_spec.fork(EthereumHardfork::Paris).active_at_head(block) {
|
||||
revm_primitives::MERGE
|
||||
} else if chain_spec.fork(EthereumHardfork::London).active_at_head(block) {
|
||||
revm_primitives::LONDON
|
||||
} else if chain_spec.fork(EthereumHardfork::Berlin).active_at_head(block) {
|
||||
revm_primitives::BERLIN
|
||||
} else if chain_spec.fork(EthereumHardfork::Istanbul).active_at_head(block) {
|
||||
revm_primitives::ISTANBUL
|
||||
} else if chain_spec.fork(EthereumHardfork::Petersburg).active_at_head(block) {
|
||||
revm_primitives::PETERSBURG
|
||||
} else if chain_spec.fork(EthereumHardfork::Byzantium).active_at_head(block) {
|
||||
revm_primitives::BYZANTIUM
|
||||
} else if chain_spec.fork(EthereumHardfork::SpuriousDragon).active_at_head(block) {
|
||||
revm_primitives::SPURIOUS_DRAGON
|
||||
} else if chain_spec.fork(EthereumHardfork::Tangerine).active_at_head(block) {
|
||||
revm_primitives::TANGERINE
|
||||
} else if chain_spec.fork(EthereumHardfork::Homestead).active_at_head(block) {
|
||||
revm_primitives::HOMESTEAD
|
||||
} else if chain_spec.fork(EthereumHardfork::Frontier).active_at_head(block) {
|
||||
revm_primitives::FRONTIER
|
||||
} else {
|
||||
panic!(
|
||||
"invalid hardfork chainspec: expected at least one hardfork, got {:?}",
|
||||
chain_spec.hardforks
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
@ -134,31 +88,31 @@ mod tests {
|
||||
f(cs).build()
|
||||
}
|
||||
assert_eq!(
|
||||
revm_spec(&op_cs(|cs| cs.holocene_activated()), &Head::default()),
|
||||
revm_spec(&op_cs(|cs| cs.holocene_activated()), &Default::default()),
|
||||
revm_primitives::HOLOCENE
|
||||
);
|
||||
assert_eq!(
|
||||
revm_spec(&op_cs(|cs| cs.granite_activated()), &Head::default()),
|
||||
revm_spec(&op_cs(|cs| cs.granite_activated()), &Default::default()),
|
||||
revm_primitives::GRANITE
|
||||
);
|
||||
assert_eq!(
|
||||
revm_spec(&op_cs(|cs| cs.fjord_activated()), &Head::default()),
|
||||
revm_spec(&op_cs(|cs| cs.fjord_activated()), &Default::default()),
|
||||
revm_primitives::FJORD
|
||||
);
|
||||
assert_eq!(
|
||||
revm_spec(&op_cs(|cs| cs.ecotone_activated()), &Head::default()),
|
||||
revm_spec(&op_cs(|cs| cs.ecotone_activated()), &Default::default()),
|
||||
revm_primitives::ECOTONE
|
||||
);
|
||||
assert_eq!(
|
||||
revm_spec(&op_cs(|cs| cs.canyon_activated()), &Head::default()),
|
||||
revm_spec(&op_cs(|cs| cs.canyon_activated()), &Default::default()),
|
||||
revm_primitives::CANYON
|
||||
);
|
||||
assert_eq!(
|
||||
revm_spec(&op_cs(|cs| cs.bedrock_activated()), &Head::default()),
|
||||
revm_spec(&op_cs(|cs| cs.bedrock_activated()), &Default::default()),
|
||||
revm_primitives::BEDROCK
|
||||
);
|
||||
assert_eq!(
|
||||
revm_spec(&op_cs(|cs| cs.regolith_activated()), &Head::default()),
|
||||
revm_spec(&op_cs(|cs| cs.regolith_activated()), &Default::default()),
|
||||
revm_primitives::REGOLITH
|
||||
);
|
||||
}
|
||||
|
||||
@ -18,7 +18,7 @@ use alloy_primitives::{Address, U256};
|
||||
use op_alloy_consensus::EIP1559ParamError;
|
||||
use reth_evm::{env::EvmEnv, ConfigureEvm, ConfigureEvmEnv, NextBlockEnvAttributes};
|
||||
use reth_optimism_chainspec::OpChainSpec;
|
||||
use reth_primitives::{transaction::FillTxEnv, Head, TransactionSigned};
|
||||
use reth_primitives::{transaction::FillTxEnv, TransactionSigned};
|
||||
use reth_revm::{
|
||||
inspector_handle_register,
|
||||
primitives::{AnalysisKind, CfgEnvWithHandlerCfg, TxEnv},
|
||||
@ -111,18 +111,7 @@ impl ConfigureEvmEnv for OpEvmConfig {
|
||||
}
|
||||
|
||||
fn fill_cfg_env(&self, cfg_env: &mut CfgEnvWithHandlerCfg, header: &Self::Header) {
|
||||
let spec_id = revm_spec(
|
||||
self.chain_spec(),
|
||||
&Head {
|
||||
number: header.number,
|
||||
timestamp: header.timestamp,
|
||||
difficulty: header.difficulty,
|
||||
// NOTE: this does not matter within revm_spec as it uses paris hardfork block
|
||||
// activation
|
||||
total_difficulty: U256::MIN,
|
||||
hash: Default::default(),
|
||||
},
|
||||
);
|
||||
let spec_id = revm_spec(self.chain_spec(), header);
|
||||
|
||||
cfg_env.chain_id = self.chain_spec.chain().id();
|
||||
cfg_env.perf_analyse_created_bytecodes = AnalysisKind::Analyse;
|
||||
|
||||
Reference in New Issue
Block a user