@@ -36,12 +36,10 @@ type Layer1Relayer struct {
3636 gasOracleSender * sender.Sender
3737 l1GasOracleABI * abi.ABI
3838
39- lastBaseFee uint64
40- lastBlobBaseFee uint64
41- minGasPrice uint64
42- gasPriceDiff uint64
43- l1BaseFeeWeight float64
44- l1BlobBaseFeeWeight float64
39+ lastBaseFee uint64
40+ lastBlobBaseFee uint64
41+ minGasPrice uint64
42+ gasPriceDiff uint64
4543
4644 l1BlockOrm * orm.L1Block
4745 l2BlockOrm * orm.L2Block
@@ -91,10 +89,8 @@ func NewLayer1Relayer(ctx context.Context, db *gorm.DB, cfg *config.RelayerConfi
9189 gasOracleSender : gasOracleSender ,
9290 l1GasOracleABI : bridgeAbi .L1GasPriceOracleABI ,
9391
94- minGasPrice : minGasPrice ,
95- gasPriceDiff : gasPriceDiff ,
96- l1BaseFeeWeight : cfg .GasOracleConfig .L1BaseFeeWeight ,
97- l1BlobBaseFeeWeight : cfg .GasOracleConfig .L1BlobBaseFeeWeight ,
92+ minGasPrice : minGasPrice ,
93+ gasPriceDiff : gasPriceDiff ,
9894 }
9995
10096 l1Relayer .metrics = initL1RelayerMetrics (reg )
@@ -132,25 +128,13 @@ func (r *Layer1Relayer) ProcessGasPriceOracle() {
132128 block := blocks [0 ]
133129
134130 if types .GasOracleStatus (block .GasOracleStatus ) == types .GasOraclePending {
135- latestL2Height , err := r .l2BlockOrm .GetL2BlocksLatestHeight (r .ctx )
136- if err != nil {
137- log .Warn ("Failed to fetch latest L2 block height from db" , "err" , err )
131+ if block .BaseFee == 0 || block .BlobBaseFee == 0 {
132+ log .Error ("Invalid base fee or blob base fee" , "block.Hash" , block .Hash , "block.Height" , block .Number , "block.BaseFee" , block .BaseFee , "block.BlobBaseFee" , block .BlobBaseFee )
138133 return
139134 }
140135
141- var isBernoulli = block .BlobBaseFee > 0 && r .chainCfg .IsBernoulli (new (big.Int ).SetUint64 (latestL2Height ))
142- var isCurie = block .BlobBaseFee > 0 && r .chainCfg .IsCurie (new (big.Int ).SetUint64 (latestL2Height ))
143-
144- var baseFee uint64
145- var blobBaseFee uint64
146- if isCurie {
147- baseFee = block .BaseFee
148- blobBaseFee = block .BlobBaseFee
149- } else if isBernoulli {
150- baseFee = uint64 (math .Ceil (r .l1BaseFeeWeight * float64 (block .BaseFee ) + r .l1BlobBaseFeeWeight * float64 (block .BlobBaseFee )))
151- } else {
152- baseFee = block .BaseFee
153- }
136+ baseFee := block .BaseFee
137+ blobBaseFee := block .BlobBaseFee
154138
155139 // include the token exchange rate in the fee data if alternative gas token enabled
156140 if r .cfg .GasOracleConfig .AlternativeGasTokenConfig != nil && r .cfg .GasOracleConfig .AlternativeGasTokenConfig .Enabled {
@@ -177,7 +161,7 @@ func (r *Layer1Relayer) ProcessGasPriceOracle() {
177161 blobBaseFee = uint64 (math .Ceil (float64 (blobBaseFee ) / exchangeRate ))
178162 }
179163
180- if r .shouldUpdateGasOracle (baseFee , blobBaseFee , isCurie ) {
164+ if r .shouldUpdateGasOracle (baseFee , blobBaseFee ) {
181165 // It indicates the committing batch has been stuck for a long time, it's likely that the L1 gas fee spiked.
182166 // If we are not committing batches due to high fees then we shouldn't update fees to prevent users from paying high l1_data_fee
183167 // Also, set fees to some default value, because we have already updated fees to some high values, probably
@@ -191,24 +175,15 @@ func (r *Layer1Relayer) ProcessGasPriceOracle() {
191175 } else if err != nil {
192176 return
193177 }
194- var data []byte
195- if isCurie {
196- data , err = r .l1GasOracleABI .Pack ("setL1BaseFeeAndBlobBaseFee" , new (big.Int ).SetUint64 (baseFee ), new (big.Int ).SetUint64 (blobBaseFee ))
197- if err != nil {
198- log .Error ("Failed to pack setL1BaseFeeAndBlobBaseFee" , "block.Hash" , block .Hash , "block.Height" , block .Number , "block.BaseFee" , baseFee , "block.BlobBaseFee" , blobBaseFee , "isBernoulli" , isBernoulli , "isCurie" , isCurie , "err" , err )
199- return
200- }
201- } else {
202- data , err = r .l1GasOracleABI .Pack ("setL1BaseFee" , new (big.Int ).SetUint64 (baseFee ))
203- if err != nil {
204- log .Error ("Failed to pack setL1BaseFee" , "block.Hash" , block .Hash , "block.Height" , block .Number , "block.BaseFee" , baseFee , "block.BlobBaseFee" , blobBaseFee , "isBernoulli" , isBernoulli , "isCurie" , isCurie , "err" , err )
205- return
206- }
178+ data , err := r .l1GasOracleABI .Pack ("setL1BaseFeeAndBlobBaseFee" , new (big.Int ).SetUint64 (baseFee ), new (big.Int ).SetUint64 (blobBaseFee ))
179+ if err != nil {
180+ log .Error ("Failed to pack setL1BaseFeeAndBlobBaseFee" , "block.Hash" , block .Hash , "block.Height" , block .Number , "block.BaseFee" , baseFee , "block.BlobBaseFee" , blobBaseFee , "err" , err )
181+ return
207182 }
208183
209184 hash , err := r .gasOracleSender .SendTransaction (block .Hash , & r .cfg .GasPriceOracleContractAddress , data , nil , 0 )
210185 if err != nil {
211- log .Error ("Failed to send gas oracle update tx to layer2" , "block.Hash" , block .Hash , "block.Height" , block .Number , "block.BaseFee" , baseFee , "block.BlobBaseFee" , blobBaseFee , "isBernoulli" , isBernoulli , "isCurie" , isCurie , " err" , err )
186+ log .Error ("Failed to send gas oracle update tx to layer2" , "block.Hash" , block .Hash , "block.Height" , block .Number , "block.BaseFee" , baseFee , "block.BlobBaseFee" , blobBaseFee , "err" , err )
212187 return
213188 }
214189
@@ -222,7 +197,7 @@ func (r *Layer1Relayer) ProcessGasPriceOracle() {
222197 r .lastBlobBaseFee = blobBaseFee
223198 r .metrics .rollupL1RelayerLatestBaseFee .Set (float64 (r .lastBaseFee ))
224199 r .metrics .rollupL1RelayerLatestBlobBaseFee .Set (float64 (r .lastBlobBaseFee ))
225- log .Info ("Update l1 base fee" , "txHash" , hash .String (), "baseFee" , baseFee , "blobBaseFee" , blobBaseFee , "isBernoulli" , isBernoulli , "isCurie" , isCurie )
200+ log .Info ("Update l1 base fee" , "txHash" , hash .String (), "baseFee" , baseFee , "blobBaseFee" , blobBaseFee )
226201 }
227202 }
228203}
@@ -271,9 +246,10 @@ func (r *Layer1Relayer) StopSenders() {
271246 }
272247}
273248
274- func (r * Layer1Relayer ) shouldUpdateGasOracle (baseFee uint64 , blobBaseFee uint64 , isCurie bool ) bool {
249+ func (r * Layer1Relayer ) shouldUpdateGasOracle (baseFee uint64 , blobBaseFee uint64 ) bool {
275250 // Right after restarting.
276251 if r .lastBaseFee == 0 {
252+ log .Info ("First time to update gas oracle after restarting" , "baseFee" , baseFee , "blobBaseFee" , blobBaseFee )
277253 return true
278254 }
279255
@@ -282,16 +258,6 @@ func (r *Layer1Relayer) shouldUpdateGasOracle(baseFee uint64, blobBaseFee uint64
282258 return true
283259 }
284260
285- // Omitting blob base fee checks before Curie.
286- if ! isCurie {
287- return false
288- }
289-
290- // Right after enabling Curie.
291- if r .lastBlobBaseFee == 0 {
292- return true
293- }
294-
295261 expectedBlobBaseFeeDelta := r .lastBlobBaseFee * r .gasPriceDiff / gasPriceDiffPrecision
296262 // Plus a minimum of 0.01 gwei, since the blob base fee is usually low, preventing short-time flunctuation.
297263 expectedBlobBaseFeeDelta += 10000000
0 commit comments