mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
use op-alloy genesis types for genesis parsing (#9292)
Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
@ -24,6 +24,10 @@ alloy-genesis.workspace = true
|
||||
alloy-primitives = { workspace = true, features = ["rand", "rlp"] }
|
||||
alloy-trie.workspace = true
|
||||
|
||||
# op
|
||||
op-alloy-rpc-types = { workspace = true, optional = true }
|
||||
|
||||
|
||||
# misc
|
||||
once_cell.workspace = true
|
||||
serde = { workspace = true, optional = true }
|
||||
@ -40,11 +44,15 @@ alloy-genesis.workspace = true
|
||||
reth-rpc-types.workspace = true
|
||||
rand.workspace = true
|
||||
|
||||
# op
|
||||
op-alloy-rpc-types.workspace = true
|
||||
|
||||
[features]
|
||||
default = ["std"]
|
||||
optimism = [
|
||||
"reth-ethereum-forks/optimism",
|
||||
"serde"
|
||||
"serde",
|
||||
"dep:op-alloy-rpc-types",
|
||||
]
|
||||
std = []
|
||||
arbitrary = [
|
||||
|
||||
@ -725,6 +725,9 @@ impl From<Genesis> for ChainSpec {
|
||||
fn from(genesis: Genesis) -> Self {
|
||||
#[cfg(feature = "optimism")]
|
||||
let optimism_genesis_info = OptimismGenesisInfo::extract_from(&genesis);
|
||||
#[cfg(feature = "optimism")]
|
||||
let genesis_info =
|
||||
optimism_genesis_info.optimism_chain_info.genesis_info.unwrap_or_default();
|
||||
|
||||
// Block-based hardforks
|
||||
let hardfork_opts = [
|
||||
@ -742,7 +745,7 @@ impl From<Genesis> for ChainSpec {
|
||||
(EthereumHardfork::ArrowGlacier.boxed(), genesis.config.arrow_glacier_block),
|
||||
(EthereumHardfork::GrayGlacier.boxed(), genesis.config.gray_glacier_block),
|
||||
#[cfg(feature = "optimism")]
|
||||
(OptimismHardfork::Bedrock.boxed(), optimism_genesis_info.bedrock_block),
|
||||
(OptimismHardfork::Bedrock.boxed(), genesis_info.bedrock_block),
|
||||
];
|
||||
let mut hardforks = hardfork_opts
|
||||
.into_iter()
|
||||
@ -771,13 +774,13 @@ impl From<Genesis> for ChainSpec {
|
||||
(EthereumHardfork::Cancun.boxed(), genesis.config.cancun_time),
|
||||
(EthereumHardfork::Prague.boxed(), genesis.config.prague_time),
|
||||
#[cfg(feature = "optimism")]
|
||||
(OptimismHardfork::Regolith.boxed(), optimism_genesis_info.regolith_time),
|
||||
(OptimismHardfork::Regolith.boxed(), genesis_info.regolith_time),
|
||||
#[cfg(feature = "optimism")]
|
||||
(OptimismHardfork::Canyon.boxed(), optimism_genesis_info.canyon_time),
|
||||
(OptimismHardfork::Canyon.boxed(), genesis_info.canyon_time),
|
||||
#[cfg(feature = "optimism")]
|
||||
(OptimismHardfork::Ecotone.boxed(), optimism_genesis_info.ecotone_time),
|
||||
(OptimismHardfork::Ecotone.boxed(), genesis_info.ecotone_time),
|
||||
#[cfg(feature = "optimism")]
|
||||
(OptimismHardfork::Fjord.boxed(), optimism_genesis_info.fjord_time),
|
||||
(OptimismHardfork::Fjord.boxed(), genesis_info.fjord_time),
|
||||
];
|
||||
|
||||
let time_hardforks = time_hardfork_opts
|
||||
@ -1079,33 +1082,22 @@ impl DepositContract {
|
||||
#[derive(Default, Debug, serde::Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
struct OptimismGenesisInfo {
|
||||
bedrock_block: Option<u64>,
|
||||
regolith_time: Option<u64>,
|
||||
canyon_time: Option<u64>,
|
||||
ecotone_time: Option<u64>,
|
||||
fjord_time: Option<u64>,
|
||||
optimism_chain_info: op_alloy_rpc_types::genesis::OptimismChainInfo,
|
||||
#[serde(skip)]
|
||||
base_fee_params: BaseFeeParamsKind,
|
||||
}
|
||||
|
||||
#[cfg(feature = "optimism")]
|
||||
#[derive(Debug, Eq, PartialEq, serde::Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
struct OptimismBaseFeeInfo {
|
||||
eip1559_elasticity: Option<u64>,
|
||||
eip1559_denominator: Option<u64>,
|
||||
eip1559_denominator_canyon: Option<u64>,
|
||||
}
|
||||
|
||||
#[cfg(feature = "optimism")]
|
||||
impl OptimismGenesisInfo {
|
||||
fn extract_from(genesis: &Genesis) -> Self {
|
||||
let mut optimism_genesis_info: Self =
|
||||
genesis.config.extra_fields.deserialize_as().unwrap_or_default();
|
||||
|
||||
if let Some(Ok(optimism_base_fee_info)) =
|
||||
genesis.config.extra_fields.get_deserialized::<OptimismBaseFeeInfo>("optimism")
|
||||
{
|
||||
let mut info = Self {
|
||||
optimism_chain_info: op_alloy_rpc_types::genesis::OptimismChainInfo::extract_from(
|
||||
&genesis.config.extra_fields,
|
||||
)
|
||||
.unwrap_or_default(),
|
||||
..Default::default()
|
||||
};
|
||||
if let Some(optimism_base_fee_info) = &info.optimism_chain_info.base_fee_info {
|
||||
if let (Some(elasticity), Some(denominator)) = (
|
||||
optimism_base_fee_info.eip1559_elasticity,
|
||||
optimism_base_fee_info.eip1559_denominator,
|
||||
@ -1130,11 +1122,11 @@ impl OptimismGenesisInfo {
|
||||
BaseFeeParams::new(denominator as u128, elasticity as u128).into()
|
||||
};
|
||||
|
||||
optimism_genesis_info.base_fee_params = base_fee_params;
|
||||
info.base_fee_params = base_fee_params;
|
||||
}
|
||||
}
|
||||
|
||||
optimism_genesis_info
|
||||
info
|
||||
}
|
||||
}
|
||||
|
||||
@ -2896,6 +2888,8 @@ Post-merge hard forks (timestamp based):
|
||||
#[cfg(feature = "optimism")]
|
||||
#[test]
|
||||
fn parse_genesis_optimism_with_variable_base_fee_params() {
|
||||
use op_alloy_rpc_types::genesis::OptimismBaseFeeInfo;
|
||||
|
||||
let geth_genesis = r#"
|
||||
{
|
||||
"config": {
|
||||
|
||||
Reference in New Issue
Block a user