From 68697b0fee0745fbe22fd4b29267a148bef3b9b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Garamv=C3=B6lgyi?= Date: Wed, 4 Oct 2023 19:28:26 +0200 Subject: [PATCH] fix: use non-overlapping DB prefix for L1 messages (#532) * fix: use non-overlapping db prefix for L1 messages * bump version --- cmd/utils/flags.go | 6 ++++++ core/rawdb/database.go | 4 ++++ core/rawdb/schema.go | 10 +++++++++- params/version.go | 4 ++-- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index b3bf080748..fedb7866ec 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -1828,6 +1828,12 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { SetDNSDiscoveryDefaults(cfg, params.MainnetGenesisHash) } } + + // set db prefix for backward-compatibility + if cfg.NetworkId == 534351 { + log.Warn("Using legacy db prefix for L1 messages") + rawdb.SetL1MessageLegacyPrefix() + } } // SetDNSDiscoveryDefaults configures DNS discovery with the given URL if diff --git a/core/rawdb/database.go b/core/rawdb/database.go index 219f0f6667..98701ecff4 100644 --- a/core/rawdb/database.go +++ b/core/rawdb/database.go @@ -324,6 +324,7 @@ func InspectDatabase(db ethdb.Database, keyPrefix, keyStart []byte) error { bloomBits stat cliqueSnaps stat l1Messages stat + l1MessagesOld stat lastL1Message stat // Ancient store statistics @@ -386,6 +387,8 @@ func InspectDatabase(db ethdb.Database, keyPrefix, keyStart []byte) error { cliqueSnaps.Add(size) case bytes.HasPrefix(key, l1MessagePrefix) && len(key) == len(l1MessagePrefix)+8: l1Messages.Add(size) + case bytes.HasPrefix(key, l1MessageLegacyPrefix) && len(key) == len(l1MessageLegacyPrefix)+8: + l1MessagesOld.Add(size) case bytes.HasPrefix(key, firstQueueIndexNotInL2BlockPrefix) && len(key) == len(firstQueueIndexNotInL2BlockPrefix)+common.HashLength: lastL1Message.Add(size) case bytes.HasPrefix(key, []byte("cht-")) || @@ -451,6 +454,7 @@ func InspectDatabase(db ethdb.Database, keyPrefix, keyStart []byte) error { {"Key-Value store", "Clique snapshots", cliqueSnaps.Size(), cliqueSnaps.Count()}, {"Key-Value store", "Singleton metadata", metadata.Size(), metadata.Count()}, {"Key-Value store", "L1 messages", l1Messages.Size(), l1Messages.Count()}, + {"Key-Value store", "L1 messages (legacy prefix)", l1MessagesOld.Size(), l1MessagesOld.Count()}, {"Key-Value store", "Last L1 message", lastL1Message.Size(), lastL1Message.Count()}, {"Ancient store", "Headers", ancientHeadersSize.String(), ancients.String()}, {"Ancient store", "Bodies", ancientBodiesSize.String(), ancients.String()}, diff --git a/core/rawdb/schema.go b/core/rawdb/schema.go index bd637abaef..9d659975e8 100644 --- a/core/rawdb/schema.go +++ b/core/rawdb/schema.go @@ -105,7 +105,8 @@ var ( // Scroll L1 message store syncedL1BlockNumberKey = []byte("LastSyncedL1BlockNumber") - l1MessagePrefix = []byte("l1") // l1MessagePrefix + queueIndex (uint64 big endian) -> L1MessageTx + l1MessageLegacyPrefix = []byte("l1") + l1MessagePrefix = []byte("L1") // l1MessagePrefix + queueIndex (uint64 big endian) -> L1MessageTx firstQueueIndexNotInL2BlockPrefix = []byte("q") // firstQueueIndexNotInL2BlockPrefix + L2 block hash -> enqueue index highestSyncedQueueIndexKey = []byte("HighestSyncedQueueIndex") @@ -118,6 +119,13 @@ var ( skippedTransactionHashPrefix = []byte("sh") // skippedTransactionHashPrefix + index -> tx hash ) +// Use the updated "L1" prefix on all new networks +// to avoid overlap with txLookupPrefix. +// Use the legacy "l1" prefix on Scroll Sepolia. +func SetL1MessageLegacyPrefix() { + l1MessagePrefix = l1MessageLegacyPrefix +} + const ( // freezerHeaderTable indicates the name of the freezer header table. freezerHeaderTable = "headers" diff --git a/params/version.go b/params/version.go index 6370a85f94..a0bf710019 100644 --- a/params/version.go +++ b/params/version.go @@ -23,8 +23,8 @@ import ( const ( VersionMajor = 4 // Major version component of the current release - VersionMinor = 4 // Minor version component of the current release - VersionPatch = 19 // Patch version component of the current release + VersionMinor = 5 // Minor version component of the current release + VersionPatch = 0 // Patch version component of the current release VersionMeta = "sepolia" // Version metadata to append to the version string )