From 72caba18a2f9b06360be50a6cea360be963b0326 Mon Sep 17 00:00:00 2001 From: colinlyguo Date: Thu, 14 Nov 2024 15:15:49 +0800 Subject: [PATCH 1/8] feat(gas-oracle): remove legacy logic --- rollup/cmd/gas_oracle/app/app.go | 4 +- rollup/cmd/rollup_relayer/app/app.go | 4 +- rollup/conf/config.json | 2 - rollup/internal/config/relayer.go | 5 -- .../internal/controller/relayer/l1_relayer.go | 71 +++++-------------- 5 files changed, 23 insertions(+), 63 deletions(-) diff --git a/rollup/cmd/gas_oracle/app/app.go b/rollup/cmd/gas_oracle/app/app.go index 5ad23819e9..156c6c394e 100644 --- a/rollup/cmd/gas_oracle/app/app.go +++ b/rollup/cmd/gas_oracle/app/app.go @@ -22,7 +22,7 @@ import ( "scroll-tech/rollup/internal/config" "scroll-tech/rollup/internal/controller/relayer" "scroll-tech/rollup/internal/controller/watcher" - butils "scroll-tech/rollup/internal/utils" + rutils "scroll-tech/rollup/internal/utils" ) var app *cli.App @@ -98,7 +98,7 @@ func action(ctx *cli.Context) error { go utils.LoopWithContext(subCtx, 10*time.Second, func(ctx context.Context) { // Fetch the latest block number to decrease the delay when fetching gas prices // Use latest block number - 1 to prevent frequent reorg - number, loopErr := butils.GetLatestConfirmedBlockNumber(ctx, l1client, rpc.LatestBlockNumber) + number, loopErr := rutils.GetLatestConfirmedBlockNumber(ctx, l1client, rpc.LatestBlockNumber) if loopErr != nil { log.Error("failed to get block number", "err", loopErr) return diff --git a/rollup/cmd/rollup_relayer/app/app.go b/rollup/cmd/rollup_relayer/app/app.go index 939d4b7798..4e086bd4ef 100644 --- a/rollup/cmd/rollup_relayer/app/app.go +++ b/rollup/cmd/rollup_relayer/app/app.go @@ -20,7 +20,7 @@ import ( "scroll-tech/rollup/internal/config" "scroll-tech/rollup/internal/controller/relayer" "scroll-tech/rollup/internal/controller/watcher" - butils "scroll-tech/rollup/internal/utils" + rutils "scroll-tech/rollup/internal/utils" ) var app *cli.App @@ -92,7 +92,7 @@ func action(ctx *cli.Context) error { // Watcher loop to fetch missing blocks go utils.LoopWithContext(subCtx, 2*time.Second, func(ctx context.Context) { - number, loopErr := butils.GetLatestConfirmedBlockNumber(ctx, l2client, cfg.L2Config.Confirmations) + number, loopErr := rutils.GetLatestConfirmedBlockNumber(ctx, l2client, cfg.L2Config.Confirmations) if loopErr != nil { log.Error("failed to get block number", "err", loopErr) return diff --git a/rollup/conf/config.json b/rollup/conf/config.json index 50d6b57262..fa9ba680ae 100644 --- a/rollup/conf/config.json +++ b/rollup/conf/config.json @@ -18,8 +18,6 @@ "gas_oracle_config": { "min_gas_price": 0, "gas_price_diff": 50000, - "l1_base_fee_weight": 0.132, - "l1_blob_base_fee_weight": 0.145, "check_committed_batches_window_minutes": 5, "l1_base_fee_default": 15000000000, "l1_blob_base_fee_default": 1 diff --git a/rollup/internal/config/relayer.go b/rollup/internal/config/relayer.go index 1a1d3a1a46..4cbee5f291 100644 --- a/rollup/internal/config/relayer.go +++ b/rollup/internal/config/relayer.go @@ -85,11 +85,6 @@ type GasOracleConfig struct { // AlternativeGasTokenConfig The configuration for handling token exchange rates when updating the gas price oracle. AlternativeGasTokenConfig *AlternativeGasTokenConfig `json:"alternative_gas_token_config"` - // The following configs are only for updating L1 gas price, used for sender in L2. - // The weight for L1 base fee. - L1BaseFeeWeight float64 `json:"l1_base_fee_weight"` - // The weight for L1 blob base fee. - L1BlobBaseFeeWeight float64 `json:"l1_blob_base_fee_weight"` // CheckCommittedBatchesWindowMinutes the time frame to check if we committed batches to decide to update gas oracle or not in minutes CheckCommittedBatchesWindowMinutes int `json:"check_committed_batches_window_minutes"` L1BaseFeeDefault uint64 `json:"l1_base_fee_default"` diff --git a/rollup/internal/controller/relayer/l1_relayer.go b/rollup/internal/controller/relayer/l1_relayer.go index ed2f39eb1f..34e55a6897 100644 --- a/rollup/internal/controller/relayer/l1_relayer.go +++ b/rollup/internal/controller/relayer/l1_relayer.go @@ -36,12 +36,10 @@ type Layer1Relayer struct { gasOracleSender *sender.Sender l1GasOracleABI *abi.ABI - lastBaseFee uint64 - lastBlobBaseFee uint64 - minGasPrice uint64 - gasPriceDiff uint64 - l1BaseFeeWeight float64 - l1BlobBaseFeeWeight float64 + lastBaseFee uint64 + lastBlobBaseFee uint64 + minGasPrice uint64 + gasPriceDiff uint64 l1BlockOrm *orm.L1Block l2BlockOrm *orm.L2Block @@ -91,10 +89,8 @@ func NewLayer1Relayer(ctx context.Context, db *gorm.DB, cfg *config.RelayerConfi gasOracleSender: gasOracleSender, l1GasOracleABI: bridgeAbi.L1GasPriceOracleABI, - minGasPrice: minGasPrice, - gasPriceDiff: gasPriceDiff, - l1BaseFeeWeight: cfg.GasOracleConfig.L1BaseFeeWeight, - l1BlobBaseFeeWeight: cfg.GasOracleConfig.L1BlobBaseFeeWeight, + minGasPrice: minGasPrice, + gasPriceDiff: gasPriceDiff, } l1Relayer.metrics = initL1RelayerMetrics(reg) @@ -132,25 +128,13 @@ func (r *Layer1Relayer) ProcessGasPriceOracle() { block := blocks[0] if types.GasOracleStatus(block.GasOracleStatus) == types.GasOraclePending { - latestL2Height, err := r.l2BlockOrm.GetL2BlocksLatestHeight(r.ctx) - if err != nil { - log.Warn("Failed to fetch latest L2 block height from db", "err", err) + if block.BaseFee == 0 || block.BlobBaseFee == 0 { + 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) return } - var isBernoulli = block.BlobBaseFee > 0 && r.chainCfg.IsBernoulli(new(big.Int).SetUint64(latestL2Height)) - var isCurie = block.BlobBaseFee > 0 && r.chainCfg.IsCurie(new(big.Int).SetUint64(latestL2Height)) - - var baseFee uint64 - var blobBaseFee uint64 - if isCurie { - baseFee = block.BaseFee - blobBaseFee = block.BlobBaseFee - } else if isBernoulli { - baseFee = uint64(math.Ceil(r.l1BaseFeeWeight*float64(block.BaseFee) + r.l1BlobBaseFeeWeight*float64(block.BlobBaseFee))) - } else { - baseFee = block.BaseFee - } + baseFee := block.BaseFee + blobBaseFee := block.BlobBaseFee // include the token exchange rate in the fee data if alternative gas token enabled if r.cfg.GasOracleConfig.AlternativeGasTokenConfig != nil && r.cfg.GasOracleConfig.AlternativeGasTokenConfig.Enabled { @@ -177,7 +161,7 @@ func (r *Layer1Relayer) ProcessGasPriceOracle() { blobBaseFee = uint64(math.Ceil(float64(blobBaseFee) / exchangeRate)) } - if r.shouldUpdateGasOracle(baseFee, blobBaseFee, isCurie) { + if r.shouldUpdateGasOracle(baseFee, blobBaseFee) { // It indicates the committing batch has been stuck for a long time, it's likely that the L1 gas fee spiked. // 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 // Also, set fees to some default value, because we have already updated fees to some high values, probably @@ -192,23 +176,15 @@ func (r *Layer1Relayer) ProcessGasPriceOracle() { return } var data []byte - if isCurie { - data, err = r.l1GasOracleABI.Pack("setL1BaseFeeAndBlobBaseFee", new(big.Int).SetUint64(baseFee), new(big.Int).SetUint64(blobBaseFee)) - if err != nil { - 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) - return - } - } else { - data, err = r.l1GasOracleABI.Pack("setL1BaseFee", new(big.Int).SetUint64(baseFee)) - if err != nil { - 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) - return - } + data, err = r.l1GasOracleABI.Pack("setL1BaseFeeAndBlobBaseFee", new(big.Int).SetUint64(baseFee), new(big.Int).SetUint64(blobBaseFee)) + if err != nil { + log.Error("Failed to pack setL1BaseFeeAndBlobBaseFee", "block.Hash", block.Hash, "block.Height", block.Number, "block.BaseFee", baseFee, "block.BlobBaseFee", blobBaseFee, "err", err) + return } hash, err := r.gasOracleSender.SendTransaction(block.Hash, &r.cfg.GasPriceOracleContractAddress, data, nil, 0) if err != nil { - 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) + 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) return } @@ -222,7 +198,7 @@ func (r *Layer1Relayer) ProcessGasPriceOracle() { r.lastBlobBaseFee = blobBaseFee r.metrics.rollupL1RelayerLatestBaseFee.Set(float64(r.lastBaseFee)) r.metrics.rollupL1RelayerLatestBlobBaseFee.Set(float64(r.lastBlobBaseFee)) - log.Info("Update l1 base fee", "txHash", hash.String(), "baseFee", baseFee, "blobBaseFee", blobBaseFee, "isBernoulli", isBernoulli, "isCurie", isCurie) + log.Info("Update l1 base fee", "txHash", hash.String(), "baseFee", baseFee, "blobBaseFee", blobBaseFee) } } } @@ -271,9 +247,10 @@ func (r *Layer1Relayer) StopSenders() { } } -func (r *Layer1Relayer) shouldUpdateGasOracle(baseFee uint64, blobBaseFee uint64, isCurie bool) bool { +func (r *Layer1Relayer) shouldUpdateGasOracle(baseFee uint64, blobBaseFee uint64) bool { // Right after restarting. if r.lastBaseFee == 0 { + log.Info("First time to update gas oracle after restarting", "baseFee", baseFee, "blobBaseFee", blobBaseFee) return true } @@ -282,16 +259,6 @@ func (r *Layer1Relayer) shouldUpdateGasOracle(baseFee uint64, blobBaseFee uint64 return true } - // Omitting blob base fee checks before Curie. - if !isCurie { - return false - } - - // Right after enabling Curie. - if r.lastBlobBaseFee == 0 { - return true - } - expectedBlobBaseFeeDelta := r.lastBlobBaseFee * r.gasPriceDiff / gasPriceDiffPrecision // Plus a minimum of 0.01 gwei, since the blob base fee is usually low, preventing short-time flunctuation. expectedBlobBaseFeeDelta += 10000000 From 6eabe562ff68ca43e5adf81081ce5e9dda204490 Mon Sep 17 00:00:00 2001 From: colinlyguo Date: Thu, 14 Nov 2024 15:18:40 +0800 Subject: [PATCH 2/8] bump version --- common/version/version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/version/version.go b/common/version/version.go index 83bff50dea..57588b9c02 100644 --- a/common/version/version.go +++ b/common/version/version.go @@ -5,7 +5,7 @@ import ( "runtime/debug" ) -var tag = "v4.4.72" +var tag = "v4.4.73" var commit = func() string { if info, ok := debug.ReadBuildInfo(); ok { From a27294f53870f49012f02525359c669bb5b11be2 Mon Sep 17 00:00:00 2001 From: colinlyguo Date: Fri, 15 Nov 2024 16:48:44 +0800 Subject: [PATCH 3/8] remove outdated unit tests --- rollup/abi/bridge_abi.go | 2 +- rollup/abi/bridge_abi_test.go | 3 +- .../controller/relayer/l1_relayer_test.go | 8 -- rollup/mock_bridge/MockBridge.sol | 4 - rollup/tests/bridge_test.go | 1 - rollup/tests/gas_oracle_test.go | 75 +------------------ 6 files changed, 4 insertions(+), 89 deletions(-) diff --git a/rollup/abi/bridge_abi.go b/rollup/abi/bridge_abi.go index 35f97824ff..ba7a6d6b20 100644 --- a/rollup/abi/bridge_abi.go +++ b/rollup/abi/bridge_abi.go @@ -34,5 +34,5 @@ var L2GasPriceOracleMetaData = &bind.MetaData{ // L1GasPriceOracleMetaData contains all meta data concerning the L1GasPriceOracle contract. var L1GasPriceOracleMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"scalar\",\"type\":\"uint256\"}],\"name\":\"BlobScalarUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"scalar\",\"type\":\"uint256\"}],\"name\":\"CommitScalarUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"l1BaseFee\",\"type\":\"uint256\"}],\"name\":\"L1BaseFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"l1BlobBaseFee\",\"type\":\"uint256\"}],\"name\":\"L1BlobBaseFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"overhead\",\"type\":\"uint256\"}],\"name\":\"OverheadUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"scalar\",\"type\":\"uint256\"}],\"name\":\"ScalarUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"blobScalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"commitScalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"getL1Fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"getL1GasUsed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1BaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1BlobBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"overhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l1BaseFee\",\"type\":\"uint256\"}],\"name\":\"setL1BaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l1BaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l1BlobBaseFee\",\"type\":\"uint256\"}],\"name\":\"setL1BaseFeeAndBlobBaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"scalar\",\"type\":\"uint256\"}],\"name\":\"BlobScalarUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"scalar\",\"type\":\"uint256\"}],\"name\":\"CommitScalarUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"l1BaseFee\",\"type\":\"uint256\"}],\"name\":\"L1BaseFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"l1BlobBaseFee\",\"type\":\"uint256\"}],\"name\":\"L1BlobBaseFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"overhead\",\"type\":\"uint256\"}],\"name\":\"OverheadUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"scalar\",\"type\":\"uint256\"}],\"name\":\"ScalarUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"blobScalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"commitScalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"getL1Fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"getL1GasUsed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1BaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1BlobBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"overhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l1BaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l1BlobBaseFee\",\"type\":\"uint256\"}],\"name\":\"setL1BaseFeeAndBlobBaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } diff --git a/rollup/abi/bridge_abi_test.go b/rollup/abi/bridge_abi_test.go index 70ab6564ba..de8a2bd6f4 100644 --- a/rollup/abi/bridge_abi_test.go +++ b/rollup/abi/bridge_abi_test.go @@ -59,7 +59,8 @@ func TestPackSetL1BaseFee(t *testing.T) { assert.NoError(err) baseFee := big.NewInt(2333) - _, err = l1GasOracleABI.Pack("setL1BaseFee", baseFee) + blobBaseFee := big.NewInt(1) + _, err = l1GasOracleABI.Pack("setL1BaseFeeAndBlobBaseFee", baseFee, blobBaseFee) assert.NoError(err) } diff --git a/rollup/internal/controller/relayer/l1_relayer_test.go b/rollup/internal/controller/relayer/l1_relayer_test.go index 6ac67fdc5b..08f6f9b50a 100644 --- a/rollup/internal/controller/relayer/l1_relayer_test.go +++ b/rollup/internal/controller/relayer/l1_relayer_test.go @@ -141,14 +141,6 @@ func testL1RelayerProcessGasPriceOracle(t *testing.T) { return tmpInfo, nil }) - convey.Convey("setL1BaseFee failure", t, func() { - targetErr := errors.New("pack setL1BaseFee error") - patchGuard.ApplyMethodFunc(l1Relayer.l1GasOracleABI, "Pack", func(name string, args ...interface{}) ([]byte, error) { - return nil, targetErr - }) - l1Relayer.ProcessGasPriceOracle() - }) - patchGuard.ApplyMethodFunc(l1Relayer.l1GasOracleABI, "Pack", func(name string, args ...interface{}) ([]byte, error) { return []byte("for test"), nil }) diff --git a/rollup/mock_bridge/MockBridge.sol b/rollup/mock_bridge/MockBridge.sol index c94bc221b3..d1bddd4abc 100644 --- a/rollup/mock_bridge/MockBridge.sol +++ b/rollup/mock_bridge/MockBridge.sol @@ -102,10 +102,6 @@ contract MockBridge { mapping(uint256 => bytes32) public withdrawRoots; - function setL1BaseFee(uint256 _l1BaseFee) external { - l1BaseFee = _l1BaseFee; - } - function setL1BaseFeeAndBlobBaseFee(uint256 _l1BaseFee, uint256 _l1BlobBaseFee) external { l1BaseFee = _l1BaseFee; l1BlobBaseFee = _l1BlobBaseFee; diff --git a/rollup/tests/bridge_test.go b/rollup/tests/bridge_test.go index 3ab88f8439..afc137f8c4 100644 --- a/rollup/tests/bridge_test.go +++ b/rollup/tests/bridge_test.go @@ -213,7 +213,6 @@ func TestFunction(t *testing.T) { // l1/l2 gas oracle t.Run("TestImportL1GasPrice", testImportL1GasPrice) - t.Run("TestImportL1GasPriceAfterCurie", testImportL1GasPriceAfterCurie) t.Run("TestImportDefaultL1GasPriceDueToL1GasPriceSpike", testImportDefaultL1GasPriceDueToL1GasPriceSpike) t.Run("TestImportL2GasPrice", testImportL2GasPrice) } diff --git a/rollup/tests/gas_oracle_test.go b/rollup/tests/gas_oracle_test.go index cdcd5a3e01..c7a0b50e34 100644 --- a/rollup/tests/gas_oracle_test.go +++ b/rollup/tests/gas_oracle_test.go @@ -30,80 +30,7 @@ func testImportL1GasPrice(t *testing.T) { l1Cfg := rollupApp.Config.L1Config // Create L1Relayer - l1Relayer, err := relayer.NewLayer1Relayer(context.Background(), db, l1Cfg.RelayerConfig, ¶ms.ChainConfig{}, relayer.ServiceTypeL1GasOracle, nil) - assert.NoError(t, err) - defer l1Relayer.StopSenders() - - // Create L1Watcher - startHeight, err := l1Client.BlockNumber(context.Background()) - assert.NoError(t, err) - l1Watcher := watcher.NewL1WatcherClient(context.Background(), l1Client, startHeight-1, db, nil) - - // fetch new blocks - number, err := l1Client.BlockNumber(context.Background()) - assert.Greater(t, number, startHeight-1) - assert.NoError(t, err) - err = l1Watcher.FetchBlockHeader(number) - assert.NoError(t, err) - - l1BlockOrm := orm.NewL1Block(db) - // check db status - latestBlockHeight, err := l1BlockOrm.GetLatestL1BlockHeight(context.Background()) - assert.NoError(t, err) - assert.Equal(t, number, latestBlockHeight) - blocks, err := l1BlockOrm.GetL1Blocks(context.Background(), map[string]interface{}{"number": latestBlockHeight}) - assert.NoError(t, err) - assert.Equal(t, len(blocks), 1) - assert.Empty(t, blocks[0].OracleTxHash) - assert.Equal(t, types.GasOracleStatus(blocks[0].GasOracleStatus), types.GasOraclePending) - - // add fake batch to pass check for commit batch timeout - chunk := &encoding.Chunk{ - Blocks: []*encoding.Block{ - { - Header: &gethTypes.Header{ - Number: big.NewInt(1), - ParentHash: common.Hash{}, - Difficulty: big.NewInt(0), - BaseFee: big.NewInt(0), - }, - Transactions: nil, - WithdrawRoot: common.Hash{}, - RowConsumption: &gethTypes.RowConsumption{}, - }, - }, - } - batch := &encoding.Batch{ - Index: 0, - TotalL1MessagePoppedBefore: 0, - ParentBatchHash: common.Hash{}, - Chunks: []*encoding.Chunk{chunk}, - } - batchOrm := orm.NewBatch(db) - dbBatch, err := batchOrm.InsertBatch(context.Background(), batch, encoding.CodecV0, utils.BatchMetrics{}) - assert.NoError(t, err) - err = batchOrm.UpdateCommitTxHashAndRollupStatus(context.Background(), dbBatch.Hash, common.Hash{}.String(), types.RollupCommitted) - assert.NoError(t, err) - - // relay gas price - l1Relayer.ProcessGasPriceOracle() - blocks, err = l1BlockOrm.GetL1Blocks(context.Background(), map[string]interface{}{"number": latestBlockHeight}) - assert.NoError(t, err) - assert.Equal(t, len(blocks), 1) - assert.NotEmpty(t, blocks[0].OracleTxHash) - assert.Equal(t, types.GasOracleStatus(blocks[0].GasOracleStatus), types.GasOracleImporting) -} - -func testImportL1GasPriceAfterCurie(t *testing.T) { - db := setupDB(t) - defer database.CloseDB(db) - - prepareContracts(t) - - l1Cfg := rollupApp.Config.L1Config - - // Create L1Relayer - l1Relayer, err := relayer.NewLayer1Relayer(context.Background(), db, l1Cfg.RelayerConfig, ¶ms.ChainConfig{BernoulliBlock: big.NewInt(0), CurieBlock: big.NewInt(0)}, relayer.ServiceTypeL1GasOracle, nil) + l1Relayer, err := relayer.NewLayer1Relayer(context.Background(), db, l1Cfg.RelayerConfig, ¶ms.ChainConfig{LondonBlock: big.NewInt(0), BernoulliBlock: big.NewInt(0), CurieBlock: big.NewInt(0), DarwinTime: new(uint64), DarwinV2Time: new(uint64)}, relayer.ServiceTypeL1GasOracle, nil) assert.NoError(t, err) defer l1Relayer.StopSenders() From 0d0902ccfe8fb3b332067910a622e63670b5349a Mon Sep 17 00:00:00 2001 From: colinlyguo Date: Fri, 15 Nov 2024 16:57:19 +0800 Subject: [PATCH 4/8] address AI's comment --- rollup/abi/bridge_abi_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rollup/abi/bridge_abi_test.go b/rollup/abi/bridge_abi_test.go index de8a2bd6f4..e20fb726e1 100644 --- a/rollup/abi/bridge_abi_test.go +++ b/rollup/abi/bridge_abi_test.go @@ -52,7 +52,7 @@ func TestPackImportGenesisBatch(t *testing.T) { assert.NoError(err) } -func TestPackSetL1BaseFee(t *testing.T) { +func TestPackSetL1BaseFeeAndBlobBaseFee(t *testing.T) { assert := assert.New(t) l1GasOracleABI, err := L1GasPriceOracleMetaData.GetAbi() From a9534147859057be54f812498588cfc61c7f5fdf Mon Sep 17 00:00:00 2001 From: colinlyguo Date: Fri, 15 Nov 2024 17:11:18 +0800 Subject: [PATCH 5/8] fix coordinator unit tests --- coordinator/test/api_test.go | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/coordinator/test/api_test.go b/coordinator/test/api_test.go index d3ce689944..3d48e8c32f 100644 --- a/coordinator/test/api_test.go +++ b/coordinator/test/api_test.go @@ -87,13 +87,13 @@ func setupCoordinator(t *testing.T, proversPerSession uint8, coordinatorURL stri LowVersionCircuit: &config.CircuitConfig{ ParamsPath: "", AssetsPath: "", - ForkName: "homestead", + ForkName: "darwin", MinProverVersion: "v4.2.0", }, HighVersionCircuit: &config.CircuitConfig{ ParamsPath: "", AssetsPath: "", - ForkName: "bernoulli", + ForkName: "darwinV2", MinProverVersion: "v4.3.0", }, }, @@ -109,12 +109,16 @@ func setupCoordinator(t *testing.T, proversPerSession uint8, coordinatorURL stri } var chainConf params.ChainConfig + chainConf.LondonBlock = big.NewInt(0) + chainConf.BernoulliBlock = big.NewInt(0) + chainConf.CurieBlock = big.NewInt(0) for _, forkName := range forks { switch forkName { - case "bernoulli": - chainConf.BernoulliBlock = big.NewInt(100) - case "homestead": - chainConf.HomesteadBlock = big.NewInt(0) + case "darwinV2": + chainConf.DarwinTime = new(uint64) + chainConf.DarwinV2Time = new(uint64) + case "darwin": + chainConf.DarwinTime = new(uint64) } } @@ -197,7 +201,7 @@ func TestApis(t *testing.T) { func testHandshake(t *testing.T) { // Setup coordinator and http server. coordinatorURL := randomURL() - proofCollector, httpHandler := setupCoordinator(t, 1, coordinatorURL, []string{"homestead"}) + proofCollector, httpHandler := setupCoordinator(t, 1, coordinatorURL, []string{"darwinV2"}) defer func() { proofCollector.Stop() assert.NoError(t, httpHandler.Shutdown(context.Background())) @@ -210,7 +214,7 @@ func testHandshake(t *testing.T) { func testFailedHandshake(t *testing.T) { // Setup coordinator and http server. coordinatorURL := randomURL() - proofCollector, httpHandler := setupCoordinator(t, 1, coordinatorURL, []string{"homestead"}) + proofCollector, httpHandler := setupCoordinator(t, 1, coordinatorURL, []string{"darwinV2"}) defer func() { proofCollector.Stop() }() @@ -228,7 +232,7 @@ func testFailedHandshake(t *testing.T) { func testGetTaskBlocked(t *testing.T) { coordinatorURL := randomURL() - collector, httpHandler := setupCoordinator(t, 3, coordinatorURL, []string{"homestead"}) + collector, httpHandler := setupCoordinator(t, 3, coordinatorURL, []string{"darwinV2"}) defer func() { collector.Stop() assert.NoError(t, httpHandler.Shutdown(context.Background())) @@ -272,7 +276,7 @@ func testGetTaskBlocked(t *testing.T) { func testOutdatedProverVersion(t *testing.T) { coordinatorURL := randomURL() - collector, httpHandler := setupCoordinator(t, 3, coordinatorURL, []string{"homestead"}) + collector, httpHandler := setupCoordinator(t, 3, coordinatorURL, []string{"darwinV2"}) defer func() { collector.Stop() assert.NoError(t, httpHandler.Shutdown(context.Background())) @@ -299,7 +303,7 @@ func testOutdatedProverVersion(t *testing.T) { func testValidProof(t *testing.T) { coordinatorURL := randomURL() - collector, httpHandler := setupCoordinator(t, 3, coordinatorURL, []string{"homestead"}) + collector, httpHandler := setupCoordinator(t, 3, coordinatorURL, []string{"darwinV2"}) defer func() { collector.Stop() assert.NoError(t, httpHandler.Shutdown(context.Background())) From 9db4e04107a8078dae83d5c860699022904ccc19 Mon Sep 17 00:00:00 2001 From: colinlyguo Date: Fri, 15 Nov 2024 17:11:49 +0800 Subject: [PATCH 6/8] Revert "fix coordinator unit tests" This reverts commit a9534147859057be54f812498588cfc61c7f5fdf. --- coordinator/test/api_test.go | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/coordinator/test/api_test.go b/coordinator/test/api_test.go index 3d48e8c32f..d3ce689944 100644 --- a/coordinator/test/api_test.go +++ b/coordinator/test/api_test.go @@ -87,13 +87,13 @@ func setupCoordinator(t *testing.T, proversPerSession uint8, coordinatorURL stri LowVersionCircuit: &config.CircuitConfig{ ParamsPath: "", AssetsPath: "", - ForkName: "darwin", + ForkName: "homestead", MinProverVersion: "v4.2.0", }, HighVersionCircuit: &config.CircuitConfig{ ParamsPath: "", AssetsPath: "", - ForkName: "darwinV2", + ForkName: "bernoulli", MinProverVersion: "v4.3.0", }, }, @@ -109,16 +109,12 @@ func setupCoordinator(t *testing.T, proversPerSession uint8, coordinatorURL stri } var chainConf params.ChainConfig - chainConf.LondonBlock = big.NewInt(0) - chainConf.BernoulliBlock = big.NewInt(0) - chainConf.CurieBlock = big.NewInt(0) for _, forkName := range forks { switch forkName { - case "darwinV2": - chainConf.DarwinTime = new(uint64) - chainConf.DarwinV2Time = new(uint64) - case "darwin": - chainConf.DarwinTime = new(uint64) + case "bernoulli": + chainConf.BernoulliBlock = big.NewInt(100) + case "homestead": + chainConf.HomesteadBlock = big.NewInt(0) } } @@ -201,7 +197,7 @@ func TestApis(t *testing.T) { func testHandshake(t *testing.T) { // Setup coordinator and http server. coordinatorURL := randomURL() - proofCollector, httpHandler := setupCoordinator(t, 1, coordinatorURL, []string{"darwinV2"}) + proofCollector, httpHandler := setupCoordinator(t, 1, coordinatorURL, []string{"homestead"}) defer func() { proofCollector.Stop() assert.NoError(t, httpHandler.Shutdown(context.Background())) @@ -214,7 +210,7 @@ func testHandshake(t *testing.T) { func testFailedHandshake(t *testing.T) { // Setup coordinator and http server. coordinatorURL := randomURL() - proofCollector, httpHandler := setupCoordinator(t, 1, coordinatorURL, []string{"darwinV2"}) + proofCollector, httpHandler := setupCoordinator(t, 1, coordinatorURL, []string{"homestead"}) defer func() { proofCollector.Stop() }() @@ -232,7 +228,7 @@ func testFailedHandshake(t *testing.T) { func testGetTaskBlocked(t *testing.T) { coordinatorURL := randomURL() - collector, httpHandler := setupCoordinator(t, 3, coordinatorURL, []string{"darwinV2"}) + collector, httpHandler := setupCoordinator(t, 3, coordinatorURL, []string{"homestead"}) defer func() { collector.Stop() assert.NoError(t, httpHandler.Shutdown(context.Background())) @@ -276,7 +272,7 @@ func testGetTaskBlocked(t *testing.T) { func testOutdatedProverVersion(t *testing.T) { coordinatorURL := randomURL() - collector, httpHandler := setupCoordinator(t, 3, coordinatorURL, []string{"darwinV2"}) + collector, httpHandler := setupCoordinator(t, 3, coordinatorURL, []string{"homestead"}) defer func() { collector.Stop() assert.NoError(t, httpHandler.Shutdown(context.Background())) @@ -303,7 +299,7 @@ func testOutdatedProverVersion(t *testing.T) { func testValidProof(t *testing.T) { coordinatorURL := randomURL() - collector, httpHandler := setupCoordinator(t, 3, coordinatorURL, []string{"darwinV2"}) + collector, httpHandler := setupCoordinator(t, 3, coordinatorURL, []string{"homestead"}) defer func() { collector.Stop() assert.NoError(t, httpHandler.Shutdown(context.Background())) From 7a5f5c712eb2f9982abf89c7fc895d5d097a2c32 Mon Sep 17 00:00:00 2001 From: colinlyguo Date: Mon, 18 Nov 2024 13:14:03 +0800 Subject: [PATCH 7/8] small tweak --- rollup/internal/controller/relayer/l1_relayer.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/rollup/internal/controller/relayer/l1_relayer.go b/rollup/internal/controller/relayer/l1_relayer.go index 34e55a6897..14d34ebb70 100644 --- a/rollup/internal/controller/relayer/l1_relayer.go +++ b/rollup/internal/controller/relayer/l1_relayer.go @@ -175,8 +175,7 @@ func (r *Layer1Relayer) ProcessGasPriceOracle() { } else if err != nil { return } - var data []byte - data, err = r.l1GasOracleABI.Pack("setL1BaseFeeAndBlobBaseFee", new(big.Int).SetUint64(baseFee), new(big.Int).SetUint64(blobBaseFee)) + data, err := r.l1GasOracleABI.Pack("setL1BaseFeeAndBlobBaseFee", new(big.Int).SetUint64(baseFee), new(big.Int).SetUint64(blobBaseFee)) if err != nil { log.Error("Failed to pack setL1BaseFeeAndBlobBaseFee", "block.Hash", block.Hash, "block.Height", block.Number, "block.BaseFee", baseFee, "block.BlobBaseFee", blobBaseFee, "err", err) return From 64f0b490979c9d1c341993716c102329791f5b6f Mon Sep 17 00:00:00 2001 From: colinlyguo Date: Mon, 18 Nov 2024 06:00:32 +0000 Subject: [PATCH 8/8] =?UTF-8?q?chore:=20auto=20version=20bump=E2=80=89[bot?= =?UTF-8?q?]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/version/version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/version/version.go b/common/version/version.go index 57588b9c02..59a4c37319 100644 --- a/common/version/version.go +++ b/common/version/version.go @@ -5,7 +5,7 @@ import ( "runtime/debug" ) -var tag = "v4.4.73" +var tag = "v4.4.74" var commit = func() string { if info, ok := debug.ReadBuildInfo(); ok {