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 ])
62});
63
64pub static OP_MAINNET_HARDFORKS: LazyLock<ChainHardforks> = LazyLock::new(|| {
66 ChainHardforks::new(vec![
67 (EthereumHardfork::Frontier.boxed(), ForkCondition::Block(0)),
68 (EthereumHardfork::Homestead.boxed(), ForkCondition::Block(0)),
69 (EthereumHardfork::Tangerine.boxed(), ForkCondition::Block(0)),
70 (EthereumHardfork::SpuriousDragon.boxed(), ForkCondition::Block(0)),
71 (EthereumHardfork::Byzantium.boxed(), ForkCondition::Block(0)),
72 (EthereumHardfork::Constantinople.boxed(), ForkCondition::Block(0)),
73 (EthereumHardfork::Petersburg.boxed(), ForkCondition::Block(0)),
74 (EthereumHardfork::Istanbul.boxed(), ForkCondition::Block(0)),
75 (EthereumHardfork::MuirGlacier.boxed(), ForkCondition::Block(0)),
76 (EthereumHardfork::Berlin.boxed(), ForkCondition::Block(3950000)),
77 (EthereumHardfork::London.boxed(), ForkCondition::Block(105235063)),
78 (EthereumHardfork::ArrowGlacier.boxed(), ForkCondition::Block(105235063)),
79 (EthereumHardfork::GrayGlacier.boxed(), ForkCondition::Block(105235063)),
80 (
81 EthereumHardfork::Paris.boxed(),
82 ForkCondition::TTD {
83 activation_block_number: 105235063,
84 fork_block: Some(105235063),
85 total_difficulty: U256::ZERO,
86 },
87 ),
88 (OpHardfork::Bedrock.boxed(), ForkCondition::Block(105235063)),
89 (OpHardfork::Regolith.boxed(), ForkCondition::Timestamp(0)),
90 (EthereumHardfork::Shanghai.boxed(), ForkCondition::Timestamp(1704992401)),
91 (OpHardfork::Canyon.boxed(), ForkCondition::Timestamp(1704992401)),
92 (EthereumHardfork::Cancun.boxed(), ForkCondition::Timestamp(1710374401)),
93 (OpHardfork::Ecotone.boxed(), ForkCondition::Timestamp(1710374401)),
94 (OpHardfork::Fjord.boxed(), ForkCondition::Timestamp(1720627201)),
95 (OpHardfork::Granite.boxed(), ForkCondition::Timestamp(1726070401)),
96 (OpHardfork::Holocene.boxed(), ForkCondition::Timestamp(1736445601)),
97 (EthereumHardfork::Prague.boxed(), ForkCondition::Timestamp(1746806401)),
98 (OpHardfork::Isthmus.boxed(), ForkCondition::Timestamp(1746806401)),
99 ])
100});
101pub static OP_SEPOLIA_HARDFORKS: LazyLock<ChainHardforks> = LazyLock::new(|| {
103 ChainHardforks::new(vec![
104 (EthereumHardfork::Frontier.boxed(), ForkCondition::Block(0)),
105 (EthereumHardfork::Homestead.boxed(), ForkCondition::Block(0)),
106 (EthereumHardfork::Tangerine.boxed(), ForkCondition::Block(0)),
107 (EthereumHardfork::SpuriousDragon.boxed(), ForkCondition::Block(0)),
108 (EthereumHardfork::Byzantium.boxed(), ForkCondition::Block(0)),
109 (EthereumHardfork::Constantinople.boxed(), ForkCondition::Block(0)),
110 (EthereumHardfork::Petersburg.boxed(), ForkCondition::Block(0)),
111 (EthereumHardfork::Istanbul.boxed(), ForkCondition::Block(0)),
112 (EthereumHardfork::MuirGlacier.boxed(), ForkCondition::Block(0)),
113 (EthereumHardfork::Berlin.boxed(), ForkCondition::Block(0)),
114 (EthereumHardfork::London.boxed(), ForkCondition::Block(0)),
115 (EthereumHardfork::ArrowGlacier.boxed(), ForkCondition::Block(0)),
116 (EthereumHardfork::GrayGlacier.boxed(), ForkCondition::Block(0)),
117 (
118 EthereumHardfork::Paris.boxed(),
119 ForkCondition::TTD {
120 activation_block_number: 0,
121 fork_block: Some(0),
122 total_difficulty: U256::ZERO,
123 },
124 ),
125 (OpHardfork::Bedrock.boxed(), ForkCondition::Block(0)),
126 (OpHardfork::Regolith.boxed(), ForkCondition::Timestamp(0)),
127 (EthereumHardfork::Shanghai.boxed(), ForkCondition::Timestamp(1699981200)),
128 (OpHardfork::Canyon.boxed(), ForkCondition::Timestamp(1699981200)),
129 (EthereumHardfork::Cancun.boxed(), ForkCondition::Timestamp(1708534800)),
130 (OpHardfork::Ecotone.boxed(), ForkCondition::Timestamp(1708534800)),
131 (OpHardfork::Fjord.boxed(), ForkCondition::Timestamp(1716998400)),
132 (OpHardfork::Granite.boxed(), ForkCondition::Timestamp(1723478400)),
133 (OpHardfork::Holocene.boxed(), ForkCondition::Timestamp(1732633200)),
134 (EthereumHardfork::Prague.boxed(), ForkCondition::Timestamp(1744905600)),
135 (OpHardfork::Isthmus.boxed(), ForkCondition::Timestamp(1744905600)),
136 ])
137});
138
139pub static BASE_SEPOLIA_HARDFORKS: LazyLock<ChainHardforks> = LazyLock::new(|| {
141 ChainHardforks::new(vec![
142 (EthereumHardfork::Frontier.boxed(), ForkCondition::Block(0)),
143 (EthereumHardfork::Homestead.boxed(), ForkCondition::Block(0)),
144 (EthereumHardfork::Tangerine.boxed(), ForkCondition::Block(0)),
145 (EthereumHardfork::SpuriousDragon.boxed(), ForkCondition::Block(0)),
146 (EthereumHardfork::Byzantium.boxed(), ForkCondition::Block(0)),
147 (EthereumHardfork::Constantinople.boxed(), ForkCondition::Block(0)),
148 (EthereumHardfork::Petersburg.boxed(), ForkCondition::Block(0)),
149 (EthereumHardfork::Istanbul.boxed(), ForkCondition::Block(0)),
150 (EthereumHardfork::MuirGlacier.boxed(), ForkCondition::Block(0)),
151 (EthereumHardfork::Berlin.boxed(), ForkCondition::Block(0)),
152 (EthereumHardfork::London.boxed(), ForkCondition::Block(0)),
153 (EthereumHardfork::ArrowGlacier.boxed(), ForkCondition::Block(0)),
154 (EthereumHardfork::GrayGlacier.boxed(), ForkCondition::Block(0)),
155 (
156 EthereumHardfork::Paris.boxed(),
157 ForkCondition::TTD {
158 activation_block_number: 0,
159 fork_block: Some(0),
160 total_difficulty: U256::ZERO,
161 },
162 ),
163 (OpHardfork::Bedrock.boxed(), ForkCondition::Block(0)),
164 (OpHardfork::Regolith.boxed(), ForkCondition::Timestamp(0)),
165 (EthereumHardfork::Shanghai.boxed(), ForkCondition::Timestamp(1699981200)),
166 (OpHardfork::Canyon.boxed(), ForkCondition::Timestamp(1699981200)),
167 (EthereumHardfork::Cancun.boxed(), ForkCondition::Timestamp(1708534800)),
168 (OpHardfork::Ecotone.boxed(), ForkCondition::Timestamp(1708534800)),
169 (OpHardfork::Fjord.boxed(), ForkCondition::Timestamp(1716998400)),
170 (OpHardfork::Granite.boxed(), ForkCondition::Timestamp(1723478400)),
171 (OpHardfork::Holocene.boxed(), ForkCondition::Timestamp(1732633200)),
172 (EthereumHardfork::Prague.boxed(), ForkCondition::Timestamp(1744905600)),
173 (OpHardfork::Isthmus.boxed(), ForkCondition::Timestamp(1744905600)),
174 ])
175});
176
177pub static BASE_MAINNET_HARDFORKS: LazyLock<ChainHardforks> = LazyLock::new(|| {
179 ChainHardforks::new(vec![
180 (EthereumHardfork::Frontier.boxed(), ForkCondition::Block(0)),
181 (EthereumHardfork::Homestead.boxed(), ForkCondition::Block(0)),
182 (EthereumHardfork::Tangerine.boxed(), ForkCondition::Block(0)),
183 (EthereumHardfork::SpuriousDragon.boxed(), ForkCondition::Block(0)),
184 (EthereumHardfork::Byzantium.boxed(), ForkCondition::Block(0)),
185 (EthereumHardfork::Constantinople.boxed(), ForkCondition::Block(0)),
186 (EthereumHardfork::Petersburg.boxed(), ForkCondition::Block(0)),
187 (EthereumHardfork::Istanbul.boxed(), ForkCondition::Block(0)),
188 (EthereumHardfork::MuirGlacier.boxed(), ForkCondition::Block(0)),
189 (EthereumHardfork::Berlin.boxed(), ForkCondition::Block(0)),
190 (EthereumHardfork::London.boxed(), ForkCondition::Block(0)),
191 (EthereumHardfork::ArrowGlacier.boxed(), ForkCondition::Block(0)),
192 (EthereumHardfork::GrayGlacier.boxed(), ForkCondition::Block(0)),
193 (
194 EthereumHardfork::Paris.boxed(),
195 ForkCondition::TTD {
196 activation_block_number: 0,
197 fork_block: Some(0),
198 total_difficulty: U256::ZERO,
199 },
200 ),
201 (OpHardfork::Bedrock.boxed(), ForkCondition::Block(0)),
202 (OpHardfork::Regolith.boxed(), ForkCondition::Timestamp(0)),
203 (EthereumHardfork::Shanghai.boxed(), ForkCondition::Timestamp(1704992401)),
204 (OpHardfork::Canyon.boxed(), ForkCondition::Timestamp(1704992401)),
205 (EthereumHardfork::Cancun.boxed(), ForkCondition::Timestamp(1710374401)),
206 (OpHardfork::Ecotone.boxed(), ForkCondition::Timestamp(1710374401)),
207 (OpHardfork::Fjord.boxed(), ForkCondition::Timestamp(1720627201)),
208 (OpHardfork::Granite.boxed(), ForkCondition::Timestamp(1726070401)),
209 (OpHardfork::Holocene.boxed(), ForkCondition::Timestamp(1736445601)),
210 (EthereumHardfork::Prague.boxed(), ForkCondition::Timestamp(1746806401)),
211 (OpHardfork::Isthmus.boxed(), ForkCondition::Timestamp(1746806401)),
212 ])
213});