internal/ethapi: return an error in eth_createAccessList on too many authorizations

This commit is contained in:
sashabeton 2025-03-18 20:34:59 +01:00
parent 6e18588f80
commit 19c1f8ebcd

View file

@ -1172,8 +1172,11 @@ func AccessList(ctx context.Context, b Backend, blockNrOrHash rpc.BlockNumberOrH
} }
// Prevent redundant operations if args contain more authorizations than EVM may handle // Prevent redundant operations if args contain more authorizations than EVM may handle
maxAuthorizations := uint64(*args.Gas) / params.TxAuthTupleGas maxAuthorizations := uint64(*args.Gas) / params.CallNewAccountGas
if uint64(len(args.AuthorizationList)) <= maxAuthorizations { if uint64(len(args.AuthorizationList)) > maxAuthorizations {
return nil, 0, nil, fmt.Errorf("insufficient gas to process all authorizations")
}
for _, auth := range args.AuthorizationList { for _, auth := range args.AuthorizationList {
// Duplicating stateTransition.validateAuthorization() logic // Duplicating stateTransition.validateAuthorization() logic
if (!auth.ChainID.IsZero() && auth.ChainID.CmpBig(b.ChainConfig().ChainID) != 0) || auth.Nonce+1 < auth.Nonce { if (!auth.ChainID.IsZero() && auth.ChainID.CmpBig(b.ChainConfig().ChainID) != 0) || auth.Nonce+1 < auth.Nonce {
@ -1184,7 +1187,6 @@ func AccessList(ctx context.Context, b Backend, blockNrOrHash rpc.BlockNumberOrH
addressesToExclude[authority] = struct{}{} addressesToExclude[authority] = struct{}{}
} }
} }
}
// Create an initial tracer // Create an initial tracer
prevTracer := logger.NewAccessListTracer(nil, addressesToExclude) prevTracer := logger.NewAccessListTracer(nil, addressesToExclude)