Discussion thread for ethereum/ERCs#1979 (ERC-8403, Account Authority Lifecycle).
This proposal defines a shared lifecycle for the authorities that authorize a native account-abstraction account: how an authority (a signing key, or a predicate such as a lock or a limit) is added, rotated, and revoked. An authority is a leaf in a per-account committed tree whose root the account publishes referenceably; a transaction carries a membership proof and names the root it proves against, and the account verifies it in its own authorization step and withholds authorization on failure. Add is a leaf insertion, rotate a replacement, revoke a removal, each a new committed root. It adds no transaction type, opcode, or consensus rule.
The point I would most like feedback on: the lifecycle is stated over a committed root and a membership proof, not over one model’s opcodes, so it binds to more than one account-abstraction family as a peer of each. The PR gives a normative binding to EIP-8141 frame transactions and an informative binding to the EIP-8130 keystore family. That is what lets one transaction type serve both a code-is-authority account and a keystore-backed account without branching on the model or reading a foreign keystore during validation: both reduce to proving the acting authority under the account’s named root.
The EIP-8130 mapping is close to free: an actor’s (actorId, config) is already (authority_id, predicate), and authorize/revoke batches are already add/rotate/revoke. The one primitive that family does not yet publish is a referenceable current-state root over the actor set; its Stateless Accounts proposal already names a compact “proof of chain” as a later, unspecified addition, and this standard’s committed-root binding is that piece for authority state. Because the birth actor set is already committed by sorted leaves, publishing the current set over the same leaves is additive.
Two conformance tiers make the one trade-off explicit: Tier 1 (root-bound, no mutable reads, mempool-cheap, revocation bounded by the recency window) and Tier 2 (one monotonic read, next-block revocation). Both keep invalidation account-bounded.
Feedback I would value:
- The EIP-8130 binding is informative pending a published current-state root — is “the missing primitive is a published root” the right framing, or should it be a joint spec item?
- Leaf encoding: RECOMMENDED
keccak256(authority_id || predicate)with account-defined tree shape — strong enough, or should the tree shape be normative? - Carried capabilities (a sponsor proven under its own root) and prompt revocation via Tier 2 — is the cross-account binding rule tight enough?
Complementary to ERC-8286 (module/validation-flow surface): this fixes the authority-datum lifecycle underneath. Spec and preamble in the PR.