Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion .github/workflows/review-candidate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ permissions:

jobs:
candidate:
name: Pinned official candidate and negative control
name: Pinned official and historical candidate evidence
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
Expand All @@ -28,6 +28,8 @@ jobs:
run: node --test scripts/review-candidate.test.mjs
- name: Test exact upstream candidate bytes
run: node scripts/review-candidate.mjs
- name: Test exact merged official bytes
run: node scripts/review-candidate.mjs --official
- uses: actions/upload-artifact@v4
if: always()
with:
Expand All @@ -37,4 +39,8 @@ jobs:
artifacts/review-candidate/*.txt
artifacts/review-candidate/erc-8350.md
artifacts/review-candidate/*/erc-8350/*.sol
artifacts/review-official/*.json
artifacts/review-official/*.txt
artifacts/review-official/erc-8350.md
artifacts/review-official/*/erc-8350/*.sol
if-no-files-found: error
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ artifacts/external-reproductions/
artifacts/independent-client*/
artifacts/account-conformance/
artifacts/review-candidate/
artifacts/review-official/
account-conformance/out/
account-conformance/cache/
account-conformance/lib/
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@ All notable implementation and protocol changes are recorded here.

### Added

- `spec-baseline-3` synchronizes official merge `8b11215c` from ethereum/ERCs#2147
while preserving historical manifests 1/2 and the proposed-candidate record.
The explicit official-source gate checks baseline/spec/asset bindings, runs
the merged bytes and retains the old-source negative control. Draft status,
wire format, vectors, product runtime and frozen audit scope are unchanged.

- Pinned official authorization-candidate gate and CI: verifies proposed upstream
bytes, runs 38 authorization/signature tests, and requires two dirty-padding
failures against the historical official source as a negative control. Review
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ prevStateRoot + ExperienceDelta v1

## 关键文档

- **[规范与实现基线](docs/spec-baseline/README.md):当前实现为 spec-baseline-2,历史 spec-baseline-1 原样保留。官方文本与提议中的澄清严格区分。**
- **[规范与实现基线](docs/spec-baseline/README.md):当前为 spec-baseline-3,已同步官方 #2147 合并版本;历史基线 1/2 原样保留。官方状态仍为 Draft,不代表 G4 或生产就绪。**
- [真实账户验证](docs/interop/account-conformance.md):Safe 1.4.1 双签、7702 委托和本地 type-4 交易证据。
- [独立实现交接](docs/interop/independent-client-handoff.md)与 [Draft → Review 材料](docs/review/draft-to-review.md)。
- **`docs/implementing.md`: 写一个独立实现(外部实现者入口 — 什么算通过、要实现哪些面、`test-vectors/v2.json` 怎么跑)**
Expand Down
9 changes: 5 additions & 4 deletions SPEC.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,17 @@

Status: informative overview accompanying the published ERC-8350 Draft.

The [official Draft](https://github.com/ethereum/ERCs/blob/b9651bc84714e87e6361f4f6c0c8ff39cc265d0a/ERCS/erc-8350.md)
The [official Draft](https://github.com/ethereum/ERCs/blob/8b11215cf267f710b49ea003384e678bcf953eae/ERCS/erc-8350.md)
is the normative authority. [`erc/erc-8350.md`](erc/erc-8350.md) is its byte-identical
local mirror. This overview is not a second specification and does not override
either the official rules or their unresolved ambiguities.

Start with [spec-baseline-1](docs/spec-baseline/README.md) for source pins,
Start with [spec-baseline-3](docs/spec-baseline/README.md) for source pins,
[differences](docs/spec-baseline/DIFFERENCES.md), the
[authorization decision table](docs/spec-baseline/AUTHORIZATION.md) and
[open questions](docs/spec-baseline/OPEN_QUESTIONS.md). Proposed clarifications
are not upstream-approved changes. Historical pre-ERC wording remains in Git.
[open questions](docs/spec-baseline/OPEN_QUESTIONS.md). The AQ-01/AQ-02 wording and
AQ-03 official asset fix merged in ethereum/ERCs#2147; the status remains Draft.
Historical baselines and pre-ERC wording remain in Git.

## Scope

Expand Down
7 changes: 4 additions & 3 deletions docs/interop/account-conformance.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
# Real-account authorization evidence

This is a maintainer-run executable test package, not an independent implementation
or an external security audit. Its interpretation is the proposed
[spec-baseline-2](../spec-baseline/spec-baseline-2.json), with the official Draft
still authoritative and AQ-01/AQ-02 wording not yet approved upstream.
or an external security audit. Its current interpretation is
[spec-baseline-3](../spec-baseline/spec-baseline-3.json), aligned with official
Draft merge `8b11215c`. Historical runs retain their original baseline-2 scope;
new wording does not turn a historical run into new independent verification.

## Reproduce

Expand Down
150 changes: 84 additions & 66 deletions docs/review/draft-to-review.md
Original file line number Diff line number Diff line change
@@ -1,72 +1,90 @@
# Draft-to-Review preparation

Updated: 2026-11-06. Status: technical revision submitted in
[ethereum/ERCs#2147](https://github.com/ethereum/ERCs/pull/2147), not a submitted
status transition. The official ERC remains Draft. The proposed revision is
`397426c046049e1a0c3436e543f9731408708fd3`; it is not a new accepted baseline.
Updated 2026-11-06. [Technical revision #2147](https://github.com/ethereum/ERCs/pull/2147)
is merged at `8b11215cf267f710b49ea003384e678bcf953eae`.
The pinned official status is **Draft**. This packet supports a separate request
for Review; it does not itself change the upstream status.

## Review packet

- [Official Draft](https://eips.ethereum.org/EIPS/eip-8350), pinned in
[spec-baseline-2](../spec-baseline/spec-baseline-2.json).
- [Differences and disputed rules](../spec-baseline/DIFFERENCES.md).
- [Authorization decision table and proposed wording](../spec-baseline/AUTHORIZATION.md).
- [Pinned official Draft](https://github.com/ethereum/ERCs/blob/8b11215cf267f710b49ea003384e678bcf953eae/ERCS/erc-8350.md)
and [spec-baseline-3](../spec-baseline/spec-baseline-3.json).
- [Differences and resolutions](../spec-baseline/DIFFERENCES.md).
- [Authorization decision table](../spec-baseline/AUTHORIZATION.md).
- [AQ-03 runtime/audit delta](../security/aq03-runtime-delta.md).
- [Real-account test command and boundaries](../interop/account-conformance.md).
- [Official-candidate reproduction and acceptance checklist](upstream-authorization.md).
- [External replay evidence](../interop/external-reproduction.md): project PR #33
merged; issues #29/#31 closed on 2026-11-01 with preserved failure records.
- [Independent-client acceptance package](../interop/independent-client-handoff.md).
- [Scoped Python results](../interop/independent-client-results.md) and the
[merged PR #37 main acceptance](https://github.com/AwareLiquid/AgentMemoryState/pull/37#issuecomment-6679669756).
- Public external report intake in `audits/g4/external/submissions/`; acceptance
remains pending under issues #11/#22, not granted by this packet.

## Questions for technical reviewers

1. Should the broad empty/length prohibitions explicitly apply to direct-call
exemption and ECDSA recovery, while ERC-1271 receives arbitrary bytes?
2. Confirm the required signer for registration/rotation/transition, and that a
nonempty self-call is still validated. Keep the empty direct-call shortcut MAY.
3. Confirm ordered short-circuit validation: 1271 refusal is not a veto on a
valid retained 7702 key. Is the security boundary sufficiently prominent?
4. Confirm that noncanonical ABI padding is a failed wallet validation rather
than a decoder abort, without accepting a magic prefix with dirty padding.
5. Are immutable enforcing logic, scoped transition references and the separation
between hash compatibility, state enforcement and actual memory truth clear?

## Remaining work, in order

Technical: address technical/editor feedback on official PR #2147. The wording
and reference-code correction are separate commits. Number, authors, Draft
status, signing domain and wire format are preserved. After upstream merge,
refresh the official mirror and record a new baseline with the actual merged
commit. Until then, spec-baseline-2 and the original official mirror stay pinned.

Operations: publish concise discussion updates with exact commits/results, track
dissent and external implementation responses, and link reviewer-owned audit
supplements when actually received. Do not repeatedly ping editors with claims
that passing project CI establishes consensus.

After the draft is judged ready for peer review, request the Review transition
under [EIP-1](https://eips.ethereum.org/EIPS/eip-1#eip-process). The project treats
full independent implementation and security acceptance as important quality/
release gates; they are not universal EIP-1 prerequisites for entering Review.
An audit does not automatically produce Review or Final.

## Suggested discussion text

> The focused authorization revision is now proposed in
> https://github.com/ethereum/ERCs/pull/2147 (candidate 397426c0; status remains
> Draft). We seek feedback on three specific points: ERC-1271 receives original
> empty/custom-length bytes before the ECDSA-only length guard; nonempty self-call
> signatures are validated; malformed return words fail wallet validation and
> continue to the same-byte ECDSA fallback. That fallback intentionally preserves
> an EIP-7702 account's key path even when its delegate rejects. Our pinned runner
> tests the exact candidate and reproduces the old dirty-padding failure.
> Independently maintained Python hash/state/EOA coverage is accepted only in its
> reported scope; independent ERC-1271/Safe/7702 coverage and current-source audit
> acceptance remain open. Which acceptance rule, if any, is still ambiguous for
> your implementation? This is technical feedback, not a status-change request.

This text is a draft for community discussion, not a claim that it was posted.
- [Real-account command and boundaries](../interop/account-conformance.md).
- [Official and historical-source reproduction](upstream-authorization.md).
- [External replay evidence](../interop/external-reproduction.md): PR #33 merged;
issues #29/#31 closed with historical failed runs preserved.
- [Independent-client handoff](../interop/independent-client-handoff.md) and
[scoped Python results](../interop/independent-client-results.md).
- Public provisional external report in `audits/g4/external/submissions/`;
current-runtime acceptance remains pending in issues #11/#22.

## Resolved rule questions

The official merge resolves AQ-01/AQ-02 and synchronizes the AQ-03 source fix:

1. ERC-1271 receives original empty/custom bytes before the ECDSA-only length guard.
2. Required signer roles are explicit for all three operations. Direct-empty
authorization is optional; nonempty self-call signatures still need validation.
3. Ordered fallback preserves a valid 7702 retained-key path after wallet refusal.
4. Noncanonical return padding is failed wallet validation, not an ABI decoder
abort and not authorization based only on a four-byte prefix.

No hash, type string, signing domain, field, storage layout or interface changes
were made in the baseline synchronization. The merged wording resolves semantic
ambiguity and is not retroactively labelled an editorial-only revision.

## Questions still useful for peer review

- Are required-account roles, optional direct-call capability and retained-key
fallback unambiguous for independently written clients?
- Are immutable enforcing logic, fully scoped transition references and the
distinction between a commitment and memory truth sufficiently clear?
- Do consumers understand wallet-state/gas dependence and the limits of offline
audit claims? No universal gas minimum or production liveness is guaranteed.
- Can another implementation report wallet authorization outcomes against the
published scenarios without depending on project SDK code?

## Separate standards and release tracks

Under [EIP-1](https://eips.ethereum.org/EIPS/eip-1#eip-process), the author requests
Review when the draft is ready for peer review. A complete second implementation
and external audit are project quality/release objectives, not universal Review
prerequisites. Green CI or audit results do not themselves grant Review or Final.

The independently maintained Python client covers hash/encoding, five-transition
fixtures, held-state rejections and EOA ECDSA under its reported pins. It does not
implement ERC-1271, Safe or 7702. Maintainer account tests are not independent
coverage. Historical Python results are not relabelled as runs of the new baseline.

The existing external report targets the old freeze. Current-runtime addendum,
canonical G4 acceptance and new deployment evidence remain open. Do not describe
this packet or a Review transition as production-ready.

## Publication and request checklist

1. Merge project PR #38 and verify its main commit.
2. Publish baseline 3 and fresh clean-checkout/source/account results.
3. Notify the existing Magicians thread and issues #21/#11 with exact pins,
changed rules and unchanged external coverage limitations.
4. Submit a separate official PR changing only `status: Draft` to `status: Review`.
Link this packet and discussion; retain the number, authors and technical text.
5. Record the actual PR, notifications and replies in the public baseline-PR
conversation. Do not infer consensus, a new audit or contributor commitment.

## Suggested community update

> The focused authorization revision has merged in ethereum/ERCs#2147. ERC-8350
> remains Draft. Baseline 3 pins the actual merged text/assets and preserves old
> baselines and failed regression evidence. The runner tests exact official bytes
> and the historical candidate separately. We are preparing a request for peer
> review, particularly on wallet-policy versus retained-key fallback and the
> boundary between memory commitments and memory truth. Independent Python
> evidence remains scoped to hash/state/EOA behavior; independent wallet coverage
> and current-runtime external audit acceptance are still open. Please identify
> any remaining ambiguous acceptance rule or interoperability concern.

This is reusable draft text. Actual publication and status-request URLs belong
in the public handoff record; preparing this file alone does not publish them.
Loading
Loading