44 "context"
55 "errors"
66 "fmt"
7- "math"
87 "math/big"
98 "sort"
109 "strings"
@@ -54,12 +53,7 @@ type Layer2Relayer struct {
5453 finalizeSender * sender.Sender
5554 l1RollupABI * abi.ABI
5655
57- gasOracleSender * sender.Sender
58- l2GasOracleABI * abi.ABI
59-
60- lastGasPrice uint64
61- minGasPrice uint64
62- gasPriceDiff uint64
56+ l2GasOracleABI * abi.ABI
6357
6458 // Used to get batch status from chain_monitor api.
6559 chainMonitorClient * resty.Client
@@ -70,22 +64,10 @@ type Layer2Relayer struct {
7064}
7165
7266// NewLayer2Relayer will return a new instance of Layer2RelayerClient
73- func NewLayer2Relayer (ctx context.Context , l2Client * ethclient.Client , db * gorm.DB , cfg * config.RelayerConfig , chainCfg * params.ChainConfig , initGenesis bool , serviceType ServiceType , reg prometheus.Registerer ) (* Layer2Relayer , error ) {
74- var gasOracleSender , commitSender , finalizeSender * sender.Sender
75- var err error
67+ func NewLayer2Relayer (ctx context.Context , l2Client * ethclient.Client , db * gorm.DB , cfg * config.RelayerConfig , chainCfg * params.ChainConfig , serviceType ServiceType , reg prometheus.Registerer ) (* Layer2Relayer , error ) {
68+ var commitSender , finalizeSender * sender.Sender
7669
7770 switch serviceType {
78- case ServiceTypeL2GasOracle :
79- gasOracleSender , err = sender .NewSender (ctx , cfg .SenderConfig , cfg .GasOracleSenderSignerConfig , "l2_relayer" , "gas_oracle_sender" , types .SenderTypeL2GasOracle , db , reg )
80- if err != nil {
81- return nil , fmt .Errorf ("new gas oracle sender failed, err: %w" , err )
82- }
83-
84- // Ensure test features aren't enabled on the ethereum mainnet.
85- if gasOracleSender .GetChainID ().Cmp (big .NewInt (1 )) == 0 && cfg .EnableTestEnvBypassFeatures {
86- return nil , errors .New ("cannot enable test env features in mainnet" )
87- }
88-
8971 case ServiceTypeL2RollupRelayer :
9072 commitSenderAddr , err := addrFromSignerConfig (cfg .CommitSenderSignerConfig )
9173 if err != nil {
@@ -118,16 +100,6 @@ func NewLayer2Relayer(ctx context.Context, l2Client *ethclient.Client, db *gorm.
118100 return nil , fmt .Errorf ("invalid service type for l2_relayer: %v" , serviceType )
119101 }
120102
121- var minGasPrice uint64
122- var gasPriceDiff uint64
123- if cfg .GasOracleConfig != nil {
124- minGasPrice = cfg .GasOracleConfig .MinGasPrice
125- gasPriceDiff = cfg .GasOracleConfig .GasPriceDiff
126- } else {
127- minGasPrice = 0
128- gasPriceDiff = defaultGasPriceDiff
129- }
130-
131103 layer2Relayer := & Layer2Relayer {
132104 ctx : ctx ,
133105 db : db ,
@@ -143,11 +115,7 @@ func NewLayer2Relayer(ctx context.Context, l2Client *ethclient.Client, db *gorm.
143115 finalizeSender : finalizeSender ,
144116 l1RollupABI : bridgeAbi .ScrollChainABI ,
145117
146- gasOracleSender : gasOracleSender ,
147- l2GasOracleABI : bridgeAbi .L2GasPriceOracleABI ,
148-
149- minGasPrice : minGasPrice ,
150- gasPriceDiff : gasPriceDiff ,
118+ l2GasOracleABI : bridgeAbi .L2GasPriceOracleABI ,
151119
152120 cfg : cfg ,
153121 chainCfg : chainCfg ,
@@ -161,16 +129,12 @@ func NewLayer2Relayer(ctx context.Context, l2Client *ethclient.Client, db *gorm.
161129 }
162130
163131 // Initialize genesis before we do anything else
164- if initGenesis {
165- if err := layer2Relayer .initializeGenesis (); err != nil {
166- return nil , fmt .Errorf ("failed to initialize and commit genesis batch, err: %v" , err )
167- }
132+ if err := layer2Relayer .initializeGenesis (); err != nil {
133+ return nil , fmt .Errorf ("failed to initialize and commit genesis batch, err: %v" , err )
168134 }
169135 layer2Relayer .metrics = initL2RelayerMetrics (reg )
170136
171137 switch serviceType {
172- case ServiceTypeL2GasOracle :
173- go layer2Relayer .handleL2GasOracleConfirmLoop (ctx )
174138 case ServiceTypeL2RollupRelayer :
175139 go layer2Relayer .handleL2RollupRelayerConfirmLoop (ctx )
176140 default :
@@ -301,80 +265,6 @@ func (r *Layer2Relayer) commitGenesisBatch(batchHash string, batchHeader []byte,
301265 }
302266}
303267
304- // ProcessGasPriceOracle imports gas price to layer1
305- func (r * Layer2Relayer ) ProcessGasPriceOracle () {
306- r .metrics .rollupL2RelayerGasPriceOraclerRunTotal .Inc ()
307- batch , err := r .batchOrm .GetLatestBatch (r .ctx )
308- if err != nil {
309- log .Error ("Failed to GetLatestBatch" , "err" , err )
310- return
311- }
312-
313- if types .GasOracleStatus (batch .OracleStatus ) == types .GasOraclePending {
314- suggestGasPrice , err := r .l2Client .SuggestGasPrice (r .ctx )
315- if err != nil {
316- log .Error ("Failed to fetch SuggestGasPrice from l2geth" , "err" , err )
317- return
318- }
319- suggestGasPriceUint64 := uint64 (suggestGasPrice .Int64 ())
320-
321- // include the token exchange rate in the fee data if alternative gas token enabled
322- if r .cfg .GasOracleConfig .AlternativeGasTokenConfig != nil && r .cfg .GasOracleConfig .AlternativeGasTokenConfig .Enabled {
323- // The exchange rate represent the number of native token on L1 required to exchange for 1 native token on L2.
324- var exchangeRate float64
325- switch r .cfg .GasOracleConfig .AlternativeGasTokenConfig .Mode {
326- case "Fixed" :
327- exchangeRate = r .cfg .GasOracleConfig .AlternativeGasTokenConfig .FixedExchangeRate
328- case "BinanceApi" :
329- exchangeRate , err = rutils .GetExchangeRateFromBinanceApi (r .cfg .GasOracleConfig .AlternativeGasTokenConfig .TokenSymbolPair , 5 )
330- if err != nil {
331- log .Error ("Failed to get gas token exchange rate from Binance api" , "tokenSymbolPair" , r .cfg .GasOracleConfig .AlternativeGasTokenConfig .TokenSymbolPair , "err" , err )
332- return
333- }
334- default :
335- log .Error ("Invalid alternative gas token mode" , "mode" , r .cfg .GasOracleConfig .AlternativeGasTokenConfig .Mode )
336- return
337- }
338- if exchangeRate == 0 {
339- log .Error ("Invalid exchange rate" , "exchangeRate" , exchangeRate )
340- return
341- }
342- suggestGasPriceUint64 = uint64 (math .Ceil (float64 (suggestGasPriceUint64 ) * exchangeRate ))
343- suggestGasPrice = new (big.Int ).SetUint64 (suggestGasPriceUint64 )
344- }
345-
346- expectedDelta := r .lastGasPrice * r .gasPriceDiff / gasPriceDiffPrecision
347- if r .lastGasPrice > 0 && expectedDelta == 0 {
348- expectedDelta = 1
349- }
350-
351- // last is undefined or (suggestGasPriceUint64 >= minGasPrice && exceed diff)
352- if r .lastGasPrice == 0 || (suggestGasPriceUint64 >= r .minGasPrice &&
353- (math .Abs (float64 (suggestGasPriceUint64 )- float64 (r .lastGasPrice )) >= float64 (expectedDelta ))) {
354- data , err := r .l2GasOracleABI .Pack ("setL2BaseFee" , suggestGasPrice )
355- if err != nil {
356- log .Error ("Failed to pack setL2BaseFee" , "batch.Hash" , batch .Hash , "GasPrice" , suggestGasPrice .Uint64 (), "err" , err )
357- return
358- }
359-
360- hash , err := r .gasOracleSender .SendTransaction (batch .Hash , & r .cfg .GasPriceOracleContractAddress , data , nil , 0 )
361- if err != nil {
362- log .Error ("Failed to send setL2BaseFee tx to layer2 " , "batch.Hash" , batch .Hash , "err" , err )
363- return
364- }
365-
366- err = r .batchOrm .UpdateL2GasOracleStatusAndOracleTxHash (r .ctx , batch .Hash , types .GasOracleImporting , hash .String ())
367- if err != nil {
368- log .Error ("UpdateGasOracleStatusAndOracleTxHash failed" , "batch.Hash" , batch .Hash , "err" , err )
369- return
370- }
371- r .lastGasPrice = suggestGasPriceUint64
372- r .metrics .rollupL2RelayerLastGasPrice .Set (float64 (r .lastGasPrice ))
373- log .Info ("Update l2 gas price" , "txHash" , hash .String (), "GasPrice" , suggestGasPrice )
374- }
375- }
376- }
377-
378268// ProcessPendingBatches processes the pending batches by sending commitBatch transactions to layer 1.
379269func (r * Layer2Relayer ) ProcessPendingBatches () {
380270 // get pending batches from database in ascending order by their index.
@@ -1063,17 +953,6 @@ func (r *Layer2Relayer) handleConfirmation(cfm *sender.Confirmation) {
1063953 log .Info ("Transaction confirmed in layer1" , "confirmation" , cfm )
1064954}
1065955
1066- func (r * Layer2Relayer ) handleL2GasOracleConfirmLoop (ctx context.Context ) {
1067- for {
1068- select {
1069- case <- ctx .Done ():
1070- return
1071- case cfm := <- r .gasOracleSender .ConfirmChan ():
1072- r .handleConfirmation (cfm )
1073- }
1074- }
1075- }
1076-
1077956func (r * Layer2Relayer ) handleL2RollupRelayerConfirmLoop (ctx context.Context ) {
1078957 for {
1079958 select {
@@ -1248,10 +1127,6 @@ func (r *Layer2Relayer) constructFinalizeBundlePayloadCodecV7(dbBatch *orm.Batch
12481127// StopSenders stops the senders of the rollup-relayer to prevent querying the removed pending_transaction table in unit tests.
12491128// for unit test
12501129func (r * Layer2Relayer ) StopSenders () {
1251- if r .gasOracleSender != nil {
1252- r .gasOracleSender .Stop ()
1253- }
1254-
12551130 if r .commitSender != nil {
12561131 r .commitSender .Stop ()
12571132 }
0 commit comments