From 6b819dc39ec2025af8cf0fa9cc0bd197e5a95d28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Garamv=C3=B6lgyi?= Date: Mon, 24 Feb 2025 08:54:41 +0100 Subject: [PATCH 1/7] feat: Euclid release on Scroll Sepolia (wip) --- params/config.go | 17 +++++++++++------ params/version.go | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/params/config.go b/params/config.go index befc38771401..a987fce2ad3a 100644 --- a/params/config.go +++ b/params/config.go @@ -328,20 +328,25 @@ var ( CurieBlock: big.NewInt(4740239), DarwinTime: newUint64(1723622400), DarwinV2Time: newUint64(1724832000), + EuclidTime: newUint64(1800000000), // TODO: update + EuclidV2Time: newUint64(1800000000), // TODO: update Clique: &CliqueConfig{ Period: 3, Epoch: 30000, }, + // TODO: add system config consensus Scroll: ScrollConfig{ UseZktrie: true, MaxTxPerBlock: &ScrollMaxTxPerBlock, MaxTxPayloadBytesPerBlock: &ScrollMaxTxPayloadBytesPerBlock, FeeVaultAddress: &rcfg.ScrollFeeVaultAddress, L1Config: &L1Config{ - L1ChainId: 11155111, - L1MessageQueueAddress: common.HexToAddress("0xF0B2293F5D834eAe920c6974D50957A1732de763"), - NumL1MessagesPerBlock: 10, - ScrollChainAddress: common.HexToAddress("0x2D567EcE699Eabe5afCd141eDB7A4f2D0D6ce8a0"), + L1ChainId: 11155111, + L1MessageQueueAddress: common.HexToAddress("0xF0B2293F5D834eAe920c6974D50957A1732de763"), + L1MessageQueueV2Address: common.HexToAddress("0xA0673eC0A48aa924f067F1274EcD281A10c5f19F"), + L1MessageQueueV2DeploymentBlock: 7773746, + NumL1MessagesPerBlock: 10, + ScrollChainAddress: common.HexToAddress("0x2D567EcE699Eabe5afCd141eDB7A4f2D0D6ce8a0"), }, GenesisStateRoot: &ScrollSepoliaGenesisState, }, @@ -689,8 +694,8 @@ type ScrollConfig struct { type L1Config struct { L1ChainId uint64 `json:"l1ChainId,string,omitempty"` L1MessageQueueAddress common.Address `json:"l1MessageQueueAddress,omitempty"` - L1MessageQueueV2Address common.Address `json:"l1MessageQueueV2Address,omitempty"` // TODO: set address once known - L1MessageQueueV2DeploymentBlock uint64 `json:"l1MessageQueueV2DeploymentBlock,omitempty"` // TODO: set block number once known + L1MessageQueueV2Address common.Address `json:"l1MessageQueueV2Address,omitempty"` + L1MessageQueueV2DeploymentBlock uint64 `json:"l1MessageQueueV2DeploymentBlock,omitempty"` NumL1MessagesPerBlock uint64 `json:"numL1MessagesPerBlock,string,omitempty"` ScrollChainAddress common.Address `json:"scrollChainAddress,omitempty"` } diff --git a/params/version.go b/params/version.go index b85c4244adcf..234bd3f39567 100644 --- a/params/version.go +++ b/params/version.go @@ -24,7 +24,7 @@ import ( const ( VersionMajor = 5 // Major version component of the current release VersionMinor = 8 // Minor version component of the current release - VersionPatch = 9 // Patch version component of the current release + VersionPatch = 10 // Patch version component of the current release VersionMeta = "mainnet" // Version metadata to append to the version string ) From 716d7d75219b05344c21379dc79fc078e3ae9415 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Garamv=C3=B6lgyi?= Date: Mon, 3 Mar 2025 13:23:52 +0100 Subject: [PATCH 2/7] update system contract consensus params --- params/config.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/params/config.go b/params/config.go index d0c53d4742d0..5f0ff8d87a18 100644 --- a/params/config.go +++ b/params/config.go @@ -334,7 +334,11 @@ var ( Period: 3, Epoch: 30000, }, - // TODO: add system config consensus + SystemContract: &SystemContractConfig{ + Period: 3, + SystemContractAddress: common.HexToAddress("0xC706Ba9fa4fedF4507CB7A898b4766c1bbf9be57"), + SystemContractSlot: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000067"), + }, Scroll: ScrollConfig{ UseZktrie: true, MaxTxPerBlock: &ScrollMaxTxPerBlock, From 98682fa3e42efb716a0b5be41ca8be00d58611c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Garamv=C3=B6lgyi?= Date: Tue, 4 Mar 2025 21:29:12 +0100 Subject: [PATCH 3/7] update timestamp --- params/config.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/params/config.go b/params/config.go index 5f0ff8d87a18..9ea1549859f3 100644 --- a/params/config.go +++ b/params/config.go @@ -328,8 +328,8 @@ var ( CurieBlock: big.NewInt(4740239), DarwinTime: newUint64(1723622400), DarwinV2Time: newUint64(1724832000), - EuclidTime: newUint64(1800000000), // TODO: update - EuclidV2Time: newUint64(1800000000), // TODO: update + EuclidTime: newUint64(1741680000), + EuclidV2Time: newUint64(1741852800), Clique: &CliqueConfig{ Period: 3, Epoch: 30000, From 357bad2eb7cc0247a4aa33134f1008ecc5d8bab4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Garamv=C3=B6lgyi?= Date: Tue, 4 Mar 2025 21:33:11 +0100 Subject: [PATCH 4/7] improve logs --- params/config.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/params/config.go b/params/config.go index 9ea1549859f3..e1064197b37c 100644 --- a/params/config.go +++ b/params/config.go @@ -712,8 +712,8 @@ func (c *L1Config) String() string { return "" } - return fmt.Sprintf("{l1ChainId: %v, l1MessageQueueAddress: %v, numL1MessagesPerBlock: %v, ScrollChainAddress: %v}", - c.L1ChainId, c.L1MessageQueueAddress.Hex(), c.NumL1MessagesPerBlock, c.ScrollChainAddress.Hex()) + return fmt.Sprintf("{l1ChainId: %v, l1MessageQueueAddress: %v, l1MessageQueueV2Address: %v, l1MessageQueueV2DeploymentBlock: %v, numL1MessagesPerBlock: %v, ScrollChainAddress: %v}", + c.L1ChainId, c.L1MessageQueueAddress.Hex(), c.L1MessageQueueV2Address.Hex(), L1MessageQueueV2DeploymentBlock, c.NumL1MessagesPerBlock, c.ScrollChainAddress.Hex()) } func (s ScrollConfig) FeeVaultEnabled() bool { From 8ef4920e9963456f8c275e551f7720184c8fb216 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Garamv=C3=B6lgyi?= Date: Tue, 4 Mar 2025 21:35:38 +0100 Subject: [PATCH 5/7] fix --- params/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/params/config.go b/params/config.go index e1064197b37c..d955dd161b0a 100644 --- a/params/config.go +++ b/params/config.go @@ -713,7 +713,7 @@ func (c *L1Config) String() string { } return fmt.Sprintf("{l1ChainId: %v, l1MessageQueueAddress: %v, l1MessageQueueV2Address: %v, l1MessageQueueV2DeploymentBlock: %v, numL1MessagesPerBlock: %v, ScrollChainAddress: %v}", - c.L1ChainId, c.L1MessageQueueAddress.Hex(), c.L1MessageQueueV2Address.Hex(), L1MessageQueueV2DeploymentBlock, c.NumL1MessagesPerBlock, c.ScrollChainAddress.Hex()) + c.L1ChainId, c.L1MessageQueueAddress.Hex(), c.L1MessageQueueV2Address.Hex(), c.L1MessageQueueV2DeploymentBlock, c.NumL1MessagesPerBlock, c.ScrollChainAddress.Hex()) } func (s ScrollConfig) FeeVaultEnabled() bool { From 9f586b7cdf5b5b7290a68ea6580ac267b4ffc3c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Garamv=C3=B6lgyi?= Date: Wed, 5 Mar 2025 15:17:09 +0100 Subject: [PATCH 6/7] adjust logs --- consensus/system_contract/system_contract.go | 34 +++++++++++--------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/consensus/system_contract/system_contract.go b/consensus/system_contract/system_contract.go index 8e99c9cfa3d6..b75e08530a4e 100644 --- a/consensus/system_contract/system_contract.go +++ b/consensus/system_contract/system_contract.go @@ -2,7 +2,6 @@ package system_contract import ( "context" - "fmt" "sync" "time" @@ -47,9 +46,9 @@ func New(ctx context.Context, config *params.SystemContractConfig, client sync_s cancel: cancel, } - if err := s.fetchAddressFromL1(); err != nil { - log.Error("failed to fetch signer address from L1", "err", err) - } + // Try to initialize authorized signer address. + s.fetchAddressFromL1() + return s } @@ -79,37 +78,42 @@ func (s *SystemContract) Start() { case <-s.ctx.Done(): return case <-syncTicker.C: - if err := s.fetchAddressFromL1(); err != nil { - log.Error("failed to fetch signer address from L1", "err", err) - } + s.fetchAddressFromL1() } } }() } -func (s *SystemContract) fetchAddressFromL1() error { +func (s *SystemContract) fetchAddressFromL1() { address, err := s.client.StorageAt(s.ctx, s.config.SystemContractAddress, s.config.SystemContractSlot, nil) if err != nil { - return fmt.Errorf("failed to get signer address from L1 System Contract: %w", err) + log.Error("failed to get signer address from L1 System Contract", "err", err) + return } bAddress := common.BytesToAddress(address) + s.lock.Lock() + defer s.lock.Unlock() + // Validate the address is not empty if bAddress == (common.Address{}) { - return fmt.Errorf("retrieved empty signer address from L1 System Contract: contract=%s, slot=%s", s.config.SystemContractAddress.Hex(), s.config.SystemContractSlot.Hex()) + log.Debug("retrieved empty signer address from L1 System Contract", "contract", s.config.SystemContractAddress.Hex(), "slot", s.config.SystemContractSlot.Hex()) + + if s.signerAddressL1 == (common.Address{}) { + log.Warn("System Contract signer address not initialized") + return + } + + log.Error("retrieved empty signer address from L1 System Contract") + return } log.Debug("Read address from system contract", "address", bAddress.Hex()) - s.lock.Lock() - defer s.lock.Unlock() - if s.signerAddressL1 != bAddress { s.signerAddressL1 = bAddress log.Info("Updated new signer from L1 system contract", "signer", bAddress.Hex()) } - - return nil } // Close implements consensus.Engine. From b050dff9df8e32edf2314e79d118eb62e76a62d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Garamv=C3=B6lgyi?= Date: Wed, 5 Mar 2025 15:29:46 +0100 Subject: [PATCH 7/7] undo some changes --- consensus/system_contract/system_contract.go | 25 ++++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/consensus/system_contract/system_contract.go b/consensus/system_contract/system_contract.go index b75e08530a4e..a93968e873fc 100644 --- a/consensus/system_contract/system_contract.go +++ b/consensus/system_contract/system_contract.go @@ -2,6 +2,7 @@ package system_contract import ( "context" + "fmt" "sync" "time" @@ -46,8 +47,9 @@ func New(ctx context.Context, config *params.SystemContractConfig, client sync_s cancel: cancel, } - // Try to initialize authorized signer address. - s.fetchAddressFromL1() + if err := s.fetchAddressFromL1(); err != nil { + log.Error("Failed to fetch signer address from L1", "err", err) + } return s } @@ -78,17 +80,18 @@ func (s *SystemContract) Start() { case <-s.ctx.Done(): return case <-syncTicker.C: - s.fetchAddressFromL1() + if err := s.fetchAddressFromL1(); err != nil { + log.Error("Failed to fetch signer address from L1", "err", err) + } } } }() } -func (s *SystemContract) fetchAddressFromL1() { +func (s *SystemContract) fetchAddressFromL1() error { address, err := s.client.StorageAt(s.ctx, s.config.SystemContractAddress, s.config.SystemContractSlot, nil) if err != nil { - log.Error("failed to get signer address from L1 System Contract", "err", err) - return + return fmt.Errorf("failed to get signer address from L1 System Contract: %w", err) } bAddress := common.BytesToAddress(address) @@ -97,15 +100,15 @@ func (s *SystemContract) fetchAddressFromL1() { // Validate the address is not empty if bAddress == (common.Address{}) { - log.Debug("retrieved empty signer address from L1 System Contract", "contract", s.config.SystemContractAddress.Hex(), "slot", s.config.SystemContractSlot.Hex()) + log.Debug("Retrieved empty signer address from L1 System Contract", "contract", s.config.SystemContractAddress.Hex(), "slot", s.config.SystemContractSlot.Hex()) + // Not initialized yet -- we don't consider this an error if s.signerAddressL1 == (common.Address{}) { log.Warn("System Contract signer address not initialized") - return + return nil } - log.Error("retrieved empty signer address from L1 System Contract") - return + return fmt.Errorf("retrieved empty signer address from L1 System Contract") } log.Debug("Read address from system contract", "address", bAddress.Hex()) @@ -114,6 +117,8 @@ func (s *SystemContract) fetchAddressFromL1() { s.signerAddressL1 = bAddress log.Info("Updated new signer from L1 system contract", "signer", bAddress.Hex()) } + + return nil } // Close implements consensus.Engine.