diff --git a/common/testcontainers/docker-compose.yml b/common/testcontainers/docker-compose.yml index 111e5d2aa3..c7664782fc 100644 --- a/common/testcontainers/docker-compose.yml +++ b/common/testcontainers/docker-compose.yml @@ -34,7 +34,7 @@ services: # Sets up the genesis configuration for the go-ethereum client from a JSON file. geth-genesis: - image: "ethereum/client-go:v1.13.14" + image: "ethereum/client-go:v1.14.0" command: --datadir=/data/execution init /data/execution/genesis.json volumes: - data:/data @@ -80,7 +80,7 @@ services: # Runs the go-ethereum execution client with the specified, unlocked account and necessary # APIs to allow for proof-of-stake consensus via Prysm. geth: - image: "ethereum/client-go:v1.13.14" + image: "ethereum/client-go:v1.14.0" command: - --http - --http.api=eth,net,web3 diff --git a/common/testcontainers/docker/l1geth/Dockerfile b/common/testcontainers/docker/l1geth/Dockerfile index 886227fed0..59fcb16c11 100644 --- a/common/testcontainers/docker/l1geth/Dockerfile +++ b/common/testcontainers/docker/l1geth/Dockerfile @@ -1,4 +1,4 @@ -FROM ethereum/client-go:v1.13.14 +FROM ethereum/client-go:v1.14.0 COPY password /l1geth/ COPY genesis.json /l1geth/ diff --git a/common/testcontainers/testcontainers.go b/common/testcontainers/testcontainers.go index fa93b1385c..8a523767fb 100644 --- a/common/testcontainers/testcontainers.go +++ b/common/testcontainers/testcontainers.go @@ -167,13 +167,13 @@ func (t *TestcontainerApps) GetPoSL1EndPoint() (string, error) { return contrainer.PortEndpoint(context.Background(), "8545/tcp", "http") } -// GetPoSL1Client returns a ethclient by dialing running PoS L1 client -func (t *TestcontainerApps) GetPoSL1Client() (*ethclient.Client, error) { +// GetPoSL1Client returns a raw rpc client by dialing the L1 node +func (t *TestcontainerApps) GetPoSL1Client() (*rpc.Client, error) { endpoint, err := t.GetPoSL1EndPoint() if err != nil { return nil, err } - return ethclient.Dial(endpoint) + return rpc.Dial(endpoint) } // GetDBEndPoint returns the endpoint of the running postgres container @@ -221,7 +221,6 @@ func (t *TestcontainerApps) GetGormDBClient() (*gorm.DB, error) { // GetL2GethClient returns a ethclient by dialing running L2Geth func (t *TestcontainerApps) GetL2GethClient() (*ethclient.Client, error) { - rpcCli, err := t.GetL2Client() if err != nil { return nil, err diff --git a/common/testcontainers/testcontainers_test.go b/common/testcontainers/testcontainers_test.go index 52271fb1cf..a0d4fa77f6 100644 --- a/common/testcontainers/testcontainers_test.go +++ b/common/testcontainers/testcontainers_test.go @@ -3,7 +3,6 @@ package testcontainers import ( "testing" - "github.com/scroll-tech/go-ethereum/ethclient" "github.com/stretchr/testify/assert" "gorm.io/gorm" ) @@ -14,7 +13,6 @@ func TestNewTestcontainerApps(t *testing.T) { err error endpoint string gormDBclient *gorm.DB - ethclient *ethclient.Client ) testApps := NewTestcontainerApps() @@ -32,17 +30,17 @@ func TestNewTestcontainerApps(t *testing.T) { endpoint, err = testApps.GetL2GethEndPoint() assert.NoError(t, err) assert.NotEmpty(t, endpoint) - ethclient, err = testApps.GetL2GethClient() + l2RawClient, err := testApps.GetL2Client() assert.NoError(t, err) - assert.NotNil(t, ethclient) + assert.NotNil(t, l2RawClient) assert.NoError(t, testApps.StartPoSL1Container()) endpoint, err = testApps.GetPoSL1EndPoint() assert.NoError(t, err) assert.NotEmpty(t, endpoint) - ethclient, err = testApps.GetPoSL1Client() + l1RawClient, err := testApps.GetPoSL1Client() assert.NoError(t, err) - assert.NotNil(t, ethclient) + assert.NotNil(t, l1RawClient) assert.NoError(t, testApps.StartWeb3SignerContainer(1)) endpoint, err = testApps.GetWeb3SignerEndpoint() diff --git a/common/version/version.go b/common/version/version.go index 6418ac17b7..d77ad10a66 100644 --- a/common/version/version.go +++ b/common/version/version.go @@ -5,7 +5,7 @@ import ( "runtime/debug" ) -var tag = "v4.7.5" +var tag = "v4.7.6" var commit = func() string { if info, ok := debug.ReadBuildInfo(); ok { diff --git a/rollup/cmd/gas_oracle/app/app.go b/rollup/cmd/gas_oracle/app/app.go index ec3a9738ae..536258882f 100644 --- a/rollup/cmd/gas_oracle/app/app.go +++ b/rollup/cmd/gas_oracle/app/app.go @@ -66,17 +66,26 @@ func action(ctx *cli.Context) error { registry := prometheus.DefaultRegisterer observability.Server(ctx, db) - l1client, err := ethclient.Dial(cfg.L1Config.Endpoint) + // Init L1 connection + l1RpcClient, err := rpc.Dial(cfg.L1Config.Endpoint) if err != nil { - log.Crit("failed to connect l1 geth", "config file", cfgFile, "error", err) + log.Crit("failed to dial raw RPC client to L1 endpoint", "endpoint", cfg.L1Config.Endpoint, "error", err) } + l1client := ethclient.NewClient(l1RpcClient) - l1watcher := watcher.NewL1WatcherClient(ctx.Context, l1client, cfg.L1Config.StartHeight, db, registry) + // sanity check config + if cfg.L1Config.RelayerConfig.GasOracleConfig.L1BaseFeeLimit == 0 || cfg.L1Config.RelayerConfig.GasOracleConfig.L1BlobBaseFeeLimit == 0 { + log.Crit("gas-oracle `l1_base_fee_limit` and `l1_blob_base_fee_limit` configs must be set") + } + + // Init watcher and relayer + l1watcher := watcher.NewL1WatcherClient(ctx.Context, l1RpcClient, cfg.L1Config.StartHeight, db, registry) l1relayer, err := relayer.NewLayer1Relayer(ctx.Context, db, cfg.L1Config.RelayerConfig, relayer.ServiceTypeL1GasOracle, registry) if err != nil { log.Crit("failed to create new l1 relayer", "config file", cfgFile, "error", err) } + // Start l1 watcher process go utils.LoopWithContext(subCtx, 10*time.Second, func(ctx context.Context) { // Fetch the latest block number to decrease the delay when fetching gas prices diff --git a/rollup/conf/config.json b/rollup/conf/config.json index 5ad9d26a40..537ac144b4 100644 --- a/rollup/conf/config.json +++ b/rollup/conf/config.json @@ -21,7 +21,9 @@ "check_committed_batches_window_minutes": 5, "l1_base_fee_default": 15000000000, "l1_blob_base_fee_default": 1, - "l1_blob_base_fee_threshold": 0 + "l1_blob_base_fee_threshold": 0, + "l1_base_fee_limit": 20000000000, + "l1_blob_base_fee_limit": 20000000000 }, "gas_oracle_sender_signer_config": { "signer_type": "PrivateKey", diff --git a/rollup/go.mod b/rollup/go.mod index 6229f23a3f..d20c991f33 100644 --- a/rollup/go.mod +++ b/rollup/go.mod @@ -51,7 +51,7 @@ require ( github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect github.com/crate-crypto/go-eth-kzg v1.4.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea // indirect + github.com/deckarep/golang-set v1.8.0 // indirect github.com/edsrzf/mmap-go v1.0.0 // indirect github.com/ethereum/c-kzg-4844/v2 v2.1.5 // indirect github.com/fjl/memsize v0.0.2 // indirect diff --git a/rollup/go.sum b/rollup/go.sum index b9b5c43c05..18ebbc4e66 100644 --- a/rollup/go.sum +++ b/rollup/go.sum @@ -88,8 +88,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea h1:j4317fAZh7X6GqbFowYdYdI0L9bwxL07jyPZIdepyZ0= -github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= +github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= +github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= diff --git a/rollup/internal/config/relayer.go b/rollup/internal/config/relayer.go index d82fd861a7..55f6393db9 100644 --- a/rollup/internal/config/relayer.go +++ b/rollup/internal/config/relayer.go @@ -109,6 +109,10 @@ type GasOracleConfig struct { L1BaseFeeDefault uint64 `json:"l1_base_fee_default"` L1BlobBaseFeeDefault uint64 `json:"l1_blob_base_fee_default"` + // Upper limit values for gas oracle updates + L1BaseFeeLimit uint64 `json:"l1_base_fee_limit"` + L1BlobBaseFeeLimit uint64 `json:"l1_blob_base_fee_limit"` + // L1BlobBaseFeeThreshold the threshold of L1 blob base fee to enter the default gas price mode L1BlobBaseFeeThreshold uint64 `json:"l1_blob_base_fee_threshold"` } diff --git a/rollup/internal/controller/relayer/l1_relayer.go b/rollup/internal/controller/relayer/l1_relayer.go index d9f0835d52..abc53907e1 100644 --- a/rollup/internal/controller/relayer/l1_relayer.go +++ b/rollup/internal/controller/relayer/l1_relayer.go @@ -173,6 +173,18 @@ func (r *Layer1Relayer) ProcessGasPriceOracle() { } else if err != nil { return } + // Cap base fee update at the configured upper limit + if limit := r.cfg.GasOracleConfig.L1BaseFeeLimit; baseFee > limit { + log.Error("L1 base fee exceed max limit, set to max limit", "baseFee", baseFee, "maxLimit", limit) + r.metrics.rollupL1RelayerGasPriceOracleFeeOverLimitTotal.Inc() + baseFee = limit + } + // Cap blob base fee update at the configured upper limit + if limit := r.cfg.GasOracleConfig.L1BlobBaseFeeLimit; blobBaseFee > limit { + log.Error("L1 blob base fee exceed max limit, set to max limit", "blobBaseFee", blobBaseFee, "maxLimit", limit) + r.metrics.rollupL1RelayerGasPriceOracleFeeOverLimitTotal.Inc() + blobBaseFee = limit + } 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) diff --git a/rollup/internal/controller/relayer/l1_relayer_metrics.go b/rollup/internal/controller/relayer/l1_relayer_metrics.go index 433c373964..b8dd0f555e 100644 --- a/rollup/internal/controller/relayer/l1_relayer_metrics.go +++ b/rollup/internal/controller/relayer/l1_relayer_metrics.go @@ -8,11 +8,12 @@ import ( ) type l1RelayerMetrics struct { - rollupL1RelayerGasPriceOraclerRunTotal prometheus.Counter - rollupL1RelayerLatestBaseFee prometheus.Gauge - rollupL1RelayerLatestBlobBaseFee prometheus.Gauge - rollupL1UpdateGasOracleConfirmedTotal prometheus.Counter - rollupL1UpdateGasOracleConfirmedFailedTotal prometheus.Counter + rollupL1RelayerGasPriceOraclerRunTotal prometheus.Counter + rollupL1RelayerLatestBaseFee prometheus.Gauge + rollupL1RelayerLatestBlobBaseFee prometheus.Gauge + rollupL1UpdateGasOracleConfirmedTotal prometheus.Counter + rollupL1UpdateGasOracleConfirmedFailedTotal prometheus.Counter + rollupL1RelayerGasPriceOracleFeeOverLimitTotal prometheus.Counter } var ( @@ -43,6 +44,10 @@ func initL1RelayerMetrics(reg prometheus.Registerer) *l1RelayerMetrics { Name: "rollup_layer1_update_gas_oracle_confirmed_failed_total", Help: "The total number of updating layer1 gas oracle confirmed failed", }), + rollupL1RelayerGasPriceOracleFeeOverLimitTotal: promauto.With(reg).NewCounter(prometheus.CounterOpts{ + Name: "rollup_layer1_gas_price_oracle_fee_over_limit_total", + Help: "The total number of times when a gas price oracle fee update went over the configured limit", + }), } }) return l1RelayerMetric diff --git a/rollup/internal/controller/sender/estimategas.go b/rollup/internal/controller/sender/estimategas.go index 3d29838655..d9c7ed802e 100644 --- a/rollup/internal/controller/sender/estimategas.go +++ b/rollup/internal/controller/sender/estimategas.go @@ -2,6 +2,7 @@ package sender import ( "errors" + "fmt" "math/big" "github.com/scroll-tech/go-ethereum" @@ -118,7 +119,7 @@ func (s *Sender) estimateGasLimit(to *common.Address, data []byte, sidecar *type gasLimitWithoutAccessList, err := s.client.EstimateGas(s.ctx, msg) if err != nil { - log.Error("estimateGasLimit EstimateGas failure without access list", "error", err) + log.Error("estimateGasLimit EstimateGas failure without access list", "error", err, "msg", fmt.Sprintf("%+v", msg)) return 0, nil, err } diff --git a/rollup/internal/controller/sender/sender.go b/rollup/internal/controller/sender/sender.go index cf23436a31..5b37473596 100644 --- a/rollup/internal/controller/sender/sender.go +++ b/rollup/internal/controller/sender/sender.go @@ -13,7 +13,7 @@ import ( "github.com/holiman/uint256" "github.com/prometheus/client_golang/prometheus" "github.com/scroll-tech/go-ethereum/common" - "github.com/scroll-tech/go-ethereum/consensus/misc" + "github.com/scroll-tech/go-ethereum/common/hexutil" gethTypes "github.com/scroll-tech/go-ethereum/core/types" "github.com/scroll-tech/go-ethereum/crypto/kzg4844" "github.com/scroll-tech/go-ethereum/ethclient" @@ -67,7 +67,8 @@ type FeeData struct { // Sender Transaction sender to send transaction to l1/l2 type Sender struct { config *config.SenderConfig - gethClient *gethclient.Client + rpcClient *rpc.Client // Raw RPC client + gethClient *gethclient.Client // Client to use for CreateAccessList client *ethclient.Client // The client to retrieve on chain data (read-only) writeClients []*ethclient.Client // The clients to send transactions to (write operations) transactionSigner *TransactionSigner @@ -141,6 +142,7 @@ func NewSender(ctx context.Context, config *config.SenderConfig, signerConfig *c sender := &Sender{ ctx: ctx, config: config, + rpcClient: rpcClient, gethClient: gethclient.New(rpcClient), client: client, writeClients: writeClients, @@ -841,8 +843,19 @@ func (s *Sender) getBlockNumberAndTimestampAndBaseFeeAndBlobFee(ctx context.Cont var blobBaseFee uint64 if excess := header.ExcessBlobGas; excess != nil { - blobBaseFee = misc.CalcBlobFee(*excess).Uint64() + // Leave it up to the L1 node to compute the correct blob base fee. + // Previously we would compute it locally using `CalcBlobFee`, but + // that approach requires syncing any future L1 configuration changes. + // Note: The fetched blob base fee might not correspond to the block + // that we fetched in the previous step, but this is acceptable. + var blobBaseFeeHex hexutil.Big + if err := s.rpcClient.CallContext(ctx, &blobBaseFeeHex, "eth_blobBaseFee"); err != nil { + return 0, 0, 0, 0, fmt.Errorf("failed to call eth_blobBaseFee, err: %w", err) + } + // A correct L1 node could not return a value that overflows uint64 + blobBaseFee = blobBaseFeeHex.ToInt().Uint64() } + // header.Number.Uint64() returns the pendingBlockNumber, so we minus 1 to get the latestBlockNumber. return header.Number.Uint64() - 1, header.Time, baseFee, blobBaseFee, nil } diff --git a/rollup/internal/controller/sender/sender_test.go b/rollup/internal/controller/sender/sender_test.go index 3417d7e410..5ad64e50c6 100644 --- a/rollup/internal/controller/sender/sender_test.go +++ b/rollup/internal/controller/sender/sender_test.go @@ -21,6 +21,7 @@ import ( gethTypes "github.com/scroll-tech/go-ethereum/core/types" "github.com/scroll-tech/go-ethereum/crypto" "github.com/scroll-tech/go-ethereum/crypto/kzg4844" + "github.com/scroll-tech/go-ethereum/ethclient" "github.com/scroll-tech/go-ethereum/log" "github.com/scroll-tech/go-ethereum/rpc" "github.com/stretchr/testify/assert" @@ -94,8 +95,9 @@ func setupEnv(t *testing.T) { assert.NoError(t, err) assert.NoError(t, migrate.ResetDB(sqlDB)) - l1Client, err := testApps.GetPoSL1Client() + l1RawClient, err := testApps.GetPoSL1Client() assert.NoError(t, err) + l1Client := ethclient.NewClient(l1RawClient) chainID, err := l1Client.ChainID(context.Background()) assert.NoError(t, err) diff --git a/rollup/internal/controller/watcher/l1_watcher.go b/rollup/internal/controller/watcher/l1_watcher.go index 1b67089a3a..3a93589a73 100644 --- a/rollup/internal/controller/watcher/l1_watcher.go +++ b/rollup/internal/controller/watcher/l1_watcher.go @@ -3,13 +3,15 @@ package watcher import ( "context" "errors" + "fmt" "math/big" "github.com/prometheus/client_golang/prometheus" - "github.com/scroll-tech/go-ethereum/consensus/misc" + "github.com/scroll-tech/go-ethereum/common/hexutil" gethTypes "github.com/scroll-tech/go-ethereum/core/types" "github.com/scroll-tech/go-ethereum/ethclient" "github.com/scroll-tech/go-ethereum/log" + "github.com/scroll-tech/go-ethereum/rpc" "gorm.io/gorm" "scroll-tech/common/types" @@ -20,7 +22,8 @@ import ( // L1WatcherClient will listen for smart contract events from Eth L1. type L1WatcherClient struct { ctx context.Context - client *ethclient.Client + rpcClient *rpc.Client // Raw RPC client + client *ethclient.Client // Go SDK RPC client l1BlockOrm *orm.L1Block // The height of the block that the watcher has retrieved header rlp @@ -30,7 +33,7 @@ type L1WatcherClient struct { } // NewL1WatcherClient returns a new instance of L1WatcherClient. -func NewL1WatcherClient(ctx context.Context, client *ethclient.Client, startHeight uint64, db *gorm.DB, reg prometheus.Registerer) *L1WatcherClient { +func NewL1WatcherClient(ctx context.Context, rpcClient *rpc.Client, startHeight uint64, db *gorm.DB, reg prometheus.Registerer) *L1WatcherClient { l1BlockOrm := orm.NewL1Block(db) savedL1BlockHeight, err := l1BlockOrm.GetLatestL1BlockHeight(ctx) if err != nil { @@ -43,7 +46,8 @@ func NewL1WatcherClient(ctx context.Context, client *ethclient.Client, startHeig return &L1WatcherClient{ ctx: ctx, - client: client, + rpcClient: rpcClient, + client: ethclient.NewClient(rpcClient), l1BlockOrm: l1BlockOrm, processedBlockHeight: savedL1BlockHeight, @@ -80,7 +84,17 @@ func (w *L1WatcherClient) FetchBlockHeader(blockHeight uint64) error { var blobBaseFee uint64 if excess := block.ExcessBlobGas; excess != nil { - blobBaseFee = misc.CalcBlobFee(*excess).Uint64() + // Leave it up to the L1 node to compute the correct blob base fee. + // Previously we would compute it locally using `CalcBlobFee`, but + // that approach requires syncing any future L1 configuration changes. + // Note: The fetched blob base fee might not correspond to the block + // that we fetched in the previous step, but this is acceptable. + var blobBaseFeeHex hexutil.Big + if err := w.rpcClient.CallContext(w.ctx, &blobBaseFeeHex, "eth_blobBaseFee"); err != nil { + return fmt.Errorf("failed to call eth_blobBaseFee, err: %w", err) + } + // A correct L1 node could not return a value that overflows uint64 + blobBaseFee = blobBaseFeeHex.ToInt().Uint64() } l1Block := orm.L1Block{ diff --git a/rollup/internal/controller/watcher/l1_watcher_test.go b/rollup/internal/controller/watcher/l1_watcher_test.go index 3183b4e346..7b5d929ebf 100644 --- a/rollup/internal/controller/watcher/l1_watcher_test.go +++ b/rollup/internal/controller/watcher/l1_watcher_test.go @@ -21,10 +21,10 @@ import ( func setupL1Watcher(t *testing.T) (*L1WatcherClient, *gorm.DB) { db := setupDB(t) - client, err := testApps.GetPoSL1Client() + l1RawClient, err := testApps.GetPoSL1Client() assert.NoError(t, err) l1Cfg := cfg.L1Config - watcher := NewL1WatcherClient(context.Background(), client, l1Cfg.StartHeight, db, nil) + watcher := NewL1WatcherClient(context.Background(), l1RawClient, l1Cfg.StartHeight, db, nil) return watcher, db } diff --git a/rollup/tests/bridge_test.go b/rollup/tests/bridge_test.go index 837e1a054d..5d69f2c918 100644 --- a/rollup/tests/bridge_test.go +++ b/rollup/tests/bridge_test.go @@ -19,6 +19,7 @@ import ( "github.com/scroll-tech/go-ethereum/crypto" "github.com/scroll-tech/go-ethereum/ethclient" "github.com/scroll-tech/go-ethereum/log" + "github.com/scroll-tech/go-ethereum/rpc" "github.com/stretchr/testify/assert" "gorm.io/gorm" @@ -37,8 +38,9 @@ var ( rollupApp *bcmd.MockApp // clients - l1Client *ethclient.Client - l2Client *ethclient.Client + l1RawClient *rpc.Client + l1Client *ethclient.Client + l2Client *ethclient.Client l1Auth *bind.TransactOpts l2Auth *bind.TransactOpts @@ -91,8 +93,9 @@ func setupEnv(t *testing.T) { assert.NoError(t, testApps.StartPoSL1Container()) rollupApp = bcmd.NewRollupApp(testApps, "../conf/config.json") - l1Client, err = testApps.GetPoSL1Client() + l1RawClient, err = testApps.GetPoSL1Client() assert.NoError(t, err) + l1Client = ethclient.NewClient(l1RawClient) l2Client, err = testApps.GetL2GethClient() assert.NoError(t, err) l1GethChainID, err = l1Client.ChainID(context.Background()) diff --git a/rollup/tests/gas_oracle_test.go b/rollup/tests/gas_oracle_test.go index 1cace3bd11..e069b26baf 100644 --- a/rollup/tests/gas_oracle_test.go +++ b/rollup/tests/gas_oracle_test.go @@ -36,7 +36,7 @@ func testImportL1GasPrice(t *testing.T) { // Create L1Watcher startHeight, err := l1Client.BlockNumber(context.Background()) assert.NoError(t, err) - l1Watcher := watcher.NewL1WatcherClient(context.Background(), l1Client, startHeight-1, db, nil) + l1Watcher := watcher.NewL1WatcherClient(context.Background(), l1RawClient, startHeight-1, db, nil) // fetch new blocks number, err := l1Client.BlockNumber(context.Background()) @@ -110,7 +110,7 @@ func testImportDefaultL1GasPriceDueToL1GasPriceSpike(t *testing.T) { // Create L1Watcher startHeight, err := l1Client.BlockNumber(context.Background()) assert.NoError(t, err) - l1Watcher := watcher.NewL1WatcherClient(context.Background(), l1Client, startHeight-2, db, nil) + l1Watcher := watcher.NewL1WatcherClient(context.Background(), l1RawClient, startHeight-2, db, nil) // fetch new blocks number, err := l1Client.BlockNumber(context.Background())