diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 6b77640807..f19cee7c23 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -1172,17 +1172,19 @@ func AccessList(ctx context.Context, b Backend, blockNrOrHash rpc.BlockNumberOrH } // Prevent redundant operations if args contain more authorizations than EVM may handle - maxAuthorizations := uint64(*args.Gas) / params.TxAuthTupleGas - if uint64(len(args.AuthorizationList)) <= maxAuthorizations { - for _, auth := range args.AuthorizationList { - // Duplicating stateTransition.validateAuthorization() logic - if (!auth.ChainID.IsZero() && auth.ChainID.CmpBig(b.ChainConfig().ChainID) != 0) || auth.Nonce+1 < auth.Nonce { - continue - } + maxAuthorizations := uint64(*args.Gas) / params.CallNewAccountGas + if uint64(len(args.AuthorizationList)) > maxAuthorizations { + return nil, 0, nil, fmt.Errorf("insufficient gas to process all authorizations") + } - if authority, err := auth.Authority(); err == nil { - addressesToExclude[authority] = struct{}{} - } + for _, auth := range args.AuthorizationList { + // Duplicating stateTransition.validateAuthorization() logic + if (!auth.ChainID.IsZero() && auth.ChainID.CmpBig(b.ChainConfig().ChainID) != 0) || auth.Nonce+1 < auth.Nonce { + continue + } + + if authority, err := auth.Authority(); err == nil { + addressesToExclude[authority] = struct{}{} } }