Avatar for the bluealloy user
bluealloy
revm
BlogDocsChangelog

Performance History

Latest Results

fix(eip2780): charge warm cost when tx.to or delegation target is in access list Per EIP-2780 [1]: "Warmth discovered through an access list still applies and overrides the cold cost." "The delegation target incurs an additional COLD_ACCOUNT_COST_CODE if cold, or WARM_STATE_READ if already warm (e.g., if it appeared in the access list)." Two bugs fixed that violated the above rules: **Bug 1 — Recipient warm override** `eip2780_base_to_value_gas` always charged `COLD_ACCOUNT_ACCESS` for `tx.to` even when `tx.to` appeared in the transaction access list. Fix: add `to_is_warm: bool` to `Eip2780TxInfo` and populate it by scanning `tx.access_list()` in `validate_initial_tx_gas`. When set, `eip2780_base_to_value_gas` charges `warm_storage_read_cost` instead of `COLD_ACCOUNT_ACCESS` for the recipient. **Bug 2 — EIP-7702 delegation target warm/cold** The depth-0 extra access charge for EIP-7702-delegated recipients always used `COLD_ACCOUNT_ACCESS` regardless of whether the delegation target had been pre-warmed by the access list. The original implementation tried to check journal warmth at `make_call_frame` time, but `create_init_frame` (execution.rs) loads the delegation target unconditionally before `make_call_frame` runs, making the journal always report it as warm. Fix: check the transaction access list directly (same approach as `to_is_warm`) instead of querying journal state. This correctly distinguishes addresses pre-warmed by the access list from those warmed incidentally during frame setup. Tests added to `crates/ee-tests/src/eip2780.rs` covering both fixes. [1] https://eip.tools/eip/2780
mark0-cn:fix/eip2780-access-list-warmth
2 days ago
feat(eip2780): reduce intrinsic transaction gas Adds EIP-2780 (Reduce intrinsic transaction gas) on top of EIP-8037 / EIP-8038. Replaces the legacy 21,000 stipend with a decomposed model: TX_BASE_COST 12,300 (sender base + ECDSA + sender access/write) + to-based (per recipient kind) - self / precompile 0 - cold EOA/contract COLD_ACCOUNT_ACCESS (sourced from eip8038) - create CREATE_ACCESS (sourced from eip8038) + value-based - zero or self-transfer 0 - create with value TRANSFER_LOG_COST - other TRANSFER_LOG_COST + ACCOUNT_WRITE Adds an `enable_amsterdam_eip2780` config flag (auto-enabled at AMSTERDAM, paired with `Cfg::is_amsterdam_eip2780_enabled`) and `Eip2780TxInfo` to carry `sender`, `to`, `value`, and `to_is_precompile` into `GasParams::initial_tx_gas`. Validation in the handler reads the precompile set and threads the info down. `tx_transfer_log_cost`, `tx_account_write_cost`, and `tx_create_access_cost` GasIds are added and populated in the AMSTERDAM block. Implements the top-level execution charges from EIP-2780 in `EthFrame::make_call_frame` (depth == 0): - If recipient is EIP-7702-delegated, charge an additional `COLD_ACCOUNT_ACCESS` of regular gas. - If recipient is empty per EIP-161 and `tx.value > 0`, charge `new_account_state_gas(cpsb)` of state gas. The existing `last_frame_result` reservoir reconciliation refunds it on revert. Existing EIP-8037 helpers in `eip8037.rs` explicitly disable EIP-2780 so the state-gas-reservoir tests stay focused. Bumps one EIP-7708 test's gas limit to fit the new ~207k intrinsic for value transfer creating a new account. Adds an `eip2780.rs` ee-tests module covering self-transfer, EOA, empty-with-value, create with/without value, precompile delta, and the legacy-fallback path.
glam-devnet-eip2780
2 days ago

Latest Branches

CodSpeed Performance Gauge
+1%
fix(eip2780): charge warm cost when tx.to or delegation target is in …#3683
2 days ago
658efb8
mark0-cn:fix/eip2780-access-list-warmth
CodSpeed Performance Gauge
0%
2 days ago
f0e2552
glam-devnet-eip2780
CodSpeed Performance Gauge
0%
3 days ago
06cbb25
glam-devnet-eip8038
© 2026 CodSpeed Technology
Home Terms Privacy Docs