From 897aafd3a7447d0a8c7ec05aa71fb03b3a430867 Mon Sep 17 00:00:00 2001 From: "allen.wu" Date: Mon, 16 Mar 2026 11:58:53 +0800 Subject: [PATCH] fix: avoid initializing syncer at node startup in sequencer mode Previously, the syncer was eagerly initialized just to reuse its L1 client for L1 sequencer components and BlockTagService. This required a deposit contract config that is unnecessary for non-validator nodes, causing mainnet nodes to fail on startup. Now we dial the L1 client directly from the l1.rpc flag and defer syncer creation to a lazy factory (newSyncerFunc) that only runs when the executor actually needs it. Co-Authored-By: Claude Opus 4.6 --- node/cmd/node/main.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/node/cmd/node/main.go b/node/cmd/node/main.go index b056588c3..bc39e33cf 100644 --- a/node/cmd/node/main.go +++ b/node/cmd/node/main.go @@ -133,13 +133,14 @@ func L2NodeMain(ctx *cli.Context) error { dvNode.Start() nodeConfig.Logger.Info("derivation node starting") } else { - // ========== Create Syncer and L1 Sequencer Components ========== - syncer, err = node.NewSyncer(ctx, home, nodeConfig) + // ========== Create L1 Client ========== + l1RPC := ctx.GlobalString(flags.L1NodeAddr.Name) + l1Client, err := ethclient.Dial(l1RPC) if err != nil { - return fmt.Errorf("failed to create syncer: %w", err) + return fmt.Errorf("failed to dial L1 node: %w", err) } - tracker, verifier, signer, err = initL1SequencerComponents(ctx, syncer.L1Client(), nodeConfig.Logger) + tracker, verifier, signer, err = initL1SequencerComponents(ctx, l1Client, nodeConfig.Logger) if err != nil { return fmt.Errorf("failed to init L1 sequencer components: %w", err) } @@ -152,8 +153,7 @@ func L2NodeMain(ctx *cli.Context) error { tmVal := privval.LoadOrGenFilePV(tmCfg.PrivValidatorKeyFile(), tmCfg.PrivValidatorStateFile()) pubKey, _ := tmVal.GetPubKey() - // Create executor with syncer - newSyncerFunc := func() (*sync.Syncer, error) { return syncer, nil } // Reuse existing syncer + newSyncerFunc := func() (*sync.Syncer, error) { return node.NewSyncer(ctx, home, nodeConfig) } executor, err = node.NewExecutor(newSyncerFunc, nodeConfig, pubKey) if err != nil { return err @@ -175,7 +175,7 @@ func L2NodeMain(ctx *cli.Context) error { } // ========== Initialize BlockTagService ========== - blockTagSvc, err = initBlockTagService(ctx, syncer.L1Client(), executor, nodeConfig.Logger) + blockTagSvc, err = initBlockTagService(ctx, l1Client, executor, nodeConfig.Logger) if err != nil { return fmt.Errorf("failed to init BlockTagService: %w", err) }