From eb153cab6a54886d4c32576f90336a9b18ad437c Mon Sep 17 00:00:00 2001 From: Krish Date: Tue, 9 Apr 2024 10:11:25 +0800 Subject: [PATCH 1/5] feat: switch back to el-sync when meet a gap --- op-node/flags/flags.go | 8 ++++++++ op-node/rollup/derive/engine_queue.go | 8 ++++++++ op-node/rollup/sync/config.go | 2 ++ op-node/service.go | 1 + 4 files changed, 19 insertions(+) diff --git a/op-node/flags/flags.go b/op-node/flags/flags.go index bbc5fefe01..c9632c3c2f 100644 --- a/op-node/flags/flags.go +++ b/op-node/flags/flags.go @@ -311,6 +311,13 @@ var ( Value: false, Hidden: true, } + EngineSyncGap = &cli.IntFlag{ + Name: "l2.engine-sync.gap", + Usage: "gap to trigger engine-sync", + Value: 1000, + EnvVars: prefixEnvVars("L2_ENGINE_SYNC_GAP"), + } + SkipSyncStartCheck = &cli.BoolFlag{ Name: "l2.skip-sync-start-check", Usage: "Skip sanity check of consistency of L1 origins of the unsafe L2 blocks when determining the sync-starting point. " + @@ -410,6 +417,7 @@ var optionalFlags = []cli.Flag{ var DeprecatedFlags = []cli.Flag{ L2EngineSyncEnabled, + EngineSyncGap, SkipSyncStartCheck, BetaExtraNetworks, BackupL2UnsafeSyncRPC, diff --git a/op-node/rollup/derive/engine_queue.go b/op-node/rollup/derive/engine_queue.go index 40be46440b..00a67f0d13 100644 --- a/op-node/rollup/derive/engine_queue.go +++ b/op-node/rollup/derive/engine_queue.go @@ -516,6 +516,14 @@ func (eq *EngineQueue) tryNextUnsafePayload(ctx context.Context) error { return io.EOF // time to go to next stage if we cannot process the first unsafe payload } + //开启engine-sync且块高不连续 + if eq.syncCfg.EngineSync && first.ParentHash != eq.unsafeHead.Hash { + if uint64(first.BlockNumber)-eq.unsafeHead.Number < uint64(eq.syncCfg.EngineSyncGap) { + log.Warn("ZXL: back to L1 sync") + return io.EOF + } + } + ref, err := PayloadToBlockRef(eq.cfg, first) if err != nil { eq.log.Error("failed to decode L2 block ref from payload", "err", err) diff --git a/op-node/rollup/sync/config.go b/op-node/rollup/sync/config.go index 3b0b6b2188..6d9dc8604d 100644 --- a/op-node/rollup/sync/config.go +++ b/op-node/rollup/sync/config.go @@ -70,4 +70,6 @@ type Config struct { // Note: We probably need to detect the condition that snap sync has not complete when we do a restart prior to running sync-start if we are doing // snap sync with a genesis finalization data. SkipSyncStartCheck bool `json:"skip_sync_start_check"` + // gap for engine-sync + EngineSyncGap int `json:"engine_sync_gap"` } diff --git a/op-node/service.go b/op-node/service.go index dc38981e6f..6b4ca8661f 100644 --- a/op-node/service.go +++ b/op-node/service.go @@ -292,6 +292,7 @@ func NewSyncConfig(ctx *cli.Context, log log.Logger) (*sync.Config, error) { cfg := &sync.Config{ SyncMode: mode, SkipSyncStartCheck: ctx.Bool(flags.SkipSyncStartCheck.Name), + EngineSyncGap: ctx.Int(flags.EngineSyncGap.Name), } if ctx.Bool(flags.L2EngineSyncEnabled.Name) { cfg.SyncMode = sync.ELSync From e05e67312c95e027182cc8c25de331a4ea189c25 Mon Sep 17 00:00:00 2001 From: Krish Date: Tue, 7 May 2024 15:13:58 +0800 Subject: [PATCH 2/5] feat: add trigger gap for el-sync --- op-node/flags/flags.go | 20 ++++++++++---------- op-node/rollup/derive/engine_queue.go | 6 +++--- op-node/rollup/sync/config.go | 4 ++-- op-node/service.go | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/op-node/flags/flags.go b/op-node/flags/flags.go index c9632c3c2f..0782b6ddcd 100644 --- a/op-node/flags/flags.go +++ b/op-node/flags/flags.go @@ -214,9 +214,9 @@ var ( Category: SequencerCategory, } SequencerPriorityFlag = &cli.BoolFlag{ - Name: "sequencer.priority", - Usage: "Enable sequencer step takes precedence over other steps.", - EnvVars: prefixEnvVars("SEQUENCER_PRIORITY"), + Name: "sequencer.priority", + Usage: "Enable sequencer step takes precedence over other steps.", + EnvVars: prefixEnvVars("SEQUENCER_PRIORITY"), Category: SequencerCategory, } SequencerL1Confs = &cli.Uint64Flag{ @@ -303,6 +303,12 @@ var ( EnvVars: prefixEnvVars("SAFEDB_PATH"), Category: OperationsCategory, } + ELSyncGap = &cli.IntFlag{ + Name: "el-trigger.gap", + Usage: "gap to trigger el-sync", + Value: 1200, + EnvVars: prefixEnvVars("EL_TRIGGER_GAP"), + } /* Deprecated Flags */ L2EngineSyncEnabled = &cli.BoolFlag{ Name: "l2.engine-sync", @@ -311,12 +317,6 @@ var ( Value: false, Hidden: true, } - EngineSyncGap = &cli.IntFlag{ - Name: "l2.engine-sync.gap", - Usage: "gap to trigger engine-sync", - Value: 1000, - EnvVars: prefixEnvVars("L2_ENGINE_SYNC_GAP"), - } SkipSyncStartCheck = &cli.BoolFlag{ Name: "l2.skip-sync-start-check", @@ -381,6 +381,7 @@ var optionalFlags = []cli.Flag{ BeaconCheckIgnore, BeaconFetchAllSidecars, SyncModeFlag, + ELSyncGap, RPCListenAddr, RPCListenPort, L1TrustRPC, @@ -417,7 +418,6 @@ var optionalFlags = []cli.Flag{ var DeprecatedFlags = []cli.Flag{ L2EngineSyncEnabled, - EngineSyncGap, SkipSyncStartCheck, BetaExtraNetworks, BackupL2UnsafeSyncRPC, diff --git a/op-node/rollup/derive/engine_queue.go b/op-node/rollup/derive/engine_queue.go index 00a67f0d13..ebeb6010db 100644 --- a/op-node/rollup/derive/engine_queue.go +++ b/op-node/rollup/derive/engine_queue.go @@ -517,9 +517,9 @@ func (eq *EngineQueue) tryNextUnsafePayload(ctx context.Context) error { } //开启engine-sync且块高不连续 - if eq.syncCfg.EngineSync && first.ParentHash != eq.unsafeHead.Hash { - if uint64(first.BlockNumber)-eq.unsafeHead.Number < uint64(eq.syncCfg.EngineSyncGap) { - log.Warn("ZXL: back to L1 sync") + if eq.syncCfg.SyncMode == sync.ELSync && first.ParentHash != eq.ec.UnsafeL2Head().Hash { + if uint64(first.BlockNumber)-eq.ec.UnsafeL2Head().Number < uint64(eq.syncCfg.ELSyncGap) { + log.Warn("switch back to L1 sync") return io.EOF } } diff --git a/op-node/rollup/sync/config.go b/op-node/rollup/sync/config.go index 6d9dc8604d..3a1be12d75 100644 --- a/op-node/rollup/sync/config.go +++ b/op-node/rollup/sync/config.go @@ -70,6 +70,6 @@ type Config struct { // Note: We probably need to detect the condition that snap sync has not complete when we do a restart prior to running sync-start if we are doing // snap sync with a genesis finalization data. SkipSyncStartCheck bool `json:"skip_sync_start_check"` - // gap for engine-sync - EngineSyncGap int `json:"engine_sync_gap"` + // gap for trigger el-sync + ELSyncGap int `json:"el_trigger_gap"` } diff --git a/op-node/service.go b/op-node/service.go index 6b4ca8661f..03a6327d20 100644 --- a/op-node/service.go +++ b/op-node/service.go @@ -292,7 +292,7 @@ func NewSyncConfig(ctx *cli.Context, log log.Logger) (*sync.Config, error) { cfg := &sync.Config{ SyncMode: mode, SkipSyncStartCheck: ctx.Bool(flags.SkipSyncStartCheck.Name), - EngineSyncGap: ctx.Int(flags.EngineSyncGap.Name), + ELSyncGap: ctx.Int(flags.ELSyncGap.Name), } if ctx.Bool(flags.L2EngineSyncEnabled.Name) { cfg.SyncMode = sync.ELSync From e606ce7c4b60899ad878224ae41581a9a4dab83d Mon Sep 17 00:00:00 2001 From: Krish Date: Tue, 7 May 2024 17:34:55 +0800 Subject: [PATCH 3/5] feat: trigger el sync when meet a gap --- op-e2e/actions/l2_verifier.go | 2 +- op-node/rollup/derive/engine_controller.go | 37 ++++++++++++---------- op-node/rollup/derive/engine_queue.go | 15 +++++---- op-node/rollup/driver/driver.go | 2 +- op-program/client/driver/driver.go | 2 +- 5 files changed, 31 insertions(+), 27 deletions(-) diff --git a/op-e2e/actions/l2_verifier.go b/op-e2e/actions/l2_verifier.go index 305f161e8d..edde5f5a12 100644 --- a/op-e2e/actions/l2_verifier.go +++ b/op-e2e/actions/l2_verifier.go @@ -65,7 +65,7 @@ type safeDB interface { func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc derive.L1BlobsFetcher, plasmaSrc derive.PlasmaInputFetcher, eng L2API, cfg *rollup.Config, syncCfg *sync.Config, safeHeadListener safeDB) *L2Verifier { metrics := &testutils.TestDerivationMetrics{} - engine := derive.NewEngineController(eng, log, metrics, cfg, syncCfg.SyncMode) + engine := derive.NewEngineController(eng, log, metrics, cfg, syncCfg.SyncMode, 200) pipeline := derive.NewDerivationPipeline(log, cfg, l1, blobsSrc, plasmaSrc, eng, engine, metrics, syncCfg, safeHeadListener) pipeline.Reset() diff --git a/op-node/rollup/derive/engine_controller.go b/op-node/rollup/derive/engine_controller.go index a0417b3c05..de5b89684a 100644 --- a/op-node/rollup/derive/engine_controller.go +++ b/op-node/rollup/derive/engine_controller.go @@ -45,14 +45,15 @@ type ExecEngine interface { } type EngineController struct { - engine ExecEngine // Underlying execution engine RPC - log log.Logger - metrics Metrics - syncMode sync.Mode - syncStatus syncStatusEnum - rollupCfg *rollup.Config - elStart time.Time - clock clock.Clock + engine ExecEngine // Underlying execution engine RPC + log log.Logger + metrics Metrics + syncMode sync.Mode + elTriggerGap int + syncStatus syncStatusEnum + rollupCfg *rollup.Config + elStart time.Time + clock clock.Clock // Block Head State unsafeHead eth.L2BlockRef @@ -75,20 +76,21 @@ type EngineController struct { safeAttrs *AttributesWithParent } -func NewEngineController(engine ExecEngine, log log.Logger, metrics Metrics, rollupCfg *rollup.Config, syncMode sync.Mode) *EngineController { +func NewEngineController(engine ExecEngine, log log.Logger, metrics Metrics, rollupCfg *rollup.Config, syncMode sync.Mode, elTriggerGap int) *EngineController { syncStatus := syncStatusCL if syncMode == sync.ELSync { syncStatus = syncStatusWillStartEL } return &EngineController{ - engine: engine, - log: log, - metrics: metrics, - rollupCfg: rollupCfg, - syncMode: syncMode, - syncStatus: syncStatus, - clock: clock.SystemClock, + engine: engine, + log: log, + metrics: metrics, + rollupCfg: rollupCfg, + syncMode: syncMode, + elTriggerGap: elTriggerGap, + syncStatus: syncStatus, + clock: clock.SystemClock, } } @@ -328,7 +330,8 @@ func (e *EngineController) InsertUnsafePayload(ctx context.Context, envelope *et if e.syncStatus == syncStatusWillStartEL { b, err := e.engine.L2BlockRefByLabel(ctx, eth.Finalized) isTransitionBlock := e.rollupCfg.Genesis.L2.Number != 0 && b.Hash == e.rollupCfg.Genesis.L2.Hash - if errors.Is(err, ethereum.NotFound) || isTransitionBlock { + isGapSyncNeeded := ref.Number-e.UnsafeL2Head().Number > 200 + if errors.Is(err, ethereum.NotFound) || isTransitionBlock || isGapSyncNeeded { e.syncStatus = syncStatusStartedEL e.log.Info("Starting EL sync") e.elStart = e.clock.Now() diff --git a/op-node/rollup/derive/engine_queue.go b/op-node/rollup/derive/engine_queue.go index ebeb6010db..43b438406e 100644 --- a/op-node/rollup/derive/engine_queue.go +++ b/op-node/rollup/derive/engine_queue.go @@ -515,14 +515,15 @@ func (eq *EngineQueue) tryNextUnsafePayload(ctx context.Context) error { } return io.EOF // time to go to next stage if we cannot process the first unsafe payload } - - //开启engine-sync且块高不连续 - if eq.syncCfg.SyncMode == sync.ELSync && first.ParentHash != eq.ec.UnsafeL2Head().Hash { - if uint64(first.BlockNumber)-eq.ec.UnsafeL2Head().Number < uint64(eq.syncCfg.ELSyncGap) { - log.Warn("switch back to L1 sync") - return io.EOF + /* + //开启engine-sync且块高不连续 + if eq.syncCfg.SyncMode == sync.ELSync && first.ParentHash != eq.ec.UnsafeL2Head().Hash { + if uint64(first.BlockNumber)-eq.ec.UnsafeL2Head().Number < uint64(eq.syncCfg.ELSyncGap) { + log.Warn("switch back to L1 sync") + return io.EOF + } } - } + */ ref, err := PayloadToBlockRef(eq.cfg, first) if err != nil { diff --git a/op-node/rollup/driver/driver.go b/op-node/rollup/driver/driver.go index c81a44bba6..c29a71b785 100644 --- a/op-node/rollup/driver/driver.go +++ b/op-node/rollup/driver/driver.go @@ -136,7 +136,7 @@ func NewDriver( sequencerConfDepth := NewConfDepth(driverCfg.SequencerConfDepth, l1State.L1Head, l1) findL1Origin := NewL1OriginSelector(log, cfg, sequencerConfDepth) verifConfDepth := NewConfDepth(driverCfg.VerifierConfDepth, l1State.L1Head, l1) - engine := derive.NewEngineController(l2, log, metrics, cfg, syncCfg.SyncMode) + engine := derive.NewEngineController(l2, log, metrics, cfg, syncCfg.SyncMode, syncCfg.ELSyncGap) derivationPipeline := derive.NewDerivationPipeline(log, cfg, verifConfDepth, l1Blobs, plasma, l2, engine, metrics, syncCfg, safeHeadListener) attrBuilder := derive.NewFetchingAttributesBuilder(cfg, l1, l2) meteredEngine := NewMeteredEngine(cfg, engine, metrics, log) // Only use the metered engine in the sequencer b/c it records sequencing metrics. diff --git a/op-program/client/driver/driver.go b/op-program/client/driver/driver.go index 95cba25037..b09f2d7a25 100644 --- a/op-program/client/driver/driver.go +++ b/op-program/client/driver/driver.go @@ -40,7 +40,7 @@ type Driver struct { } func NewDriver(logger log.Logger, cfg *rollup.Config, l1Source derive.L1Fetcher, l1BlobsSource derive.L1BlobsFetcher, l2Source L2Source, targetBlockNum uint64) *Driver { - engine := derive.NewEngineController(l2Source, logger, metrics.NoopMetrics, cfg, sync.CLSync) + engine := derive.NewEngineController(l2Source, logger, metrics.NoopMetrics, cfg, sync.CLSync, 200) pipeline := derive.NewDerivationPipeline(logger, cfg, l1Source, l1BlobsSource, plasma.Disabled, l2Source, engine, metrics.NoopMetrics, &sync.Config{}, safedb.Disabled) pipeline.Reset() return &Driver{ From 27624a0f7d3afffb48d3b09dd22b6a467caf5207 Mon Sep 17 00:00:00 2001 From: Krish Date: Fri, 24 May 2024 17:02:15 +0800 Subject: [PATCH 4/5] feat: fastnode support --- op-e2e/actions/l2_verifier.go | 2 +- op-node/flags/flags.go | 16 ++++++++++++---- op-node/rollup/derive/engine_controller.go | 12 +++++++----- op-node/rollup/derive/engine_queue.go | 9 --------- op-node/rollup/driver/driver.go | 2 +- op-node/rollup/sync/config.go | 2 +- op-node/service.go | 11 ++++++++++- op-program/client/driver/driver.go | 7 ++++++- 8 files changed, 38 insertions(+), 23 deletions(-) diff --git a/op-e2e/actions/l2_verifier.go b/op-e2e/actions/l2_verifier.go index edde5f5a12..52887dfc7d 100644 --- a/op-e2e/actions/l2_verifier.go +++ b/op-e2e/actions/l2_verifier.go @@ -65,7 +65,7 @@ type safeDB interface { func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, blobsSrc derive.L1BlobsFetcher, plasmaSrc derive.PlasmaInputFetcher, eng L2API, cfg *rollup.Config, syncCfg *sync.Config, safeHeadListener safeDB) *L2Verifier { metrics := &testutils.TestDerivationMetrics{} - engine := derive.NewEngineController(eng, log, metrics, cfg, syncCfg.SyncMode, 200) + engine := derive.NewEngineController(eng, log, metrics, cfg, syncCfg) pipeline := derive.NewDerivationPipeline(log, cfg, l1, blobsSrc, plasmaSrc, eng, engine, metrics, syncCfg, safeHeadListener) pipeline.Reset() diff --git a/op-node/flags/flags.go b/op-node/flags/flags.go index 0782b6ddcd..0166b0a2d9 100644 --- a/op-node/flags/flags.go +++ b/op-node/flags/flags.go @@ -303,10 +303,18 @@ var ( EnvVars: prefixEnvVars("SAFEDB_PATH"), Category: OperationsCategory, } - ELSyncGap = &cli.IntFlag{ + + FastnodeMode = &cli.BoolFlag{ + Name: "fastnode", + Usage: "Fastnode has a strong dependency on a specific synchronization mode during synchronization, so please set this flag when running fastnode.", + EnvVars: prefixEnvVars("FASTNODE"), + Value: false, + } + + ELTriggerGap = &cli.IntFlag{ Name: "el-trigger.gap", Usage: "gap to trigger el-sync", - Value: 1200, + Value: 86400, EnvVars: prefixEnvVars("EL_TRIGGER_GAP"), } /* Deprecated Flags */ @@ -317,7 +325,6 @@ var ( Value: false, Hidden: true, } - SkipSyncStartCheck = &cli.BoolFlag{ Name: "l2.skip-sync-start-check", Usage: "Skip sanity check of consistency of L1 origins of the unsafe L2 blocks when determining the sync-starting point. " + @@ -381,7 +388,8 @@ var optionalFlags = []cli.Flag{ BeaconCheckIgnore, BeaconFetchAllSidecars, SyncModeFlag, - ELSyncGap, + FastnodeMode, + ELTriggerGap, RPCListenAddr, RPCListenPort, L1TrustRPC, diff --git a/op-node/rollup/derive/engine_controller.go b/op-node/rollup/derive/engine_controller.go index de5b89684a..c20a74b317 100644 --- a/op-node/rollup/derive/engine_controller.go +++ b/op-node/rollup/derive/engine_controller.go @@ -32,6 +32,8 @@ const ( syncStatusFinishedEL // EL sync is done & we should be performing consolidation ) +const DefaultElTriggerGap = 3600 + var errNoFCUNeeded = errors.New("no FCU call was needed") var _ EngineControl = (*EngineController)(nil) @@ -76,9 +78,9 @@ type EngineController struct { safeAttrs *AttributesWithParent } -func NewEngineController(engine ExecEngine, log log.Logger, metrics Metrics, rollupCfg *rollup.Config, syncMode sync.Mode, elTriggerGap int) *EngineController { +func NewEngineController(engine ExecEngine, log log.Logger, metrics Metrics, rollupCfg *rollup.Config, syncConfig *sync.Config) *EngineController { syncStatus := syncStatusCL - if syncMode == sync.ELSync { + if syncConfig.SyncMode == sync.ELSync { syncStatus = syncStatusWillStartEL } @@ -87,8 +89,8 @@ func NewEngineController(engine ExecEngine, log log.Logger, metrics Metrics, rol log: log, metrics: metrics, rollupCfg: rollupCfg, - syncMode: syncMode, - elTriggerGap: elTriggerGap, + syncMode: syncConfig.SyncMode, + elTriggerGap: syncConfig.ELTriggerGap, syncStatus: syncStatus, clock: clock.SystemClock, } @@ -330,7 +332,7 @@ func (e *EngineController) InsertUnsafePayload(ctx context.Context, envelope *et if e.syncStatus == syncStatusWillStartEL { b, err := e.engine.L2BlockRefByLabel(ctx, eth.Finalized) isTransitionBlock := e.rollupCfg.Genesis.L2.Number != 0 && b.Hash == e.rollupCfg.Genesis.L2.Hash - isGapSyncNeeded := ref.Number-e.UnsafeL2Head().Number > 200 + isGapSyncNeeded := ref.Number-e.UnsafeL2Head().Number > uint64(e.elTriggerGap) if errors.Is(err, ethereum.NotFound) || isTransitionBlock || isGapSyncNeeded { e.syncStatus = syncStatusStartedEL e.log.Info("Starting EL sync") diff --git a/op-node/rollup/derive/engine_queue.go b/op-node/rollup/derive/engine_queue.go index 43b438406e..40be46440b 100644 --- a/op-node/rollup/derive/engine_queue.go +++ b/op-node/rollup/derive/engine_queue.go @@ -515,15 +515,6 @@ func (eq *EngineQueue) tryNextUnsafePayload(ctx context.Context) error { } return io.EOF // time to go to next stage if we cannot process the first unsafe payload } - /* - //开启engine-sync且块高不连续 - if eq.syncCfg.SyncMode == sync.ELSync && first.ParentHash != eq.ec.UnsafeL2Head().Hash { - if uint64(first.BlockNumber)-eq.ec.UnsafeL2Head().Number < uint64(eq.syncCfg.ELSyncGap) { - log.Warn("switch back to L1 sync") - return io.EOF - } - } - */ ref, err := PayloadToBlockRef(eq.cfg, first) if err != nil { diff --git a/op-node/rollup/driver/driver.go b/op-node/rollup/driver/driver.go index c29a71b785..ce800bd190 100644 --- a/op-node/rollup/driver/driver.go +++ b/op-node/rollup/driver/driver.go @@ -136,7 +136,7 @@ func NewDriver( sequencerConfDepth := NewConfDepth(driverCfg.SequencerConfDepth, l1State.L1Head, l1) findL1Origin := NewL1OriginSelector(log, cfg, sequencerConfDepth) verifConfDepth := NewConfDepth(driverCfg.VerifierConfDepth, l1State.L1Head, l1) - engine := derive.NewEngineController(l2, log, metrics, cfg, syncCfg.SyncMode, syncCfg.ELSyncGap) + engine := derive.NewEngineController(l2, log, metrics, cfg, syncCfg) derivationPipeline := derive.NewDerivationPipeline(log, cfg, verifConfDepth, l1Blobs, plasma, l2, engine, metrics, syncCfg, safeHeadListener) attrBuilder := derive.NewFetchingAttributesBuilder(cfg, l1, l2) meteredEngine := NewMeteredEngine(cfg, engine, metrics, log) // Only use the metered engine in the sequencer b/c it records sequencing metrics. diff --git a/op-node/rollup/sync/config.go b/op-node/rollup/sync/config.go index 3a1be12d75..dcab50d824 100644 --- a/op-node/rollup/sync/config.go +++ b/op-node/rollup/sync/config.go @@ -71,5 +71,5 @@ type Config struct { // snap sync with a genesis finalization data. SkipSyncStartCheck bool `json:"skip_sync_start_check"` // gap for trigger el-sync - ELSyncGap int `json:"el_trigger_gap"` + ELTriggerGap int `json:"el_trigger_gap"` } diff --git a/op-node/service.go b/op-node/service.go index 03a6327d20..6ff13f2ef6 100644 --- a/op-node/service.go +++ b/op-node/service.go @@ -289,10 +289,19 @@ func NewSyncConfig(ctx *cli.Context, log log.Logger) (*sync.Config, error) { if err != nil { return nil, err } + + //fastnode config + elTriggerGap := ctx.Int(flags.ELTriggerGap.Name) + if ctx.Bool(flags.FastnodeMode.Name) { + mode = sync.ELSync + // fastnode needs a smaller gap + elTriggerGap = 120 + } + cfg := &sync.Config{ SyncMode: mode, SkipSyncStartCheck: ctx.Bool(flags.SkipSyncStartCheck.Name), - ELSyncGap: ctx.Int(flags.ELSyncGap.Name), + ELTriggerGap: elTriggerGap, } if ctx.Bool(flags.L2EngineSyncEnabled.Name) { cfg.SyncMode = sync.ELSync diff --git a/op-program/client/driver/driver.go b/op-program/client/driver/driver.go index b09f2d7a25..51abe56bc0 100644 --- a/op-program/client/driver/driver.go +++ b/op-program/client/driver/driver.go @@ -40,7 +40,12 @@ type Driver struct { } func NewDriver(logger log.Logger, cfg *rollup.Config, l1Source derive.L1Fetcher, l1BlobsSource derive.L1BlobsFetcher, l2Source L2Source, targetBlockNum uint64) *Driver { - engine := derive.NewEngineController(l2Source, logger, metrics.NoopMetrics, cfg, sync.CLSync, 200) + engine := derive.NewEngineController(l2Source, logger, metrics.NoopMetrics, cfg, + &sync.Config{ + SyncMode: sync.CLSync, + SkipSyncStartCheck: false, + ELTriggerGap: 0, + }) pipeline := derive.NewDerivationPipeline(logger, cfg, l1Source, l1BlobsSource, plasma.Disabled, l2Source, engine, metrics.NoopMetrics, &sync.Config{}, safedb.Disabled) pipeline.Reset() return &Driver{ From 93a8ab309599ff2a9d7169f08b2f3a9c7d2ef4a9 Mon Sep 17 00:00:00 2001 From: Krish Date: Thu, 6 Jun 2024 10:21:37 +0800 Subject: [PATCH 5/5] chore: remove unused code --- op-node/rollup/derive/engine_controller.go | 2 -- op-node/rollup/derive/engine_queue_test.go | 42 ++++++++++++++++++---- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/op-node/rollup/derive/engine_controller.go b/op-node/rollup/derive/engine_controller.go index c20a74b317..f73ce21891 100644 --- a/op-node/rollup/derive/engine_controller.go +++ b/op-node/rollup/derive/engine_controller.go @@ -32,8 +32,6 @@ const ( syncStatusFinishedEL // EL sync is done & we should be performing consolidation ) -const DefaultElTriggerGap = 3600 - var errNoFCUNeeded = errors.New("no FCU call was needed") var _ EngineControl = (*EngineController)(nil) diff --git a/op-node/rollup/derive/engine_queue_test.go b/op-node/rollup/derive/engine_queue_test.go index 493554388c..ad6e32c85b 100644 --- a/op-node/rollup/derive/engine_queue_test.go +++ b/op-node/rollup/derive/engine_queue_test.go @@ -253,7 +253,11 @@ func TestEngineQueue_Finalize(t *testing.T) { prev := &fakeAttributesQueue{} - ec := NewEngineController(eng, logger, metrics, &rollup.Config{}, sync.CLSync) + ec := NewEngineController(eng, logger, metrics, &rollup.Config{}, &sync.Config{ + SyncMode: sync.CLSync, + SkipSyncStartCheck: false, + ELTriggerGap: 0, + }) eq := NewEngineQueue(logger, cfg, eng, ec, metrics, prev, l1F, &sync.Config{}, safedb.Disabled) require.ErrorIs(t, eq.Reset(context.Background(), eth.L1BlockRef{}, eth.SystemConfig{}), io.EOF) @@ -493,7 +497,11 @@ func TestEngineQueue_ResetWhenUnsafeOriginNotCanonical(t *testing.T) { prev := &fakeAttributesQueue{origin: refE} - ec := NewEngineController(eng, logger, metrics, &rollup.Config{}, sync.CLSync) + ec := NewEngineController(eng, logger, metrics, &rollup.Config{}, &sync.Config{ + SyncMode: sync.CLSync, + SkipSyncStartCheck: false, + ELTriggerGap: 0, + }) eq := NewEngineQueue(logger, cfg, eng, ec, metrics, prev, l1F, &sync.Config{}, safedb.Disabled) require.ErrorIs(t, eq.Reset(context.Background(), eth.L1BlockRef{}, eth.SystemConfig{}), io.EOF) @@ -832,7 +840,11 @@ func TestVerifyNewL1Origin(t *testing.T) { }, nil) prev := &fakeAttributesQueue{origin: refE} - ec := NewEngineController(eng, logger, metrics, &rollup.Config{}, sync.CLSync) + ec := NewEngineController(eng, logger, metrics, &rollup.Config{}, &sync.Config{ + SyncMode: sync.CLSync, + SkipSyncStartCheck: false, + ELTriggerGap: 0, + }) eq := NewEngineQueue(logger, cfg, eng, ec, metrics, prev, l1F, &sync.Config{}, safedb.Disabled) require.ErrorIs(t, eq.Reset(context.Background(), eth.L1BlockRef{}, eth.SystemConfig{}), io.EOF) @@ -934,7 +946,11 @@ func TestBlockBuildingRace(t *testing.T) { } prev := &fakeAttributesQueue{origin: refA, attrs: attrs, islastInSpan: true} - ec := NewEngineController(eng, logger, metrics, &rollup.Config{}, sync.CLSync) + ec := NewEngineController(eng, logger, metrics, &rollup.Config{}, &sync.Config{ + SyncMode: sync.CLSync, + SkipSyncStartCheck: false, + ELTriggerGap: 0, + }) eq := NewEngineQueue(logger, cfg, eng, ec, metrics, prev, l1F, &sync.Config{}, safedb.Disabled) require.ErrorIs(t, eq.Reset(context.Background(), eth.L1BlockRef{}, eth.SystemConfig{}), io.EOF) @@ -1108,7 +1124,11 @@ func TestResetLoop(t *testing.T) { prev := &fakeAttributesQueue{origin: refA, attrs: attrs, islastInSpan: true} - ec := NewEngineController(eng, logger, metrics.NoopMetrics, &rollup.Config{}, sync.CLSync) + ec := NewEngineController(eng, logger, metrics.NoopMetrics, &rollup.Config{}, &sync.Config{ + SyncMode: sync.CLSync, + SkipSyncStartCheck: false, + ELTriggerGap: 0, + }) eq := NewEngineQueue(logger, cfg, eng, ec, metrics.NoopMetrics, prev, l1F, &sync.Config{}, safedb.Disabled) eq.ec.SetUnsafeHead(refA2) eq.ec.SetSafeHead(refA1) @@ -1216,7 +1236,11 @@ func TestEngineQueue_StepPopOlderUnsafe(t *testing.T) { prev := &fakeAttributesQueue{origin: refA} - ec := NewEngineController(eng, logger, metrics.NoopMetrics, &rollup.Config{}, sync.CLSync) + ec := NewEngineController(eng, logger, metrics.NoopMetrics, &rollup.Config{}, &sync.Config{ + SyncMode: sync.CLSync, + SkipSyncStartCheck: false, + ELTriggerGap: 0, + }) eq := NewEngineQueue(logger, cfg, eng, ec, metrics.NoopMetrics, prev, l1F, &sync.Config{}, safedb.Disabled) eq.ec.SetUnsafeHead(refA2) eq.ec.SetSafeHead(refA0) @@ -1296,7 +1320,11 @@ func TestPlasmaFinalityData(t *testing.T) { SequenceNumber: 1, } - ec := NewEngineController(eng, logger, metrics.NoopMetrics, &rollup.Config{}, sync.CLSync) + ec := NewEngineController(eng, logger, metrics.NoopMetrics, &rollup.Config{}, &sync.Config{ + SyncMode: sync.CLSync, + SkipSyncStartCheck: false, + ELTriggerGap: 0, + }) eq := NewEngineQueue(logger, cfg, eng, ec, metrics.NoopMetrics, prev, l1F, &sync.Config{}, safedb.Disabled) require.Equal(t, expFinalityLookback, cap(eq.finalityData))