Skip to content

Commit a20959c

Browse files
committed
add limits
1 parent 0894618 commit a20959c

File tree

5 files changed

+33
-11
lines changed

5 files changed

+33
-11
lines changed

rollup/internal/config/relayer.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,10 @@ type GasOracleConfig struct {
109109
L1BaseFeeDefault uint64 `json:"l1_base_fee_default"`
110110
L1BlobBaseFeeDefault uint64 `json:"l1_blob_base_fee_default"`
111111

112+
// Limit values for gas oracle updates
113+
L1BaseFeeLimit uint64 `json:"l1_base_fee_limit"`
114+
L1BlobBaseFeeLimit uint64 `json:"l1_blob_base_fee_limit"`
115+
112116
// L1BlobBaseFeeThreshold the threshold of L1 blob base fee to enter the default gas price mode
113117
L1BlobBaseFeeThreshold uint64 `json:"l1_blob_base_fee_threshold"`
114118
}

rollup/internal/controller/relayer/l1_relayer.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,17 @@ func (r *Layer1Relayer) ProcessGasPriceOracle() {
173173
} else if err != nil {
174174
return
175175
}
176+
// set limit
177+
if baseFee > r.cfg.GasOracleConfig.L1BaseFeeLimit {
178+
log.Error("L1 base fee exceed max limit, set to max limit", "baseFee", baseFee, "maxLimit", r.cfg.GasOracleConfig.L1BaseFeeLimit)
179+
r.metrics.rollupL1RelayerGasPriceOracleFeeOverLimitTotal.Inc()
180+
baseFee = r.cfg.GasOracleConfig.L1BaseFeeLimit
181+
}
182+
if blobBaseFee > r.cfg.GasOracleConfig.L1BlobBaseFeeLimit {
183+
log.Error("L1 blob base fee exceed max limit, set to max limit", "blobBaseFee", blobBaseFee, "maxLimit", r.cfg.GasOracleConfig.L1BlobBaseFeeLimit)
184+
r.metrics.rollupL1RelayerGasPriceOracleFeeOverLimitTotal.Inc()
185+
blobBaseFee = r.cfg.GasOracleConfig.L1BlobBaseFeeLimit
186+
}
176187
data, err := r.l1GasOracleABI.Pack("setL1BaseFeeAndBlobBaseFee", new(big.Int).SetUint64(baseFee), new(big.Int).SetUint64(blobBaseFee))
177188
if err != nil {
178189
log.Error("Failed to pack setL1BaseFeeAndBlobBaseFee", "block.Hash", block.Hash, "block.Height", block.Number, "block.BaseFee", baseFee, "block.BlobBaseFee", blobBaseFee, "err", err)

rollup/internal/controller/relayer/l1_relayer_metrics.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@ import (
88
)
99

1010
type l1RelayerMetrics struct {
11-
rollupL1RelayerGasPriceOraclerRunTotal prometheus.Counter
12-
rollupL1RelayerLatestBaseFee prometheus.Gauge
13-
rollupL1RelayerLatestBlobBaseFee prometheus.Gauge
14-
rollupL1UpdateGasOracleConfirmedTotal prometheus.Counter
15-
rollupL1UpdateGasOracleConfirmedFailedTotal prometheus.Counter
11+
rollupL1RelayerGasPriceOraclerRunTotal prometheus.Counter
12+
rollupL1RelayerLatestBaseFee prometheus.Gauge
13+
rollupL1RelayerLatestBlobBaseFee prometheus.Gauge
14+
rollupL1UpdateGasOracleConfirmedTotal prometheus.Counter
15+
rollupL1UpdateGasOracleConfirmedFailedTotal prometheus.Counter
16+
rollupL1RelayerGasPriceOracleFeeOverLimitTotal prometheus.Counter
1617
}
1718

1819
var (
@@ -43,6 +44,10 @@ func initL1RelayerMetrics(reg prometheus.Registerer) *l1RelayerMetrics {
4344
Name: "rollup_layer1_update_gas_oracle_confirmed_failed_total",
4445
Help: "The total number of updating layer1 gas oracle confirmed failed",
4546
}),
47+
rollupL1RelayerGasPriceOracleFeeOverLimitTotal: promauto.With(reg).NewCounter(prometheus.CounterOpts{
48+
Name: "rollup_layer1_gas_price_oracle_fee_over_limit_total",
49+
Help: "The total number of layer1 gas price oracle fee over limit",
50+
}),
4651
}
4752
})
4853
return l1RelayerMetric

rollup/internal/controller/sender/sender.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -846,11 +846,12 @@ func (s *Sender) getBlockNumberAndTimestampAndBaseFeeAndBlobFee(ctx context.Cont
846846
// that approach requires syncing any future L1 configuration changes.
847847
// Note: The fetched blob base fee might not correspond to the block
848848
// that we fetched in the previous step, but this is acceptable.
849-
var hex hexutil.Big
850-
if err := s.rpcClient.CallContext(ctx, &hex, "eth_blobBaseFee"); err != nil {
849+
var blobBaseFeeHex hexutil.Big
850+
if err := s.rpcClient.CallContext(ctx, &blobBaseFeeHex, "eth_blobBaseFee"); err != nil {
851851
return 0, 0, 0, 0, fmt.Errorf("failed to call eth_blobBaseFee, err: %w", err)
852852
}
853-
blobBaseFee := hex.ToInt().Uint64()
853+
// A correct L1 node could not return a value that overflows uint64
854+
blobBaseFee := blobBaseFeeHex.ToInt().Uint64()
854855

855856
// header.Number.Uint64() returns the pendingBlockNumber, so we minus 1 to get the latestBlockNumber.
856857
return header.Number.Uint64() - 1, header.Time, baseFee, blobBaseFee, nil

rollup/internal/controller/watcher/l1_watcher.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,12 @@ func (w *L1WatcherClient) FetchBlockHeader(blockHeight uint64) error {
8787
// that approach requires syncing any future L1 configuration changes.
8888
// Note: The fetched blob base fee might not correspond to the block
8989
// that we fetched in the previous step, but this is acceptable.
90-
var hex hexutil.Big
91-
if err := w.rpcClient.CallContext(w.ctx, &hex, "eth_blobBaseFee"); err != nil {
90+
var blobBaseFeeHex hexutil.Big
91+
if err := w.rpcClient.CallContext(w.ctx, &blobBaseFeeHex, "eth_blobBaseFee"); err != nil {
9292
return fmt.Errorf("failed to call eth_blobBaseFee, err: %w", err)
9393
}
94-
blobBaseFee := hex.ToInt().Uint64()
94+
// A correct L1 node could not return a value that overflows uint64
95+
blobBaseFee := blobBaseFeeHex.ToInt().Uint64()
9596

9697
l1Block := orm.L1Block{
9798
Number: blockHeight,

0 commit comments

Comments
 (0)