From 905ed6cfc5070ccfb6ea864d141623e9ad6400c6 Mon Sep 17 00:00:00 2001 From: Rohit Narurkar Date: Tue, 4 Nov 2025 14:08:44 +0000 Subject: [PATCH 1/4] chore: add hardfork galileo --- crates/scroll/alloy/hardforks/src/hardfork.rs | 13 +++++++++---- crates/scroll/alloy/hardforks/src/lib.rs | 5 +++++ crates/scroll/hardforks/src/lib.rs | 3 +++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/crates/scroll/alloy/hardforks/src/hardfork.rs b/crates/scroll/alloy/hardforks/src/hardfork.rs index dce4ac29147..930892d83e3 100644 --- a/crates/scroll/alloy/hardforks/src/hardfork.rs +++ b/crates/scroll/alloy/hardforks/src/hardfork.rs @@ -21,13 +21,15 @@ hardfork!( /// EuclidV2 EuclidV2, /// Feynman - Feynman + Feynman, + /// Galileo + Galileo, } ); impl ScrollHardfork { /// Scroll mainnet list of hardforks. - pub const fn scroll_mainnet() -> [(Self, ForkCondition); 8] { + pub const fn scroll_mainnet() -> [(Self, ForkCondition); 9] { [ (Self::Archimedes, ForkCondition::Block(0)), (Self::Bernoulli, ForkCondition::Block(5220340)), @@ -37,11 +39,12 @@ impl ScrollHardfork { (Self::Euclid, ForkCondition::Timestamp(1744815600)), (Self::EuclidV2, ForkCondition::Timestamp(1745305200)), (Self::Feynman, ForkCondition::Timestamp(1755576000)), + (Self::Galileo, ForkCondition::Timestamp(u64::MAX)), ] } /// Scroll sepolia list of hardforks. - pub const fn scroll_sepolia() -> [(Self, ForkCondition); 8] { + pub const fn scroll_sepolia() -> [(Self, ForkCondition); 9] { [ (Self::Archimedes, ForkCondition::Block(0)), (Self::Bernoulli, ForkCondition::Block(3747132)), @@ -51,6 +54,7 @@ impl ScrollHardfork { (Self::Euclid, ForkCondition::Timestamp(1741680000)), (Self::EuclidV2, ForkCondition::Timestamp(1741852800)), (Self::Feynman, ForkCondition::Timestamp(1753167600)), + (Self::Galileo, ForkCondition::Timestamp(u64::MAX)), ] } } @@ -63,7 +67,7 @@ mod tests { #[test] fn check_scroll_hardfork_from_str() { let hardfork_str = - ["BernOulLi", "CUrie", "DaRwIn", "DaRwInV2", "EUcliD", "eUClidv2", "FEYnmaN"]; + ["BernOulLi", "CUrie", "DaRwIn", "DaRwInV2", "EUcliD", "eUClidv2", "FEYnmaN", "gaLiLEo"]; let expected_hardforks = [ ScrollHardfork::Bernoulli, ScrollHardfork::Curie, @@ -72,6 +76,7 @@ mod tests { ScrollHardfork::Euclid, ScrollHardfork::EuclidV2, ScrollHardfork::Feynman, + ScrollHardfork::Galileo, ]; let hardforks: Vec = diff --git a/crates/scroll/alloy/hardforks/src/lib.rs b/crates/scroll/alloy/hardforks/src/lib.rs index a4b755ac03b..7dba7693601 100644 --- a/crates/scroll/alloy/hardforks/src/lib.rs +++ b/crates/scroll/alloy/hardforks/src/lib.rs @@ -52,6 +52,11 @@ pub trait ScrollHardforks: EthereumHardforks { fn is_feynman_active_at_timestamp(&self, timestamp: u64) -> bool { self.scroll_fork_activation(ScrollHardfork::Feynman).active_at_timestamp(timestamp) } + + /// Returns `true` if [`Galileo`](ScrollHardfork::Galileo) is active at given block timestamp. + fn is_galileo_active_at_timestamp(&self, timestamp: u64) -> bool { + self.scroll_fork_activation(ScrollHardfork::Galileo).active_at_timestamp(timestamp) + } } /// A type allowing to configure activation [`ForkCondition`]s for a given list of diff --git a/crates/scroll/hardforks/src/lib.rs b/crates/scroll/hardforks/src/lib.rs index c780f15eb3f..ef55f392492 100644 --- a/crates/scroll/hardforks/src/lib.rs +++ b/crates/scroll/hardforks/src/lib.rs @@ -40,6 +40,7 @@ pub static SCROLL_MAINNET_HARDFORKS: LazyLock = LazyLock::new(|| (ScrollHardfork::Euclid.boxed(), ForkCondition::Timestamp(1744815600)), (ScrollHardfork::EuclidV2.boxed(), ForkCondition::Timestamp(1745305200)), (ScrollHardfork::Feynman.boxed(), ForkCondition::Timestamp(1755576000)), + (ScrollHardfork::Galileo.boxed(), ForkCondition::Timestamp(u64::MAX)), ]) }); @@ -64,6 +65,7 @@ pub static SCROLL_SEPOLIA_HARDFORKS: LazyLock = LazyLock::new(|| (ScrollHardfork::Euclid.boxed(), ForkCondition::Timestamp(1741680000)), (ScrollHardfork::EuclidV2.boxed(), ForkCondition::Timestamp(1741852800)), (ScrollHardfork::Feynman.boxed(), ForkCondition::Timestamp(1753167600)), + (ScrollHardfork::Galileo.boxed(), ForkCondition::Timestamp(u64::MAX)), ]) }); @@ -88,5 +90,6 @@ pub static DEV_HARDFORKS: LazyLock = LazyLock::new(|| { (ScrollHardfork::Euclid.boxed(), ForkCondition::Timestamp(0)), (ScrollHardfork::EuclidV2.boxed(), ForkCondition::Timestamp(0)), (ScrollHardfork::Feynman.boxed(), ForkCondition::Timestamp(0)), + (ScrollHardfork::Galileo.boxed(), ForkCondition::Timestamp(0)), ]) }); From 5fe025dd121f9f6154a6e569ce19df066e9d3962 Mon Sep 17 00:00:00 2001 From: Rohit Narurkar Date: Tue, 4 Nov 2025 14:12:15 +0000 Subject: [PATCH 2/4] fmt --- crates/scroll/alloy/hardforks/src/hardfork.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/crates/scroll/alloy/hardforks/src/hardfork.rs b/crates/scroll/alloy/hardforks/src/hardfork.rs index 930892d83e3..719e41c889c 100644 --- a/crates/scroll/alloy/hardforks/src/hardfork.rs +++ b/crates/scroll/alloy/hardforks/src/hardfork.rs @@ -66,8 +66,16 @@ mod tests { #[test] fn check_scroll_hardfork_from_str() { - let hardfork_str = - ["BernOulLi", "CUrie", "DaRwIn", "DaRwInV2", "EUcliD", "eUClidv2", "FEYnmaN", "gaLiLEo"]; + let hardfork_str = [ + "BernOulLi", + "CUrie", + "DaRwIn", + "DaRwInV2", + "EUcliD", + "eUClidv2", + "FEYnmaN", + "gaLiLEo", + ]; let expected_hardforks = [ ScrollHardfork::Bernoulli, ScrollHardfork::Curie, From fe8a24cc6906765857693be9f41ae908e73bd92f Mon Sep 17 00:00:00 2001 From: Rohit Narurkar Date: Tue, 4 Nov 2025 15:32:49 +0000 Subject: [PATCH 3/4] fix: test after new hardfork added --- crates/scroll/chainspec/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/scroll/chainspec/src/lib.rs b/crates/scroll/chainspec/src/lib.rs index aa7fdeae5d9..54063f40476 100644 --- a/crates/scroll/chainspec/src/lib.rs +++ b/crates/scroll/chainspec/src/lib.rs @@ -633,7 +633,7 @@ mod tests { ), ( Head { number: 4740239, timestamp: 1753167600, ..Default::default() }, - ForkId { hash: ForkHash([0x19, 0xbb, 0x92, 0xc6]), next: 0 }, + ForkId { hash: ForkHash([0x19, 0xbb, 0x92, 0xc6]), next: u64::MAX }, ), ], ); From 4614605965887504adbaa190bf2cba49c5cfe788 Mon Sep 17 00:00:00 2001 From: Rohit Narurkar Date: Tue, 4 Nov 2025 15:47:28 +0000 Subject: [PATCH 4/4] fix: tests for hardfork --- crates/scroll/chainspec/src/genesis.rs | 8 +++++++- crates/scroll/chainspec/src/lib.rs | 13 ++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/crates/scroll/chainspec/src/genesis.rs b/crates/scroll/chainspec/src/genesis.rs index c522461ec01..56a8c1ab885 100644 --- a/crates/scroll/chainspec/src/genesis.rs +++ b/crates/scroll/chainspec/src/genesis.rs @@ -69,6 +69,8 @@ pub struct ScrollHardforkInfo { pub euclid_v2_time: Option, /// feynman hardfork timestamp pub feynman_time: Option, + /// galileo hardfork timestamp + pub galileo_time: Option, } impl ScrollHardforkInfo { @@ -187,7 +189,8 @@ mod tests { "curieBlock": 12, "darwinTime": 0, "euclidTime": 11, - "feynmanTime": 100 + "feynmanTime": 100, + "galileoTime": 110 } "#; @@ -205,6 +208,7 @@ mod tests { euclid_time: Some(11), euclid_v2_time: None, feynman_time: Some(100), + galileo_time: Some(110), } ); } @@ -219,6 +223,7 @@ mod tests { "darwinTime": 0, "euclidTime": 11, "feynmanTime": 100, + "galileoTime": 110, "scroll": { "feeVaultAddress": "0x5300000000000000000000000000000000000005", "maxTxPayloadBytesPerBlock": 122880, @@ -247,6 +252,7 @@ mod tests { euclid_time: Some(11), euclid_v2_time: None, feynman_time: Some(100), + galileo_time: Some(110), }), scroll_chain_config: ScrollChainConfig { fee_vault_address: Some(address!("5300000000000000000000000000000000000005")), diff --git a/crates/scroll/chainspec/src/lib.rs b/crates/scroll/chainspec/src/lib.rs index 54063f40476..5688111fd06 100644 --- a/crates/scroll/chainspec/src/lib.rs +++ b/crates/scroll/chainspec/src/lib.rs @@ -431,6 +431,7 @@ impl From for ScrollChainSpec { (ScrollHardfork::Euclid.boxed(), hard_fork_info.euclid_time), (ScrollHardfork::EuclidV2.boxed(), hard_fork_info.euclid_v2_time), (ScrollHardfork::Feynman.boxed(), hard_fork_info.feynman_time), + (ScrollHardfork::Galileo.boxed(), hard_fork_info.galileo_time), ]; let mut time_hardforks = time_hardfork_opts @@ -545,7 +546,11 @@ mod tests { ), ( Head { number: 7096836, timestamp: 1755576000, ..Default::default() }, - ForkId { hash: ForkHash([0x38, 0x0f, 0x78, 0x5d]), next: 0 }, + ForkId { hash: ForkHash([0x38, 0x0f, 0x78, 0x5d]), next: u64::MAX }, + ), + ( + Head { number: 7096836, timestamp: u64::MAX, ..Default::default() }, + ForkId { hash: ForkHash([0x50, 0xe7, 0xe6, 0xd5]), next: 0 }, ), ], ); @@ -635,6 +640,10 @@ mod tests { Head { number: 4740239, timestamp: 1753167600, ..Default::default() }, ForkId { hash: ForkHash([0x19, 0xbb, 0x92, 0xc6]), next: u64::MAX }, ), + ( + Head { number: 4740239, timestamp: u64::MAX, ..Default::default() }, + ForkId { hash: ForkHash([0xf8, 0x27, 0xe0, 0xfc]), next: 0 }, + ), ], ); } @@ -734,6 +743,7 @@ mod tests { (String::from("darwinTime"), 0.into()), (String::from("darwinV2Time"), 0.into()), (String::from("feynmanTime"), 0.into()), + (String::from("galileoTime"), 0.into()), ( String::from("scroll"), serde_json::json!({ @@ -777,6 +787,7 @@ mod tests { ScrollHardfork::Darwin.boxed(), ScrollHardfork::DarwinV2.boxed(), ScrollHardfork::Feynman.boxed(), + ScrollHardfork::Galileo.boxed(), ]; assert!(expected_hardforks