From 5d6db752cf6b869c6c3d987948da814b607b546c Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Tue, 21 Oct 2025 04:35:56 +0100 Subject: [PATCH 01/19] New EIP: Temporal Locality Gas Discounts --- EIPS/eip-803x.md | 499 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 499 insertions(+) create mode 100644 EIPS/eip-803x.md diff --git a/EIPS/eip-803x.md b/EIPS/eip-803x.md new file mode 100644 index 00000000000000..4c3ac053e88cc9 --- /dev/null +++ b/EIPS/eip-803x.md @@ -0,0 +1,499 @@ +--- +eip: 803x +title: Temporal Locality Gas Discounts +description: Multi‑block temporal locality discounts for state and account access +author: Ben Adams (@benaadams), Toni Wahrstätter (@nerolation), Amirul Ashraf (@asdacap) +discussions-to: https://ethereum-magicians.org/ +status: Draft +type: Standards Track +category: Core +created: 2025-10-20 +requires: 2929, 7928 +--- + +## Abstract + +This proposal introduces a deterministic, multi-block discount for the first +access to accounts and storage keys in a transaction. The discount depends on +the number of blocks since that item was last accessed and decays smoothly to +zero over a fixed window of recent blocks. Intra-block warming semantics remain +unchanged (no block-level warming). + +The mechanism relies on block-level access lists ([EIP-7928](./eip-7928.md)) committed in headers so that a newly synced node can price the first block it validates without executing historical blocks. + +## Motivation + +Current warm and cold access pricing matches client realities but creates a +usability gap. However any gas saving that depends on other transactions in the same-block is capricious for users: they sign a transaction at a given price but might get a cheaper execution only if other transactions in the same block happen to touch the same items. That saving is both inherently not knowable or actionalable to users at submission time and thus has no impact on behaviour. + +This EIP rewards short-term temporal locality across block boundaries while +preserving the familiar per-transaction warm set. The discount depends only on +prior blocks, so it is deterministic at submission, predictable across +builders, and behaviour-modifying in a useful direction. + +As the saving depends only on publicly observable prior-block activity, it +is knowable at submission time. Unlike same-block effects, it is therefore +behaviour-shaping rather than incidental. It nudges workloads +that naturally cluster accesses to keep doing so, matching how clients +amortise repeated recent accesses. + +This EIP is intentionally scoped to per-transaction warming and does not apply +intra-block warming across transactions. + +## Specification + +### Terminology and constants + +The following names are used for clarity. Concrete values can be updated by +governance without changing the mechanism. + +- `window_size_blocks` - number of recent blocks over which a discount may + apply. Default: `63`. +- `current_block_number` - the block number of the transaction being executed. +- `last_access_block_number(item)` - the most recent block number strictly less + than `current_block_number` in which `item` was accessed by an executed + transaction. If unknown or older than `window_size_blocks`, it is treated as + not found. +- `block_distance_in_blocks(item)` - defined as + `current_block_number - last_access_block_number(item)` when the latter is + found, else a value greater than `window_size_blocks`. + +Gas constants from existing behaviour: + +- `sload_warm_gas_cost = 100` +- `sload_cold_surcharge_gas = 2100` +- `account_warm_gas_cost = 100` +- `account_cold_surcharge_gas = 2600` + +Discount caps (this EIP treats maximum as full cold surcharge, minimum as zero): + +- `discount_max_sload = sload_cold_surcharge_gas` +- `discount_min_sload = 0` +- `discount_max_account = account_cold_surcharge_gas` +- `discount_min_account = 0` + +This means the closest prior-block usage allows the first access in a +transaction to be charged at warm cost, and the far edge of the window trends +to the normal cold-plus-warm cost. + +### Scope of operations + +This EIP applies the discount to the **first access in a transaction** of: + +- Storage keys accessed by `SLOAD` and by any operation that first reads a slot + as part of its semantics (for example, `SSTORE`'s read step). +- Account touches that incur the cold account access surcharge under the + current gas schedule, including but not limited to: + `BALANCE`, `EXTCODEHASH`, `EXTCODESIZE`, `EXTCODECOPY`, and the target + account of `CALL`, `CALLCODE`, `DELEGATECALL`, `STATICCALL`. + +Writes are affected **only** to the extent they perform an initial read or +account touch that would have been charged as cold. Write-specific costs and +any refund semantics are unchanged. + +Precompiles remain unchanged and are always warm. Because they do not pay a +cold surcharge, no discount is applied to precompile calls. + +Access lists per EIP-2930 remain effective and, when present, pre-warm the +listed addresses and storage keys at the start of the transaction. For items +that are pre-warmed by an access list, this temporal discount does not apply. + +### Discount function + +Define a smooth, monotone falloff within the window using the programming form +of smoothstep (clamped cubic Hermite interpolation). + +``` +Let d = current_block_number - last_access_block_number(item) +Let w = window_size_blocks +Let D_max = maximum discount, D_min = minimum discount (usually 0) +Let x = clamp((d - 1.0) / (w - 1.0), 0.0, 1.0) +Then: + discount(d) = D_min + (D_max - D_min) * (1.0 - (3x^2 - 2x^3)) + cost(d) = warm_gas_cost + max(0, cold_surcharge - discount(d)) +``` + +Programattically + +- `normalized_distance = (block_distance_in_blocks - 1) / + (window_size_blocks - 1)` clamped to `[0, 1]`. This maps distance `1` to `0` + and distance `window_size_blocks` to `1`. +- `smoothstep_value = normalized_distance * normalized_distance * (3 - 2 * + normalized_distance)`. +- `discount_factor = 1 - smoothstep_value`. This is `1` at distance `1` and `0` + at distance `window_size_blocks`. + +For a given opcode family with parameters `discount_max` and `discount_min`, +the integer discount to apply to the **cold surcharge** is: + +``` +if block_distance_in_blocks <= 0 or + block_distance_in_blocks > window_size_blocks: + discount_gas = 0 +else: + discount_gas = discount_min + + round_to_nearest((discount_max - discount_min) * discount_factor)) +``` + +Note: this should be scaled to interger space rather than using floating points. An example is given to do this in reference implementation. + +`round_to_nearest` is round half up for integers in this specification. Any +consistent rule is acceptable if implemented consistently across clients. + +This mechanism is a **discount**, not a refund. It reduces gas charged upfront +for a cold surcharge; it does not emit a rebate and does not affect refund +accounting or receipts. + +### Charging rules (per transaction) + +For the first access to an `item` **within a transaction**: + +1. If `item` is already warm in this transaction due to same-transaction rules + or pre-warmed via a transaction access list, charge the warm cost defined + today. No temporal discount applies. +2. Otherwise compute `block_distance_in_blocks(item)`. If + `1 <= block_distance_in_blocks(item) <= window_size_blocks`, apply the + discount to the cold surcharge: + - Storage read first access cost: + - `sload_first_access_cost = sload_warm_gas_cost + max(0, + sload_cold_surcharge_gas - discount_sload(block_distance_in_blocks))` + - Account-touch first access cost: + - `account_first_access_cost = account_warm_gas_cost + max(0, + account_cold_surcharge_gas - discount_account(block_distance_in_blocks))` +3. If `block_distance_in_blocks(item) > window_size_blocks` or not found, + charge the unmodified cold surcharge plus the warm component as today. + +Subsequent accesses to the same `item` within the **same transaction** are warm +as per existing rules. This EIP does not introduce block-level warming across +transactions. + +### Initial sync and pricing with block-level access lists + +This EIP requires block-level access lists in headers. Each header carries +commitments to the sets of accounts and storage keys accessed during that +block. + +A newly synced node can price the very first block it validates as follows: + +1. For a block to validate at `current_block_number`, gather the headers for the + previous `window_size_blocks` blocks. +2. For each of those headers, obtain the committed sets of accessed accounts and + storage keys from the block body or via verified proofs against the header + commitments. +3. Build a local index mapping each seen `item` to the most recent block number + in which it appears within that window. This becomes + `last_access_block_number(item)`. +4. When validating `current_block_number`, for each first access to `item`, + compute + `block_distance_in_blocks(item) = current_block_number - last_access_block_number(item)` + when present, else treat as out-of-window. Apply the discount rules above. + +Reorgs longer than `window_size_blocks` fall back to the same procedure as +initial resync. Items not present in the new canonical window are treated as +cold. + +No execution of historical transactions is required to compute the discount at +validation time. Stateless verifiers can price gas using the current block plus +compact proofs that an item appears in one of the previous +`window_size_blocks` access lists. + +### Wallet gas estimation guidance + +Wallets and RPC endpoints should not assume that a temporal discount will apply +at submission, because the exact landing block is uncertain. General-purpose +estimators should price as if no temporal discount applies. + +Operators who can predict landing with high confidence - for example via priority fees and private order flow - may account for the exact discount, +but this is an advanced path and not the default. + +Motivated operators who can reliably land transactions in a specific block - +for example via private order flow and appropriately set priority fees - may +account for the exact discount. This is an advanced use case and should not be +the default behaviour for general-purpose wallets. + +### Implementation guidance + +Clients are expected to maintain a rolling in-memory index to avoid rescanning +headers for each block: + +- Keep a ring buffer of `window_size_blocks` buckets, one per recent block. Each + bucket stores first-touched accounts and first-touched storage keys for that + block. +- Maintain two maps `last_seen_account` and `last_seen_storage_key` that track + the latest block index within the window where each item was present. On block + advance, drop the oldest bucket and delete items that only appeared there, or + mark them as out of window. +- During execution, when an opcode is about to charge a cold surcharge for an + item not yet warm in the current transaction, look up + `block_distance_in_blocks` from `last_seen_*` and charge using the rules + above. Then record first touches for the current block in the current bucket + and update the maps. + +This design keeps memory bounded by `window_size_blocks` times the number of +distinct first touches per block, which is itself bounded by the block gas +limit divided by the minimum per-item cost. + +This is one approach; clients may also implement this via their caches or +pruning block distance hints in their trie. + +## Rationale + +- Determinism: discounts depend only on prior blocks, so users can predict costs + at submission time. The block-level access lists in headers remove bootstrap + ambiguity for new nodes. Intra-block dependent savings are inherently unknowable and non-actionable at submission, so they do not change behaviour; prior-block based savings do. +- Smooth curve: the chosen polynomial keeps strong incentive for very recent + history and eases toward zero, aligning with how caches deliver benefit for + temporal locality. Linear ramps are simpler but produce harsher edges. +- Window of 63: this captures longer-lived temporal locality without turning the + feature into a long-term subsidy, and keeps proof and index sizes small. +- Discount not refund: reduces upfront charge only; does not change refund + semantics or receipts. +- No correlation: simple to implement and reason about. The model is explicitly + about last-access distance, not frequency. + +Builder rotation and similar operational concerns are out of scope for this +EIP. + + +### Behavioural effects + +The smoothstep curve over 63 blocks is gentle. Discount remains close to +maximum for roughly the first 12 to 16 blocks and decays toward zero near the +far edge of the window. + +#### Storage slot (SLOAD) first-access pricing + +(warm = 100, cold surcharge = 2100, window = 63) + +| Distance (blocks) | Discount (gas) | Final cost (gas) | Comment | +| --------------------: | -------------: | ---------------: | --------------------- | +| 1 | 2100 | 100 | fully warm equivalent | +| 4 | 2057 | 143 | almost full discount | +| 8 | 1946 | 254 | | +| 12 | 1783 | 417 | | +| 16 | 1577 | 623 | | +| 20 | 1338 | 862 | | +| 24 | 1080 | 1120 | | +| 28 | 816 | 1384 | | +| 32 | 561 | 1639 | half-way point | +| 36 | 327 | 1873 | | +| 40 | 149 | 2051 | near-cold | +| 48 | 35 | 2165 | almost full cost | +| 56 | 5 | 2195 | | +| 63 | 0 | 2200 | window edge | +| >63 | 0 | 2200 | fully cold access | + + +#### Account access first-access pricing + +(warm = 100, cold surcharge = 2600, window = 63) + +| Distance (blocks) | Discount (gas) | Final cost (gas) | Comment | +| --------------------: | -------------: | ---------------: | --------------------- | +| 1 | 2600 | 100 | fully warm equivalent | +| 4 | 2546 | 154 | almost full discount | +| 8 | 2408 | 292 | | +| 12 | 2206 | 494 | | +| 16 | 1957 | 743 | | +| 20 | 1679 | 1021 | | +| 24 | 1382 | 1318 | | +| 28 | 1090 | 1610 | | +| 32 | 808 | 1892 | half-way point | +| 36 | 555 | 2145 | | +| 40 | 340 | 2360 | near-cold | +| 48 | 104 | 2596 | almost full cost | +| 56 | 12 | 2688 | | +| 63 | 0 | 2700 | window edge | +| >63 | 0 | 2700 | fully cold access | + +#### Observations + +* Accesses 1–8 blocks apart remain effectively warm (under 300–400 gas total). +* Around 30–32 blocks (≈6–7 minutes), costs rise to roughly half the cold cost. +* Beyond 55–60 blocks (≈11–12 minutes), costs are nearly cold again. +* The transition is smooth and monotone; there are no incentive cliffs. +* Both account and storage families reach exactly the warm level for items +accessed in the immediately preceding block. + +Because the discount depends on prior blocks only, +users and dapps can plan around it. Unlike same-block effects, these savings are not capricious: they are visible before submission and can be acted +upon by automation or strategy. + +If an operator wants to maintain most of the discount while sending as few +transactions as possible, a practical cadence for items touched repeatedly is: + +- Maintain about 80 percent of the maximum discount by ensuring the item is + touched again within approximately 18 blocks. The normalized threshold is the + same for accounts and storage because the curve is applied as a fraction of + each family's maximum. +- Maintain about 50 percent of the maximum discount by touching again within + approximately 32 blocks. +- Beyond about 55 blocks the discount approaches zero and the access is nearly + cold again. + +In short, a maintenance touch roughly every 18 to 20 blocks is an efficient +sweet spot for min-maxing: high retained discount, low transaction frequency. + +UX note: humans may not reliably act within these windows, but automated +keepers, dapps, and services can. Some state - for example, popular pair +balances - will tend to stay warm naturally due to organic use, indirectly +benefiting users. + +This mechanism does not correlate across account and storage accesses. Each +item's discount is independent. Repeated touches within the window do not stack +beyond updating the last-access block used to compute the distance. + + + +## Backwards compatibility + +This EIP changes gas charging and therefore requires a hard fork. It only +decreases or equalises costs for affected opcodes and does not introduce new +failure modes for existing contracts. Warm and cold cost upper bounds do not +increase. + +## Security considerations + +- Index growth: the number of unique items per block is limited by the block + gas limit and per-item minimum costs. Bounding the window keeps memory usage + proportional to a small constant factor times that number. +- Reorgs: on reorg, recompute `last_access_block_number` from the committed + access lists of the new canonical window. Reorgs longer than the window fall + back to the initial resync procedure. +- Stateless operation: pricing proofs require only the current block and + membership proofs for at most one of the previous `window_size_blocks` access + lists per item. + +## Test cases + +Assume defaults: + +- `window_size_blocks = 63` +- `sload_warm_gas_cost = 100` +- `sload_cold_surcharge_gas = 2100` +- `account_warm_gas_cost = 100` +- `account_cold_surcharge_gas = 2600` +- `discount_max_sload = 2100`, `discount_min_sload = 0` +- `discount_max_account = 2600`, `discount_min_account = 0` + +Examples for the first storage read in a transaction: + +- `block_distance_in_blocks = 1`: + discount `2100`, charge `100` (equal to warm) +- `block_distance_in_blocks = 18`: + discount about `0.8 * 2100 = 1680`, charge about `520` +- `block_distance_in_blocks = 32`: + discount about `1050`, charge about `1150` +- `block_distance_in_blocks = 63`: + discount `0`, charge `2200` +- `block_distance_in_blocks > 63`: + discount `0`, charge `2200` + +Examples for the first account touch in a transaction: + +- `block_distance_in_blocks = 1`: + discount `2600`, charge `100` (equal to warm) +- `block_distance_in_blocks = 32`: + discount about `1300`, charge about `1400` +- `block_distance_in_blocks = 63`: + discount `0`, charge `2700` +- `block_distance_in_blocks > 63`: + discount `0`, charge `2700` + +Exact integer results are defined by the reference implementation rounding +rule. + +## Reference implementation (Python, integer only) + +This implementation is normative for rounding and scaling. It uses a power-of- +two fixed-point scale so divisions by the scale are exact shifts in low-level +implementations. All intermediates fit below 2**53 so a JavaScript client can +mirror these steps without a big number library. + +```python +# Gas constants +sload_warm_gas_cost = 100 +sload_cold_surcharge_gas = 2100 +account_warm_gas_cost = 100 +account_cold_surcharge_gas = 2600 + +# Temporal discount parameters +window_size_blocks = 63 +discount_max_sload = sload_cold_surcharge_gas +discount_min_sload = 0 +discount_max_account = account_cold_surcharge_gas +discount_min_account = 0 + +# Fixed-point scale - power of two +scale_factor = 1 << 25 # 33_554_432 +half_scale = scale_factor >> 1 + +def smooth_factor_scaled(block_distance_in_blocks: int, + window_blocks: int = window_size_blocks) -> int: + """ + Returns round_to_nearest(scale_factor * discount_factor) where: + normalized_distance = (block_distance_in_blocks - 1) / (window_blocks - 1), + clamped to [0,1] + smoothstep_value = normalized_distance^2 * (3 - 2 * normalized_distance) + discount_factor = 1 - smoothstep_value + The result is in [0, scale_factor]. + """ + if block_distance_in_blocks <= 0 or block_distance_in_blocks > window_blocks: + return 0 + + # Use exact rational form to minimise scaling multiplications: + # Let t = block_distance_in_blocks - 1, d = window_blocks - 1. + # discount_factor = (d^3 - 3*d*t^2 + 2*t^3) / d^3 + t = block_distance_in_blocks - 1 + d = window_blocks - 1 + d3 = d * d * d + t2 = t * t + t3 = t2 * t + numerator = d3 - 3 * d * t2 + 2 * t3 + + # round half up + return (scale_factor * numerator + (d3 // 2)) // d3 + +def discount_gas_units(block_distance_in_blocks: int, + discount_max: int, + discount_min: int) -> int: + """ + Integer discount within the window using the smooth falloff. + Returns an integer number of gas units to subtract from the cold surcharge. + """ + if block_distance_in_blocks <= 0 or block_distance_in_blocks > window_size_blocks: + return 0 + factor_scaled = smooth_factor_scaled(block_distance_in_blocks, window_size_blocks) + span = discount_max - discount_min + scaled = (span * factor_scaled + half_scale) // scale_factor + return discount_min + scaled + +def sload_first_access_cost(block_distance_in_blocks: int) -> int: + disc = discount_gas_units(block_distance_in_blocks, + discount_max_sload, + discount_min_sload) + cold_part = sload_cold_surcharge_gas - disc + if cold_part < 0: + cold_part = 0 + return sload_warm_gas_cost + cold_part + +def account_first_access_cost(block_distance_in_blocks: int) -> int: + disc = discount_gas_units(block_distance_in_blocks, + discount_max_account, + discount_min_account) + cold_part = account_cold_surcharge_gas - disc + if cold_part < 0: + cold_part = 0 + return account_warm_gas_cost + cold_part +``` + +### Relationship to block-level warming proposals + +This EIP does not introduce intra-block warming across transactions. If a +block-level warming proposal is active, its semantics are unchanged. The +temporal discount defined here applies only to the first access to an item in +a transaction based on prior-block history. + +## Copyright + +Copyright and related rights waived via [CC0](../LICENSE.md). From f54e9205517ad48212597acc49209dfa33238a45 Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Tue, 21 Oct 2025 04:52:41 +0100 Subject: [PATCH 02/19] Add warm up behaviour --- EIPS/eip-803x.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/EIPS/eip-803x.md b/EIPS/eip-803x.md index 4c3ac053e88cc9..d7e470588d29ca 100644 --- a/EIPS/eip-803x.md +++ b/EIPS/eip-803x.md @@ -343,7 +343,26 @@ This mechanism does not correlate across account and storage accesses. Each item's discount is independent. Repeated touches within the window do not stack beyond updating the last-access block used to compute the distance. - +#### Coordinated multi-EOA warm-up behaviour + +Because the temporal discount depends on prior-block access only, a coordinated +actor controlling multiple EOAs may sequence transactions to exploit the +maximum discount. For example, a lightweight "warm-up" transaction from one +EOA in block N can touch the relevant storage or account, and mutliple +transactions from another EOAs in block N+1 (the same operator) can then execute +at the fully warm-equivalent cost for those items. + +This inter-block pipelining is predictable and legitimate. It does not break +consensus or fairness; it simply encourages temporal clustering of related +activity. The gas saved is modest compared with the coordination overhead and +priority fee costs, so it is unlikely to dominate behaviour except for highly +automated systems. + +If desired, network parameters could be tuned to reduce this incentive (for +example, setting `D_max` slightly below the cold surcharge so that d = 1 +accesses remain marginally more expensive than truly warm accesses). This EIP +accepts the small, predictable incentive as a reasonable trade-off for +encouraging efficient state reuse across blocks. ## Backwards compatibility From fdd16ccf30bf822469b42ef29b4bb3b35b18e658 Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Tue, 21 Oct 2025 12:09:12 +0100 Subject: [PATCH 03/19] Add graph --- EIPS/eip-803x.md | 2 ++ assets/eip-803x/gas_discount_percentage.png | Bin 0 -> 36266 bytes 2 files changed, 2 insertions(+) create mode 100644 assets/eip-803x/gas_discount_percentage.png diff --git a/EIPS/eip-803x.md b/EIPS/eip-803x.md index d7e470588d29ca..854c36426f5de4 100644 --- a/EIPS/eip-803x.md +++ b/EIPS/eip-803x.md @@ -261,6 +261,8 @@ The smoothstep curve over 63 blocks is gentle. Discount remains close to maximum for roughly the first 12 to 16 blocks and decays toward zero near the far edge of the window. +![Gas discount percentage graph](../assets/eip-803x/gas_discount_percentage.png) + #### Storage slot (SLOAD) first-access pricing (warm = 100, cold surcharge = 2100, window = 63) diff --git a/assets/eip-803x/gas_discount_percentage.png b/assets/eip-803x/gas_discount_percentage.png new file mode 100644 index 0000000000000000000000000000000000000000..e2dae25bb495fda39fa907dc58c3ddab69f24998 GIT binary patch literal 36266 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 literal 0 HcmV?d00001 From 54dfde589c563b32116b87ae12d6b44f9c4fba55 Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Tue, 21 Oct 2025 12:32:43 +0100 Subject: [PATCH 04/19] Update graph --- assets/eip-803x/gas_discount_percentage.png | Bin 36266 -> 50322 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/eip-803x/gas_discount_percentage.png b/assets/eip-803x/gas_discount_percentage.png index e2dae25bb495fda39fa907dc58c3ddab69f24998..4b545c6eea1b62e260e9552ed40fd45ae29ef98d 100644 GIT binary patch literal 50322 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 From 56f71e5d8d5b45946da2543668cbc40b39348a81 Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Tue, 21 Oct 2025 13:38:47 +0100 Subject: [PATCH 05/19] Add author --- EIPS/eip-803x.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/EIPS/eip-803x.md b/EIPS/eip-803x.md index 854c36426f5de4..bffb8a4eaf2063 100644 --- a/EIPS/eip-803x.md +++ b/EIPS/eip-803x.md @@ -1,8 +1,8 @@ --- eip: 803x -title: Temporal Locality Gas Discounts +title: Block Temporal Locality Gas Discounts description: Multi‑block temporal locality discounts for state and account access -author: Ben Adams (@benaadams), Toni Wahrstätter (@nerolation), Amirul Ashraf (@asdacap) +author: Ben Adams (@benaadams), Toni Wahrstätter (@nerolation), Maria Inês Silva (@misilva73), Amirul Ashraf (@asdacap) discussions-to: https://ethereum-magicians.org/ status: Draft type: Standards Track From 3aea596e4ce6d77c879eee97f450b865af1f63cf Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Tue, 21 Oct 2025 16:46:32 +0100 Subject: [PATCH 06/19] Update EIP number --- EIPS/{eip-803x.md => eip-8057.md} | 4 ++-- .../gas_discount_percentage.png | Bin 2 files changed, 2 insertions(+), 2 deletions(-) rename EIPS/{eip-803x.md => eip-8057.md} (99%) rename assets/{eip-803x => eip-8057}/gas_discount_percentage.png (100%) diff --git a/EIPS/eip-803x.md b/EIPS/eip-8057.md similarity index 99% rename from EIPS/eip-803x.md rename to EIPS/eip-8057.md index bffb8a4eaf2063..fe671fd3ec974a 100644 --- a/EIPS/eip-803x.md +++ b/EIPS/eip-8057.md @@ -1,9 +1,9 @@ --- -eip: 803x +eip: 8057 title: Block Temporal Locality Gas Discounts description: Multi‑block temporal locality discounts for state and account access author: Ben Adams (@benaadams), Toni Wahrstätter (@nerolation), Maria Inês Silva (@misilva73), Amirul Ashraf (@asdacap) -discussions-to: https://ethereum-magicians.org/ +discussions-to: https://ethereum-magicians.org/t/eip-8057-block-temporal-locality-gas-discounts/25912 status: Draft type: Standards Track category: Core diff --git a/assets/eip-803x/gas_discount_percentage.png b/assets/eip-8057/gas_discount_percentage.png similarity index 100% rename from assets/eip-803x/gas_discount_percentage.png rename to assets/eip-8057/gas_discount_percentage.png From a890e8355fd3e8e9ee825696ff0429ded32ee119 Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Tue, 21 Oct 2025 17:01:37 +0100 Subject: [PATCH 07/19] lint --- EIPS/eip-8057.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/EIPS/eip-8057.md b/EIPS/eip-8057.md index fe671fd3ec974a..d719ab428ca49b 100644 --- a/EIPS/eip-8057.md +++ b/EIPS/eip-8057.md @@ -310,11 +310,11 @@ far edge of the window. #### Observations -* Accesses 1–8 blocks apart remain effectively warm (under 300–400 gas total). -* Around 30–32 blocks (≈6–7 minutes), costs rise to roughly half the cold cost. -* Beyond 55–60 blocks (≈11–12 minutes), costs are nearly cold again. -* The transition is smooth and monotone; there are no incentive cliffs. -* Both account and storage families reach exactly the warm level for items +- Accesses 1–8 blocks apart remain effectively warm (under 300–400 gas total). +- Around 30–32 blocks (≈6–7 minutes), costs rise to roughly half the cold cost. +- Beyond 55–60 blocks (≈11–12 minutes), costs are nearly cold again. +- The transition is smooth and monotone; there are no incentive cliffs. +- Both account and storage families reach exactly the warm level for items accessed in the immediately preceding block. Because the discount depends on prior blocks only, @@ -366,14 +366,14 @@ accesses remain marginally more expensive than truly warm accesses). This EIP accepts the small, predictable incentive as a reasonable trade-off for encouraging efficient state reuse across blocks. -## Backwards compatibility +## Backwards Compatibility This EIP changes gas charging and therefore requires a hard fork. It only decreases or equalises costs for affected opcodes and does not introduce new failure modes for existing contracts. Warm and cold cost upper bounds do not increase. -## Security considerations +## Security Considerations - Index growth: the number of unique items per block is limited by the block gas limit and per-item minimum costs. Bounding the window keeps memory usage @@ -424,7 +424,7 @@ Examples for the first account touch in a transaction: Exact integer results are defined by the reference implementation rounding rule. -## Reference implementation (Python, integer only) +### Reference implementation (Python, integer only) This implementation is normative for rounding and scaling. It uses a power-of- two fixed-point scale so divisions by the scale are exact shifts in low-level From 63fe4023b99c63938fa1590d3c5909f0581996ff Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Tue, 21 Oct 2025 17:08:50 +0100 Subject: [PATCH 08/19] lint --- EIPS/eip-8057.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EIPS/eip-8057.md b/EIPS/eip-8057.md index d719ab428ca49b..ee6636b422f38a 100644 --- a/EIPS/eip-8057.md +++ b/EIPS/eip-8057.md @@ -385,7 +385,7 @@ increase. membership proofs for at most one of the previous `window_size_blocks` access lists per item. -## Test cases +### Test cases Assume defaults: From af3181c9a4713951fa1ac89f816667027e97f64c Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Tue, 21 Oct 2025 17:23:30 +0100 Subject: [PATCH 09/19] fix link --- EIPS/eip-8057.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EIPS/eip-8057.md b/EIPS/eip-8057.md index ee6636b422f38a..14b017eb5a492e 100644 --- a/EIPS/eip-8057.md +++ b/EIPS/eip-8057.md @@ -261,7 +261,7 @@ The smoothstep curve over 63 blocks is gentle. Discount remains close to maximum for roughly the first 12 to 16 blocks and decays toward zero near the far edge of the window. -![Gas discount percentage graph](../assets/eip-803x/gas_discount_percentage.png) +![Gas discount percentage graph](../assets/eip-8037/gas_discount_percentage.png) #### Storage slot (SLOAD) first-access pricing From e43263a0a1b7e653a818a9a6791852de15e835bf Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Tue, 21 Oct 2025 17:51:57 +0100 Subject: [PATCH 10/19] Feedback --- EIPS/eip-8057.md | 435 +++++++++++++++++------------------------------ 1 file changed, 160 insertions(+), 275 deletions(-) diff --git a/EIPS/eip-8057.md b/EIPS/eip-8057.md index 14b017eb5a492e..06fe49f371fbf7 100644 --- a/EIPS/eip-8057.md +++ b/EIPS/eip-8057.md @@ -13,68 +13,52 @@ requires: 2929, 7928 ## Abstract -This proposal introduces a deterministic, multi-block discount for the first -access to accounts and storage keys in a transaction. The discount depends on -the number of blocks since that item was last accessed and decays smoothly to -zero over a fixed window of recent blocks. Intra-block warming semantics remain -unchanged (no block-level warming). +This proposal introduces a deterministic, multi-block discount for the first access to accounts and storage keys in a transaction. The discount depends on the number of blocks since that item was last accessed and decays smoothly to zero over a fixed window of recent blocks. Intra-block warming semantics remain unchanged (no block-level warming). The mechanism relies on block-level access lists ([EIP-7928](./eip-7928.md)) committed in headers so that a newly synced node can price the first block it validates without executing historical blocks. ## Motivation -Current warm and cold access pricing matches client realities but creates a -usability gap. However any gas saving that depends on other transactions in the same-block is capricious for users: they sign a transaction at a given price but might get a cheaper execution only if other transactions in the same block happen to touch the same items. That saving is both inherently not knowable or actionalable to users at submission time and thus has no impact on behaviour. +Current warm and cold access pricing matches client realities but creates a usability gap. However any gas saving that depends on other transactions in the same-block is capricious for users: they sign a transaction at a given price but might get a cheaper execution only if other transactions in the same block happen to touch the same items. That saving is both inherently not knowable or actionalable to users at submission time and thus has no impact on behaviour. -This EIP rewards short-term temporal locality across block boundaries while -preserving the familiar per-transaction warm set. The discount depends only on -prior blocks, so it is deterministic at submission, predictable across -builders, and behaviour-modifying in a useful direction. +This EIP rewards short-term temporal locality across block boundaries while preserving the familiar per-transaction warm set. The discount depends only on prior blocks, so it is deterministic at submission, predictable across builders, and behaviour-modifying in a useful direction. -As the saving depends only on publicly observable prior-block activity, it -is knowable at submission time. Unlike same-block effects, it is therefore -behaviour-shaping rather than incidental. It nudges workloads -that naturally cluster accesses to keep doing so, matching how clients -amortise repeated recent accesses. +As the saving depends only on publicly observable prior-block activity, it is knowable at submission time. Unlike same-block effects, it is therefore behaviour-shaping rather than incidental. It nudges workloads that naturally cluster accesses to keep doing so, matching how clients amortise repeated recent accesses. -This EIP is intentionally scoped to per-transaction warming and does not apply -intra-block warming across transactions. +This EIP is intentionally scoped to per-transaction warming and does not apply intra-block warming across transactions. ## Specification ### Terminology and constants -The following names are used for clarity. Concrete values can be updated by -governance without changing the mechanism. +The following names are used for clarity. Concrete values can be updated by governance without changing the mechanism. -- `window_size_blocks` - number of recent blocks over which a discount may - apply. Default: `63`. -- `current_block_number` - the block number of the transaction being executed. -- `last_access_block_number(item)` - the most recent block number strictly less - than `current_block_number` in which `item` was accessed by an executed - transaction. If unknown or older than `window_size_blocks`, it is treated as - not found. -- `block_distance_in_blocks(item)` - defined as - `current_block_number - last_access_block_number(item)` when the latter is - found, else a value greater than `window_size_blocks`. +| Name | Description | Default | +|-----------------------------|-----------------------|-----------------| +| `window_size_blocks`| Number of recent blocks over which a discount may apply. | `63` | +| `current_block_number` | The block number of the transaction being executed. | - | +| `last_access_block_number(item)` | The most recent block number strictly less than `current_block_number` in which `item` was accessed by an executed transaction. If unknown or older than `window_size_blocks`, it is treated as not found. | - | +| `block_distance_in_blocks(item)` | Defined as `current_block_number - last_access_block_number(item)` when the latter is found, else a value greater than `window_size_blocks`. | - | Gas constants from existing behaviour: -- `sload_warm_gas_cost = 100` -- `sload_cold_surcharge_gas = 2100` -- `account_warm_gas_cost = 100` -- `account_cold_surcharge_gas = 2600` +| Name | Value | +|-----------------------------|-------:| +| `sload_warm_gas_cost` | `100` | +| `sload_cold_surcharge_gas` | `2100` | +| `account_warm_gas_cost` | `100` | +| `account_cold_surcharge_gas`| `2600` | Discount caps (this EIP treats maximum as full cold surcharge, minimum as zero): -- `discount_max_sload = sload_cold_surcharge_gas` -- `discount_min_sload = 0` -- `discount_max_account = account_cold_surcharge_gas` -- `discount_min_account = 0` +| Name | Value | +|---------------------------|-----------------------------:| +| `discount_max_sload` | `sload_cold_surcharge_gas` | +| `discount_min_sload` | `0` | +| `discount_max_account` | `account_cold_surcharge_gas` | +| `discount_min_account` | `0` | -This means the closest prior-block usage allows the first access in a -transaction to be charged at warm cost, and the far edge of the window trends -to the normal cold-plus-warm cost. +This means the closest prior-block usage allows the first access in a transaction to be charged at warm cost, and the far edge of the window trends to the normal cold-plus-warm cost. ### Scope of operations @@ -87,21 +71,15 @@ This EIP applies the discount to the **first access in a transaction** of: `BALANCE`, `EXTCODEHASH`, `EXTCODESIZE`, `EXTCODECOPY`, and the target account of `CALL`, `CALLCODE`, `DELEGATECALL`, `STATICCALL`. -Writes are affected **only** to the extent they perform an initial read or -account touch that would have been charged as cold. Write-specific costs and -any refund semantics are unchanged. +Writes are affected **only** to the extent they perform an initial read or account touch that would have been charged as cold. Write-specific costs and any refund semantics are unchanged. -Precompiles remain unchanged and are always warm. Because they do not pay a -cold surcharge, no discount is applied to precompile calls. +Precompiles remain unchanged and are always warm. Because they do not pay a cold surcharge, no discount is applied to precompile calls. -Access lists per EIP-2930 remain effective and, when present, pre-warm the -listed addresses and storage keys at the start of the transaction. For items -that are pre-warmed by an access list, this temporal discount does not apply. +Access lists per EIP-2930 remain effective and, when present, pre-warm the listed addresses and storage keys at the start of the transaction. For items that are pre-warmed by an access list, this temporal discount does not apply. ### Discount function -Define a smooth, monotone falloff within the window using the programming form -of smoothstep (clamped cubic Hermite interpolation). +Define a smooth, monotone falloff within the window using the programming form of smoothstep (clamped cubic Hermite interpolation). ``` Let d = current_block_number - last_access_block_number(item) @@ -115,16 +93,11 @@ Then: Programattically -- `normalized_distance = (block_distance_in_blocks - 1) / - (window_size_blocks - 1)` clamped to `[0, 1]`. This maps distance `1` to `0` - and distance `window_size_blocks` to `1`. -- `smoothstep_value = normalized_distance * normalized_distance * (3 - 2 * - normalized_distance)`. -- `discount_factor = 1 - smoothstep_value`. This is `1` at distance `1` and `0` - at distance `window_size_blocks`. +- `normalized_distance = (block_distance_in_blocks - 1) / (window_size_blocks - 1)` clamped to `[0, 1]`. This maps distance `1` to `0` and distance `window_size_blocks` to `1`. +- `smoothstep_value = normalized_distance * normalized_distance * (3 - 2 * normalized_distance)`. +- `discount_factor = 1 - smoothstep_value`. This is `1` at distance `1` and `0` at distance `window_size_blocks`. -For a given opcode family with parameters `discount_max` and `discount_min`, -the integer discount to apply to the **cold surcharge** is: +For a given opcode family with parameters `discount_max` and `discount_min`, the integer discount to apply to the **cold surcharge** is: ``` if block_distance_in_blocks <= 0 or @@ -137,41 +110,28 @@ else: Note: this should be scaled to interger space rather than using floating points. An example is given to do this in reference implementation. -`round_to_nearest` is round half up for integers in this specification. Any -consistent rule is acceptable if implemented consistently across clients. +`round_to_nearest` is round half up for integers in this specification. Any consistent rule is acceptable if implemented consistently across clients. -This mechanism is a **discount**, not a refund. It reduces gas charged upfront -for a cold surcharge; it does not emit a rebate and does not affect refund -accounting or receipts. +This mechanism is a **discount**, not a refund. It reduces gas charged upfront for a cold surcharge; it does not emit a rebate and does not affect refund accounting or receipts. ### Charging rules (per transaction) For the first access to an `item` **within a transaction**: -1. If `item` is already warm in this transaction due to same-transaction rules - or pre-warmed via a transaction access list, charge the warm cost defined - today. No temporal discount applies. +1. If `item` is already warm in this transaction due to same-transaction rules or pre-warmed via a transaction access list, charge the warm cost defined today. No temporal discount applies. 2. Otherwise compute `block_distance_in_blocks(item)`. If - `1 <= block_distance_in_blocks(item) <= window_size_blocks`, apply the - discount to the cold surcharge: + `1 <= block_distance_in_blocks(item) <= window_size_blocks`, apply the discount to the cold surcharge: - Storage read first access cost: - - `sload_first_access_cost = sload_warm_gas_cost + max(0, - sload_cold_surcharge_gas - discount_sload(block_distance_in_blocks))` + - `sload_first_access_cost = sload_warm_gas_cost + max(0, sload_cold_surcharge_gas - discount_sload(block_distance_in_blocks))` - Account-touch first access cost: - - `account_first_access_cost = account_warm_gas_cost + max(0, - account_cold_surcharge_gas - discount_account(block_distance_in_blocks))` -3. If `block_distance_in_blocks(item) > window_size_blocks` or not found, - charge the unmodified cold surcharge plus the warm component as today. + - `account_first_access_cost = account_warm_gas_cost + max(0, account_cold_surcharge_gas - discount_account(block_distance_in_blocks))` +3. If `block_distance_in_blocks(item) > window_size_blocks` or not found, charge the unmodified cold surcharge plus the warm component as today. -Subsequent accesses to the same `item` within the **same transaction** are warm -as per existing rules. This EIP does not introduce block-level warming across -transactions. +Subsequent accesses to the same `item` within the **same transaction** are warm as per existing rules. This EIP does not introduce block-level warming across transactions. ### Initial sync and pricing with block-level access lists -This EIP requires block-level access lists in headers. Each header carries -commitments to the sets of accounts and storage keys accessed during that -block. +This EIP requires block-level access lists in headers. Each header carries commitments to the sets of accounts and storage keys accessed during that block. A newly synced node can price the very first block it validates as follows: @@ -188,202 +148,30 @@ A newly synced node can price the very first block it validates as follows: `block_distance_in_blocks(item) = current_block_number - last_access_block_number(item)` when present, else treat as out-of-window. Apply the discount rules above. -Reorgs longer than `window_size_blocks` fall back to the same procedure as -initial resync. Items not present in the new canonical window are treated as -cold. +Reorgs longer than `window_size_blocks` fall back to the same procedure as initial resync. Items not present in the new canonical window are treated as cold. -No execution of historical transactions is required to compute the discount at -validation time. Stateless verifiers can price gas using the current block plus -compact proofs that an item appears in one of the previous -`window_size_blocks` access lists. +No execution of historical transactions is required to compute the discount at validation time. Stateless verifiers can price gas using the current block plus compact proofs that an item appears in one of the previous `window_size_blocks` access lists. ### Wallet gas estimation guidance -Wallets and RPC endpoints should not assume that a temporal discount will apply -at submission, because the exact landing block is uncertain. General-purpose -estimators should price as if no temporal discount applies. +Wallets and RPC endpoints should not assume that a temporal discount will apply at submission, because the exact landing block is uncertain. General-purpose estimators should price as if no temporal discount applies. -Operators who can predict landing with high confidence - for example via priority fees and private order flow - may account for the exact discount, -but this is an advanced path and not the default. +Operators who can predict landing with high confidence - for example via priority fees and private order flow - may account for the exact discount, but this is an advanced path and not the default. -Motivated operators who can reliably land transactions in a specific block - -for example via private order flow and appropriately set priority fees - may -account for the exact discount. This is an advanced use case and should not be -the default behaviour for general-purpose wallets. +Motivated operators who can reliably land transactions in a specific block - for example via private order flow and appropriately set priority fees - may account for the exact discount. This is an advanced use case and should not be the default behaviour for general-purpose wallets. ### Implementation guidance -Clients are expected to maintain a rolling in-memory index to avoid rescanning -headers for each block: - -- Keep a ring buffer of `window_size_blocks` buckets, one per recent block. Each - bucket stores first-touched accounts and first-touched storage keys for that - block. -- Maintain two maps `last_seen_account` and `last_seen_storage_key` that track - the latest block index within the window where each item was present. On block - advance, drop the oldest bucket and delete items that only appeared there, or - mark them as out of window. -- During execution, when an opcode is about to charge a cold surcharge for an - item not yet warm in the current transaction, look up - `block_distance_in_blocks` from `last_seen_*` and charge using the rules - above. Then record first touches for the current block in the current bucket - and update the maps. - -This design keeps memory bounded by `window_size_blocks` times the number of -distinct first touches per block, which is itself bounded by the block gas -limit divided by the minimum per-item cost. - -This is one approach; clients may also implement this via their caches or -pruning block distance hints in their trie. - -## Rationale +Clients are expected to maintain a rolling in-memory index to avoid rescanning headers for each block: -- Determinism: discounts depend only on prior blocks, so users can predict costs - at submission time. The block-level access lists in headers remove bootstrap - ambiguity for new nodes. Intra-block dependent savings are inherently unknowable and non-actionable at submission, so they do not change behaviour; prior-block based savings do. -- Smooth curve: the chosen polynomial keeps strong incentive for very recent - history and eases toward zero, aligning with how caches deliver benefit for - temporal locality. Linear ramps are simpler but produce harsher edges. -- Window of 63: this captures longer-lived temporal locality without turning the - feature into a long-term subsidy, and keeps proof and index sizes small. -- Discount not refund: reduces upfront charge only; does not change refund - semantics or receipts. -- No correlation: simple to implement and reason about. The model is explicitly - about last-access distance, not frequency. +- Keep a ring buffer of `window_size_blocks` buckets, one per recent block. Each bucket stores first-touched accounts and first-touched storage keys for that block. +- Maintain two maps `last_seen_account` and `last_seen_storage_key` that track the latest block index within the window where each item was present. On block advance, drop the oldest bucket and delete items that only appeared there, or mark them as out of window. +- During execution, when an opcode is about to charge a cold surcharge for an item not yet warm in the current transaction, look up `block_distance_in_blocks` from `last_seen_*` and charge using the rules above. Then record first touches for the current block in the current bucket and update the maps. -Builder rotation and similar operational concerns are out of scope for this -EIP. +This design keeps memory bounded by `window_size_blocks` times the number of distinct first touches per block, which is itself bounded by the block gas limit divided by the minimum per-item cost. +This is one approach; clients may also implement this via their caches or pruning block distance hints in their trie. -### Behavioural effects - -The smoothstep curve over 63 blocks is gentle. Discount remains close to -maximum for roughly the first 12 to 16 blocks and decays toward zero near the -far edge of the window. - -![Gas discount percentage graph](../assets/eip-8037/gas_discount_percentage.png) - -#### Storage slot (SLOAD) first-access pricing - -(warm = 100, cold surcharge = 2100, window = 63) - -| Distance (blocks) | Discount (gas) | Final cost (gas) | Comment | -| --------------------: | -------------: | ---------------: | --------------------- | -| 1 | 2100 | 100 | fully warm equivalent | -| 4 | 2057 | 143 | almost full discount | -| 8 | 1946 | 254 | | -| 12 | 1783 | 417 | | -| 16 | 1577 | 623 | | -| 20 | 1338 | 862 | | -| 24 | 1080 | 1120 | | -| 28 | 816 | 1384 | | -| 32 | 561 | 1639 | half-way point | -| 36 | 327 | 1873 | | -| 40 | 149 | 2051 | near-cold | -| 48 | 35 | 2165 | almost full cost | -| 56 | 5 | 2195 | | -| 63 | 0 | 2200 | window edge | -| >63 | 0 | 2200 | fully cold access | - - -#### Account access first-access pricing - -(warm = 100, cold surcharge = 2600, window = 63) - -| Distance (blocks) | Discount (gas) | Final cost (gas) | Comment | -| --------------------: | -------------: | ---------------: | --------------------- | -| 1 | 2600 | 100 | fully warm equivalent | -| 4 | 2546 | 154 | almost full discount | -| 8 | 2408 | 292 | | -| 12 | 2206 | 494 | | -| 16 | 1957 | 743 | | -| 20 | 1679 | 1021 | | -| 24 | 1382 | 1318 | | -| 28 | 1090 | 1610 | | -| 32 | 808 | 1892 | half-way point | -| 36 | 555 | 2145 | | -| 40 | 340 | 2360 | near-cold | -| 48 | 104 | 2596 | almost full cost | -| 56 | 12 | 2688 | | -| 63 | 0 | 2700 | window edge | -| >63 | 0 | 2700 | fully cold access | - -#### Observations - -- Accesses 1–8 blocks apart remain effectively warm (under 300–400 gas total). -- Around 30–32 blocks (≈6–7 minutes), costs rise to roughly half the cold cost. -- Beyond 55–60 blocks (≈11–12 minutes), costs are nearly cold again. -- The transition is smooth and monotone; there are no incentive cliffs. -- Both account and storage families reach exactly the warm level for items -accessed in the immediately preceding block. - -Because the discount depends on prior blocks only, -users and dapps can plan around it. Unlike same-block effects, these savings are not capricious: they are visible before submission and can be acted -upon by automation or strategy. - -If an operator wants to maintain most of the discount while sending as few -transactions as possible, a practical cadence for items touched repeatedly is: - -- Maintain about 80 percent of the maximum discount by ensuring the item is - touched again within approximately 18 blocks. The normalized threshold is the - same for accounts and storage because the curve is applied as a fraction of - each family's maximum. -- Maintain about 50 percent of the maximum discount by touching again within - approximately 32 blocks. -- Beyond about 55 blocks the discount approaches zero and the access is nearly - cold again. - -In short, a maintenance touch roughly every 18 to 20 blocks is an efficient -sweet spot for min-maxing: high retained discount, low transaction frequency. - -UX note: humans may not reliably act within these windows, but automated -keepers, dapps, and services can. Some state - for example, popular pair -balances - will tend to stay warm naturally due to organic use, indirectly -benefiting users. - -This mechanism does not correlate across account and storage accesses. Each -item's discount is independent. Repeated touches within the window do not stack -beyond updating the last-access block used to compute the distance. - -#### Coordinated multi-EOA warm-up behaviour - -Because the temporal discount depends on prior-block access only, a coordinated -actor controlling multiple EOAs may sequence transactions to exploit the -maximum discount. For example, a lightweight "warm-up" transaction from one -EOA in block N can touch the relevant storage or account, and mutliple -transactions from another EOAs in block N+1 (the same operator) can then execute -at the fully warm-equivalent cost for those items. - -This inter-block pipelining is predictable and legitimate. It does not break -consensus or fairness; it simply encourages temporal clustering of related -activity. The gas saved is modest compared with the coordination overhead and -priority fee costs, so it is unlikely to dominate behaviour except for highly -automated systems. - -If desired, network parameters could be tuned to reduce this incentive (for -example, setting `D_max` slightly below the cold surcharge so that d = 1 -accesses remain marginally more expensive than truly warm accesses). This EIP -accepts the small, predictable incentive as a reasonable trade-off for -encouraging efficient state reuse across blocks. - -## Backwards Compatibility - -This EIP changes gas charging and therefore requires a hard fork. It only -decreases or equalises costs for affected opcodes and does not introduce new -failure modes for existing contracts. Warm and cold cost upper bounds do not -increase. - -## Security Considerations - -- Index growth: the number of unique items per block is limited by the block - gas limit and per-item minimum costs. Bounding the window keeps memory usage - proportional to a small constant factor times that number. -- Reorgs: on reorg, recompute `last_access_block_number` from the committed - access lists of the new canonical window. Reorgs longer than the window fall - back to the initial resync procedure. -- Stateless operation: pricing proofs require only the current block and - membership proofs for at most one of the previous `window_size_blocks` access - lists per item. ### Test cases @@ -421,15 +209,11 @@ Examples for the first account touch in a transaction: - `block_distance_in_blocks > 63`: discount `0`, charge `2700` -Exact integer results are defined by the reference implementation rounding -rule. +Exact integer results are defined by the reference implementation rounding rule. ### Reference implementation (Python, integer only) -This implementation is normative for rounding and scaling. It uses a power-of- -two fixed-point scale so divisions by the scale are exact shifts in low-level -implementations. All intermediates fit below 2**53 so a JavaScript client can -mirror these steps without a big number library. +This implementation is normative for rounding and scaling. It uses a power-of-two fixed-point scale so divisions by the scale are exact shifts in low-level implementations. All intermediates fit below 2**53 so a JavaScript client can mirror these steps without a big number library. ```python # Gas constants @@ -508,12 +292,113 @@ def account_first_access_cost(block_distance_in_blocks: int) -> int: return account_warm_gas_cost + cold_part ``` +## Rationale + +- Determinism: discounts depend only on prior blocks, so users can predict costs at submission time. The block-level access lists in headers remove bootstrap ambiguity for new nodes. Intra-block dependent savings are inherently unknowable and non-actionable at submission, so they do not change behaviour; prior-block based savings do. +- Smooth curve: the chosen polynomial keeps strong incentive for very recent history and eases toward zero, aligning with how caches deliver benefit for temporal locality. Linear ramps are simpler but produce harsher edges. +- Window of 63: this captures longer-lived temporal locality without turning the feature into a long-term subsidy, and keeps proof and index sizes small. +- Discount not refund: reduces upfront charge only; does not change refund semantics or receipts. +- No correlation: simple to implement and reason about. The model is explicitly about last-access distance, not frequency. + +Builder rotation and similar operational concerns are out of scope for this EIP. + + +### Behavioural effects + +The smoothstep curve over 63 blocks is gentle. Discount remains close to maximum for roughly the first 12 to 16 blocks and decays toward zero near the far edge of the window. + +![Gas discount percentage graph](../assets/eip-8057/gas_discount_percentage.png) + +#### Storage slot (SLOAD) first-access pricing + +(warm = 100, cold surcharge = 2100, window = 63) + +| Distance (blocks) | Discount (gas) | Final cost (gas) | Comment | +| --------------------: | -------------: | ---------------: | --------------------- | +| 1 | 2100 | 100 | fully warm equivalent | +| 4 | 2057 | 143 | almost full discount | +| 8 | 1946 | 254 | | +| 12 | 1783 | 417 | | +| 16 | 1577 | 623 | | +| 20 | 1338 | 862 | | +| 24 | 1080 | 1120 | | +| 28 | 816 | 1384 | | +| 32 | 561 | 1639 | half-way point | +| 36 | 327 | 1873 | | +| 40 | 149 | 2051 | near-cold | +| 48 | 35 | 2165 | almost full cost | +| 56 | 5 | 2195 | | +| 63 | 0 | 2200 | window edge | +| >63 | 0 | 2200 | fully cold access | + + +#### Account access first-access pricing + +(warm = 100, cold surcharge = 2600, window = 63) + +| Distance (blocks) | Discount (gas) | Final cost (gas) | Comment | +| --------------------: | -------------: | ---------------: | --------------------- | +| 1 | 2600 | 100 | fully warm equivalent | +| 4 | 2546 | 154 | almost full discount | +| 8 | 2408 | 292 | | +| 12 | 2206 | 494 | | +| 16 | 1957 | 743 | | +| 20 | 1679 | 1021 | | +| 24 | 1382 | 1318 | | +| 28 | 1090 | 1610 | | +| 32 | 808 | 1892 | half-way point | +| 36 | 555 | 2145 | | +| 40 | 340 | 2360 | near-cold | +| 48 | 104 | 2596 | almost full cost | +| 56 | 12 | 2688 | | +| 63 | 0 | 2700 | window edge | +| >63 | 0 | 2700 | fully cold access | + +#### Observations + +- Accesses 1–8 blocks apart remain effectively warm (under 300–400 gas total). +- Around 30–32 blocks (≈6–7 minutes), costs rise to roughly half the cold cost. +- Beyond 55–60 blocks (≈11–12 minutes), costs are nearly cold again. +- The transition is smooth and monotone; there are no incentive cliffs. +- Both account and storage families reach exactly the warm level for items +accessed in the immediately preceding block. + +As the discount depends on prior blocks only, users and dapps can plan around it. Unlike same-block effects, these savings are not capricious: they are visible before submission and can be acted upon by automation or strategy. + +If an operator wants to maintain most of the discount while sending as few +transactions as possible, a practical cadence for items touched repeatedly is: + +- Maintain about 80 percent of the maximum discount by ensuring the item is touched again within approximately 18 blocks. The normalized threshold is the same for accounts and storage because the curve is applied as a fraction of each family's maximum. +- Maintain about 50 percent of the maximum discount by touching again within approximately 32 blocks. +- Beyond about 55 blocks the discount approaches zero and the access is nearly cold again. + +In short, a maintenance touch roughly every 18 to 20 blocks is an efficient sweet spot for min-maxing: high retained discount, low transaction frequency. + +UX note: humans may not reliably act within these windows, but automated keepers, dapps, and services can. Some state - for example, popular pair balances - will tend to stay warm naturally due to organic use, indirectly benefiting users. + +This mechanism does not correlate across account and storage accesses. Each item's discount is independent. Repeated touches within the window do not stack beyond updating the last-access block used to compute the distance. + +#### Coordinated multi-EOA warm-up behaviour + +As the temporal discount depends on prior-block access only, a coordinated actor controlling multiple EOAs may sequence transactions to exploit the maximum discount. For example, a lightweight "warm-up" transaction from one EOA in block N can touch the relevant storage or account, and mutliple transactions from another EOAs in block N+1 (the same operator) can then execute at the fully warm-equivalent cost for those items. + +This inter-block pipelining is predictable and legitimate. It does not break consensus or fairness; it simply encourages temporal clustering of related activity. The gas saved is modest compared with the coordination overhead and priority fee costs, so it is unlikely to dominate behaviour except for highly automated systems. + +If desired, network parameters could be tuned to reduce this incentive (for example, setting `D_max` slightly below the cold surcharge so that `d = 1` accesses remain marginally more expensive than truly warm accesses). This EIP accepts the small, predictable incentive as a reasonable trade-off for encouraging efficient state reuse across blocks. + ### Relationship to block-level warming proposals -This EIP does not introduce intra-block warming across transactions. If a -block-level warming proposal is active, its semantics are unchanged. The -temporal discount defined here applies only to the first access to an item in -a transaction based on prior-block history. +This EIP does not introduce intra-block warming across transactions. If a block-level warming proposal is active, its semantics are unchanged. The temporal discount defined here applies only to the first access to an item in a transaction based on prior-block history. + +## Backwards Compatibility + +This EIP changes gas charging and therefore requires a hard fork. It only decreases or equalises costs for affected opcodes and does not introduce new failure modes for existing contracts. Warm and cold cost upper bounds do not increase. + +## Security Considerations + +- Index growth: the number of unique items per block is limited by the block gas limit and per-item minimum costs. Bounding the window keeps memory usage proportional to a small constant factor times that number. +- Reorgs: on reorg, recompute `last_access_block_number` from the committed access lists of the new canonical window. Reorgs longer than the window fall back to the initial resync procedure. +- Stateless operation: pricing proofs require only the current block and membership proofs for at most one of the previous `window_size_blocks` access lists per item. ## Copyright From 9cd3e8abc072243f38c282eb8e63ec3b22f80546 Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Wed, 22 Oct 2025 02:02:55 +0100 Subject: [PATCH 11/19] Moar tables --- EIPS/eip-8057.md | 49 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/EIPS/eip-8057.md b/EIPS/eip-8057.md index 06fe49f371fbf7..1669dbf1004d5d 100644 --- a/EIPS/eip-8057.md +++ b/EIPS/eip-8057.md @@ -177,37 +177,36 @@ This is one approach; clients may also implement this via their caches or prunin Assume defaults: -- `window_size_blocks = 63` -- `sload_warm_gas_cost = 100` -- `sload_cold_surcharge_gas = 2100` -- `account_warm_gas_cost = 100` -- `account_cold_surcharge_gas = 2600` -- `discount_max_sload = 2100`, `discount_min_sload = 0` -- `discount_max_account = 2600`, `discount_min_account = 0` +| Name | Value | +|-----------------------------|-------:| +| `window_size_blocks` | `63` | +| `sload_warm_gas_cost` | `100` | +| `sload_cold_surcharge_gas` | `2100` | +| `account_warm_gas_cost` | `100` | +| `account_cold_surcharge_gas`| `2600` | +| `discount_max_sload` | `2100` | +| `discount_min_sload` | `0` | +| `discount_max_account` | `2600` | +| `discount_min_account` | `0` | Examples for the first storage read in a transaction: -- `block_distance_in_blocks = 1`: - discount `2100`, charge `100` (equal to warm) -- `block_distance_in_blocks = 18`: - discount about `0.8 * 2100 = 1680`, charge about `520` -- `block_distance_in_blocks = 32`: - discount about `1050`, charge about `1150` -- `block_distance_in_blocks = 63`: - discount `0`, charge `2200` -- `block_distance_in_blocks > 63`: - discount `0`, charge `2200` +| `block_distance_in_blocks` | Discount | Charge | Notes | +|----------------------------|---------:|-------:|------:| +| `1` | `2100` | `100` | Equal to warm | +| `18` | `0.8 * 2100 = 1680` | `520` | - | +| `32` | `1050` | `1150` | - | +| `63` | `0` | `2200` | - | +| `> 63` | `0` | `2200` | - | Examples for the first account touch in a transaction: -- `block_distance_in_blocks = 1`: - discount `2600`, charge `100` (equal to warm) -- `block_distance_in_blocks = 32`: - discount about `1300`, charge about `1400` -- `block_distance_in_blocks = 63`: - discount `0`, charge `2700` -- `block_distance_in_blocks > 63`: - discount `0`, charge `2700` +| `block_distance_in_blocks` | Discount | Charge | Notes | +|----------------------------|---------:|-------:|------:| +| `1` | `2600` | `100` | Equal to warm | +| `32` | `1300` | `1400` | - | +| `63` | `0` | `2700` | - | +| `> 63` | `0` | `2700` | - | Exact integer results are defined by the reference implementation rounding rule. From 70e10186f2adb98a42ad3ec68d108c1d0e77564d Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Wed, 22 Oct 2025 07:03:04 +0100 Subject: [PATCH 12/19] formatting --- EIPS/eip-8057.md | 313 ++++++++++++++++++++++++++--------------------- 1 file changed, 171 insertions(+), 142 deletions(-) diff --git a/EIPS/eip-8057.md b/EIPS/eip-8057.md index 1669dbf1004d5d..132d68af6746a6 100644 --- a/EIPS/eip-8057.md +++ b/EIPS/eip-8057.md @@ -13,50 +13,50 @@ requires: 2929, 7928 ## Abstract -This proposal introduces a deterministic, multi-block discount for the first access to accounts and storage keys in a transaction. The discount depends on the number of blocks since that item was last accessed and decays smoothly to zero over a fixed window of recent blocks. Intra-block warming semantics remain unchanged (no block-level warming). +This proposal introduces a deterministic, multi-block discount for the first access to accounts and storage keys in a transaction. The discount depends on how many blocks have passed since the item was last accessed, decaying smoothly to zero over a fixed recent window. Intra-block warming semantics are unchanged - there is no warming across transactions within a block. -The mechanism relies on block-level access lists ([EIP-7928](./eip-7928.md)) committed in headers so that a newly synced node can price the first block it validates without executing historical blocks. +The mechanism builds on block-level access lists ([EIP-7928](./eip-7928.md)), which are committed in block headers. This allows a newly synced node to correctly price the first block it validates without replaying historical execution. ## Motivation -Current warm and cold access pricing matches client realities but creates a usability gap. However any gas saving that depends on other transactions in the same-block is capricious for users: they sign a transaction at a given price but might get a cheaper execution only if other transactions in the same block happen to touch the same items. That saving is both inherently not knowable or actionalable to users at submission time and thus has no impact on behaviour. +Current warm and cold access pricing reflects how clients manage state, but it leaves potential efficiency untapped. Clients already retain data from recent blocks in memory to handle short reorgs, so accesses to those items are cheaper in practice. Yet the gas model ignores this, only distinguishing between warm and cold accesses within a single block. -This EIP rewards short-term temporal locality across block boundaries while preserving the familiar per-transaction warm set. The discount depends only on prior blocks, so it is deterministic at submission, predictable across builders, and behaviour-modifying in a useful direction. +Extending the concept between transactions intra-block seems like an obvious improvement - but same-block sharing fails to deliver predictability. Any gas saving that depends on coincidental same-block accesses is effectively random and capricious from a user's perspective: they sign a transaction at a fixed price, yet may pay less only if another transaction in the same block happens to touch the same items. Such savings are both inherently not knowable or actionalable at submission and therefore do not shape behaviour. + +This proposal rewards short-term temporal locality across block boundaries while preserving the familiar per-transaction warm set. The discount depends only on prior blocks, so it is deterministic at submission, predictable across builders, and behaviour-modifying in a useful direction. As the saving depends only on publicly observable prior-block activity, it is knowable at submission time. Unlike same-block effects, it is therefore behaviour-shaping rather than incidental. It nudges workloads that naturally cluster accesses to keep doing so, matching how clients amortise repeated recent accesses. -This EIP is intentionally scoped to per-transaction warming and does not apply intra-block warming across transactions. +This proposal is intentionally scoped to per-transaction warming and does not apply intra-block warming across transactions. ## Specification ### Terminology and constants -The following names are used for clarity. Concrete values can be updated by governance without changing the mechanism. - | Name | Description | Default | |-----------------------------|-----------------------|-----------------| -| `window_size_blocks`| Number of recent blocks over which a discount may apply. | `63` | -| `current_block_number` | The block number of the transaction being executed. | - | -| `last_access_block_number(item)` | The most recent block number strictly less than `current_block_number` in which `item` was accessed by an executed transaction. If unknown or older than `window_size_blocks`, it is treated as not found. | - | -| `block_distance_in_blocks(item)` | Defined as `current_block_number - last_access_block_number(item)` when the latter is found, else a value greater than `window_size_blocks`. | - | +| `WINDOW_SIZE_BLOCKS`| Number of recent blocks over which a discount may apply. | `63` | +| `CURRENT_BLOCK_NUMBER` | The block number of the transaction being executed. | - | +| `LAST_ACCESS_BLOCK_NUMBER(item)` | The most recent block number strictly less than `CURRENT_BLOCK_NUMBER` in which `item` was accessed by an executed transaction. If unknown or older than `WINDOW_SIZE_BLOCKS`, it is treated as not found. | - | +| `BLOCK_DISTANCE_IN_BLOCKS(item)` | Defined as `CURRENT_BLOCK_NUMBER - LAST_ACCESS_BLOCK_NUMBER(item)` when the latter is found, else a value greater than `WINDOW_SIZE_BLOCKS`. | - | Gas constants from existing behaviour: | Name | Value | |-----------------------------|-------:| -| `sload_warm_gas_cost` | `100` | -| `sload_cold_surcharge_gas` | `2100` | -| `account_warm_gas_cost` | `100` | -| `account_cold_surcharge_gas`| `2600` | +| `SLOAD_WARM_GAS_COST` | `100` | +| `SLOAD_COLD_SURCHARGE_GAS` | `2100` | +| `ACCOUNT_WARM_GAS_COST` | `100` | +| `ACCOUNT_COLD_SURCHARGE_GAS`| `2600` | Discount caps (this EIP treats maximum as full cold surcharge, minimum as zero): | Name | Value | |---------------------------|-----------------------------:| -| `discount_max_sload` | `sload_cold_surcharge_gas` | -| `discount_min_sload` | `0` | -| `discount_max_account` | `account_cold_surcharge_gas` | -| `discount_min_account` | `0` | +| `DISCOUNT_MAX_SLOAD` | `SLOAD_COLD_SURCHARGE_GAS` | +| `DISCOUNT_MIN_SLOAD` | `0` | +| `DISCOUNT_MAX_ACCOUNT` | `ACCOUNT_COLD_SURCHARGE_GAS` | +| `DISCOUNT_MIN_ACCOUNT` | `0` | This means the closest prior-block usage allows the first access in a transaction to be charged at warm cost, and the far edge of the window trends to the normal cold-plus-warm cost. @@ -64,70 +64,99 @@ This means the closest prior-block usage allows the first access in a transactio This EIP applies the discount to the **first access in a transaction** of: -- Storage keys accessed by `SLOAD` and by any operation that first reads a slot - as part of its semantics (for example, `SSTORE`'s read step). -- Account touches that incur the cold account access surcharge under the - current gas schedule, including but not limited to: - `BALANCE`, `EXTCODEHASH`, `EXTCODESIZE`, `EXTCODECOPY`, and the target - account of `CALL`, `CALLCODE`, `DELEGATECALL`, `STATICCALL`. +- Storage keys accessed by `SLOAD` and by any operation that first reads a slot as part of its semantics (for example, `SSTORE`'s read step). +- Account touches that incur the cold account access surcharge under the current gas schedule, including but not limited to: `BALANCE`, `EXTCODEHASH`, `EXTCODESIZE`, `EXTCODECOPY`, and the target account of `CALL`, `CALLCODE`, `DELEGATECALL`, `STATICCALL`. Writes are affected **only** to the extent they perform an initial read or account touch that would have been charged as cold. Write-specific costs and any refund semantics are unchanged. Precompiles remain unchanged and are always warm. Because they do not pay a cold surcharge, no discount is applied to precompile calls. -Access lists per EIP-2930 remain effective and, when present, pre-warm the listed addresses and storage keys at the start of the transaction. For items that are pre-warmed by an access list, this temporal discount does not apply. +Access lists per [EIP-2930](./eip-2930.md) remain effective and, when present, pre-warm the listed addresses and storage keys at the start of the transaction. For items that are pre-warmed by an access list, this temporal discount does not apply. ### Discount function -Define a smooth, monotone falloff within the window using the programming form of smoothstep (clamped cubic Hermite interpolation). +The discount decays smoothly with block distance, using a **reversed Hermite smoothstep** interpolation over the discount window. + + +![Gas discount percentage graph](../assets/eip-8057/gas_discount_percentage.png) + +Mathematically: +```math +x = \mathrm{clamp}\!\left( \frac{D - 1}{W - 1}, 0, 1 \right) ``` -Let d = current_block_number - last_access_block_number(item) -Let w = window_size_blocks -Let D_max = maximum discount, D_min = minimum discount (usually 0) -Let x = clamp((d - 1.0) / (w - 1.0), 0.0, 1.0) -Then: - discount(d) = D_min + (D_max - D_min) * (1.0 - (3x^2 - 2x^3)) - cost(d) = warm_gas_cost + max(0, cold_surcharge - discount(d)) + +```math +f(D, W) = d_{\text{min}} + (d_{\text{max}} - d_{\text{min}}) + \cdot \left( 1 - \left( 3x^2 - 2x^3 \right) \right) ``` -Programattically +where: + +* $D$ = block distance in blocks +* $W$ = window size in blocks +* $d_{\text{min}}$, $d_{\text{max}}$ = minimum and maximum discounts -- `normalized_distance = (block_distance_in_blocks - 1) / (window_size_blocks - 1)` clamped to `[0, 1]`. This maps distance `1` to `0` and distance `window_size_blocks` to `1`. -- `smoothstep_value = normalized_distance * normalized_distance * (3 - 2 * normalized_distance)`. -- `discount_factor = 1 - smoothstep_value`. This is `1` at distance `1` and `0` at distance `window_size_blocks`. +This form maps: -For a given opcode family with parameters `discount_max` and `discount_min`, the integer discount to apply to the **cold surcharge** is: +* $D = 1$ → full discount $(f = d_{\text{max}})$ +* $D = W$ → no discount $(f = d_{\text{min}})$ +Programmatic form + +Reference smoothstep helper: +```python +def smoothstep(edge0: float, edge1: float, x: float) -> float: + """Scale and clamp x to [0, 1], then apply cubic Hermite smoothstep.""" + x = max(0.0, min(1.0, (x - edge0) / (edge1 - edge0))) + return x * x * (3.0 - 2.0 * x) ``` -if block_distance_in_blocks <= 0 or - block_distance_in_blocks > window_size_blocks: - discount_gas = 0 + +Calculation steps: + +* `NORMALIZED_DISTANCE = (BLOCK_DISTANCE_IN_BLOCKS - 1) / (WINDOW_SIZE_BLOCKS - 1)` clamped to `[0, 1]`. This maps distance `1` → `0` and distance `WINDOW_SIZE_BLOCKS` → `1`. +* `SMOOTHSTEP_VALUE = smoothstep(0.0, 1.0, NORMALIZED_DISTANCE)` +* `DISCOUNT_FACTOR = 1.0 - SMOOTHSTEP_VALUE` (equals `1.0` at distance `1`, and `0.0` at distance `WINDOW_SIZE_BLOCKS`) + +For a given opcode family with parameters `DISCOUNT_MAX` and `DISCOUNT_MIN`, the integer discount applied to the **cold surcharge** is: + +```python +if BLOCK_DISTANCE_IN_BLOCKS <= 0 or BLOCK_DISTANCE_IN_BLOCKS > WINDOW_SIZE_BLOCKS: + DISCOUNT_GAS = 0 else: - discount_gas = discount_min + - round_to_nearest((discount_max - discount_min) * discount_factor)) + NORMALIZED_DISTANCE = max( + 0.0, + min(1.0, (BLOCK_DISTANCE_IN_BLOCKS - 1.0) / (WINDOW_SIZE_BLOCKS - 1.0)), + ) + SMOOTHSTEP_VALUE = smoothstep(0.0, 1.0, NORMALIZED_DISTANCE) + DISCOUNT_FACTOR = 1.0 - SMOOTHSTEP_VALUE + DISCOUNT_GAS = DISCOUNT_MIN + round( + (DISCOUNT_MAX - DISCOUNT_MIN) * DISCOUNT_FACTOR + ) ``` -Note: this should be scaled to interger space rather than using floating points. An example is given to do this in reference implementation. - -`round_to_nearest` is round half up for integers in this specification. Any consistent rule is acceptable if implemented consistently across clients. +All arithmetic must be implemented in **integer space** in consensus-critical code; floating point is shown here only for clarity. `round()` follows *round half up* semantics; any deterministic rule is acceptable if consistently applied across clients. This mechanism is a **discount**, not a refund. It reduces gas charged upfront for a cold surcharge; it does not emit a rebate and does not affect refund accounting or receipts. ### Charging rules (per transaction) -For the first access to an `item` **within a transaction**: +For the first access to an `ITEM` **within a transaction**: + +1. If `ITEM` is already warm in this transaction due to same-transaction rules or pre-warmed via a transaction access list, charge the warm cost defined today. No temporal discount applies. +2. Otherwise compute `BLOCK_DISTANCE_IN_BLOCKS(ITEM)`. If `1 <= BLOCK_DISTANCE_IN_BLOCKS(ITEM) <= WINDOW_SIZE_BLOCKS`, apply the discount to the cold surcharge: + + * Storage read first access cost: + + * `SLOAD_FIRST_ACCESS_COST = SLOAD_WARM_GAS_COST + max(0, SLOAD_COLD_SURCHARGE_GAS - DISCOUNT_SLOAD(BLOCK_DISTANCE_IN_BLOCKS))` -1. If `item` is already warm in this transaction due to same-transaction rules or pre-warmed via a transaction access list, charge the warm cost defined today. No temporal discount applies. -2. Otherwise compute `block_distance_in_blocks(item)`. If - `1 <= block_distance_in_blocks(item) <= window_size_blocks`, apply the discount to the cold surcharge: - - Storage read first access cost: - - `sload_first_access_cost = sload_warm_gas_cost + max(0, sload_cold_surcharge_gas - discount_sload(block_distance_in_blocks))` - - Account-touch first access cost: - - `account_first_access_cost = account_warm_gas_cost + max(0, account_cold_surcharge_gas - discount_account(block_distance_in_blocks))` -3. If `block_distance_in_blocks(item) > window_size_blocks` or not found, charge the unmodified cold surcharge plus the warm component as today. + * Account-touch first access cost: -Subsequent accesses to the same `item` within the **same transaction** are warm as per existing rules. This EIP does not introduce block-level warming across transactions. + * `ACCOUNT_FIRST_ACCESS_COST = ACCOUNT_WARM_GAS_COST + max(0, ACCOUNT_COLD_SURCHARGE_GAS - DISCOUNT_ACCOUNT(BLOCK_DISTANCE_IN_BLOCKS))` + +3. If `BLOCK_DISTANCE_IN_BLOCKS(ITEM) > WINDOW_SIZE_BLOCKS` or not found, charge the unmodified cold surcharge plus the warm component as today. + +Subsequent accesses to the same `ITEM` within the **same transaction** are warm as per existing rules. This EIP does not introduce block-level warming across transactions. ### Initial sync and pricing with block-level access lists @@ -135,22 +164,16 @@ This EIP requires block-level access lists in headers. Each header carries commi A newly synced node can price the very first block it validates as follows: -1. For a block to validate at `current_block_number`, gather the headers for the - previous `window_size_blocks` blocks. -2. For each of those headers, obtain the committed sets of accessed accounts and - storage keys from the block body or via verified proofs against the header - commitments. -3. Build a local index mapping each seen `item` to the most recent block number - in which it appears within that window. This becomes - `last_access_block_number(item)`. -4. When validating `current_block_number`, for each first access to `item`, - compute - `block_distance_in_blocks(item) = current_block_number - last_access_block_number(item)` +1. For a block to validate at `CURRENT_BLOCK_NUMBER`, gather the headers for the previous `WINDOW_SIZE_BLOCKS` blocks. +2. For each of those headers, obtain the committed sets of accessed accounts and storage keys from the block body or via verified proofs against the header commitments. +3. Build a local index mapping each seen `ITEM` to the most recent block number in which it appears within that window. This becomes `LAST_ACCESS_BLOCK_NUMBER(ITEM)`. +4. When validating `CURRENT_BLOCK_NUMBER`, for each first access to `ITEM`, compute + `BLOCK_DISTANCE_IN_BLOCKS(ITEM) = CURRENT_BLOCK_NUMBER - LAST_ACCESS_BLOCK_NUMBER(ITEM)` when present, else treat as out-of-window. Apply the discount rules above. -Reorgs longer than `window_size_blocks` fall back to the same procedure as initial resync. Items not present in the new canonical window are treated as cold. +Reorgs longer than `WINDOW_SIZE_BLOCKS` fall back to the same procedure as initial resync. Items not present in the new canonical window are treated as cold. -No execution of historical transactions is required to compute the discount at validation time. Stateless verifiers can price gas using the current block plus compact proofs that an item appears in one of the previous `window_size_blocks` access lists. +No execution of historical transactions is required to compute the discount at validation time. Stateless verifiers can price gas using the current block plus compact proofs that an item appears in one of the previous `WINDOW_SIZE_BLOCKS` access lists. ### Wallet gas estimation guidance @@ -160,55 +183,58 @@ Operators who can predict landing with high confidence - for example via priorit Motivated operators who can reliably land transactions in a specific block - for example via private order flow and appropriately set priority fees - may account for the exact discount. This is an advanced use case and should not be the default behaviour for general-purpose wallets. +Here’s your section rewritten with consistent **uppercase variable names** and slightly tightened for clarity while preserving your meaning and tone: + ### Implementation guidance Clients are expected to maintain a rolling in-memory index to avoid rescanning headers for each block: -- Keep a ring buffer of `window_size_blocks` buckets, one per recent block. Each bucket stores first-touched accounts and first-touched storage keys for that block. -- Maintain two maps `last_seen_account` and `last_seen_storage_key` that track the latest block index within the window where each item was present. On block advance, drop the oldest bucket and delete items that only appeared there, or mark them as out of window. -- During execution, when an opcode is about to charge a cold surcharge for an item not yet warm in the current transaction, look up `block_distance_in_blocks` from `last_seen_*` and charge using the rules above. Then record first touches for the current block in the current bucket and update the maps. +* Keep a ring buffer of `WINDOW_SIZE_BLOCKS` buckets, one per recent block. Each bucket stores first-touched accounts and first-touched storage keys for that block. +* Maintain two maps, `LAST_SEEN_ACCOUNT` and `LAST_SEEN_STORAGE_KEY`, which track the most recent block index within the window where each item was present. On block advance, drop the oldest bucket and delete items that only appeared there, or mark them as out-of-window. +* During execution, when an opcode is about to charge a cold surcharge for an item not yet warm in the current transaction, look up `BLOCK_DISTANCE_IN_BLOCKS` from the `LAST_SEEN_*` map and charge using the rules above. Then record first touches for the current block in the current bucket and update the maps. -This design keeps memory bounded by `window_size_blocks` times the number of distinct first touches per block, which is itself bounded by the block gas limit divided by the minimum per-item cost. - -This is one approach; clients may also implement this via their caches or pruning block distance hints in their trie. +This design keeps memory bounded by `WINDOW_SIZE_BLOCKS` multiplied by the number of distinct first touches per block, which is itself bounded by the block gas limit divided by the minimum per-item cost. +This is one practical approach; clients may also implement this via existing caches or by embedding and pruning block-distance hints in their state trie. ### Test cases -Assume defaults: +### Example parameters and results -| Name | Value | -|-----------------------------|-------:| -| `window_size_blocks` | `63` | -| `sload_warm_gas_cost` | `100` | -| `sload_cold_surcharge_gas` | `2100` | -| `account_warm_gas_cost` | `100` | -| `account_cold_surcharge_gas`| `2600` | -| `discount_max_sload` | `2100` | -| `discount_min_sload` | `0` | -| `discount_max_account` | `2600` | -| `discount_min_account` | `0` | - -Examples for the first storage read in a transaction: - -| `block_distance_in_blocks` | Discount | Charge | Notes | -|----------------------------|---------:|-------:|------:| -| `1` | `2100` | `100` | Equal to warm | -| `18` | `0.8 * 2100 = 1680` | `520` | - | -| `32` | `1050` | `1150` | - | -| `63` | `0` | `2200` | - | -| `> 63` | `0` | `2200` | - | - -Examples for the first account touch in a transaction: - -| `block_distance_in_blocks` | Discount | Charge | Notes | -|----------------------------|---------:|-------:|------:| -| `1` | `2600` | `100` | Equal to warm | -| `32` | `1300` | `1400` | - | -| `63` | `0` | `2700` | - | -| `> 63` | `0` | `2700` | - | - -Exact integer results are defined by the reference implementation rounding rule. +Assume the following defaults: + +| Name | Value | +| ---------------------------- | -----: | +| `WINDOW_SIZE_BLOCKS` | `63` | +| `SLOAD_WARM_GAS_COST` | `100` | +| `SLOAD_COLD_SURCHARGE_GAS` | `2100` | +| `ACCOUNT_WARM_GAS_COST` | `100` | +| `ACCOUNT_COLD_SURCHARGE_GAS` | `2600` | +| `DISCOUNT_MAX_SLOAD` | `2100` | +| `DISCOUNT_MIN_SLOAD` | `0` | +| `DISCOUNT_MAX_ACCOUNT` | `2600` | +| `DISCOUNT_MIN_ACCOUNT` | `0` | + +#### Example: first storage read in a transaction + +| `BLOCK_DISTANCE_IN_BLOCKS` | Discount | Charge | Notes | +| -------------------------- | ------------------: | -----: | ------------: | +| `1` | `2100` | `100` | Equal to warm | +| `18` | `0.8 * 2100 = 1680` | `520` | - | +| `32` | `1050` | `1150` | - | +| `63` | `0` | `2200` | - | +| `>63` | `0` | `2200` | - | + +#### Example: first account touch in a transaction + +| `BLOCK_DISTANCE_IN_BLOCKS` | Discount | Charge | Notes | +| -------------------------- | -------: | -----: | ------------: | +| `1` | `2600` | `100` | Equal to warm | +| `32` | `1300` | `1400` | - | +| `63` | `0` | `2700` | - | +| `>63` | `0` | `2700` | - | + +Exact integer results are determined by the reference implementation’s rounding rule (`round_to_nearest`, half-up). ### Reference implementation (Python, integer only) @@ -216,36 +242,37 @@ This implementation is normative for rounding and scaling. It uses a power-of-tw ```python # Gas constants -sload_warm_gas_cost = 100 -sload_cold_surcharge_gas = 2100 -account_warm_gas_cost = 100 -account_cold_surcharge_gas = 2600 +SLOAD_WARM_GAS_COST = 100 +SLOAD_COLD_SURCHARGE_GAS = 2100 +ACCOUNT_WARM_GAS_COST = 100 +ACCOUNT_COLD_SURCHARGE_GAS = 2600 # Temporal discount parameters -window_size_blocks = 63 -discount_max_sload = sload_cold_surcharge_gas -discount_min_sload = 0 -discount_max_account = account_cold_surcharge_gas -discount_min_account = 0 +WINDOW_SIZE_BLOCKS = 63 +DISCOUNT_MAX_SLOAD = SLOAD_COLD_SURCHARGE_GAS +DISCOUNT_MIN_SLOAD = 0 +DISCOUNT_MAX_ACCOUNT = ACCOUNT_COLD_SURCHARGE_GAS +DISCOUNT_MIN_ACCOUNT = 0 + +# Fixed-point scale (2^25 = 33,554,432) +SCALE_FACTOR = 1 << 25 +HALF_SCALE = SCALE_FACTOR >> 1 -# Fixed-point scale - power of two -scale_factor = 1 << 25 # 33_554_432 -half_scale = scale_factor >> 1 def smooth_factor_scaled(block_distance_in_blocks: int, - window_blocks: int = window_size_blocks) -> int: + window_blocks: int = WINDOW_SIZE_BLOCKS) -> int: """ - Returns round_to_nearest(scale_factor * discount_factor) where: + Returns round_to_nearest(SCALE_FACTOR * DISCOUNT_FACTOR) where: normalized_distance = (block_distance_in_blocks - 1) / (window_blocks - 1), - clamped to [0,1] + clamped to [0, 1] smoothstep_value = normalized_distance^2 * (3 - 2 * normalized_distance) discount_factor = 1 - smoothstep_value - The result is in [0, scale_factor]. + The result is in [0, SCALE_FACTOR]. """ if block_distance_in_blocks <= 0 or block_distance_in_blocks > window_blocks: return 0 - # Use exact rational form to minimise scaling multiplications: + # Use exact rational form to minimize scaling multiplications: # Let t = block_distance_in_blocks - 1, d = window_blocks - 1. # discount_factor = (d^3 - 3*d*t^2 + 2*t^3) / d^3 t = block_distance_in_blocks - 1 @@ -255,8 +282,9 @@ def smooth_factor_scaled(block_distance_in_blocks: int, t3 = t2 * t numerator = d3 - 3 * d * t2 + 2 * t3 - # round half up - return (scale_factor * numerator + (d3 // 2)) // d3 + # Round half up + return (SCALE_FACTOR * numerator + (d3 // 2)) // d3 + def discount_gas_units(block_distance_in_blocks: int, discount_max: int, @@ -265,30 +293,33 @@ def discount_gas_units(block_distance_in_blocks: int, Integer discount within the window using the smooth falloff. Returns an integer number of gas units to subtract from the cold surcharge. """ - if block_distance_in_blocks <= 0 or block_distance_in_blocks > window_size_blocks: + if block_distance_in_blocks <= 0 or block_distance_in_blocks > WINDOW_SIZE_BLOCKS: return 0 - factor_scaled = smooth_factor_scaled(block_distance_in_blocks, window_size_blocks) + + factor_scaled = smooth_factor_scaled(block_distance_in_blocks, WINDOW_SIZE_BLOCKS) span = discount_max - discount_min - scaled = (span * factor_scaled + half_scale) // scale_factor + scaled = (span * factor_scaled + HALF_SCALE) // SCALE_FACTOR return discount_min + scaled + def sload_first_access_cost(block_distance_in_blocks: int) -> int: disc = discount_gas_units(block_distance_in_blocks, - discount_max_sload, - discount_min_sload) - cold_part = sload_cold_surcharge_gas - disc + DISCOUNT_MAX_SLOAD, + DISCOUNT_MIN_SLOAD) + cold_part = SLOAD_COLD_SURCHARGE_GAS - disc if cold_part < 0: cold_part = 0 - return sload_warm_gas_cost + cold_part + return SLOAD_WARM_GAS_COST + cold_part + def account_first_access_cost(block_distance_in_blocks: int) -> int: disc = discount_gas_units(block_distance_in_blocks, - discount_max_account, - discount_min_account) - cold_part = account_cold_surcharge_gas - disc + DISCOUNT_MAX_ACCOUNT, + DISCOUNT_MIN_ACCOUNT) + cold_part = ACCOUNT_COLD_SURCHARGE_GAS - disc if cold_part < 0: cold_part = 0 - return account_warm_gas_cost + cold_part + return ACCOUNT_WARM_GAS_COST + cold_part ``` ## Rationale @@ -306,8 +337,6 @@ Builder rotation and similar operational concerns are out of scope for this EIP. The smoothstep curve over 63 blocks is gentle. Discount remains close to maximum for roughly the first 12 to 16 blocks and decays toward zero near the far edge of the window. -![Gas discount percentage graph](../assets/eip-8057/gas_discount_percentage.png) - #### Storage slot (SLOAD) first-access pricing (warm = 100, cold surcharge = 2100, window = 63) @@ -371,7 +400,7 @@ transactions as possible, a practical cadence for items touched repeatedly is: - Maintain about 50 percent of the maximum discount by touching again within approximately 32 blocks. - Beyond about 55 blocks the discount approaches zero and the access is nearly cold again. -In short, a maintenance touch roughly every 18 to 20 blocks is an efficient sweet spot for min-maxing: high retained discount, low transaction frequency. +In short, a maintenance touch roughly every 18 to 20 blocks is an efficient sweet spot for min-maxing: high retained discount, low transaction frequency. However an application may wish to access more frequently to increase the discount for users. The exact timing will be determined by desired outcome and overall organic usage. Which also why discount decays rather than sharp cliff, when would always be a fixed number of blocks (just before cliff edge). UX note: humans may not reliably act within these windows, but automated keepers, dapps, and services can. Some state - for example, popular pair balances - will tend to stay warm naturally due to organic use, indirectly benefiting users. From e415e1281141014fff8b908ab4c5ef5597630e2f Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Wed, 22 Oct 2025 07:05:58 +0100 Subject: [PATCH 13/19] lint --- EIPS/eip-8057.md | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/EIPS/eip-8057.md b/EIPS/eip-8057.md index 132d68af6746a6..ef8afd9b1a496d 100644 --- a/EIPS/eip-8057.md +++ b/EIPS/eip-8057.md @@ -93,18 +93,19 @@ f(D, W) = d_{\text{min}} + (d_{\text{max}} - d_{\text{min}}) where: -* $D$ = block distance in blocks -* $W$ = window size in blocks -* $d_{\text{min}}$, $d_{\text{max}}$ = minimum and maximum discounts +- $D$ = block distance in blocks +- $W$ = window size in blocks +- $d_{\text{min}}$, $d_{\text{max}}$ = minimum and maximum discounts This form maps: -* $D = 1$ → full discount $(f = d_{\text{max}})$ -* $D = W$ → no discount $(f = d_{\text{min}})$ +- $D = 1$ → full discount $(f = d_{\text{max}})$ +- $D = W$ → no discount $(f = d_{\text{min}})$ Programmatic form Reference smoothstep helper: + ```python def smoothstep(edge0: float, edge1: float, x: float) -> float: """Scale and clamp x to [0, 1], then apply cubic Hermite smoothstep.""" @@ -114,9 +115,9 @@ def smoothstep(edge0: float, edge1: float, x: float) -> float: Calculation steps: -* `NORMALIZED_DISTANCE = (BLOCK_DISTANCE_IN_BLOCKS - 1) / (WINDOW_SIZE_BLOCKS - 1)` clamped to `[0, 1]`. This maps distance `1` → `0` and distance `WINDOW_SIZE_BLOCKS` → `1`. -* `SMOOTHSTEP_VALUE = smoothstep(0.0, 1.0, NORMALIZED_DISTANCE)` -* `DISCOUNT_FACTOR = 1.0 - SMOOTHSTEP_VALUE` (equals `1.0` at distance `1`, and `0.0` at distance `WINDOW_SIZE_BLOCKS`) +- `NORMALIZED_DISTANCE = (BLOCK_DISTANCE_IN_BLOCKS - 1) / (WINDOW_SIZE_BLOCKS - 1)` clamped to `[0, 1]`. This maps distance `1` → `0` and distance `WINDOW_SIZE_BLOCKS` → `1`. +- `SMOOTHSTEP_VALUE = smoothstep(0.0, 1.0, NORMALIZED_DISTANCE)` +- `DISCOUNT_FACTOR = 1.0 - SMOOTHSTEP_VALUE` (equals `1.0` at distance `1`, and `0.0` at distance `WINDOW_SIZE_BLOCKS`) For a given opcode family with parameters `DISCOUNT_MAX` and `DISCOUNT_MIN`, the integer discount applied to the **cold surcharge** is: @@ -146,13 +147,13 @@ For the first access to an `ITEM` **within a transaction**: 1. If `ITEM` is already warm in this transaction due to same-transaction rules or pre-warmed via a transaction access list, charge the warm cost defined today. No temporal discount applies. 2. Otherwise compute `BLOCK_DISTANCE_IN_BLOCKS(ITEM)`. If `1 <= BLOCK_DISTANCE_IN_BLOCKS(ITEM) <= WINDOW_SIZE_BLOCKS`, apply the discount to the cold surcharge: - * Storage read first access cost: + - Storage read first access cost: - * `SLOAD_FIRST_ACCESS_COST = SLOAD_WARM_GAS_COST + max(0, SLOAD_COLD_SURCHARGE_GAS - DISCOUNT_SLOAD(BLOCK_DISTANCE_IN_BLOCKS))` + - `SLOAD_FIRST_ACCESS_COST = SLOAD_WARM_GAS_COST + max(0, SLOAD_COLD_SURCHARGE_GAS - DISCOUNT_SLOAD(BLOCK_DISTANCE_IN_BLOCKS))` - * Account-touch first access cost: + - Account-touch first access cost: - * `ACCOUNT_FIRST_ACCESS_COST = ACCOUNT_WARM_GAS_COST + max(0, ACCOUNT_COLD_SURCHARGE_GAS - DISCOUNT_ACCOUNT(BLOCK_DISTANCE_IN_BLOCKS))` + - `ACCOUNT_FIRST_ACCESS_COST = ACCOUNT_WARM_GAS_COST + max(0, ACCOUNT_COLD_SURCHARGE_GAS - DISCOUNT_ACCOUNT(BLOCK_DISTANCE_IN_BLOCKS))` 3. If `BLOCK_DISTANCE_IN_BLOCKS(ITEM) > WINDOW_SIZE_BLOCKS` or not found, charge the unmodified cold surcharge plus the warm component as today. From 4dc42718fc764c71a39fc528fd0dac235445c361 Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Wed, 22 Oct 2025 07:07:32 +0100 Subject: [PATCH 14/19] lint --- EIPS/eip-8057.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/EIPS/eip-8057.md b/EIPS/eip-8057.md index ef8afd9b1a496d..866d0af09995f9 100644 --- a/EIPS/eip-8057.md +++ b/EIPS/eip-8057.md @@ -190,9 +190,9 @@ Here’s your section rewritten with consistent **uppercase variable names** and Clients are expected to maintain a rolling in-memory index to avoid rescanning headers for each block: -* Keep a ring buffer of `WINDOW_SIZE_BLOCKS` buckets, one per recent block. Each bucket stores first-touched accounts and first-touched storage keys for that block. -* Maintain two maps, `LAST_SEEN_ACCOUNT` and `LAST_SEEN_STORAGE_KEY`, which track the most recent block index within the window where each item was present. On block advance, drop the oldest bucket and delete items that only appeared there, or mark them as out-of-window. -* During execution, when an opcode is about to charge a cold surcharge for an item not yet warm in the current transaction, look up `BLOCK_DISTANCE_IN_BLOCKS` from the `LAST_SEEN_*` map and charge using the rules above. Then record first touches for the current block in the current bucket and update the maps. +- Keep a ring buffer of `WINDOW_SIZE_BLOCKS` buckets, one per recent block. Each bucket stores first-touched accounts and first-touched storage keys for that block. +- Maintain two maps, `LAST_SEEN_ACCOUNT` and `LAST_SEEN_STORAGE_KEY`, which track the most recent block index within the window where each item was present. On block advance, drop the oldest bucket and delete items that only appeared there, or mark them as out-of-window. +- During execution, when an opcode is about to charge a cold surcharge for an item not yet warm in the current transaction, look up `BLOCK_DISTANCE_IN_BLOCKS` from the `LAST_SEEN_*` map and charge using the rules above. Then record first touches for the current block in the current bucket and update the maps. This design keeps memory bounded by `WINDOW_SIZE_BLOCKS` multiplied by the number of distinct first touches per block, which is itself bounded by the block gas limit divided by the minimum per-item cost. From f8cdcaac2ba6f0c5ff21a543506d4977c18943a0 Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Wed, 22 Oct 2025 08:04:26 +0100 Subject: [PATCH 15/19] formatting --- EIPS/eip-8057.md | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/EIPS/eip-8057.md b/EIPS/eip-8057.md index 866d0af09995f9..f8f107610fffb7 100644 --- a/EIPS/eip-8057.md +++ b/EIPS/eip-8057.md @@ -82,14 +82,10 @@ The discount decays smoothly with block distance, using a **reversed Hermite smo Mathematically: -```math -x = \mathrm{clamp}\!\left( \frac{D - 1}{W - 1}, 0, 1 \right) -``` +$$x = \mathrm{clamp}\!\left( \frac{D - 1}{W - 1}, 0, 1 \right)$$ -```math -f(D, W) = d_{\text{min}} + (d_{\text{max}} - d_{\text{min}}) - \cdot \left( 1 - \left( 3x^2 - 2x^3 \right) \right) -``` +$$f(D, W) = d_{\text{min}} + (d_{\text{max}} - d_{\text{min}}) + \cdot \left( 1 - \left( 3x^2 - 2x^3 \right) \right)$$ where: @@ -409,7 +405,7 @@ This mechanism does not correlate across account and storage accesses. Each item #### Coordinated multi-EOA warm-up behaviour -As the temporal discount depends on prior-block access only, a coordinated actor controlling multiple EOAs may sequence transactions to exploit the maximum discount. For example, a lightweight "warm-up" transaction from one EOA in block N can touch the relevant storage or account, and mutliple transactions from another EOAs in block N+1 (the same operator) can then execute at the fully warm-equivalent cost for those items. +As the temporal discount depends on prior-block access only, a coordinated actor controlling multiple EOAs may sequence transactions to exploit the maximum discount. For example, a lightweight "warm-up" transaction from one EOA in block `N` can touch the relevant storage or account, and mutliple transactions from another EOAs in block `N+1` (the same operator) can then execute at the fully warm-equivalent cost for those items. This inter-block pipelining is predictable and legitimate. It does not break consensus or fairness; it simply encourages temporal clustering of related activity. The gas saved is modest compared with the coordination overhead and priority fee costs, so it is unlikely to dominate behaviour except for highly automated systems. @@ -426,8 +422,8 @@ This EIP changes gas charging and therefore requires a hard fork. It only decrea ## Security Considerations - Index growth: the number of unique items per block is limited by the block gas limit and per-item minimum costs. Bounding the window keeps memory usage proportional to a small constant factor times that number. -- Reorgs: on reorg, recompute `last_access_block_number` from the committed access lists of the new canonical window. Reorgs longer than the window fall back to the initial resync procedure. -- Stateless operation: pricing proofs require only the current block and membership proofs for at most one of the previous `window_size_blocks` access lists per item. +- Reorgs: on reorg, recompute `LAST_ACCESS_BLOCK_NUMBER` from the committed access lists of the new canonical window. Reorgs longer than the window fall back to the initial resync procedure. +- Stateless operation: pricing proofs require only the current block and membership proofs for at most one of the previous `WINDOW_SIZE_BLOCKS` access lists per item. ## Copyright From 84e5d0f20681562a6a9a3c125070fe660232047e Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Wed, 22 Oct 2025 08:10:34 +0100 Subject: [PATCH 16/19] formatting --- EIPS/eip-8057.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/EIPS/eip-8057.md b/EIPS/eip-8057.md index f8f107610fffb7..9ba2cbc431655f 100644 --- a/EIPS/eip-8057.md +++ b/EIPS/eip-8057.md @@ -82,10 +82,14 @@ The discount decays smoothly with block distance, using a **reversed Hermite smo Mathematically: -$$x = \mathrm{clamp}\!\left( \frac{D - 1}{W - 1}, 0, 1 \right)$$ +
-$$f(D, W) = d_{\text{min}} + (d_{\text{max}} - d_{\text{min}}) - \cdot \left( 1 - \left( 3x^2 - 2x^3 \right) \right)$$ +$x = \mathrm{clamp}\!\left( \frac{D - 1}{W - 1}, 0, 1 \right)$ + +$f(D, W) = d_{\text{min}} + (d_{\text{max}} - d_{\text{min}}) + \cdot \left( 1 - \left( 3x^2 - 2x^3 \right) \right)$ + +
where: From 4c653b77cacd881fb72b443e97bd8970dfb65328 Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Wed, 22 Oct 2025 08:14:33 +0100 Subject: [PATCH 17/19] lint --- EIPS/eip-8057.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/EIPS/eip-8057.md b/EIPS/eip-8057.md index 9ba2cbc431655f..ca4a5ef008319d 100644 --- a/EIPS/eip-8057.md +++ b/EIPS/eip-8057.md @@ -82,15 +82,11 @@ The discount decays smoothly with block distance, using a **reversed Hermite smo Mathematically: -
- $x = \mathrm{clamp}\!\left( \frac{D - 1}{W - 1}, 0, 1 \right)$ $f(D, W) = d_{\text{min}} + (d_{\text{max}} - d_{\text{min}}) \cdot \left( 1 - \left( 3x^2 - 2x^3 \right) \right)$ -
- where: - $D$ = block distance in blocks From a8a6d20c5a38b3c556b01d54ce0c171188f3776a Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Wed, 22 Oct 2025 08:25:14 +0100 Subject: [PATCH 18/19] format --- EIPS/eip-8057.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EIPS/eip-8057.md b/EIPS/eip-8057.md index ca4a5ef008319d..17fe8123d1a9ac 100644 --- a/EIPS/eip-8057.md +++ b/EIPS/eip-8057.md @@ -82,7 +82,7 @@ The discount decays smoothly with block distance, using a **reversed Hermite smo Mathematically: -$x = \mathrm{clamp}\!\left( \frac{D - 1}{W - 1}, 0, 1 \right)$ +$x = \mathrm{clamp}\left( \frac{D - 1}{W - 1}, 0, 1 \right)$ $f(D, W) = d_{\text{min}} + (d_{\text{max}} - d_{\text{min}}) \cdot \left( 1 - \left( 3x^2 - 2x^3 \right) \right)$ From b102e9ae570b924d211c8c8e8026fca58c03018f Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Wed, 22 Oct 2025 08:57:48 +0100 Subject: [PATCH 19/19] Rename --- EIPS/eip-8057.md | 2 +- assets/eip-8057/gas_discount_percentage.png | Bin 50322 -> 58008 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/EIPS/eip-8057.md b/EIPS/eip-8057.md index 17fe8123d1a9ac..00a8e12761ead9 100644 --- a/EIPS/eip-8057.md +++ b/EIPS/eip-8057.md @@ -1,6 +1,6 @@ --- eip: 8057 -title: Block Temporal Locality Gas Discounts +title: Inter-Block Temporal Locality Gas Discounts description: Multi‑block temporal locality discounts for state and account access author: Ben Adams (@benaadams), Toni Wahrstätter (@nerolation), Maria Inês Silva (@misilva73), Amirul Ashraf (@asdacap) discussions-to: https://ethereum-magicians.org/t/eip-8057-block-temporal-locality-gas-discounts/25912 diff --git a/assets/eip-8057/gas_discount_percentage.png b/assets/eip-8057/gas_discount_percentage.png index 4b545c6eea1b62e260e9552ed40fd45ae29ef98d..7c78a36cc5eace8410d2b4b02bbca3f3f1eba3b7 100644 GIT binary patch literal 58008 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