@@ -7,23 +7,27 @@ import (
77 "os"
88 "path/filepath"
99
10- "github.com/evstack/ev-node/core/da"
11- "github.com/evstack/ev-node/da/jsonrpc"
12- "github.com/evstack/ev-node/node"
13- "github.com/evstack/ev-node/sequencers/single"
14-
1510 "github.com/ethereum/go-ethereum/common"
11+ "github.com/ipfs/go-datastore"
12+ "github.com/rs/zerolog"
1613 "github.com/spf13/cobra"
1714
18- "github.com/evstack/ev-node/execution/evm "
19-
15+ "github.com/evstack/ev-node/block "
16+ "github.com/evstack/ev-node/core/da"
2017 "github.com/evstack/ev-node/core/execution"
18+ coresequencer "github.com/evstack/ev-node/core/sequencer"
19+ "github.com/evstack/ev-node/da/jsonrpc"
20+ "github.com/evstack/ev-node/execution/evm"
21+ "github.com/evstack/ev-node/node"
2122 rollcmd "github.com/evstack/ev-node/pkg/cmd"
2223 "github.com/evstack/ev-node/pkg/config"
24+ "github.com/evstack/ev-node/pkg/genesis"
2325 genesispkg "github.com/evstack/ev-node/pkg/genesis"
2426 "github.com/evstack/ev-node/pkg/p2p"
2527 "github.com/evstack/ev-node/pkg/p2p/key"
2628 "github.com/evstack/ev-node/pkg/store"
29+ "github.com/evstack/ev-node/sequencers/based"
30+ "github.com/evstack/ev-node/sequencers/single"
2731)
2832
2933var RunCmd = & cobra.Command {
@@ -73,21 +77,8 @@ var RunCmd = &cobra.Command{
7377 logger .Warn ().Msg ("da_start_height is not set in genesis.json, ask your chain developer" )
7478 }
7579
76- singleMetrics , err := single .DefaultMetricsProvider (nodeConfig .Instrumentation .IsPrometheusEnabled ())(genesis .ChainID )
77- if err != nil {
78- return err
79- }
80-
81- sequencer , err := single .NewSequencer (
82- context .Background (),
83- logger ,
84- datastore ,
85- & daJrpc .DA ,
86- []byte (genesis .ChainID ),
87- nodeConfig .Node .BlockTime .Duration ,
88- singleMetrics ,
89- nodeConfig .Node .Aggregator ,
90- )
80+ // Create sequencer based on configuration
81+ sequencer , err := createSequencer (context .Background (), logger , datastore , & daJrpc .DA , nodeConfig , genesis )
9182 if err != nil {
9283 return err
9384 }
@@ -111,6 +102,61 @@ func init() {
111102 addFlags (RunCmd )
112103}
113104
105+ // createSequencer creates a sequencer based on the configuration.
106+ // If BasedSequencer is enabled, it creates a based sequencer that fetches transactions from DA.
107+ // Otherwise, it creates a single (traditional) sequencer.
108+ func createSequencer (
109+ ctx context.Context ,
110+ logger zerolog.Logger ,
111+ datastore datastore.Batching ,
112+ da da.DA ,
113+ nodeConfig config.Config ,
114+ genesis genesis.Genesis ,
115+ ) (coresequencer.Sequencer , error ) {
116+ if nodeConfig .Node .BasedSequencer {
117+ // Based sequencer mode - fetch transactions only from DA
118+ if ! nodeConfig .Node .Aggregator {
119+ return nil , fmt .Errorf ("based sequencer mode requires aggregator mode to be enabled" )
120+ }
121+
122+ daRetriever , err := block .NewDARetriever (da , nodeConfig , genesis , logger )
123+ if err != nil {
124+ return nil , fmt .Errorf ("failed to create DA retriever: %w" , err )
125+ }
126+
127+ adapter := based .NewDARetrieverAdapter (daRetriever .RetrieveForcedIncludedTxsFromDA )
128+ basedSeq := based .NewBasedSequencer (adapter , da , nodeConfig , genesis , logger )
129+
130+ logger .Info ().
131+ Str ("forced_inclusion_namespace" , nodeConfig .DA .GetForcedInclusionNamespace ()).
132+ Uint64 ("da_epoch" , nodeConfig .DA .ForcedInclusionDAEpoch ).
133+ Msg ("based sequencer initialized" )
134+
135+ return basedSeq , nil
136+ }
137+
138+ singleMetrics , err := single .NopMetrics ()
139+ if err != nil {
140+ return nil , fmt .Errorf ("failed to create single sequencer metrics: %w" , err )
141+ }
142+
143+ sequencer , err := single .NewSequencer (
144+ ctx ,
145+ logger ,
146+ datastore ,
147+ da ,
148+ []byte (genesis .ChainID ),
149+ nodeConfig .Node .BlockTime .Duration ,
150+ singleMetrics ,
151+ nodeConfig .Node .Aggregator ,
152+ )
153+ if err != nil {
154+ return nil , fmt .Errorf ("failed to create single sequencer: %w" , err )
155+ }
156+
157+ return sequencer , nil
158+ }
159+
114160func createExecutionClient (cmd * cobra.Command ) (execution.Executor , error ) {
115161 // Read execution client parameters from flags
116162 ethURL , err := cmd .Flags ().GetString (evm .FlagEvmEthURL )
0 commit comments