use op-alloy genesis types for genesis parsing (#9292)

Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
nk_ysg
2024-07-05 13:11:07 +08:00
committed by GitHub
parent fe94078e00
commit b2bbd00257
4 changed files with 63 additions and 28 deletions

View File

@ -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 = [

View File

@ -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": {