diff --git a/cmd/flags/proposer.go b/cmd/flags/proposer.go index 2e504772f..04d7c7287 100644 --- a/cmd/flags/proposer.go +++ b/cmd/flags/proposer.go @@ -45,6 +45,11 @@ var ( Usage: "Time interval to propose empty blocks", Category: proposerCategory, } + MinBlockGasLimit = &cli.Uint64Flag{ + Name: "minimalBlockGasLimit", + Usage: "Minimal block gasLimit when proposing a block", + Category: proposerCategory, + } ) // All proposer flags. @@ -56,4 +61,5 @@ var ProposerFlags = MergeFlags(CommonFlags, []cli.Flag{ CommitSlot, TxPoolLocals, ProposeEmptyBlocksInterval, + MinBlockGasLimit, }) diff --git a/proposer/config.go b/proposer/config.go index 44d09799d..7ccf8f969 100644 --- a/proposer/config.go +++ b/proposer/config.go @@ -24,6 +24,7 @@ type Config struct { CommitSlot uint64 LocalAddresses []common.Address ProposeEmptyBlocksInterval *time.Duration + MinBlockGasLimit uint64 } // NewConfigFromCliContext initializes a Config instance from @@ -81,5 +82,6 @@ func NewConfigFromCliContext(c *cli.Context) (*Config, error) { CommitSlot: c.Uint64(flags.CommitSlot.Name), LocalAddresses: localAddresses, ProposeEmptyBlocksInterval: proposeEmptyBlocksInterval, + MinBlockGasLimit: c.Uint64(flags.MinBlockGasLimit.Name), }, nil } diff --git a/proposer/proposer.go b/proposer/proposer.go index ae072a252..291f883f9 100644 --- a/proposer/proposer.go +++ b/proposer/proposer.go @@ -45,6 +45,7 @@ type Proposer struct { proposingTimer *time.Timer commitSlot uint64 locals []common.Address + minBlockGasLimit *uint64 // Protocol configurations protocolConfigs *bindings.TaikoDataConfig @@ -96,6 +97,17 @@ func InitFromConfig(ctx context.Context, p *Proposer, cfg *Config) (err error) { } p.protocolConfigs = &protocolConfigs + if cfg.MinBlockGasLimit != 0 { + if cfg.MinBlockGasLimit > p.protocolConfigs.BlockMaxGasLimit.Uint64() { + return fmt.Errorf( + "minimal block gas limit too large, set: %d, limit: %d", + cfg.MinBlockGasLimit, + p.protocolConfigs.BlockMaxGasLimit, + ) + } + p.minBlockGasLimit = &cfg.MinBlockGasLimit + } + log.Info("Protocol configs", "configs", p.protocolConfigs) return nil @@ -229,6 +241,10 @@ func (p *Proposer) ProposeTxList( txListBytes []byte, txNum uint, ) error { + if p.minBlockGasLimit != nil && meta.GasLimit < uint32(*p.minBlockGasLimit) { + meta.GasLimit = uint32(*p.minBlockGasLimit) + } + // Propose the transactions list inputs, err := encoding.EncodeProposeBlockInput(meta) if err != nil {