Skip to content

Commit c0a38c7

Browse files
committed
based
1 parent 0f8d7d5 commit c0a38c7

16 files changed

Lines changed: 1173 additions & 90 deletions

File tree

apps/evm/single/cmd/run.go

Lines changed: 68 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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

2933
var 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+
114160
func createExecutionClient(cmd *cobra.Command) (execution.Executor, error) {
115161
// Read execution client parameters from flags
116162
ethURL, err := cmd.Flags().GetString(evm.FlagEvmEthURL)

apps/evm/single/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ require (
1515
github.com/evstack/ev-node/execution/evm v1.0.0-beta.3
1616
github.com/evstack/ev-node/sequencers/single v1.0.0-beta.3
1717
github.com/ipfs/go-datastore v0.9.0
18+
github.com/rs/zerolog v1.34.0
1819
github.com/spf13/cobra v1.10.1
1920
)
2021

@@ -146,7 +147,6 @@ require (
146147
github.com/quic-go/quic-go v0.54.1 // indirect
147148
github.com/quic-go/webtransport-go v0.9.0 // indirect
148149
github.com/rivo/uniseg v0.2.0 // indirect
149-
github.com/rs/zerolog v1.34.0 // indirect
150150
github.com/sagikazarmark/locafero v0.11.0 // indirect
151151
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect
152152
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect

apps/grpc/single/cmd/run.go

Lines changed: 64 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,29 @@
11
package cmd
22

33
import (
4+
"context"
45
"fmt"
56
"path/filepath"
67

8+
"github.com/ipfs/go-datastore"
9+
"github.com/rs/zerolog"
710
"github.com/spf13/cobra"
811

12+
"github.com/evstack/ev-node/block"
913
"github.com/evstack/ev-node/core/da"
1014
"github.com/evstack/ev-node/core/execution"
15+
coresequencer "github.com/evstack/ev-node/core/sequencer"
1116
"github.com/evstack/ev-node/da/jsonrpc"
1217
executiongrpc "github.com/evstack/ev-node/execution/grpc"
1318
"github.com/evstack/ev-node/node"
1419
rollcmd "github.com/evstack/ev-node/pkg/cmd"
1520
"github.com/evstack/ev-node/pkg/config"
21+
"github.com/evstack/ev-node/pkg/genesis"
1622
rollgenesis "github.com/evstack/ev-node/pkg/genesis"
1723
"github.com/evstack/ev-node/pkg/p2p"
1824
"github.com/evstack/ev-node/pkg/p2p/key"
1925
"github.com/evstack/ev-node/pkg/store"
26+
"github.com/evstack/ev-node/sequencers/based"
2027
"github.com/evstack/ev-node/sequencers/single"
2128
)
2229

@@ -73,23 +80,8 @@ The execution client must implement the Evolve execution gRPC interface.`,
7380
logger.Warn().Msg("da_start_height is not set in genesis.json, ask your chain developer")
7481
}
7582

76-
// Create metrics provider
77-
singleMetrics, err := single.DefaultMetricsProvider(nodeConfig.Instrumentation.IsPrometheusEnabled())(genesis.ChainID)
78-
if err != nil {
79-
return err
80-
}
81-
82-
// Create sequencer
83-
sequencer, err := single.NewSequencer(
84-
cmd.Context(),
85-
logger,
86-
datastore,
87-
&daJrpc.DA,
88-
[]byte(genesis.ChainID),
89-
nodeConfig.Node.BlockTime.Duration,
90-
singleMetrics,
91-
nodeConfig.Node.Aggregator,
92-
)
83+
// Create sequencer based on configuration
84+
sequencer, err := createSequencer(cmd.Context(), logger, datastore, &daJrpc.DA, nodeConfig, genesis)
9385
if err != nil {
9486
return err
9587
}
@@ -119,6 +111,61 @@ func init() {
119111
addGRPCFlags(RunCmd)
120112
}
121113

114+
// createSequencer creates a sequencer based on the configuration.
115+
// If BasedSequencer is enabled, it creates a based sequencer that fetches transactions from DA.
116+
// Otherwise, it creates a single (traditional) sequencer.
117+
func createSequencer(
118+
ctx context.Context,
119+
logger zerolog.Logger,
120+
datastore datastore.Batching,
121+
da da.DA,
122+
nodeConfig config.Config,
123+
genesis genesis.Genesis,
124+
) (coresequencer.Sequencer, error) {
125+
if nodeConfig.Node.BasedSequencer {
126+
// Based sequencer mode - fetch transactions only from DA
127+
if !nodeConfig.Node.Aggregator {
128+
return nil, fmt.Errorf("based sequencer mode requires aggregator mode to be enabled")
129+
}
130+
131+
daRetriever, err := block.NewDARetriever(da, nodeConfig, genesis, logger)
132+
if err != nil {
133+
return nil, fmt.Errorf("failed to create DA retriever: %w", err)
134+
}
135+
136+
adapter := based.NewDARetrieverAdapter(daRetriever.RetrieveForcedIncludedTxsFromDA)
137+
basedSeq := based.NewBasedSequencer(adapter, da, nodeConfig, genesis, logger)
138+
139+
logger.Info().
140+
Str("forced_inclusion_namespace", nodeConfig.DA.GetForcedInclusionNamespace()).
141+
Uint64("da_epoch", nodeConfig.DA.ForcedInclusionDAEpoch).
142+
Msg("based sequencer initialized")
143+
144+
return basedSeq, nil
145+
}
146+
147+
singleMetrics, err := single.NopMetrics()
148+
if err != nil {
149+
return nil, fmt.Errorf("failed to create single sequencer metrics: %w", err)
150+
}
151+
152+
sequencer, err := single.NewSequencer(
153+
ctx,
154+
logger,
155+
datastore,
156+
da,
157+
[]byte(genesis.ChainID),
158+
nodeConfig.Node.BlockTime.Duration,
159+
singleMetrics,
160+
nodeConfig.Node.Aggregator,
161+
)
162+
if err != nil {
163+
return nil, fmt.Errorf("failed to create single sequencer: %w", err)
164+
}
165+
166+
return sequencer, nil
167+
}
168+
122169
// createGRPCExecutionClient creates a new gRPC execution client from command flags
123170
func createGRPCExecutionClient(cmd *cobra.Command) (execution.Executor, error) {
124171
// Get the gRPC executor URL from flags

apps/grpc/single/go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ require (
88
github.com/evstack/ev-node/da v1.0.0-beta.5
99
github.com/evstack/ev-node/execution/grpc v0.0.0
1010
github.com/evstack/ev-node/sequencers/single v1.0.0-beta.3
11+
github.com/ipfs/go-datastore v0.9.0
12+
github.com/rs/zerolog v1.34.0
1113
github.com/spf13/cobra v1.10.1
1214
)
1315

@@ -48,7 +50,6 @@ require (
4850
github.com/inconshreveable/mousetrap v1.1.0 // indirect
4951
github.com/ipfs/boxo v0.35.0 // indirect
5052
github.com/ipfs/go-cid v0.5.0 // indirect
51-
github.com/ipfs/go-datastore v0.9.0 // indirect
5253
github.com/ipfs/go-ds-badger4 v0.1.8 // indirect
5354
github.com/ipfs/go-log/v2 v2.8.1 // indirect
5455
github.com/ipld/go-ipld-prime v0.21.0 // indirect
@@ -122,7 +123,6 @@ require (
122123
github.com/quic-go/qpack v0.5.1 // indirect
123124
github.com/quic-go/quic-go v0.54.1 // indirect
124125
github.com/quic-go/webtransport-go v0.9.0 // indirect
125-
github.com/rs/zerolog v1.34.0 // indirect
126126
github.com/sagikazarmark/locafero v0.11.0 // indirect
127127
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect
128128
github.com/spaolacci/murmur3 v1.1.0 // indirect

0 commit comments

Comments
 (0)