feat: parameterize sync service fetch block range (#1247)

* feat: parameterize sync service fetch block range

* chore: auto version bump [bot]

* fix type
This commit is contained in:
Morty 2025-10-14 13:21:31 +08:00 committed by GitHub
parent 06972688b3
commit bb8f253ab4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 20 additions and 3 deletions

View file

@ -171,6 +171,7 @@ var (
utils.L1ConfirmationsFlag, utils.L1ConfirmationsFlag,
utils.L1DeploymentBlockFlag, utils.L1DeploymentBlockFlag,
utils.L1SyncIntervalFlag, utils.L1SyncIntervalFlag,
utils.L1FetchBlockRangeFlag,
utils.L1DisableMessageQueueV2Flag, utils.L1DisableMessageQueueV2Flag,
utils.CircuitCapacityCheckEnabledFlag, utils.CircuitCapacityCheckEnabledFlag,
utils.CircuitCapacityCheckWorkersFlag, utils.CircuitCapacityCheckWorkersFlag,

View file

@ -857,6 +857,10 @@ var (
Name: "l1.sync.interval", Name: "l1.sync.interval",
Usage: "Poll interval for L1 message syncing (e.g., 2s, 10s, 1m)", Usage: "Poll interval for L1 message syncing (e.g., 2s, 10s, 1m)",
} }
L1FetchBlockRangeFlag = cli.Int64Flag{
Name: "l1.sync.fetchblockrange",
Usage: "Block range for L1 message fetching in a single eth_getLogs query",
}
L1DisableMessageQueueV2Flag = &cli.BoolFlag{ L1DisableMessageQueueV2Flag = &cli.BoolFlag{
Name: "l1.disablemqv2", Name: "l1.disablemqv2",
Usage: "Disable L1 message queue v2", Usage: "Disable L1 message queue v2",
@ -1477,6 +1481,9 @@ func setL1(ctx *cli.Context, cfg *node.Config) {
if ctx.GlobalIsSet(L1SyncIntervalFlag.Name) { if ctx.GlobalIsSet(L1SyncIntervalFlag.Name) {
cfg.L1SyncInterval = ctx.GlobalDuration(L1SyncIntervalFlag.Name) cfg.L1SyncInterval = ctx.GlobalDuration(L1SyncIntervalFlag.Name)
} }
if ctx.GlobalIsSet(L1FetchBlockRangeFlag.Name) {
cfg.L1FetchBlockRange = ctx.GlobalUint64(L1FetchBlockRangeFlag.Name)
}
if ctx.GlobalIsSet(L1DisableMessageQueueV2Flag.Name) { if ctx.GlobalIsSet(L1DisableMessageQueueV2Flag.Name) {
cfg.L1DisableMessageQueueV2 = ctx.GlobalBool(L1DisableMessageQueueV2Flag.Name) cfg.L1DisableMessageQueueV2 = ctx.GlobalBool(L1DisableMessageQueueV2Flag.Name)
} }

View file

@ -200,6 +200,8 @@ type Config struct {
L1DeploymentBlock uint64 `toml:",omitempty"` L1DeploymentBlock uint64 `toml:",omitempty"`
// Poll interval for L1 message syncing // Poll interval for L1 message syncing
L1SyncInterval time.Duration `toml:",omitempty"` L1SyncInterval time.Duration `toml:",omitempty"`
// Block range for L1 message fetching in a single eth_getLogs query
L1FetchBlockRange uint64 `toml:",omitempty"`
// Explicitly disable L1 message queue V2 and only query from L1 message queue V1 (before EuclidV2) // Explicitly disable L1 message queue V2 and only query from L1 message queue V1 (before EuclidV2)
L1DisableMessageQueueV2 bool `toml:",omitempty"` L1DisableMessageQueueV2 bool `toml:",omitempty"`
// Is daSyncingEnabled // Is daSyncingEnabled

View file

@ -24,7 +24,7 @@ import (
const ( const (
VersionMajor = 5 // Major version component of the current release VersionMajor = 5 // Major version component of the current release
VersionMinor = 9 // Minor version component of the current release VersionMinor = 9 // Minor version component of the current release
VersionPatch = 5 // Patch version component of the current release VersionPatch = 6 // Patch version component of the current release
VersionMeta = "mainnet" // Version metadata to append to the version string VersionMeta = "mainnet" // Version metadata to append to the version string
) )

View file

@ -51,6 +51,7 @@ type SyncService struct {
db ethdb.Database db ethdb.Database
msgCountFeed event.Feed msgCountFeed event.Feed
pollInterval time.Duration pollInterval time.Duration
fetchBlockRange uint64
latestProcessedBlock uint64 latestProcessedBlock uint64
scope event.SubscriptionScope scope event.SubscriptionScope
stateMu sync.Mutex stateMu sync.Mutex
@ -105,12 +106,18 @@ func NewSyncService(ctx context.Context, genesisConfig *params.ChainConfig, node
pollInterval = DefaultPollInterval pollInterval = DefaultPollInterval
} }
fetchBlockRange := nodeConfig.L1FetchBlockRange
if fetchBlockRange == 0 {
fetchBlockRange = DefaultFetchBlockRange
}
service := SyncService{ service := SyncService{
ctx: ctx, ctx: ctx,
cancel: cancel, cancel: cancel,
client: client, client: client,
db: db, db: db,
pollInterval: pollInterval, pollInterval: pollInterval,
fetchBlockRange: fetchBlockRange,
latestProcessedBlock: latestProcessedBlock, latestProcessedBlock: latestProcessedBlock,
} }
@ -236,7 +243,7 @@ func (s *SyncService) fetchMessages() {
numMsgsCollected := 0 numMsgsCollected := 0
// query in batches // query in batches
for from := s.latestProcessedBlock + 1; from <= latestConfirmed; from += DefaultFetchBlockRange { for from := s.latestProcessedBlock + 1; from <= latestConfirmed; from += s.fetchBlockRange {
select { select {
case <-s.ctx.Done(): case <-s.ctx.Done():
// flush pending writes to database // flush pending writes to database
@ -250,7 +257,7 @@ func (s *SyncService) fetchMessages() {
default: default:
} }
to := from + DefaultFetchBlockRange - 1 to := from + s.fetchBlockRange - 1
if to > latestConfirmed { if to > latestConfirmed {
to = latestConfirmed to = latestConfirmed
} }