Skip to content

Commit 692fd0f

Browse files
committed
fix gas-oracle
1 parent c178e2c commit 692fd0f

File tree

12 files changed

+52
-32
lines changed

12 files changed

+52
-32
lines changed

common/testcontainers/testcontainers.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,16 @@ func (t *TestcontainerApps) GetPoSL1EndPoint() (string, error) {
168168
}
169169

170170
// GetPoSL1Client returns a ethclient by dialing running PoS L1 client
171-
func (t *TestcontainerApps) GetPoSL1Client() (*ethclient.Client, error) {
171+
func (t *TestcontainerApps) GetPoSL1Client() (*rpc.Client, *ethclient.Client, error) {
172172
endpoint, err := t.GetPoSL1EndPoint()
173173
if err != nil {
174-
return nil, err
174+
return nil, nil, err
175+
}
176+
rpcClient, err := rpc.Dial(endpoint)
177+
if err != nil {
178+
return nil, nil, fmt.Errorf("failed to dial L1 rpc endpoint, endpoint: %s, err: %w", endpoint, err)
175179
}
176-
return ethclient.Dial(endpoint)
180+
return rpcClient, ethclient.NewClient(rpcClient), nil
177181
}
178182

179183
// GetDBEndPoint returns the endpoint of the running postgres container
@@ -220,13 +224,13 @@ func (t *TestcontainerApps) GetGormDBClient() (*gorm.DB, error) {
220224
}
221225

222226
// GetL2GethClient returns a ethclient by dialing running L2Geth
223-
func (t *TestcontainerApps) GetL2GethClient() (*ethclient.Client, error) {
227+
func (t *TestcontainerApps) GetL2GethClient() (*rpc.Client, *ethclient.Client, error) {
224228

225229
rpcCli, err := t.GetL2Client()
226230
if err != nil {
227-
return nil, err
231+
return nil, nil, err
228232
}
229-
return ethclient.NewClient(rpcCli), nil
233+
return rpcCli, ethclient.NewClient(rpcCli), nil
230234
}
231235

232236
// GetL2GethClient returns a rpc client by dialing running L2Geth

common/testcontainers/testcontainers_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,15 @@ func TestNewTestcontainerApps(t *testing.T) {
3232
endpoint, err = testApps.GetL2GethEndPoint()
3333
assert.NoError(t, err)
3434
assert.NotEmpty(t, endpoint)
35-
ethclient, err = testApps.GetL2GethClient()
35+
_, ethclient, err = testApps.GetL2GethClient()
3636
assert.NoError(t, err)
3737
assert.NotNil(t, ethclient)
3838

3939
assert.NoError(t, testApps.StartPoSL1Container())
4040
endpoint, err = testApps.GetPoSL1EndPoint()
4141
assert.NoError(t, err)
4242
assert.NotEmpty(t, endpoint)
43-
ethclient, err = testApps.GetPoSL1Client()
43+
_, ethclient, err = testApps.GetPoSL1Client()
4444
assert.NoError(t, err)
4545
assert.NotNil(t, ethclient)
4646

rollup/cmd/gas_oracle/app/app.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,13 @@ func action(ctx *cli.Context) error {
6666
registry := prometheus.DefaultRegisterer
6767
observability.Server(ctx, db)
6868

69-
l1client, err := ethclient.Dial(cfg.L1Config.Endpoint)
69+
l1RpcClient, err := rpc.Dial(cfg.L1Config.Endpoint)
7070
if err != nil {
71-
log.Crit("failed to connect l1 geth", "config file", cfgFile, "error", err)
71+
log.Crit("failed to dial raw RPC client to L1 endpoint", "endpoint", cfg.L1Config.Endpoint, "error", err)
7272
}
73+
l1client := ethclient.NewClient(l1RpcClient)
7374

74-
l1watcher := watcher.NewL1WatcherClient(ctx.Context, l1client, cfg.L1Config.StartHeight, db, registry)
75+
l1watcher := watcher.NewL1WatcherClient(ctx.Context, l1RpcClient, cfg.L1Config.StartHeight, db, registry)
7576

7677
l1relayer, err := relayer.NewLayer1Relayer(ctx.Context, db, cfg.L1Config.RelayerConfig, relayer.ServiceTypeL1GasOracle, registry)
7778
if err != nil {

rollup/internal/controller/relayer/relayer_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func setupEnv(t *testing.T) {
7474
cfg.L2Config.RelayerConfig.ChainMonitor.BaseURL = "http://localhost:" + svrPort
7575

7676
// Create l2geth client.
77-
l2Cli, err = testApps.GetL2GethClient()
77+
_, l2Cli, err = testApps.GetL2GethClient()
7878
assert.NoError(t, err)
7979

8080
templateBlockTrace1, err := os.ReadFile("../../../testdata/blockTrace_02.json")

rollup/internal/controller/sender/sender.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ type FeeData struct {
6767
// Sender Transaction sender to send transaction to l1/l2
6868
type Sender struct {
6969
config *config.SenderConfig
70-
rpcClient *rpc.Client // Raw RPC Client
70+
rpcClient *rpc.Client // Raw RPC client
7171
gethClient *gethclient.Client // Client to use for CreateAccessList
7272
client *ethclient.Client // The client to retrieve on chain data (read-only)
7373
writeClients []*ethclient.Client // The clients to send transactions to (write operations)
@@ -844,6 +844,8 @@ func (s *Sender) getBlockNumberAndTimestampAndBaseFeeAndBlobFee(ctx context.Cont
844844
// Leave it up to the L1 node to return the correct blob base fee.
845845
// Previously we would compute it locally using `CalcBlobFee`, but
846846
// that needs to be in sync with the L1 node's configuration.
847+
// Note: The fetched blob base fee might not correspond to the block
848+
// that we fetched in the previous step, but this is acceptable.
847849
var hex hexutil.Big
848850
if err := s.rpcClient.CallContext(ctx, &hex, "eth_blobBaseFee"); err != nil {
849851
return 0, 0, 0, 0, fmt.Errorf("failed to call eth_blobBaseFee, err: %w", err)

rollup/internal/controller/sender/sender_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ func setupEnv(t *testing.T) {
9494
assert.NoError(t, err)
9595
assert.NoError(t, migrate.ResetDB(sqlDB))
9696

97-
l1Client, err := testApps.GetPoSL1Client()
97+
_, l1Client, err := testApps.GetPoSL1Client()
9898
assert.NoError(t, err)
9999

100100
chainID, err := l1Client.ChainID(context.Background())

rollup/internal/controller/watcher/l1_watcher.go

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@ package watcher
33
import (
44
"context"
55
"errors"
6+
"fmt"
67
"math/big"
78

9+
"github.com/ethereum/go-ethereum/common/hexutil"
810
"github.com/prometheus/client_golang/prometheus"
9-
"github.com/scroll-tech/go-ethereum/consensus/misc"
1011
gethTypes "github.com/scroll-tech/go-ethereum/core/types"
1112
"github.com/scroll-tech/go-ethereum/ethclient"
1213
"github.com/scroll-tech/go-ethereum/log"
14+
"github.com/scroll-tech/go-ethereum/rpc"
1315
"gorm.io/gorm"
1416

1517
"scroll-tech/common/types"
@@ -20,7 +22,8 @@ import (
2022
// L1WatcherClient will listen for smart contract events from Eth L1.
2123
type L1WatcherClient struct {
2224
ctx context.Context
23-
client *ethclient.Client
25+
rpcClient *rpc.Client // Raw RPC client
26+
client *ethclient.Client // Go SDK RPC client
2427
l1BlockOrm *orm.L1Block
2528

2629
// The height of the block that the watcher has retrieved header rlp
@@ -30,7 +33,7 @@ type L1WatcherClient struct {
3033
}
3134

3235
// NewL1WatcherClient returns a new instance of L1WatcherClient.
33-
func NewL1WatcherClient(ctx context.Context, client *ethclient.Client, startHeight uint64, db *gorm.DB, reg prometheus.Registerer) *L1WatcherClient {
36+
func NewL1WatcherClient(ctx context.Context, rpcClient *rpc.Client, startHeight uint64, db *gorm.DB, reg prometheus.Registerer) *L1WatcherClient {
3437
l1BlockOrm := orm.NewL1Block(db)
3538
savedL1BlockHeight, err := l1BlockOrm.GetLatestL1BlockHeight(ctx)
3639
if err != nil {
@@ -43,7 +46,8 @@ func NewL1WatcherClient(ctx context.Context, client *ethclient.Client, startHeig
4346

4447
return &L1WatcherClient{
4548
ctx: ctx,
46-
client: client,
49+
rpcClient: rpcClient,
50+
client: ethclient.NewClient(rpcClient),
4751
l1BlockOrm: l1BlockOrm,
4852

4953
processedBlockHeight: savedL1BlockHeight,
@@ -78,10 +82,16 @@ func (w *L1WatcherClient) FetchBlockHeader(blockHeight uint64) error {
7882
baseFee = block.BaseFee.Uint64()
7983
}
8084

81-
var blobBaseFee uint64
82-
if excess := block.ExcessBlobGas; excess != nil {
83-
blobBaseFee = misc.CalcBlobFee(*excess).Uint64()
85+
// Leave it up to the L1 node to return the correct blob base fee.
86+
// Previously we would compute it locally using `CalcBlobFee`, but
87+
// that needs to be in sync with the L1 node's configuration.
88+
// Note: The fetched blob base fee might not correspond to the block
89+
// 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 {
92+
return fmt.Errorf("failed to call eth_blobBaseFee, err: %w", err)
8493
}
94+
blobBaseFee := hex.ToInt().Uint64()
8595

8696
l1Block := orm.L1Block{
8797
Number: blockHeight,

rollup/internal/controller/watcher/l1_watcher_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ import (
2121

2222
func setupL1Watcher(t *testing.T) (*L1WatcherClient, *gorm.DB) {
2323
db := setupDB(t)
24-
client, err := testApps.GetPoSL1Client()
24+
rawClient, _, err := testApps.GetPoSL1Client()
2525
assert.NoError(t, err)
2626
l1Cfg := cfg.L1Config
27-
watcher := NewL1WatcherClient(context.Background(), client, l1Cfg.StartHeight, db, nil)
27+
watcher := NewL1WatcherClient(context.Background(), rawClient, l1Cfg.StartHeight, db, nil)
2828
return watcher, db
2929
}
3030

rollup/tests/bridge_test.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"github.com/scroll-tech/go-ethereum/crypto"
2020
"github.com/scroll-tech/go-ethereum/ethclient"
2121
"github.com/scroll-tech/go-ethereum/log"
22+
"github.com/scroll-tech/go-ethereum/rpc"
2223
"github.com/stretchr/testify/assert"
2324
"gorm.io/gorm"
2425

@@ -37,8 +38,10 @@ var (
3738
rollupApp *bcmd.MockApp
3839

3940
// clients
40-
l1Client *ethclient.Client
41-
l2Client *ethclient.Client
41+
l1RawClient *rpc.Client
42+
l1Client *ethclient.Client
43+
l2RawClient *rpc.Client
44+
l2Client *ethclient.Client
4245

4346
l1Auth *bind.TransactOpts
4447
l2Auth *bind.TransactOpts
@@ -91,9 +94,9 @@ func setupEnv(t *testing.T) {
9194
assert.NoError(t, testApps.StartPoSL1Container())
9295
rollupApp = bcmd.NewRollupApp(testApps, "../conf/config.json")
9396

94-
l1Client, err = testApps.GetPoSL1Client()
97+
l1RawClient, l1Client, err = testApps.GetPoSL1Client()
9598
assert.NoError(t, err)
96-
l2Client, err = testApps.GetL2GethClient()
99+
l2RawClient, l2Client, err = testApps.GetL2GethClient()
97100
assert.NoError(t, err)
98101
l1GethChainID, err = l1Client.ChainID(context.Background())
99102
assert.NoError(t, err)

rollup/tests/gas_oracle_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func testImportL1GasPrice(t *testing.T) {
3636
// Create L1Watcher
3737
startHeight, err := l1Client.BlockNumber(context.Background())
3838
assert.NoError(t, err)
39-
l1Watcher := watcher.NewL1WatcherClient(context.Background(), l1Client, startHeight-1, db, nil)
39+
l1Watcher := watcher.NewL1WatcherClient(context.Background(), l1RawClient, startHeight-1, db, nil)
4040

4141
// fetch new blocks
4242
number, err := l1Client.BlockNumber(context.Background())
@@ -110,7 +110,7 @@ func testImportDefaultL1GasPriceDueToL1GasPriceSpike(t *testing.T) {
110110
// Create L1Watcher
111111
startHeight, err := l1Client.BlockNumber(context.Background())
112112
assert.NoError(t, err)
113-
l1Watcher := watcher.NewL1WatcherClient(context.Background(), l1Client, startHeight-2, db, nil)
113+
l1Watcher := watcher.NewL1WatcherClient(context.Background(), l1RawClient, startHeight-2, db, nil)
114114

115115
// fetch new blocks
116116
number, err := l1Client.BlockNumber(context.Background())

0 commit comments

Comments
 (0)