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,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{}{}
}
}