reth_optimism_forks/
lib.rs

1//! OP-Reth hard forks.
2
3#![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
13// Re-export alloy-op-hardforks types.
14pub 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
21/// Dev hardforks
22pub 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
54/// Optimism mainnet list of hardforks.
55pub 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});
89/// Optimism Sepolia list of hardforks.
90pub 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
125/// Base Sepolia list of hardforks.
126pub 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
161/// Base mainnet list of hardforks.
162pub 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});