1#![doc(
4 html_logo_url = "https://raw.githubusercontent.com/paradigmxyz/reth/main/assets/reth-docs.png",
5 html_favicon_url = "https://avatars0.githubusercontent.com/u/97369466?s=256",
6 issue_tracker_base_url = "https://github.com/paradigmxyz/reth/issues/"
7)]
8#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
9#![cfg_attr(not(feature = "std"), no_std)]
10
11extern crate alloc;
12
13pub use alloy_op_hardforks::{OpHardfork, OpHardforks};
15
16use alloc::vec;
17use alloy_primitives::U256;
18use once_cell::sync::Lazy as LazyLock;
19use reth_ethereum_forks::{ChainHardforks, EthereumHardfork, ForkCondition, Hardfork};
20
21pub static DEV_HARDFORKS: LazyLock<ChainHardforks> = LazyLock::new(|| {
23 ChainHardforks::new(vec![
24 (EthereumHardfork::Frontier.boxed(), ForkCondition::Block(0)),
25 (EthereumHardfork::Homestead.boxed(), ForkCondition::Block(0)),
26 (EthereumHardfork::Dao.boxed(), ForkCondition::Block(0)),
27 (EthereumHardfork::Tangerine.boxed(), ForkCondition::Block(0)),
28 (EthereumHardfork::SpuriousDragon.boxed(), ForkCondition::Block(0)),
29 (EthereumHardfork::Byzantium.boxed(), ForkCondition::Block(0)),
30 (EthereumHardfork::Constantinople.boxed(), ForkCondition::Block(0)),
31 (EthereumHardfork::Petersburg.boxed(), ForkCondition::Block(0)),
32 (EthereumHardfork::Istanbul.boxed(), ForkCondition::Block(0)),
33 (EthereumHardfork::Berlin.boxed(), ForkCondition::Block(0)),
34 (EthereumHardfork::London.boxed(), ForkCondition::Block(0)),
35 (
36 EthereumHardfork::Paris.boxed(),
37 ForkCondition::TTD {
38 activation_block_number: 0,
39 fork_block: None,
40 total_difficulty: U256::ZERO,
41 },
42 ),
43 (crate::OpHardfork::Bedrock.boxed(), ForkCondition::Block(0)),
44 (crate::OpHardfork::Regolith.boxed(), ForkCondition::Timestamp(0)),
45 (EthereumHardfork::Shanghai.boxed(), ForkCondition::Timestamp(0)),
46 (crate::OpHardfork::Canyon.boxed(), ForkCondition::Timestamp(0)),
47 (EthereumHardfork::Cancun.boxed(), ForkCondition::Timestamp(0)),
48 (crate::OpHardfork::Ecotone.boxed(), ForkCondition::Timestamp(0)),
49 (crate::OpHardfork::Fjord.boxed(), ForkCondition::Timestamp(0)),
50 (crate::OpHardfork::Granite.boxed(), ForkCondition::Timestamp(0)),
51 ])
52});
53
54pub static OP_MAINNET_HARDFORKS: LazyLock<ChainHardforks> = LazyLock::new(|| {
56 ChainHardforks::new(vec![
57 (EthereumHardfork::Frontier.boxed(), ForkCondition::Block(0)),
58 (EthereumHardfork::Homestead.boxed(), ForkCondition::Block(0)),
59 (EthereumHardfork::Tangerine.boxed(), ForkCondition::Block(0)),
60 (EthereumHardfork::SpuriousDragon.boxed(), ForkCondition::Block(0)),
61 (EthereumHardfork::Byzantium.boxed(), ForkCondition::Block(0)),
62 (EthereumHardfork::Constantinople.boxed(), ForkCondition::Block(0)),
63 (EthereumHardfork::Petersburg.boxed(), ForkCondition::Block(0)),
64 (EthereumHardfork::Istanbul.boxed(), ForkCondition::Block(0)),
65 (EthereumHardfork::MuirGlacier.boxed(), ForkCondition::Block(0)),
66 (EthereumHardfork::Berlin.boxed(), ForkCondition::Block(3950000)),
67 (EthereumHardfork::London.boxed(), ForkCondition::Block(105235063)),
68 (EthereumHardfork::ArrowGlacier.boxed(), ForkCondition::Block(105235063)),
69 (EthereumHardfork::GrayGlacier.boxed(), ForkCondition::Block(105235063)),
70 (
71 EthereumHardfork::Paris.boxed(),
72 ForkCondition::TTD {
73 activation_block_number: 105235063,
74 fork_block: Some(105235063),
75 total_difficulty: U256::ZERO,
76 },
77 ),
78 (OpHardfork::Bedrock.boxed(), ForkCondition::Block(105235063)),
79 (OpHardfork::Regolith.boxed(), ForkCondition::Timestamp(0)),
80 (EthereumHardfork::Shanghai.boxed(), ForkCondition::Timestamp(1704992401)),
81 (OpHardfork::Canyon.boxed(), ForkCondition::Timestamp(1704992401)),
82 (EthereumHardfork::Cancun.boxed(), ForkCondition::Timestamp(1710374401)),
83 (OpHardfork::Ecotone.boxed(), ForkCondition::Timestamp(1710374401)),
84 (OpHardfork::Fjord.boxed(), ForkCondition::Timestamp(1720627201)),
85 (OpHardfork::Granite.boxed(), ForkCondition::Timestamp(1726070401)),
86 (OpHardfork::Holocene.boxed(), ForkCondition::Timestamp(1736445601)),
87 ])
88});
89pub static OP_SEPOLIA_HARDFORKS: LazyLock<ChainHardforks> = LazyLock::new(|| {
91 ChainHardforks::new(vec![
92 (EthereumHardfork::Frontier.boxed(), ForkCondition::Block(0)),
93 (EthereumHardfork::Homestead.boxed(), ForkCondition::Block(0)),
94 (EthereumHardfork::Tangerine.boxed(), ForkCondition::Block(0)),
95 (EthereumHardfork::SpuriousDragon.boxed(), ForkCondition::Block(0)),
96 (EthereumHardfork::Byzantium.boxed(), ForkCondition::Block(0)),
97 (EthereumHardfork::Constantinople.boxed(), ForkCondition::Block(0)),
98 (EthereumHardfork::Petersburg.boxed(), ForkCondition::Block(0)),
99 (EthereumHardfork::Istanbul.boxed(), ForkCondition::Block(0)),
100 (EthereumHardfork::MuirGlacier.boxed(), ForkCondition::Block(0)),
101 (EthereumHardfork::Berlin.boxed(), ForkCondition::Block(0)),
102 (EthereumHardfork::London.boxed(), ForkCondition::Block(0)),
103 (EthereumHardfork::ArrowGlacier.boxed(), ForkCondition::Block(0)),
104 (EthereumHardfork::GrayGlacier.boxed(), ForkCondition::Block(0)),
105 (
106 EthereumHardfork::Paris.boxed(),
107 ForkCondition::TTD {
108 activation_block_number: 0,
109 fork_block: Some(0),
110 total_difficulty: U256::ZERO,
111 },
112 ),
113 (OpHardfork::Bedrock.boxed(), ForkCondition::Block(0)),
114 (OpHardfork::Regolith.boxed(), ForkCondition::Timestamp(0)),
115 (EthereumHardfork::Shanghai.boxed(), ForkCondition::Timestamp(1699981200)),
116 (OpHardfork::Canyon.boxed(), ForkCondition::Timestamp(1699981200)),
117 (EthereumHardfork::Cancun.boxed(), ForkCondition::Timestamp(1708534800)),
118 (OpHardfork::Ecotone.boxed(), ForkCondition::Timestamp(1708534800)),
119 (OpHardfork::Fjord.boxed(), ForkCondition::Timestamp(1716998400)),
120 (OpHardfork::Granite.boxed(), ForkCondition::Timestamp(1723478400)),
121 (OpHardfork::Holocene.boxed(), ForkCondition::Timestamp(1732633200)),
122 ])
123});
124
125pub static BASE_SEPOLIA_HARDFORKS: LazyLock<ChainHardforks> = LazyLock::new(|| {
127 ChainHardforks::new(vec![
128 (EthereumHardfork::Frontier.boxed(), ForkCondition::Block(0)),
129 (EthereumHardfork::Homestead.boxed(), ForkCondition::Block(0)),
130 (EthereumHardfork::Tangerine.boxed(), ForkCondition::Block(0)),
131 (EthereumHardfork::SpuriousDragon.boxed(), ForkCondition::Block(0)),
132 (EthereumHardfork::Byzantium.boxed(), ForkCondition::Block(0)),
133 (EthereumHardfork::Constantinople.boxed(), ForkCondition::Block(0)),
134 (EthereumHardfork::Petersburg.boxed(), ForkCondition::Block(0)),
135 (EthereumHardfork::Istanbul.boxed(), ForkCondition::Block(0)),
136 (EthereumHardfork::MuirGlacier.boxed(), ForkCondition::Block(0)),
137 (EthereumHardfork::Berlin.boxed(), ForkCondition::Block(0)),
138 (EthereumHardfork::London.boxed(), ForkCondition::Block(0)),
139 (EthereumHardfork::ArrowGlacier.boxed(), ForkCondition::Block(0)),
140 (EthereumHardfork::GrayGlacier.boxed(), ForkCondition::Block(0)),
141 (
142 EthereumHardfork::Paris.boxed(),
143 ForkCondition::TTD {
144 activation_block_number: 0,
145 fork_block: Some(0),
146 total_difficulty: U256::ZERO,
147 },
148 ),
149 (OpHardfork::Bedrock.boxed(), ForkCondition::Block(0)),
150 (OpHardfork::Regolith.boxed(), ForkCondition::Timestamp(0)),
151 (EthereumHardfork::Shanghai.boxed(), ForkCondition::Timestamp(1699981200)),
152 (OpHardfork::Canyon.boxed(), ForkCondition::Timestamp(1699981200)),
153 (EthereumHardfork::Cancun.boxed(), ForkCondition::Timestamp(1708534800)),
154 (OpHardfork::Ecotone.boxed(), ForkCondition::Timestamp(1708534800)),
155 (OpHardfork::Fjord.boxed(), ForkCondition::Timestamp(1716998400)),
156 (OpHardfork::Granite.boxed(), ForkCondition::Timestamp(1723478400)),
157 (OpHardfork::Holocene.boxed(), ForkCondition::Timestamp(1732633200)),
158 ])
159});
160
161pub static BASE_MAINNET_HARDFORKS: LazyLock<ChainHardforks> = LazyLock::new(|| {
163 ChainHardforks::new(vec![
164 (EthereumHardfork::Frontier.boxed(), ForkCondition::Block(0)),
165 (EthereumHardfork::Homestead.boxed(), ForkCondition::Block(0)),
166 (EthereumHardfork::Tangerine.boxed(), ForkCondition::Block(0)),
167 (EthereumHardfork::SpuriousDragon.boxed(), ForkCondition::Block(0)),
168 (EthereumHardfork::Byzantium.boxed(), ForkCondition::Block(0)),
169 (EthereumHardfork::Constantinople.boxed(), ForkCondition::Block(0)),
170 (EthereumHardfork::Petersburg.boxed(), ForkCondition::Block(0)),
171 (EthereumHardfork::Istanbul.boxed(), ForkCondition::Block(0)),
172 (EthereumHardfork::MuirGlacier.boxed(), ForkCondition::Block(0)),
173 (EthereumHardfork::Berlin.boxed(), ForkCondition::Block(0)),
174 (EthereumHardfork::London.boxed(), ForkCondition::Block(0)),
175 (EthereumHardfork::ArrowGlacier.boxed(), ForkCondition::Block(0)),
176 (EthereumHardfork::GrayGlacier.boxed(), ForkCondition::Block(0)),
177 (
178 EthereumHardfork::Paris.boxed(),
179 ForkCondition::TTD {
180 activation_block_number: 0,
181 fork_block: Some(0),
182 total_difficulty: U256::ZERO,
183 },
184 ),
185 (OpHardfork::Bedrock.boxed(), ForkCondition::Block(0)),
186 (OpHardfork::Regolith.boxed(), ForkCondition::Timestamp(0)),
187 (EthereumHardfork::Shanghai.boxed(), ForkCondition::Timestamp(1704992401)),
188 (OpHardfork::Canyon.boxed(), ForkCondition::Timestamp(1704992401)),
189 (EthereumHardfork::Cancun.boxed(), ForkCondition::Timestamp(1710374401)),
190 (OpHardfork::Ecotone.boxed(), ForkCondition::Timestamp(1710374401)),
191 (OpHardfork::Fjord.boxed(), ForkCondition::Timestamp(1720627201)),
192 (OpHardfork::Granite.boxed(), ForkCondition::Timestamp(1726070401)),
193 (OpHardfork::Holocene.boxed(), ForkCondition::Timestamp(1736445601)),
194 ])
195});