Update EIP-8282: Sync specification with sys-asm@83f9801 - #1
Draft
Th0rgal wants to merge 1 commit into
Draft
Conversation
|
The commit 3e392df (as a parent of 353421d) contains errors. |
- 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
force-pushed
the
eip-8282-sys-asm-sync
branch
from
August 6, 2026 16:01
b28dac6 to
64a1d31
Compare
nflaig
reviewed
Aug 8, 2026
| | `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 | |
There was a problem hiding this comment.
this constant doesn't exist on the EIP-8282 contracts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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_INHIBITORconstant: DefineEXCESS_INHIBITOR = 2**256 - 1as the sentinel value written to the excess slot to inhibit non-system calls.stored_excesstoEXCESS_INHIBITOR(non-system calls inhibited until cleared).countdefinition: Definecountas the number of successful submissions since the last system call, stored inSLOT_COUNTand reset to zero by the system call.effective_excessformula: Specifyeffective_excess = stored_excess + max(0, count - TARGET_REQUESTS_PER_BLOCK), withcountread before incrementing for the current request.max(0, old_excess + count - target); (4) always reset count.builder_exitslabel (was duplicated asbuilder_deposits).requires: Add EIP-7997 torequires(the CREATE2 factory used for deployment).Open questions
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.
Multi-block pre-fork count accumulation: Because the deposit contract starts with
count = 0and the write path is active from deployment, thecountcan 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.