From 1e7cbf1e0ae2aa857dff1af623f72da49a6f5e3e Mon Sep 17 00:00:00 2001 From: jsvisa Date: Sun, 18 Feb 2024 08:33:33 +0000 Subject: [PATCH] fix(primitives/chain): use terminal_total_difficulty_passed to check merged activated or not Signed-off-by: jsvisa --- crates/primitives/src/chain/spec.rs | 73 ++++++++++++++++++++++++----- 1 file changed, 61 insertions(+), 12 deletions(-) diff --git a/crates/primitives/src/chain/spec.rs b/crates/primitives/src/chain/spec.rs index 05b4f269e89c..4a9ac0dbd4f6 100644 --- a/crates/primitives/src/chain/spec.rs +++ b/crates/primitives/src/chain/spec.rs @@ -31,7 +31,7 @@ pub static MAINNET: Lazy> = Lazy::new(|| { // paris_block_and_final_difficulty: Some(( 15537394, - U256::from(58_750_003_716_598_352_816_469u128), + U256::from(58_750_003_716_598_352_816_469_u128), )), fork_timestamps: ForkTimestamps::default().shanghai(1681338455).cancun(1710338135), hardforks: BTreeMap::from([ @@ -54,6 +54,7 @@ pub static MAINNET: Lazy> = Lazy::new(|| { ForkCondition::TTD { fork_block: None, total_difficulty: U256::from(58_750_000_000_000_000_000_000_u128), + terminal_total_difficulty_passed: true, }, ), (Hardfork::Shanghai, ForkCondition::Timestamp(1681338455)), @@ -98,7 +99,11 @@ pub static GOERLI: Lazy> = Lazy::new(|| { (Hardfork::London, ForkCondition::Block(5062605)), ( Hardfork::Paris, - ForkCondition::TTD { fork_block: None, total_difficulty: U256::from(10_790_000) }, + ForkCondition::TTD { + fork_block: None, + total_difficulty: U256::from(10_790_000), + terminal_total_difficulty_passed: true, + }, ), (Hardfork::Shanghai, ForkCondition::Timestamp(1678832736)), (Hardfork::Cancun, ForkCondition::Timestamp(1705473120)), @@ -146,6 +151,7 @@ pub static SEPOLIA: Lazy> = Lazy::new(|| { ForkCondition::TTD { fork_block: Some(1735371), total_difficulty: U256::from(17_000_000_000_000_000u64), + terminal_total_difficulty_passed: true, }, ), (Hardfork::Shanghai, ForkCondition::Timestamp(1677557088)), @@ -190,7 +196,11 @@ pub static HOLESKY: Lazy> = Lazy::new(|| { (Hardfork::London, ForkCondition::Block(0)), ( Hardfork::Paris, - ForkCondition::TTD { fork_block: Some(0), total_difficulty: U256::ZERO }, + ForkCondition::TTD { + fork_block: Some(0), + total_difficulty: U256::ZERO, + terminal_total_difficulty_passed: true, + }, ), (Hardfork::Shanghai, ForkCondition::Timestamp(1696000704)), (Hardfork::Cancun, ForkCondition::Timestamp(1707305664)), @@ -236,7 +246,11 @@ pub static DEV: Lazy> = Lazy::new(|| { (Hardfork::London, ForkCondition::Block(0)), ( Hardfork::Paris, - ForkCondition::TTD { fork_block: Some(0), total_difficulty: U256::from(0) }, + ForkCondition::TTD { + fork_block: Some(0), + total_difficulty: U256::from(0), + terminal_total_difficulty_passed: true, + }, ), (Hardfork::Shanghai, ForkCondition::Timestamp(0)), ]), @@ -279,7 +293,11 @@ pub static OP_GOERLI: Lazy> = Lazy::new(|| { (Hardfork::GrayGlacier, ForkCondition::Block(0)), ( Hardfork::Paris, - ForkCondition::TTD { fork_block: Some(0), total_difficulty: U256::from(0) }, + ForkCondition::TTD { + fork_block: Some(0), + total_difficulty: U256::from(0), + terminal_total_difficulty_passed: true, + }, ), (Hardfork::Bedrock, ForkCondition::Block(4061224)), (Hardfork::Regolith, ForkCondition::Timestamp(1679079600)), @@ -334,7 +352,11 @@ pub static BASE_GOERLI: Lazy> = Lazy::new(|| { (Hardfork::GrayGlacier, ForkCondition::Block(0)), ( Hardfork::Paris, - ForkCondition::TTD { fork_block: Some(0), total_difficulty: U256::from(0) }, + ForkCondition::TTD { + fork_block: Some(0), + total_difficulty: U256::from(0), + terminal_total_difficulty_passed: true, + }, ), (Hardfork::Bedrock, ForkCondition::Block(0)), (Hardfork::Regolith, ForkCondition::Timestamp(1683219600)), @@ -389,7 +411,11 @@ pub static BASE_SEPOLIA: Lazy> = Lazy::new(|| { (Hardfork::GrayGlacier, ForkCondition::Block(0)), ( Hardfork::Paris, - ForkCondition::TTD { fork_block: Some(0), total_difficulty: U256::from(0) }, + ForkCondition::TTD { + fork_block: Some(0), + total_difficulty: U256::from(0), + terminal_total_difficulty_passed: true, + }, ), (Hardfork::Bedrock, ForkCondition::Block(0)), (Hardfork::Regolith, ForkCondition::Timestamp(0)), @@ -440,7 +466,11 @@ pub static BASE_MAINNET: Lazy> = Lazy::new(|| { (Hardfork::GrayGlacier, ForkCondition::Block(0)), ( Hardfork::Paris, - ForkCondition::TTD { fork_block: Some(0), total_difficulty: U256::from(0) }, + ForkCondition::TTD { + fork_block: Some(0), + total_difficulty: U256::from(0), + terminal_total_difficulty_passed: true, + }, ), (Hardfork::Bedrock, ForkCondition::Block(0)), (Hardfork::Regolith, ForkCondition::Timestamp(0)), @@ -1027,6 +1057,9 @@ impl From for ChainSpec { ForkCondition::TTD { total_difficulty: ttd, fork_block: genesis.config.merge_netsplit_block, + terminal_total_difficulty_passed: genesis + .config + .terminal_total_difficulty_passed, }, ); } @@ -1221,7 +1254,11 @@ impl ChainSpecBuilder { pub fn paris_at_ttd(self, ttd: U256) -> Self { self.with_fork( Hardfork::Paris, - ForkCondition::TTD { total_difficulty: ttd, fork_block: None }, + ForkCondition::TTD { + total_difficulty: ttd, + fork_block: None, + terminal_total_difficulty_passed: true, + }, ) } @@ -1299,7 +1336,11 @@ impl ChainSpecBuilder { self = self.london_activated(); self.hardforks.insert( Hardfork::Paris, - ForkCondition::TTD { fork_block: Some(0), total_difficulty: U256::ZERO }, + ForkCondition::TTD { + fork_block: Some(0), + total_difficulty: U256::ZERO, + terminal_total_difficulty_passed: true, + }, ); self } @@ -1399,6 +1440,8 @@ pub enum ForkCondition { fork_block: Option, /// The total difficulty after which the fork is activated. total_difficulty: U256, + /// Whether the fork is activated after the terminal total difficulty has been passed. + terminal_total_difficulty_passed: bool, }, /// The fork is activated after a specific timestamp. Timestamp(u64), @@ -1516,13 +1559,17 @@ impl Display for DisplayFork { ForkCondition::Block(at) | ForkCondition::Timestamp(at) => { write!(f, "{:32} @{}", name_with_eip, at)?; } - ForkCondition::TTD { fork_block, total_difficulty } => { + ForkCondition::TTD { + fork_block: _, + total_difficulty, + terminal_total_difficulty_passed, + } => { writeln!( f, "{:32} @{} ({})", name_with_eip, total_difficulty, - if fork_block.is_some() { + if terminal_total_difficulty_passed { "network is known to be merged" } else { "network is not known to be merged" @@ -1887,6 +1934,7 @@ Post-merge hard forks (timestamp based): ForkCondition::TTD { fork_block: Some(101), total_difficulty: U256::from(10_790_000), + terminal_total_difficulty_passed: true, }, ) .with_fork(Hardfork::Shanghai, ForkCondition::Timestamp(11313123)) @@ -1922,6 +1970,7 @@ Post-merge hard forks (timestamp based): let fork_cond_ttd_no_new_spec = fork_cond_block_only_case.satisfy(ForkCondition::TTD { fork_block: None, total_difficulty: U256::from(10_790_000), + terminal_total_difficulty_passed: false, }); let fork_cond_ttd_no_new_spec_expected = Head { total_difficulty: U256::from(10_790_000), ..Default::default() };