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