You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Update EIP-8141: pin the initial accessed_addresses set for frame transactions - #12113
The spec currently doesn't specify the initial warm set for frame-transaction processing, which lets gas_used diverge on the first tx.sender access (some clients charge it COLD, EIP-2929/3651 warm it). This pins accessed_addresses to the EIP-2929/EIP-3651 set (tx.sender, coinbase, precompiles) minus any frame target, whose warm/cold access is already charged within each frame's own gas limit per the Rationale. Also: fixed linting.
The exception reads as a subtraction from the set, which makes it ambiguous exactly where the sets overlap. A frame with target = None resolves to tx.sender, and nothing stops a frame from targeting the coinbase or a precompile, so "except that no frame target is pre-warmed" can be read as removing those from the initial set. Phrasing it as "being a frame target does not warm an address" would leave the 2929 and 3651 entries untouched.
The payer looks like the same divergence class and is not covered here. APPROVE(APPROVE_PAYMENT) collects max_cost from an address the protocol did not touch before, and the spec does not say whether that collection warms it. A later frame doing BALANCE(payer) or calling into a paymaster then costs 100 or 2600 depending on the client. The sponsored flow in the Rationale hits this on the post op frame, so it is not a corner case.
ORIGIN ends up warm or cold depending on frame mode: it is tx.sender in a SENDER frame and ENTRY_POINT elsewhere, and the latter is deliberately not pre-warmed. 2929 warms the origin because the protocol touched it, so this is a real departure and worth stating rather than leaving to inference.
accessed_storage_keys is left unpinned. There is no access list here so the empty set is the only sensible reading, but the same sentence may as well say it.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The spec currently doesn't specify the initial warm set for frame-transaction processing, which lets
gas_useddiverge on the firsttx.senderaccess (some clients charge it COLD, EIP-2929/3651 warm it). This pinsaccessed_addressesto the EIP-2929/EIP-3651 set (tx.sender, coinbase, precompiles) minus any frame target, whose warm/cold access is already charged within each frame's own gas limit per the Rationale. Also: fixed linting.