Skip to content

Commit e823636

Browse files
committed
Declare genesis header in chainspec
1 parent 1da1b6e commit e823636

File tree

4 files changed

+168
-140
lines changed

4 files changed

+168
-140
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/chainspec/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ reth-ethereum-forks.workspace = true
1414
reth-cli.workspace = true
1515
reth-optimism-chainspec.workspace = true
1616
reth-optimism-forks.workspace = true
17+
reth-primitives-traits.workspace = true
1718

1819
alloy-chains.workspace = true
1920
alloy-primitives.workspace = true

crates/chainspec/src/fraxtal.rs

Lines changed: 83 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -3,89 +3,31 @@
33
use std::sync::{Arc, LazyLock};
44

55
use alloy_chains::Chain;
6+
use alloy_primitives::b256;
67
use alloy_primitives::U256;
78
use reth_chainspec::{BaseFeeParams, BaseFeeParamsKind, ChainHardforks, ChainSpec, ForkCondition};
89
use reth_ethereum_forks::EthereumHardfork;
910
use reth_ethereum_forks::Hardfork;
11+
use reth_optimism_chainspec::make_op_genesis_header;
1012
use reth_optimism_chainspec::OpChainSpec;
1113
use reth_optimism_forks::OpHardfork;
14+
use reth_primitives_traits::SealedHeader;
1215

1316
/// The Base mainnet spec
1417
pub(crate) static FRAXTAL_MAINNET: LazyLock<Arc<OpChainSpec>> = LazyLock::new(|| {
18+
let genesis = serde_json::from_str(include_str!("../res/genesis/mainnet.json"))
19+
.expect("Can't deserialize Fraxtal genesis json");
20+
let hardforks = FRAXTAL_MAINNET_HARDFORKS.clone();
1521
OpChainSpec {
1622
inner: ChainSpec {
1723
chain: Chain::fraxtal(),
18-
genesis: serde_json::from_str(include_str!("../res/genesis/mainnet.json"))
19-
.expect("Can't deserialize Fraxtal genesis json"),
24+
genesis_header: SealedHeader::new(
25+
make_op_genesis_header(&genesis, &hardforks),
26+
b256!("0x521982bd54239dc71269eefb58601762cc15cfb2978e0becb46af7962ed6bfaa"),
27+
),
28+
genesis,
2029
paris_block_and_final_difficulty: Some((0, U256::from(0))),
21-
hardforks: ChainHardforks::new(vec![
22-
(EthereumHardfork::Frontier.boxed(), ForkCondition::Block(0)),
23-
(EthereumHardfork::Homestead.boxed(), ForkCondition::Block(0)),
24-
(EthereumHardfork::Tangerine.boxed(), ForkCondition::Block(0)),
25-
(
26-
EthereumHardfork::SpuriousDragon.boxed(),
27-
ForkCondition::Block(0),
28-
),
29-
(EthereumHardfork::Byzantium.boxed(), ForkCondition::Block(0)),
30-
(
31-
EthereumHardfork::Constantinople.boxed(),
32-
ForkCondition::Block(0),
33-
),
34-
(
35-
EthereumHardfork::Petersburg.boxed(),
36-
ForkCondition::Block(0),
37-
),
38-
(EthereumHardfork::Istanbul.boxed(), ForkCondition::Block(0)),
39-
(
40-
EthereumHardfork::MuirGlacier.boxed(),
41-
ForkCondition::Block(0),
42-
),
43-
(EthereumHardfork::Berlin.boxed(), ForkCondition::Block(0)),
44-
(EthereumHardfork::London.boxed(), ForkCondition::Block(0)),
45-
(
46-
EthereumHardfork::ArrowGlacier.boxed(),
47-
ForkCondition::Block(0),
48-
),
49-
(
50-
EthereumHardfork::GrayGlacier.boxed(),
51-
ForkCondition::Block(0),
52-
),
53-
(
54-
EthereumHardfork::Paris.boxed(),
55-
ForkCondition::TTD {
56-
activation_block_number: 0,
57-
fork_block: Some(0),
58-
total_difficulty: U256::ZERO,
59-
},
60-
),
61-
(OpHardfork::Bedrock.boxed(), ForkCondition::Block(0)),
62-
(OpHardfork::Regolith.boxed(), ForkCondition::Timestamp(0)),
63-
(
64-
EthereumHardfork::Shanghai.boxed(),
65-
ForkCondition::Timestamp(0),
66-
),
67-
(OpHardfork::Canyon.boxed(), ForkCondition::Timestamp(0)),
68-
(
69-
EthereumHardfork::Cancun.boxed(),
70-
ForkCondition::Timestamp(1717009201),
71-
),
72-
(
73-
OpHardfork::Ecotone.boxed(),
74-
ForkCondition::Timestamp(1717009201),
75-
),
76-
(
77-
OpHardfork::Fjord.boxed(),
78-
ForkCondition::Timestamp(1733947201),
79-
),
80-
(
81-
OpHardfork::Granite.boxed(),
82-
ForkCondition::Timestamp(1738958401),
83-
),
84-
(
85-
OpHardfork::Holocene.boxed(),
86-
ForkCondition::Timestamp(1744052401),
87-
),
88-
]),
30+
hardforks,
8931
base_fee_params: BaseFeeParamsKind::Variable(
9032
vec![
9133
(EthereumHardfork::London.boxed(), BaseFeeParams::optimism()),
@@ -98,3 +40,74 @@ pub(crate) static FRAXTAL_MAINNET: LazyLock<Arc<OpChainSpec>> = LazyLock::new(||
9840
}
9941
.into()
10042
});
43+
44+
static FRAXTAL_MAINNET_HARDFORKS: LazyLock<ChainHardforks> = LazyLock::new(|| {
45+
ChainHardforks::new(vec![
46+
(EthereumHardfork::Frontier.boxed(), ForkCondition::Block(0)),
47+
(EthereumHardfork::Homestead.boxed(), ForkCondition::Block(0)),
48+
(EthereumHardfork::Tangerine.boxed(), ForkCondition::Block(0)),
49+
(
50+
EthereumHardfork::SpuriousDragon.boxed(),
51+
ForkCondition::Block(0),
52+
),
53+
(EthereumHardfork::Byzantium.boxed(), ForkCondition::Block(0)),
54+
(
55+
EthereumHardfork::Constantinople.boxed(),
56+
ForkCondition::Block(0),
57+
),
58+
(
59+
EthereumHardfork::Petersburg.boxed(),
60+
ForkCondition::Block(0),
61+
),
62+
(EthereumHardfork::Istanbul.boxed(), ForkCondition::Block(0)),
63+
(
64+
EthereumHardfork::MuirGlacier.boxed(),
65+
ForkCondition::Block(0),
66+
),
67+
(EthereumHardfork::Berlin.boxed(), ForkCondition::Block(0)),
68+
(EthereumHardfork::London.boxed(), ForkCondition::Block(0)),
69+
(
70+
EthereumHardfork::ArrowGlacier.boxed(),
71+
ForkCondition::Block(0),
72+
),
73+
(
74+
EthereumHardfork::GrayGlacier.boxed(),
75+
ForkCondition::Block(0),
76+
),
77+
(
78+
EthereumHardfork::Paris.boxed(),
79+
ForkCondition::TTD {
80+
activation_block_number: 0,
81+
fork_block: Some(0),
82+
total_difficulty: U256::ZERO,
83+
},
84+
),
85+
(OpHardfork::Bedrock.boxed(), ForkCondition::Block(0)),
86+
(OpHardfork::Regolith.boxed(), ForkCondition::Timestamp(0)),
87+
(
88+
EthereumHardfork::Shanghai.boxed(),
89+
ForkCondition::Timestamp(0),
90+
),
91+
(OpHardfork::Canyon.boxed(), ForkCondition::Timestamp(0)),
92+
(
93+
EthereumHardfork::Cancun.boxed(),
94+
ForkCondition::Timestamp(1717009201),
95+
),
96+
(
97+
OpHardfork::Ecotone.boxed(),
98+
ForkCondition::Timestamp(1717009201),
99+
),
100+
(
101+
OpHardfork::Fjord.boxed(),
102+
ForkCondition::Timestamp(1733947201),
103+
),
104+
(
105+
OpHardfork::Granite.boxed(),
106+
ForkCondition::Timestamp(1738958401),
107+
),
108+
(
109+
OpHardfork::Holocene.boxed(),
110+
ForkCondition::Timestamp(1744052401),
111+
),
112+
])
113+
});

crates/chainspec/src/fraxtal_testnet.rs

Lines changed: 83 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -3,89 +3,31 @@
33
use std::sync::{Arc, LazyLock};
44

55
use alloy_chains::Chain;
6+
use alloy_primitives::b256;
67
use alloy_primitives::U256;
78
use reth_chainspec::{BaseFeeParams, BaseFeeParamsKind, ChainHardforks, ChainSpec, ForkCondition};
89
use reth_ethereum_forks::EthereumHardfork;
910
use reth_ethereum_forks::Hardfork;
11+
use reth_optimism_chainspec::make_op_genesis_header;
1012
use reth_optimism_chainspec::OpChainSpec;
1113
use reth_optimism_forks::OpHardfork;
14+
use reth_primitives_traits::SealedHeader;
1215

1316
/// The Base mainnet spec
1417
pub(crate) static FRAXTAL_TESTNET: LazyLock<Arc<OpChainSpec>> = LazyLock::new(|| {
18+
let genesis = serde_json::from_str(include_str!("../res/genesis/testnet.json"))
19+
.expect("Can't deserialize Fraxtal testnet genesis json");
20+
let hardforks = FRAXTAL_TESTNET_HARDFORKS.clone();
1521
OpChainSpec {
1622
inner: ChainSpec {
1723
chain: Chain::fraxtal_testnet(),
18-
genesis: serde_json::from_str(include_str!("../res/genesis/testnet.json"))
19-
.expect("Can't deserialize Fraxtal testnet genesis json"),
24+
genesis_header: SealedHeader::new(
25+
make_op_genesis_header(&genesis, &hardforks),
26+
b256!("0x910f5c4084b63fd860d0c2f9a04615115a5a991254700b39ba072290dbd77489"),
27+
),
28+
genesis,
2029
paris_block_and_final_difficulty: Some((0, U256::from(0))),
21-
hardforks: ChainHardforks::new(vec![
22-
(EthereumHardfork::Frontier.boxed(), ForkCondition::Block(0)),
23-
(EthereumHardfork::Homestead.boxed(), ForkCondition::Block(0)),
24-
(EthereumHardfork::Tangerine.boxed(), ForkCondition::Block(0)),
25-
(
26-
EthereumHardfork::SpuriousDragon.boxed(),
27-
ForkCondition::Block(0),
28-
),
29-
(EthereumHardfork::Byzantium.boxed(), ForkCondition::Block(0)),
30-
(
31-
EthereumHardfork::Constantinople.boxed(),
32-
ForkCondition::Block(0),
33-
),
34-
(
35-
EthereumHardfork::Petersburg.boxed(),
36-
ForkCondition::Block(0),
37-
),
38-
(EthereumHardfork::Istanbul.boxed(), ForkCondition::Block(0)),
39-
(
40-
EthereumHardfork::MuirGlacier.boxed(),
41-
ForkCondition::Block(0),
42-
),
43-
(EthereumHardfork::Berlin.boxed(), ForkCondition::Block(0)),
44-
(EthereumHardfork::London.boxed(), ForkCondition::Block(0)),
45-
(
46-
EthereumHardfork::ArrowGlacier.boxed(),
47-
ForkCondition::Block(0),
48-
),
49-
(
50-
EthereumHardfork::GrayGlacier.boxed(),
51-
ForkCondition::Block(0),
52-
),
53-
(
54-
EthereumHardfork::Paris.boxed(),
55-
ForkCondition::TTD {
56-
activation_block_number: 0,
57-
fork_block: Some(0),
58-
total_difficulty: U256::ZERO,
59-
},
60-
),
61-
(OpHardfork::Bedrock.boxed(), ForkCondition::Block(0)),
62-
(OpHardfork::Regolith.boxed(), ForkCondition::Timestamp(0)),
63-
(
64-
EthereumHardfork::Shanghai.boxed(),
65-
ForkCondition::Timestamp(0),
66-
),
67-
(OpHardfork::Canyon.boxed(), ForkCondition::Timestamp(0)),
68-
(
69-
EthereumHardfork::Cancun.boxed(),
70-
ForkCondition::Timestamp(1714186800),
71-
),
72-
(
73-
OpHardfork::Ecotone.boxed(),
74-
ForkCondition::Timestamp(1714186800),
75-
),
76-
(
77-
OpHardfork::Fjord.boxed(),
78-
ForkCondition::Timestamp(1730401200),
79-
),
80-
(
81-
OpHardfork::Granite.boxed(),
82-
ForkCondition::Timestamp(1738191600),
83-
),
84-
(
85-
OpHardfork::Holocene.boxed(),
86-
ForkCondition::Timestamp(1742583600),
87-
),
88-
]),
30+
hardforks,
8931
base_fee_params: BaseFeeParamsKind::Variable(
9032
vec![
9133
(EthereumHardfork::London.boxed(), BaseFeeParams::optimism()),
@@ -98,3 +40,74 @@ pub(crate) static FRAXTAL_TESTNET: LazyLock<Arc<OpChainSpec>> = LazyLock::new(||
9840
}
9941
.into()
10042
});
43+
44+
static FRAXTAL_TESTNET_HARDFORKS: LazyLock<ChainHardforks> = LazyLock::new(|| {
45+
ChainHardforks::new(vec![
46+
(EthereumHardfork::Frontier.boxed(), ForkCondition::Block(0)),
47+
(EthereumHardfork::Homestead.boxed(), ForkCondition::Block(0)),
48+
(EthereumHardfork::Tangerine.boxed(), ForkCondition::Block(0)),
49+
(
50+
EthereumHardfork::SpuriousDragon.boxed(),
51+
ForkCondition::Block(0),
52+
),
53+
(EthereumHardfork::Byzantium.boxed(), ForkCondition::Block(0)),
54+
(
55+
EthereumHardfork::Constantinople.boxed(),
56+
ForkCondition::Block(0),
57+
),
58+
(
59+
EthereumHardfork::Petersburg.boxed(),
60+
ForkCondition::Block(0),
61+
),
62+
(EthereumHardfork::Istanbul.boxed(), ForkCondition::Block(0)),
63+
(
64+
EthereumHardfork::MuirGlacier.boxed(),
65+
ForkCondition::Block(0),
66+
),
67+
(EthereumHardfork::Berlin.boxed(), ForkCondition::Block(0)),
68+
(EthereumHardfork::London.boxed(), ForkCondition::Block(0)),
69+
(
70+
EthereumHardfork::ArrowGlacier.boxed(),
71+
ForkCondition::Block(0),
72+
),
73+
(
74+
EthereumHardfork::GrayGlacier.boxed(),
75+
ForkCondition::Block(0),
76+
),
77+
(
78+
EthereumHardfork::Paris.boxed(),
79+
ForkCondition::TTD {
80+
activation_block_number: 0,
81+
fork_block: Some(0),
82+
total_difficulty: U256::ZERO,
83+
},
84+
),
85+
(OpHardfork::Bedrock.boxed(), ForkCondition::Block(0)),
86+
(OpHardfork::Regolith.boxed(), ForkCondition::Timestamp(0)),
87+
(
88+
EthereumHardfork::Shanghai.boxed(),
89+
ForkCondition::Timestamp(0),
90+
),
91+
(OpHardfork::Canyon.boxed(), ForkCondition::Timestamp(0)),
92+
(
93+
EthereumHardfork::Cancun.boxed(),
94+
ForkCondition::Timestamp(1714186800),
95+
),
96+
(
97+
OpHardfork::Ecotone.boxed(),
98+
ForkCondition::Timestamp(1714186800),
99+
),
100+
(
101+
OpHardfork::Fjord.boxed(),
102+
ForkCondition::Timestamp(1730401200),
103+
),
104+
(
105+
OpHardfork::Granite.boxed(),
106+
ForkCondition::Timestamp(1738191600),
107+
),
108+
(
109+
OpHardfork::Holocene.boxed(),
110+
ForkCondition::Timestamp(1742583600),
111+
),
112+
])
113+
});

0 commit comments

Comments
 (0)