Skip to content

Commit 8d9cab0

Browse files
committed
feat: allow to configure the finality to use for l1infotree
1 parent a78d0b5 commit 8d9cab0

File tree

8 files changed

+37
-14
lines changed

8 files changed

+37
-14
lines changed

aggsender/aggsender.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ func newAggsender(
182182
return nil, fmt.Errorf("error creating verifier flow: %w", err)
183183
}
184184

185-
l1InfoTreeQuerier, err := query.NewL1InfoTreeDataQuerier(l1Client, cfg.GlobalExitRootL1Addr, l1InfoTreeSyncer)
185+
l1InfoTreeQuerier, err := query.NewL1InfoTreeDataQuerier(l1Client, cfg.GlobalExitRootL1Addr, l1InfoTreeSyncer, cfg.BlockFinalityForL1InfoTree)
186186
if err != nil {
187187
return nil, fmt.Errorf("error creating L1 Info tree data querier: %w", err)
188188
}

aggsender/config/config.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/agglayer/aggkit/common"
1212
"github.com/agglayer/aggkit/config/types"
1313
"github.com/agglayer/aggkit/grpc"
14+
aggkittypes "github.com/agglayer/aggkit/types"
1415
signertypes "github.com/agglayer/go_signer/signer/types"
1516
ethCommon "github.com/ethereum/go-ethereum/common"
1617
)
@@ -96,6 +97,8 @@ type Config struct {
9697
CommitteeOverride query.CommitteeOverride `mapstructure:"CommitteeOverride"`
9798
// AgglayerBridgeL2Addr is the address of the bridge L2 sovereign contract on L2 sovereign chain
9899
AgglayerBridgeL2Addr ethCommon.Address `mapstructure:"AgglayerBridgeL2Addr"`
100+
// BlockFinalityForL1InfoTree indicates the block finality to use when querying for L1InfoRoot to use
101+
BlockFinalityForL1InfoTree aggkittypes.BlockNumberFinality `jsonschema:"enum=LatestBlock, enum=SafeBlock, enum=PendingBlock, enum=FinalizedBlock, enum=EarliestBlock" mapstructure:"BlockFinalityForL1InfoTree"` //nolint:lll
99102
}
100103

101104
func (c Config) CheckCertConfigBriefString() string {
@@ -118,7 +121,8 @@ func (c Config) String() string {
118121
"SovereignRollupAddr: " + c.SovereignRollupAddr.Hex() + "\n" +
119122
"RequireNoFEPBlockGap: " + fmt.Sprintf("%t", c.RequireNoFEPBlockGap) + "\n" +
120123
"RetriesToBuildAndSendCertificate: " + c.RetriesToBuildAndSendCertificate.String() + "\n" +
121-
"StorageRetainCertificatesPolicy: " + c.StorageRetainCertificatesPolicy.String() + "\n"
124+
"StorageRetainCertificatesPolicy: " + c.StorageRetainCertificatesPolicy.String() + "\n" +
125+
"BlockFinalityForL1InfoTree: " + c.BlockFinalityForL1InfoTree.String() + "\n"
122126
}
123127

124128
// Validate checks if the configuration is valid
@@ -138,5 +142,8 @@ func (c Config) Validate() error {
138142
if err := c.StorageRetainCertificatesPolicy.Validate(); err != nil {
139143
return fmt.Errorf("invalid StorageRetainCertificatesPolicy config: %w", err)
140144
}
145+
if err := c.BlockFinalityForL1InfoTree.Validate(); err != nil {
146+
return fmt.Errorf("invalid BlockFinalityForL1InfoTree configuration: %w", err)
147+
}
141148
return nil
142149
}

aggsender/flows/builder_flow_factory.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ func NewBuilderFlow(
5252
cfg.RequireCommitteeMembershipCheck,
5353
cfg.AgglayerBridgeL2Addr,
5454
cfg.GlobalExitRootL1Addr,
55+
cfg.BlockFinalityForL1InfoTree,
5556
)
5657
if err != nil {
5758
return nil, fmt.Errorf("failed to create common flow components: %w", err)
@@ -100,6 +101,7 @@ func NewBuilderFlow(
100101
cfg.RequireCommitteeMembershipCheck,
101102
cfg.AgglayerBridgeL2Addr,
102103
cfg.GlobalExitRootL1Addr,
104+
cfg.BlockFinalityForL1InfoTree,
103105
)
104106
if err != nil {
105107
return nil, fmt.Errorf("failed to create common flow components: %w", err)
@@ -166,6 +168,7 @@ func CreateCommonFlowComponents(
166168
requireCommitteeMembershipCheck bool,
167169
agglayerBridgeL2Addr ethCommon.Address,
168170
globalExitRootL1Addr ethCommon.Address,
171+
blockFinalityForL1InfoTree aggkittypes.BlockNumberFinality,
169172
) (*CommonFlowComponents, error) {
170173
l2ChainID, err := rollupDataQuerier.GetRollupChainID()
171174
if err != nil {
@@ -184,7 +187,7 @@ func CreateCommonFlowComponents(
184187
}
185188

186189
l2BridgeQuerier := query.NewBridgeDataQuerier(logger, l2Syncer, delayBetweenRetries, agglayerBridgeL2Reader)
187-
l1InfoTreeQuerier, err := query.NewL1InfoTreeDataQuerier(l1Client, globalExitRootL1Addr, l1InfoTreeSyncer)
190+
l1InfoTreeQuerier, err := query.NewL1InfoTreeDataQuerier(l1Client, globalExitRootL1Addr, l1InfoTreeSyncer, blockFinalityForL1InfoTree)
188191
if err != nil {
189192
return nil, fmt.Errorf("error creating L1 Info tree data querier: %w", err)
190193
}

aggsender/flows/verifier_flow_factory.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ func NewVerifierFlow(
3838
cfg.RequireCommitteeMembershipCheck,
3939
cfg.AgglayerBridgeL2Addr,
4040
cfg.GlobalExitRootL1Addr,
41+
cfg.BlockFinalityForL1InfoTree,
4142
)
4243
if err != nil {
4344
return nil, nil, fmt.Errorf("failed to create common flow components: %w", err)
@@ -67,6 +68,7 @@ func NewVerifierFlow(
6768
cfg.RequireCommitteeMembershipCheck,
6869
cfg.AgglayerBridgeL2Addr,
6970
cfg.GlobalExitRootL1Addr,
71+
cfg.BlockFinalityForL1InfoTree,
7072
)
7173
if err != nil {
7274
return nil, nil, fmt.Errorf("failed to create common flow components: %w", err)

aggsender/prover/proof_generation_tool.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ func NewAggchainProofGenerationTool(
9797
return nil, fmt.Errorf("failed to create bridge L2 sovereign reader: %w", err)
9898
}
9999

100-
l1InfoTreeQuerier, err := query.NewL1InfoTreeDataQuerier(l1Client, cfg.GlobalExitRootL1Addr, l1InfoTreeSyncer)
100+
l1InfoTreeQuerier, err := query.NewL1InfoTreeDataQuerier(l1Client, cfg.GlobalExitRootL1Addr, l1InfoTreeSyncer, aggkittypes.FinalizedBlock)
101101
if err != nil {
102102
return nil, fmt.Errorf("error creating L1 Info tree data querier: %w", err)
103103
}

aggsender/query/l1info_tree_data_query.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,30 +15,31 @@ import (
1515
"github.com/ethereum/go-ethereum/common"
1616
)
1717

18-
var finalizedBlockBigInt = big.NewInt(int64(aggkittypes.Finalized))
19-
2018
var _ types.L1InfoTreeDataQuerier = (*L1InfoTreeDataQuerier)(nil)
2119

2220
// L1InfoTreeDataQuerier is a struct that holds the logic to query the L1 Info tree data
2321
type L1InfoTreeDataQuerier struct {
24-
l1Client aggkittypes.BaseEthereumClienter
25-
l1GERManager *agglayerger.Agglayerger
26-
l1InfoTreeSyncer types.L1InfoTreeSyncer
22+
l1Client aggkittypes.BaseEthereumClienter
23+
l1GERManager *agglayerger.Agglayerger
24+
l1InfoTreeSyncer types.L1InfoTreeSyncer
25+
blockFinalityForL1InfoTree aggkittypes.BlockNumberFinality
2726
}
2827

2928
// NewL1InfoTreeDataQuerier returns a new instance of the L1InfoTreeDataQuery
3029
func NewL1InfoTreeDataQuerier(
3130
l1Client aggkittypes.BaseEthereumClienter,
3231
l1GERAddr common.Address,
33-
l1InfoTreeSyncer types.L1InfoTreeSyncer) (*L1InfoTreeDataQuerier, error) {
32+
l1InfoTreeSyncer types.L1InfoTreeSyncer,
33+
blockFinalityForL1InfoTree aggkittypes.BlockNumberFinality) (*L1InfoTreeDataQuerier, error) {
3434
l1GERManager, err := agglayerger.NewAgglayerger(l1GERAddr, l1Client)
3535
if err != nil {
3636
return nil, err
3737
}
3838
return &L1InfoTreeDataQuerier{
39-
l1Client: l1Client,
40-
l1GERManager: l1GERManager,
41-
l1InfoTreeSyncer: l1InfoTreeSyncer,
39+
l1Client: l1Client,
40+
l1GERManager: l1GERManager,
41+
l1InfoTreeSyncer: l1InfoTreeSyncer,
42+
blockFinalityForL1InfoTree: blockFinalityForL1InfoTree,
4243
}, nil
4344
}
4445

@@ -143,7 +144,7 @@ func (l *L1InfoTreeDataQuerier) GetProofForGER(
143144

144145
// getLatestProcessedFinalizedBlock returns the latest processed finalized block from the l1infotreesyncer
145146
func (l *L1InfoTreeDataQuerier) getLatestProcessedFinalizedBlock(ctx context.Context) (uint64, error) {
146-
lastFinalizedL1Block, err := l.l1Client.HeaderByNumber(ctx, finalizedBlockBigInt)
147+
lastFinalizedL1Block, err := l.blockFinalityForL1InfoTree.BlockHeader(ctx, l.l1Client)
147148
if err != nil {
148149
return 0, fmt.Errorf("error getting latest finalized L1 block: %w", err)
149150
}

aggsender/validator/config.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
aggkitcommon "github.com/agglayer/aggkit/common"
99
"github.com/agglayer/aggkit/config/types"
1010
aggkitgrpc "github.com/agglayer/aggkit/grpc"
11+
aggkittypes "github.com/agglayer/aggkit/types"
1112
signertypes "github.com/agglayer/go_signer/signer/types"
1213
ethCommon "github.com/ethereum/go-ethereum/common"
1314
)
@@ -48,6 +49,9 @@ type Config struct {
4849
AgglayerBridgeL2Addr ethCommon.Address `mapstructure:"AgglayerBridgeL2Addr"`
4950
// GlobalExitRootL1Addr is the address of the GlobalExitRootManager contract on L1
5051
GlobalExitRootL1Addr ethCommon.Address `mapstructure:"GlobalExitRootL1Addr"`
52+
// BlockFinalityForL1InfoTree indicates the block finality to use when querying for L1InfoRoot to use
53+
BlockFinalityForL1InfoTree aggkittypes.BlockNumberFinality `jsonschema:"enum=LatestBlock, enum=SafeBlock, enum=PendingBlock, enum=FinalizedBlock, enum=EarliestBlock" mapstructure:"BlockFinalityForL1InfoTree"` //nolint:lll
54+
5155
}
5256

5357
type PPConfig struct {
@@ -90,5 +94,9 @@ func (c *Config) Validate() error {
9094
return fmt.Errorf("invalid agglayer client config: %w", err)
9195
}
9296

97+
if err := c.BlockFinalityForL1InfoTree.Validate(); err != nil {
98+
return fmt.Errorf("invalid BlockFinalityForL1InfoTree configuration: %w", err)
99+
}
100+
93101
return nil
94102
}

config/default.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ MaxL2BlockNumber = 0
212212
StopOnFinishedSendingAllCertificates = false
213213
RequireCommitteeMembershipCheck = false
214214
AgglayerBridgeL2Addr = "{{L2Config.BridgeAddr}}"
215+
BlockFinalityForL1InfoTree = "FinalizedBlock"
215216
[AggSender.RetriesToBuildAndSendCertificate]
216217
RetryMode = "delays"
217218
Delays = [ "1m", "1m", "2m", "5m", "5m", "8m" ]
@@ -293,6 +294,7 @@ Mode = "{{AggSender.Mode}}"
293294
RequireCommitteeMembershipCheck = {{AggSender.RequireCommitteeMembershipCheck}}
294295
AgglayerBridgeL2Addr = "{{L2Config.BridgeAddr}}"
295296
GlobalExitRootL1Addr = "{{L1Config.polygonZkEVMGlobalExitRootAddress}}"
297+
BlockFinalityForL1InfoTree = "{{AggSender.BlockFinalityForL1InfoTree}}"
296298
[Validator.ServerConfig]
297299
Host = "0.0.0.0"
298300
Port = 5578

0 commit comments

Comments
 (0)