Skip to content

EIP-8037: missing test for intrinsic regular > cap with floor < cap #2865

@benaadams

Description

@benaadams

EIP-8037 enforces the per-tx gas-limit cap (16,777,216 from EIP-7825) against BOTH dimensions of the split intrinsic gas: regular and floor. Two cap-overflow fixtures exist:

Fixture regular intrinsic floor cost scenario
intrinsic_regular_gas_exceeds_cap 16,798,232 67,129,928 BOTH dimensions > cap
calldata_floor_exceeding_tx_gas_limit_cap 4,210,056 16,777,224 floor only > cap

The third cell is missing: regular intrinsic > cap with floor < cap. A client that applies the cap check only to the floor dimension (forgetting the regular dimension, or applying it only to max(regular, floor) and being saved by the floor in every existing test) passes both current fixtures while incorrectly accepting txs that should be rejected.

The scenario is constructable because regular and floor have non-overlapping contributors:

  • Floor = base + nonzero_bytes * TxDataNonZeroMultiplier * TotalCostFloorPerToken (calldata only).
  • Regular = base + calldata + access-list entries + EIP-7702 auth-list regular portion.

To push regular > cap (16.7M) while keeping floor < cap: small calldata + large access list (≈ 6,700 address entries at AccessAccountListEntry) or large auth list (authCount * PerAuthBaseRegular). Concrete example: an EIP-7702 transaction with ~1,300 authorizations and ~100 bytes of calldata would land regular ≫ cap, floor well under cap.

Suggested fixture: tests/amsterdam/eip8037_state_creation_gas_cost_increase/test_state_gas_pricing.py::test_intrinsic_regular_gas_exceeds_cap_floor_below_cap (or similar). Same shape as the existing two; same expected exception type.

Reference implementation: Nethermind PR NethermindEth/nethermind#11635 implements the per-dimension cap check (IntrinsicGas<TGasPolicy>.ExceedsCap) and would be exercised by this fixture today. A client lacking the regular-dimension check would pass current EIP-8037 fixtures but fail the proposed one.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions