reth_ethereum_forks/hardforks/
ethereum.rs1use alloy_primitives::U256;
2
3use crate::{hardforks::Hardforks, EthereumHardfork, ForkCondition};
4
5#[auto_impl::auto_impl(&, Arc)]
7pub trait EthereumHardforks: Hardforks {
8 fn is_shanghai_active_at_timestamp(&self, timestamp: u64) -> bool {
11 self.is_fork_active_at_timestamp(EthereumHardfork::Shanghai, timestamp)
12 }
13
14 fn is_cancun_active_at_timestamp(&self, timestamp: u64) -> bool {
16 self.is_fork_active_at_timestamp(EthereumHardfork::Cancun, timestamp)
17 }
18
19 fn is_prague_active_at_timestamp(&self, timestamp: u64) -> bool {
21 self.is_fork_active_at_timestamp(EthereumHardfork::Prague, timestamp)
22 }
23
24 fn is_osaka_active_at_timestamp(&self, timestamp: u64) -> bool {
26 self.is_fork_active_at_timestamp(EthereumHardfork::Osaka, timestamp)
27 }
28
29 fn is_byzantium_active_at_block(&self, block_number: u64) -> bool {
32 self.fork(EthereumHardfork::Byzantium).active_at_block(block_number)
33 }
34
35 fn is_spurious_dragon_active_at_block(&self, block_number: u64) -> bool {
38 self.fork(EthereumHardfork::SpuriousDragon).active_at_block(block_number)
39 }
40
41 fn is_homestead_active_at_block(&self, block_number: u64) -> bool {
44 self.fork(EthereumHardfork::Homestead).active_at_block(block_number)
45 }
46
47 fn is_paris_active_at_block(&self, block_number: u64) -> Option<bool> {
51 match self.fork(EthereumHardfork::Paris) {
52 ForkCondition::Block(paris_block) => Some(block_number >= paris_block),
53 ForkCondition::TTD { fork_block, .. } => {
54 fork_block.map(|paris_block| block_number >= paris_block)
55 }
56 _ => None,
57 }
58 }
59
60 fn get_final_paris_total_difficulty(&self) -> Option<U256>;
62
63 fn final_paris_total_difficulty(&self, block_number: u64) -> Option<U256>;
68}