feat: Add EIP-8130 spec - #924
Open
lukasrosario wants to merge 2 commits into
Open
Conversation
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.
Description
Specifies how the OP Stack integrates EIP-8130, which
introduces account abstraction through onchain account configuration and a new EIP-2718 transaction
type (
0x79).Adds
specs/experimental/eip-8130.mdcovering the parts that are OP-specific: activation, the chainparameters the EIP leaves to the chain, span-batch encoding so
0x79transactions survivederivation, the receipt surface, and the enshrined system addresses.
It deliberately does not restate the account model, the authenticator set, the actor scope rules,
the intrinsic gas schedule, or the execution semantics. Those are normative in the EIP and apply
unchanged. The document says so explicitly and states that where it is silent, the EIP governs.
EIP-8130 is still a Draft, so this keeps the spec from drifting as the EIP moves and keeps the review
surface here to what the OP Stack actually adds.
EIP-8130 is not yet assigned to a network upgrade, so the spec names none and lives under
experimental/alongside the other unscheduled specs.Tests
No automated tests. This is a specification-only change.
just lint-checkpasses: markdownlint,doctoc, cspell, and the filename check are all clean, and the five external EIP links return 200.
The wire format the document specifies is not novel and is not being introduced here. It is
specified as already implemented and tested in Base's stack, in both Rust and Go, so there are two
interoperating implementations behind it rather than a paper design. Client-side test coverage lands
with the implementation PRs.
Additional context
The consensus-critical parts, in rough order of risk, are where review attention is most useful:
txspayload gains one trailing column,eip8130_auth_data. Eachtransaction's
sender_auth/payer_authblob is split: the low-entropy 20-byte authenticatoraddress stays in the
tx_datasbody and the high-entropy proof bytes move to the new column. Thecolumn trails every other column so a decoder can identify
0x79transactions from the leadingtype byte of each
tx_datasentry before reading it. That avoids an additional bitlist and meansa batch with no
0x79transactions encodes byte-identically to one produced before activation.authenticator and an EOA or self-pay actor must carry none. Without that binding, a batch can
declare a configured actor while carrying an empty authenticator and reconstruction silently
produces a corrupt authorization blob instead of failing.
REPLAY_BUFFER_CAPACITYandNONCE_FREE_EXPIRY_WINDOWare consensus, notnode policy — the EIP is explicit that a per-node buffer capacity would split consensus. The spec
requires they be sized together so a ring entry always expires before its slot is reused, and
separates them from limits a node may legitimately apply locally.
payerandphaseStatusesare RPC-only and excluded from the RLP encoding, and therefore from the receiptsroot. The spec also states that a failed status does not imply a no-op, since committed earlier
phases, applied account changes, auto-delegation, nonce consumption, and gas payment all persist
through a later phase revert.
sender/payerare zero-length byte strings and apresent-but-zero address is a distinct value. This separates the EOA path from the configured-actor
path and self-pay from sponsored pay, so it has to survive every codec.
Open items I'd like input on:
needn't be, since a batch with no
0x79transactions is unchanged. Flagging in case reviewerswant an explicit gate anyway.
payerfield ordering. It precedesaccount_changesin the span-batch body but followsmetadatain the EIP-2718 encoding. Specified as implemented, but the asymmetry looks accidentalrather than designed, and normalizing it is far cheaper now than after clients ship.
numbers, which need choosing per chain.