From 78897ffaf0636e393d1ad0ff4ac4a412c5408186 Mon Sep 17 00:00:00 2001 From: Jared Wasinger Date: Wed, 9 Oct 2024 18:01:50 +0700 Subject: [PATCH] ensure AccessList calls setFeeDefaults so that fee fields are filled with proper values. modify setFeeDefaults to take a historical header value (doesn't work if EIP-1559 is disabled. everything other than AccessLists, which were introduced after/same-time (?) as 1559, calls setFeeDefaults with current block header. --- internal/ethapi/api.go | 10 +++++++--- internal/ethapi/transaction_args.go | 5 ++--- internal/ethapi/transaction_args_test.go | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 791bc40191..dc4a2c6f09 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -1627,15 +1627,19 @@ func AccessList(ctx context.Context, b Backend, blockNrOrHash rpc.BlockNumberOrH return nil, 0, nil, err } - // fill in missing fields based on the state at the specified block + // Ensure any missing fields are filled, extract the recipient and input data + if err = args.setFeeDefaults(ctx, b, header); err != nil { + return nil, 0, nil, err + } if args.Nonce == nil { nonce := hexutil.Uint64(db.GetNonce(args.from())) args.Nonce = &nonce } blockCtx := core.NewEVMBlockContext(header, NewChainContext(ctx, b), nil) - if err := args.CallDefaults(b.RPCGasCap(), blockCtx.BaseFee, b.ChainConfig().ChainID); err != nil { - return types.AccessList{}, 0, nil, err + if err = args.CallDefaults(b.RPCGasCap(), blockCtx.BaseFee, b.ChainConfig().ChainID); err != nil { + return nil, 0, nil, err } + var to common.Address if args.To != nil { to = *args.To diff --git a/internal/ethapi/transaction_args.go b/internal/ethapi/transaction_args.go index f9835a96da..56d887c1e3 100644 --- a/internal/ethapi/transaction_args.go +++ b/internal/ethapi/transaction_args.go @@ -100,7 +100,7 @@ func (args *TransactionArgs) setDefaults(ctx context.Context, b Backend, skipGas if err := args.setBlobTxSidecar(ctx); err != nil { return err } - if err := args.setFeeDefaults(ctx, b); err != nil { + if err := args.setFeeDefaults(ctx, b, b.CurrentHeader()); err != nil { return err } @@ -183,8 +183,7 @@ func (args *TransactionArgs) setDefaults(ctx context.Context, b Backend, skipGas } // setFeeDefaults fills in default fee values for unspecified tx fields. -func (args *TransactionArgs) setFeeDefaults(ctx context.Context, b Backend) error { - head := b.CurrentHeader() +func (args *TransactionArgs) setFeeDefaults(ctx context.Context, b Backend, head *types.Header) error { // Sanity check the EIP-4844 fee parameters. if args.BlobFeeCap != nil && args.BlobFeeCap.ToInt().Sign() == 0 { return errors.New("maxFeePerBlobGas, if specified, must be non-zero") diff --git a/internal/ethapi/transaction_args_test.go b/internal/ethapi/transaction_args_test.go index 5317828173..78fe22185c 100644 --- a/internal/ethapi/transaction_args_test.go +++ b/internal/ethapi/transaction_args_test.go @@ -238,7 +238,7 @@ func TestSetFeeDefaults(t *testing.T) { t.Fatalf("failed to set fork: %v", err) } got := test.in - err := got.setFeeDefaults(ctx, b) + err := got.setFeeDefaults(ctx, b, b.CurrentHeader()) if err != nil { if test.err == nil { t.Fatalf("test %d (%s): unexpected error: %s", i, test.name, err)