Skip to content

Update EIP-8282: Sync specification with sys-asm@83f9801 - #1

Draft
Th0rgal wants to merge 1 commit into
eip-8282-cleanupfrom
eip-8282-sys-asm-sync
Draft

Update EIP-8282: Sync specification with sys-asm@83f9801#1
Th0rgal wants to merge 1 commit into
eip-8282-cleanupfrom
eip-8282-sys-asm-sync

Conversation

@Th0rgal

@Th0rgal Th0rgal commented Aug 6, 2026

Copy link
Copy Markdown
Member

Stacked on top of ethereum#11869. This PR syncs the EIP-8282 specification text with the reference implementation at ethereum/sys-asm@83f9801.

Changes

  • EXCESS_INHIBITOR constant: Define EXCESS_INHIBITOR = 2**256 - 1 as the sentinel value written to the excess slot to inhibit non-system calls.
  • Constructor behavior: Specify that the deposit constructor leaves all storage at zero (write path active from deployment, pre-fork deposits accepted), while the exit constructor initializes stored_excess to EXCESS_INHIBITOR (non-system calls inhibited until cleared).
  • count definition: Define count as the number of successful submissions since the last system call, stored in SLOT_COUNT and reset to zero by the system call.
  • effective_excess formula: Specify effective_excess = stored_excess + max(0, count - TARGET_REQUESTS_PER_BLOCK), with count read before incrementing for the current request.
  • System transition: Specify the full ordered transition: (1) always dequeue first; (2) non-empty calldata sets the inhibitor; (3) empty call clears an existing inhibitor to zero, otherwise stores max(0, old_excess + count - target); (4) always reset count.
  • Reversible inhibition: Replace "permanently disabled" and "disable the queue" with precise reversible inhibition of non-system calls.
  • Endianness clarification: Clarify that the deposit LOG0 emits the amount big-endian as submitted, while the system output converts it to little-endian.
  • Reference links: Update both links to sys-asm@83f9801 and fix the builder_exits label (was duplicated as builder_deposits).
  • requires: Add EIP-7997 to requires (the CREATE2 factory used for deployment).

Open questions

  1. Deployment in the activation block: This PR does not take a position on whether contract deployment in the activation block is valid. The specification currently says contracts MUST be deployed before the fork, but the exact validity of same-block deployment is left as an open question for reviewers.

  2. Multi-block pre-fork count accumulation: Because the deposit contract starts with count = 0 and the write path is active from deployment, the count can accumulate across multiple pre-fork blocks without being reset (since no system calls occur pre-fork). Whether this behavior is intentional or should be addressed is left as an open question.

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown

The commit 3e392df (as a parent of 353421d) contains errors.
Please inspect the Run Summary for details.

@github-actions github-actions Bot added the w-ci label Aug 6, 2026
- Define EXCESS_INHIBITOR = 2**256 - 1 constant
- Define storage layout: slot 0 stored_excess, slot 1 count, slot 2
  queue_head, slot 3 queue_tail, slot 4+ queued records
- Specify constructor behavior: deposit leaves storage at zero and
  accepts pre-fork deposits; exit initializes excess to the inhibitor
- Define count as successful submissions since the last system call
- Specify effective_excess = stored_excess + max(0, count - target),
  with count read before the current request
- Specify the full system transition: always dequeue first (construct,
  do not return early); non-empty calldata sets the inhibitor; empty
  call clears an existing inhibitor to zero, otherwise stores
  max(0, stored_excess + count - target); full drain resets both
  pointers; always reset count; return as final step
- Move inhibitor check before dispatch so both write path and fee
  getter revert while inhibited
- Specify fee getter returns 32-byte big-endian unsigned integer
- Replace 'permanently disabled' / 'disable the queue' with precise
  reversible inhibition of non-system calls
- Replace misleading fee sentence with accurate per-call surcharge
  description that does not conflict with end-of-block update
- Specify deposit LOG0 emits big-endian amount (same as queue storage)
- Clarify deposit big-endian amount versus little-endian system output
- Update reference links to sys-asm@83f9801 and fix builder_exits label
- Add EIP-7997 to requires
@Th0rgal
Th0rgal force-pushed the eip-8282-sys-asm-sync branch from b28dac6 to 64a1d31 Compare August 6, 2026 16:01
Comment thread EIPS/eip-8282.md
| `TARGET_EXIT_REQUESTS_PER_BLOCK` | `2` | Per-block request count above which the fee rises for the exit contract |
| `MIN_REQUEST_FEE` | `1` | Minimum request fee, in wei |
| `REQUEST_FEE_UPDATE_FRACTION` | `17` | Controls the fee's rate of change |
| `EXCESS_INHIBITOR` | `2**256 - 1` | Sentinel value written to the excess slot to inhibit non-system calls |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this constant doesn't exist on the EIP-8282 contracts

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants