Skip to content

Commit 7cb7a3b

Browse files
committed
Merge branch 'julien/fi' into julien/rename-apps
2 parents 481642f + c65c330 commit 7cb7a3b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+3268
-2434
lines changed

.github/workflows/dependabot-auto-fix.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ jobs:
2020

2121
- uses: actions/setup-go@v6
2222
with:
23-
go-version: "1.22"
2423
check-latest: true
2524

2625
- name: Install make (if missing)

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1212
### Added
1313

1414
- Enhanced health check system with separate liveness (`/health/live`) and readiness (`/health/ready`) HTTP endpoints. Readiness endpoint includes P2P listening check and aggregator block production rate validation (5x block time threshold). ([#2800](https://github.com/evstack/ev-node/pull/2800))
15+
- Implement forced inclusion and based sequencing ([#2797](https://github.com/evstack/ev-node/pull/2797))
16+
This changes requires to add a `da_epoch_forced_inclusion` field in `genesis.json` file.
17+
To enable this feature, set the force inclusion namespace in the `evnode.yaml`.
1518

1619
### Changed
1720

apps/evm/cmd/run.go

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"github.com/evstack/ev-node/pkg/p2p/key"
2828
"github.com/evstack/ev-node/pkg/store"
2929
"github.com/evstack/ev-node/sequencers/based"
30+
seqcommon "github.com/evstack/ev-node/sequencers/common"
3031
"github.com/evstack/ev-node/sequencers/single"
3132
)
3233

@@ -57,7 +58,7 @@ var RunCmd = &cobra.Command{
5758

5859
logger.Info().Str("headerNamespace", headerNamespace.HexString()).Str("dataNamespace", dataNamespace.HexString()).Msg("namespaces")
5960

60-
daJrpc, err := jsonrpc.NewClient(context.Background(), logger, nodeConfig.DA.Address, nodeConfig.DA.AuthToken, rollcmd.DefaultMaxBlobSize)
61+
daJrpc, err := jsonrpc.NewClient(context.Background(), logger, nodeConfig.DA.Address, nodeConfig.DA.AuthToken, seqcommon.AbsoluteMaxBlobSize)
6162
if err != nil {
6263
return err
6364
}
@@ -113,18 +114,16 @@ func createSequencer(
113114
nodeConfig config.Config,
114115
genesis genesis.Genesis,
115116
) (coresequencer.Sequencer, error) {
116-
daRetriever, err := block.NewDARetriever(da, nodeConfig, genesis, logger)
117-
if err != nil {
118-
return nil, fmt.Errorf("failed to create DA retriever: %w", err)
119-
}
117+
daClient := block.NewDAClient(da, nodeConfig, logger)
118+
fiRetriever := block.NewForcedInclusionRetriever(daClient, genesis, logger)
120119

121120
if nodeConfig.Node.BasedSequencer {
122121
// Based sequencer mode - fetch transactions only from DA
123122
if !nodeConfig.Node.Aggregator {
124123
return nil, fmt.Errorf("based sequencer mode requires aggregator mode to be enabled")
125124
}
126125

127-
basedSeq := based.NewBasedSequencer(daRetriever, da, nodeConfig, genesis, logger)
126+
basedSeq := based.NewBasedSequencer(fiRetriever, da, nodeConfig, genesis, logger)
128127

129128
logger.Info().
130129
Str("forced_inclusion_namespace", nodeConfig.DA.GetForcedInclusionNamespace()).
@@ -149,15 +148,14 @@ func createSequencer(
149148
singleMetrics,
150149
nodeConfig.Node.Aggregator,
151150
1000,
152-
daRetriever,
151+
fiRetriever,
153152
genesis,
154153
)
155154
if err != nil {
156155
return nil, fmt.Errorf("failed to create single sequencer: %w", err)
157156
}
158157

159158
logger.Info().
160-
Bool("forced_inclusion_enabled", daRetriever != nil).
161159
Str("forced_inclusion_namespace", nodeConfig.DA.GetForcedInclusionNamespace()).
162160
Msg("single sequencer initialized")
163161

apps/evm/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ require (
3333
github.com/celestiaorg/go-libp2p-messenger v0.2.2 // indirect
3434
github.com/celestiaorg/go-square/v3 v3.0.2 // indirect
3535
github.com/cespare/xxhash/v2 v2.3.0 // indirect
36-
github.com/consensys/gnark-crypto v0.18.0 // indirect
36+
github.com/consensys/gnark-crypto v0.18.1 // indirect
3737
github.com/crate-crypto/go-eth-kzg v1.4.0 // indirect
3838
github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a // indirect
3939
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect

apps/evm/go.sum

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP
5555
github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg=
5656
github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo=
5757
github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ=
58-
github.com/consensys/gnark-crypto v0.18.0 h1:vIye/FqI50VeAr0B3dx+YjeIvmc3LWz4yEfbWBpTUf0=
59-
github.com/consensys/gnark-crypto v0.18.0/go.mod h1:L3mXGFTe1ZN+RSJ+CLjUt9x7PNdx8ubaYfDROyp2Z8c=
58+
github.com/consensys/gnark-crypto v0.18.1 h1:RyLV6UhPRoYYzaFnPQA4qK3DyuDgkTgskDdoGqFt3fI=
59+
github.com/consensys/gnark-crypto v0.18.1/go.mod h1:L3mXGFTe1ZN+RSJ+CLjUt9x7PNdx8ubaYfDROyp2Z8c=
6060
github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
6161
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
6262
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
@@ -760,6 +760,8 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
760760
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
761761
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
762762
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
763+
gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q=
764+
gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA=
763765
grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o=
764766
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
765767
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

apps/grpc/cmd/run.go

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"github.com/evstack/ev-node/pkg/p2p/key"
2525
"github.com/evstack/ev-node/pkg/store"
2626
"github.com/evstack/ev-node/sequencers/based"
27+
seqcommon "github.com/evstack/ev-node/sequencers/common"
2728
"github.com/evstack/ev-node/sequencers/single"
2829
)
2930

@@ -59,7 +60,7 @@ The execution client must implement the Evolve execution gRPC interface.`,
5960
logger.Info().Str("headerNamespace", headerNamespace.HexString()).Str("dataNamespace", dataNamespace.HexString()).Msg("namespaces")
6061

6162
// Create DA client
62-
daJrpc, err := jsonrpc.NewClient(cmd.Context(), logger, nodeConfig.DA.Address, nodeConfig.DA.AuthToken, rollcmd.DefaultMaxBlobSize)
63+
daJrpc, err := jsonrpc.NewClient(cmd.Context(), logger, nodeConfig.DA.Address, nodeConfig.DA.AuthToken, seqcommon.AbsoluteMaxBlobSize)
6364
if err != nil {
6465
return err
6566
}
@@ -122,18 +123,16 @@ func createSequencer(
122123
nodeConfig config.Config,
123124
genesis genesis.Genesis,
124125
) (coresequencer.Sequencer, error) {
125-
daRetriever, err := block.NewDARetriever(da, nodeConfig, genesis, logger)
126-
if err != nil {
127-
return nil, fmt.Errorf("failed to create DA retriever: %w", err)
128-
}
126+
daClient := block.NewDAClient(da, nodeConfig, logger)
127+
fiRetriever := block.NewForcedInclusionRetriever(daClient, genesis, logger)
129128

130129
if nodeConfig.Node.BasedSequencer {
131130
// Based sequencer mode - fetch transactions only from DA
132131
if !nodeConfig.Node.Aggregator {
133132
return nil, fmt.Errorf("based sequencer mode requires aggregator mode to be enabled")
134133
}
135134

136-
basedSeq := based.NewBasedSequencer(daRetriever, da, nodeConfig, genesis, logger)
135+
basedSeq := based.NewBasedSequencer(fiRetriever, da, nodeConfig, genesis, logger)
137136

138137
logger.Info().
139138
Str("forced_inclusion_namespace", nodeConfig.DA.GetForcedInclusionNamespace()).
@@ -158,15 +157,14 @@ func createSequencer(
158157
singleMetrics,
159158
nodeConfig.Node.Aggregator,
160159
1000,
161-
daRetriever,
160+
fiRetriever,
162161
genesis,
163162
)
164163
if err != nil {
165164
return nil, fmt.Errorf("failed to create single sequencer: %w", err)
166165
}
167166

168167
logger.Info().
169-
Bool("forced_inclusion_enabled", daRetriever != nil).
170168
Str("forced_inclusion_namespace", nodeConfig.DA.GetForcedInclusionNamespace()).
171169
Msg("single sequencer initialized")
172170

apps/grpc/go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,8 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
654654
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
655655
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
656656
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
657+
gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q=
658+
gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA=
657659
grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o=
658660
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
659661
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

apps/testapp/cmd/run.go

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ import (
1818
"github.com/evstack/ev-node/pkg/cmd"
1919
"github.com/evstack/ev-node/pkg/config"
2020
"github.com/evstack/ev-node/pkg/genesis"
21-
genesispkg "github.com/evstack/ev-node/pkg/genesis"
2221
"github.com/evstack/ev-node/pkg/p2p"
2322
"github.com/evstack/ev-node/pkg/p2p/key"
2423
"github.com/evstack/ev-node/pkg/store"
2524
"github.com/evstack/ev-node/sequencers/based"
25+
seqcommon "github.com/evstack/ev-node/sequencers/common"
2626
"github.com/evstack/ev-node/sequencers/single"
2727
)
2828

@@ -58,7 +58,7 @@ var RunCmd = &cobra.Command{
5858

5959
logger.Info().Str("headerNamespace", headerNamespace.HexString()).Str("dataNamespace", dataNamespace.HexString()).Msg("namespaces")
6060

61-
daJrpc, err := jsonrpc.NewClient(ctx, logger, nodeConfig.DA.Address, nodeConfig.DA.AuthToken, cmd.DefaultMaxBlobSize)
61+
daJrpc, err := jsonrpc.NewClient(ctx, logger, nodeConfig.DA.Address, nodeConfig.DA.AuthToken, seqcommon.AbsoluteMaxBlobSize)
6262
if err != nil {
6363
return err
6464
}
@@ -85,7 +85,7 @@ var RunCmd = &cobra.Command{
8585
}
8686

8787
genesisPath := filepath.Join(filepath.Dir(nodeConfig.ConfigPath()), "genesis.json")
88-
genesis, err := genesispkg.LoadGenesis(genesisPath)
88+
genesis, err := genesis.LoadGenesis(genesisPath)
8989
if err != nil {
9090
return fmt.Errorf("failed to load genesis: %w", err)
9191
}
@@ -120,18 +120,16 @@ func createSequencer(
120120
nodeConfig config.Config,
121121
genesis genesis.Genesis,
122122
) (coresequencer.Sequencer, error) {
123-
daRetriever, err := block.NewDARetriever(da, nodeConfig, genesis, logger)
124-
if err != nil {
125-
return nil, fmt.Errorf("failed to create DA retriever: %w", err)
126-
}
123+
daClient := block.NewDAClient(da, nodeConfig, logger)
124+
fiRetriever := block.NewForcedInclusionRetriever(daClient, genesis, logger)
127125

128126
if nodeConfig.Node.BasedSequencer {
129127
// Based sequencer mode - fetch transactions only from DA
130128
if !nodeConfig.Node.Aggregator {
131129
return nil, fmt.Errorf("based sequencer mode requires aggregator mode to be enabled")
132130
}
133131

134-
basedSeq := based.NewBasedSequencer(daRetriever, da, nodeConfig, genesis, logger)
132+
basedSeq := based.NewBasedSequencer(fiRetriever, da, nodeConfig, genesis, logger)
135133

136134
logger.Info().
137135
Str("forced_inclusion_namespace", nodeConfig.DA.GetForcedInclusionNamespace()).
@@ -156,15 +154,14 @@ func createSequencer(
156154
singleMetrics,
157155
nodeConfig.Node.Aggregator,
158156
1000,
159-
daRetriever,
157+
fiRetriever,
160158
genesis,
161159
)
162160
if err != nil {
163161
return nil, fmt.Errorf("failed to create single sequencer: %w", err)
164162
}
165163

166164
logger.Info().
167-
Bool("forced_inclusion_enabled", daRetriever != nil).
168165
Str("forced_inclusion_namespace", nodeConfig.DA.GetForcedInclusionNamespace()).
169166
Msg("single sequencer initialized")
170167

apps/testapp/go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,8 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
654654
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
655655
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
656656
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
657+
gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q=
658+
gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA=
657659
grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o=
658660
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
659661
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

block/components.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,9 @@ func NewSyncComponents(
162162
errorCh,
163163
)
164164

165-
// Create DA submitter for sync nodes (no signer, only DA inclusion processing)
166-
daSubmitter := submitting.NewDASubmitter(da, config, genesis, blockOpts, metrics, logger)
165+
// Create DA client and submitter for sync nodes (no signer, only DA inclusion processing)
166+
daClient := NewDAClient(da, config, logger)
167+
daSubmitter := submitting.NewDASubmitter(daClient, config, genesis, blockOpts, metrics, logger)
167168
submitter := submitting.NewSubmitter(
168169
store,
169170
exec,
@@ -252,8 +253,9 @@ func NewAggregatorComponents(
252253
}, nil
253254
}
254255

255-
// Create DA submitter for aggregator nodes (with signer for submission)
256-
daSubmitter := submitting.NewDASubmitter(da, config, genesis, blockOpts, metrics, logger)
256+
// Create DA client and submitter for aggregator nodes (with signer for submission)
257+
daClient := NewDAClient(da, config, logger)
258+
daSubmitter := submitting.NewDASubmitter(daClient, config, genesis, blockOpts, metrics, logger)
257259
submitter := submitting.NewSubmitter(
258260
store,
259261
exec,

0 commit comments

Comments
 (0)