diff --git a/bridge/config/l2_config.go b/bridge/config/l2_config.go index 234ce3cbc..45a809bd6 100644 --- a/bridge/config/l2_config.go +++ b/bridge/config/l2_config.go @@ -40,6 +40,8 @@ type BatchProposerConfig struct { BatchBlocksLimit uint64 `json:"batch_blocks_limit"` // Commit tx calldata size limit in bytes, target to cap the gas use of commit tx at 2M gas CommitTxCalldataSizeLimit uint64 `json:"commit_tx_calldata_size_limit"` + // Commit tx calldata min size limit in bytes + CommitTxCalldataMinSize uint64 `json:"commit_tx_calldata_min_size,omitempty"` // The public input hash config PublicInputConfig *types.PublicInputHashConfig `json:"public_input_config"` } diff --git a/bridge/l2/batch_proposer.go b/bridge/l2/batch_proposer.go index ca60d01ad..099623f8c 100644 --- a/bridge/l2/batch_proposer.go +++ b/bridge/l2/batch_proposer.go @@ -80,6 +80,7 @@ type BatchProposer struct { batchCommitTimeSec uint64 commitCalldataSizeLimit uint64 batchDataBufferSizeLimit uint64 + commitCalldataMinSize uint64 proofGenerationFreq uint64 batchDataBuffer []*types.BatchData @@ -102,6 +103,7 @@ func NewBatchProposer(ctx context.Context, cfg *config.BatchProposerConfig, rela batchBlocksLimit: cfg.BatchBlocksLimit, batchCommitTimeSec: cfg.BatchCommitTimeSec, commitCalldataSizeLimit: cfg.CommitTxCalldataSizeLimit, + commitCalldataMinSize: cfg.CommitTxCalldataMinSize, batchDataBufferSizeLimit: 100*cfg.CommitTxCalldataSizeLimit + 1*1024*1024, // @todo: determine the value. proofGenerationFreq: cfg.ProofGenerationFreq, piCfg: cfg.PublicInputConfig, @@ -217,7 +219,7 @@ func (p *BatchProposer) tryProposeBatch() { p.mutex.Lock() defer p.mutex.Unlock() - if p.getBatchDataBufferSize() < p.batchDataBufferSizeLimit { + for p.getBatchDataBufferSize() < p.batchDataBufferSizeLimit { blocks, err := p.orm.GetUnbatchedL2Blocks( map[string]interface{}{}, fmt.Sprintf("order by number ASC LIMIT %d", p.batchBlocksLimit), @@ -228,6 +230,13 @@ func (p *BatchProposer) tryProposeBatch() { } p.proposeBatch(blocks) + // while size of batchDataBuffer < commitCalldataMinSize, + // proposer keeps fetching and porposing batches. + if p.getBatchDataBufferSize() >= p.commitCalldataMinSize { + return + } + // wait for watcher to insert l2 traces. + time.Sleep(time.Second) } } diff --git a/common/version/version.go b/common/version/version.go index b6fa916c2..3a548c9e8 100644 --- a/common/version/version.go +++ b/common/version/version.go @@ -5,7 +5,7 @@ import ( "runtime/debug" ) -var tag = "alpha-v2.3" +var tag = "alpha-v2.4" var commit = func() string { if info, ok := debug.ReadBuildInfo(); ok {