AIP-8 through AIP-19 and CONTRIBUTING.md published: the index linked twelve documents this package did not carry. Validator counts carry their measurement date (errata on the Final ones, per AIP-1 section 5), the Fusaka activation block corrected to the measured 2,106,597, and the staging rewrites are now a checked table
This commit is contained in:
parent
83453d9a79
commit
ec3ca3368f
@ -1,7 +1,7 @@
|
|||||||
# Citations in this repository that you cannot open
|
# Citations in this repository that you cannot open
|
||||||
|
|
||||||
This file is generated by the legaturi-repara.cjs script in the Aere working tree and
|
This file is generated by the legaturi-repara.cjs script in the Aere working tree and
|
||||||
enforced by legaturi.cjs. It is the complete list, measured on 2026-09-02, of every
|
enforced by legaturi.cjs. It is the complete list, measured on 2026-09-12, of every
|
||||||
path cited in this repository that does not resolve to a published file.
|
path cited in this repository that does not resolve to a published file.
|
||||||
|
|
||||||
A citation is a promise that a claim is checkable. Where the target is not published,
|
A citation is a promise that a claim is checkable. Where the target is not published,
|
||||||
@ -15,15 +15,24 @@ repositories, so they begin with a repository name, for example
|
|||||||
|
|
||||||
Unresolvable distinct paths in this repository: **104**.
|
Unresolvable distinct paths in this repository: **104**.
|
||||||
|
|
||||||
|
- `addresses.ts` cited in: aere-research/research/specs/spec-account-abstraction.md, aere-research/research/specs/spec-antimev-mempool.md, aere-research/research/specs/spec-eip2935-lookback.md, aere-research/research/specs/spec-full-evm-validity.md, aere-research/research/specs/spec-recursive-aggregation-scale.md, aere-research/research/specs/spec-zk-stack.md, aere-research/results/PROVEN-RESULTS-2026-07-11.md
|
||||||
|
- `aerenew/basefee-floor-dryrun/basefee-floor.diff` cited in: aere-research/aips/AIP-10.md, aere-research/aips/AIP-17.md
|
||||||
|
- `aerenew/consensus-pqc/besu-consensus-pqc-fork-activation.patch` cited in: aere-research/aips/AIP-15.md
|
||||||
- `aerenew/contracts/deployments/falcon-512-verifier.json` cited in: aere-research/research/pqc-onchain-verification.md
|
- `aerenew/contracts/deployments/falcon-512-verifier.json` cited in: aere-research/research/pqc-onchain-verification.md
|
||||||
- `aerenew/contracts/deployments/pqc-account.json` cited in: aere-research/research/pqc-onchain-verification.md
|
- `aerenew/contracts/deployments/pqc-account.json` cited in: aere-research/research/pqc-onchain-verification.md
|
||||||
|
- `aerenew/docs/AERE-EIP-COMPATIBILITY-MATRIX.md` cited in: aere-research/aips/AIP-18.md
|
||||||
|
- `aerenew/docs/AERE-PROTOCOL-SPECIFICATION.md` cited in: aere-research/aips/AIP-17.md, aere-research/aips/AIP-18.md
|
||||||
|
- `aerenew/docs/AIP-PQ-TX-2026-07-18.md` cited in: aere-research/aips/AIP-19.md
|
||||||
|
- `aerenew/docs/BASEFEE-FLOOR-FORK-RUNBOOK-2026-07-17.md` cited in: aere-research/aips/AIP-17.md
|
||||||
- `aerenew/docs/drafts/PQC-FORK-PAPER-DRAFT.md` cited in: aere-research/research/aip-draft-pqc-precompiles.md
|
- `aerenew/docs/drafts/PQC-FORK-PAPER-DRAFT.md` cited in: aere-research/research/aip-draft-pqc-precompiles.md
|
||||||
|
- `aerenew/docs/PQ-STARK-VERIFIER-ACTIVATION-2026-07-18.md` cited in: aere-research/aips/AIP-16.md
|
||||||
|
- `aerenew/docs/PQ-STARK-VERIFIER-PRECOMPILE-2026-07-18.md` cited in: aere-research/aips/AIP-16.md
|
||||||
- `aerenew/docs/TRANZITIA-QBFT-SETTLED-2026-07-20.md` cited in: aere-research/aips/AIP-3.md
|
- `aerenew/docs/TRANZITIA-QBFT-SETTLED-2026-07-20.md` cited in: aere-research/aips/AIP-3.md
|
||||||
- `aerenew/formal-tla/QBFT.tla` cited in: aere-research/formal-consensus/RULEAZA-TOT.md
|
- `aerenew/formal-tla/QBFT.tla` cited in: aere-research/formal-consensus/RULEAZA-TOT.md
|
||||||
- `aerenew/formal-tla/QBFTPartition.tla` cited in: aere-research/formal-consensus/RULEAZA-TOT.md
|
- `aerenew/formal-tla/QBFTPartition.tla` cited in: aere-research/formal-consensus/RULEAZA-TOT.md
|
||||||
- `aerenew/scripts/deschise/flaguri-verify.cjs` cited in: aere-research/VERIFY-POLICY.md
|
- `aerenew/scripts/deschise/flaguri-verify.cjs` cited in: aere-research/VERIFY-POLICY.md
|
||||||
- `aerenew/strategie/EXECUTION-KERNEL-2026-08-15.md` cited in: aere-research/execution-kernel/MACHINE-INTERFACE-CONTRACT.md
|
- `aerenew/strategie/EXECUTION-KERNEL-2026-08-15.md` cited in: aere-research/execution-kernel/MACHINE-INTERFACE-CONTRACT.md
|
||||||
- `AIP-N.md` cited in: aere-research/aips/AIP-1.md, aere-research/aips/README.md
|
- `AIP-N.md` cited in: aere-research/aips/AIP-1.md, aere-research/aips/CONTRIBUTING.md, aere-research/aips/README.md
|
||||||
- `air.rs` cited in: aere-research/pq-stark/README.md
|
- `air.rs` cited in: aere-research/pq-stark/README.md
|
||||||
- `batch-prover-recovered/bin/aere-prover/Cargo.toml` cited in: aere-research/pq-stark/export-inner-stark-vector.md
|
- `batch-prover-recovered/bin/aere-prover/Cargo.toml` cited in: aere-research/pq-stark/export-inner-stark-vector.md
|
||||||
- `besu-pqc-precompiles-mlkem-hashtopoint.patch` cited in: aere-research/PQC-FORK-README.md
|
- `besu-pqc-precompiles-mlkem-hashtopoint.patch` cited in: aere-research/PQC-FORK-README.md
|
||||||
@ -32,17 +41,12 @@ Unresolvable distinct paths in this repository: **104**.
|
|||||||
- `CLAUDE.md` cited in: aere-research/execution-kernel/MACHINE-INTERFACE-CONTRACT.md
|
- `CLAUDE.md` cited in: aere-research/execution-kernel/MACHINE-INTERFACE-CONTRACT.md
|
||||||
- `compression.rs` cited in: aere-research/pq-stark/spec-mmcs-babybear.md
|
- `compression.rs` cited in: aere-research/pq-stark/spec-mmcs-babybear.md
|
||||||
- `config.rs` cited in: aere-research/pq-stark/spec-fri-babybear.md
|
- `config.rs` cited in: aere-research/pq-stark/spec-fri-babybear.md
|
||||||
- `contracts/contracts/AereCoinbaseSplitter.sol` cited in: aere-research/aips/AIP-2.md
|
|
||||||
- `contracts/contracts/AereCoinbaseSplitterV2.sol` cited in: aere-research/aips/AIP-2.md
|
|
||||||
- `contracts/contracts/AereFeeBurnVault.sol` cited in: aere-research/aips/AIP-2.md
|
|
||||||
- `contracts/contracts/AereIdentity.sol` cited in: aere-research/research/specs/spec-identity-compliance.md
|
- `contracts/contracts/AereIdentity.sol` cited in: aere-research/research/specs/spec-identity-compliance.md
|
||||||
- `contracts/contracts/anchor/AereHistoryStateRootAnchor.sol` cited in: aere-research/research/specs/spec-eip2935-lookback.md
|
- `contracts/contracts/anchor/AereHistoryStateRootAnchor.sol` cited in: aere-research/research/specs/spec-eip2935-lookback.md
|
||||||
- `contracts/contracts/parallel/AereBlockSTMRegistry.sol` cited in: aere-research/research/specs/spec-parallel-execution.md
|
- `contracts/contracts/parallel/AereBlockSTMRegistry.sol` cited in: aere-research/research/specs/spec-parallel-execution.md
|
||||||
- `contracts/contracts/parallel/AereEVMValidity.sol` cited in: aere-research/research/specs/spec-full-evm-validity.md
|
- `contracts/contracts/parallel/AereEVMValidity.sol` cited in: aere-research/research/specs/spec-full-evm-validity.md
|
||||||
- `contracts/contracts/parallel/AereRollupValidity.sol` cited in: aere-research/research/specs/spec-full-evm-validity.md, aere-research/research/specs/spec-parallel-execution.md
|
- `contracts/contracts/parallel/AereRollupValidity.sol` cited in: aere-research/research/specs/spec-full-evm-validity.md, aere-research/research/specs/spec-parallel-execution.md
|
||||||
- `contracts/contracts/raas/AereRaaSFactory.sol` cited in: aere-research/parallel-executor/README.md
|
- `contracts/contracts/raas/AereRaaSFactory.sol` cited in: aere-research/parallel-executor/README.md
|
||||||
- `contracts/contracts/sink/AereSink.sol` cited in: aere-research/aips/AIP-5.md
|
|
||||||
- `contracts/contracts/staking/sAERE.sol` cited in: aere-research/aips/AIP-5.md
|
|
||||||
- `contracts/contracts/zkverify/AereProofAggregator.sol` cited in: aere-research/research/specs/spec-recursive-aggregation-scale.md
|
- `contracts/contracts/zkverify/AereProofAggregator.sol` cited in: aere-research/research/specs/spec-recursive-aggregation-scale.md
|
||||||
- `contracts/deploy/deploy-saere-sink-stack.js` cited in: aere-research/aips/AIP-5.md
|
- `contracts/deploy/deploy-saere-sink-stack.js` cited in: aere-research/aips/AIP-5.md
|
||||||
- `contracts/deployments/block-stm-registry.json` cited in: aere-research/research/specs/spec-parallel-execution.md
|
- `contracts/deployments/block-stm-registry.json` cited in: aere-research/research/specs/spec-parallel-execution.md
|
||||||
@ -58,11 +62,6 @@ Unresolvable distinct paths in this repository: **104**.
|
|||||||
- `contracts/deployments/zkml-mnist-verifier.json` cited in: aere-research/research/specs/spec-zk-stack.md
|
- `contracts/deployments/zkml-mnist-verifier.json` cited in: aere-research/research/specs/spec-zk-stack.md
|
||||||
- `contracts/deployments/zkverify-stack.json` cited in: aere-research/research/specs/spec-zk-stack.md
|
- `contracts/deployments/zkverify-stack.json` cited in: aere-research/research/specs/spec-zk-stack.md
|
||||||
- `contracts/test/block-stm-registry.test.js` cited in: aere-research/research/specs/spec-parallel-execution.md
|
- `contracts/test/block-stm-registry.test.js` cited in: aere-research/research/specs/spec-parallel-execution.md
|
||||||
- `contracts/test/falcon1024_kat0.json` cited in: aere-research/aips/AIP-4.md
|
|
||||||
- `contracts/test/falcon512_kat0.json` cited in: aere-research/aips/AIP-4.md
|
|
||||||
- `contracts/test/fixtures/mldsa44-acvp-tg8.json` cited in: aere-research/aips/AIP-4.md
|
|
||||||
- `contracts/test/fixtures/sphincs-sha2-128s-acvp-tg31.json` cited in: aere-research/aips/AIP-4.md
|
|
||||||
- `contracts/test/fixtures/xmss-sha2_10_256-kat.json` cited in: aere-research/aips/AIP-4.md
|
|
||||||
- `crypto/merklesignature/committablePublicKeys.go` cited in: aere-research/research/pqc-onchain-verification.md
|
- `crypto/merklesignature/committablePublicKeys.go` cited in: aere-research/research/pqc-onchain-verification.md
|
||||||
- `data/transactions/logic/langspec_v12.json` cited in: aere-research/research/pqc-onchain-verification.md
|
- `data/transactions/logic/langspec_v12.json` cited in: aere-research/research/pqc-onchain-verification.md
|
||||||
- `dense-batch-2026-07-11/NOTE.md` cited in: aere-research/research/specs/spec-full-evm-validity.md
|
- `dense-batch-2026-07-11/NOTE.md` cited in: aere-research/research/specs/spec-full-evm-validity.md
|
||||||
@ -103,6 +102,7 @@ Unresolvable distinct paths in this repository: **104**.
|
|||||||
- `rollup-sequencer/src/blockstm/BlockSTMExecutor.ts` cited in: aere-research/research/specs/spec-parallel-execution.md
|
- `rollup-sequencer/src/blockstm/BlockSTMExecutor.ts` cited in: aere-research/research/specs/spec-parallel-execution.md
|
||||||
- `rollup-sequencer/src/blockstm/example.ts` cited in: aere-research/research/specs/spec-parallel-execution.md
|
- `rollup-sequencer/src/blockstm/example.ts` cited in: aere-research/research/specs/spec-parallel-execution.md
|
||||||
- `run-kats.sh` cited in: aere-research/PQC-FORK-README.md
|
- `run-kats.sh` cited in: aere-research/PQC-FORK-README.md
|
||||||
|
- `sdk-js/src/addresses.ts` cited in: aere-research/aips/AIP-1.md, aere-research/aips/AIP-11.md, aere-research/aips/AIP-2.md, aere-research/aips/AIP-4.md, aere-research/aips/AIP-5.md, aere-research/aips/AIP-6.md, aere-research/aips/AIP-7.md, aere-research/aips/AIP-8.md, aere-research/aips/CONTRIBUTING.md, aere-research/aips/README.md, aere-research/aips/aip-template.md, aere-research/research/pqc-onchain-verification.md, aere-research/research/specs/spec-account-abstraction.md, aere-research/research/specs/spec-antimev-mempool.md, aere-research/research/specs/spec-eip2935-lookback.md, aere-research/research/specs/spec-flywheel-economics.md, aere-research/research/specs/spec-full-evm-validity.md, aere-research/research/specs/spec-identity-compliance.md, aere-research/research/specs/spec-parallel-execution.md, aere-research/research/specs/spec-recursive-aggregation-scale.md, aere-research/research/specs/spec-zk-stack.md, aere-research/results/PROVEN-RESULTS-2026-07-11.md
|
||||||
- `setup-fork.sh` cited in: aere-research/PQC-FORK-README.md
|
- `setup-fork.sh` cited in: aere-research/PQC-FORK-README.md
|
||||||
- `shutter-mempool-v2.json` cited in: aere-research/research/specs/spec-antimev-mempool.md
|
- `shutter-mempool-v2.json` cited in: aere-research/research/specs/spec-antimev-mempool.md
|
||||||
- `shutter-mempool-v3.json` cited in: aere-research/research/specs/spec-antimev-mempool.md
|
- `shutter-mempool-v3.json` cited in: aere-research/research/specs/spec-antimev-mempool.md
|
||||||
|
|||||||
86
aips/AIP-10.md
Normal file
86
aips/AIP-10.md
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
# AIP-10: Execution Client: Forked Besu with Nethermind as the Second Client, not Reth
|
||||||
|
|
||||||
|
## Preamble
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| AIP | 10 |
|
||||||
|
| Title | Execution Client: Forked Besu with Nethermind as the Second Client, not Reth |
|
||||||
|
| Author | Aere Network Foundation |
|
||||||
|
| Type | Informational |
|
||||||
|
| Category | (none) |
|
||||||
|
| Status | Final |
|
||||||
|
| Created | 2026-07-19 |
|
||||||
|
| Requires | 7, 9 |
|
||||||
|
| Supersedes | None |
|
||||||
|
| Superseded-By | None |
|
||||||
|
| Ratification | Foundation-ratified (pre-decentralization) |
|
||||||
|
|
||||||
|
## Abstract
|
||||||
|
|
||||||
|
This AIP records the decision to run a fork of Hyperledger Besu as the sole live
|
||||||
|
mainnet producer and a patched Nethermind as the second, independent client,
|
||||||
|
rather than adopting Reth. It backfills a decision already live on chain 2800.
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
|
||||||
|
A production chain needs a producing client and, to retire single-implementation
|
||||||
|
risk, a second independent client. Aere already ships QBFT (AIP-9), which is
|
||||||
|
Besu-specific: no off-the-shelf Geth, Reth, Erigon, or stock Nethermind produces
|
||||||
|
QBFT-compatible blocks.
|
||||||
|
|
||||||
|
## Specification
|
||||||
|
|
||||||
|
- **Producer:** a fork of Hyperledger Besu v26.4.0 (Java, base commit
|
||||||
|
`d2032017`, JDK 21 toolchain), the sole live mainnet producer. The fork carries
|
||||||
|
the native post-quantum precompiles and the EIP-2935 write path (live from
|
||||||
|
block 9,189,161, AIP-7) and the 1-Gwei base-fee floor (live from block
|
||||||
|
10,141,734, AIP-17).
|
||||||
|
- **Second client:** a patched Nethermind 1.39.0 (.NET), which validates the live
|
||||||
|
chain and runs the five live PQC precompiles byte-for-byte identically (27 of
|
||||||
|
27 NIST KAT vectors, **measured**).
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
Besu already carries QBFT and already carries the codebase into which the PQC
|
||||||
|
precompile fork and base-fee changes were integrated. Nethermind was chosen as
|
||||||
|
the second client specifically for implementation diversity: a different codebase
|
||||||
|
in a different language (.NET versus Java), so a consensus-relevant bug in one is
|
||||||
|
unlikely to exist in the other. On an isolated test network the patched
|
||||||
|
Nethermind produces byte-identical QBFT blocks that stock Besu accepts through
|
||||||
|
full BFT validation, with a one-byte-tampered seal rejected.
|
||||||
|
|
||||||
|
**Alternatives rejected.** Reth (Rust) as the base client: it has no notion of
|
||||||
|
QBFT, so it would require building QBFT production into a client that lacks it
|
||||||
|
before producing a single block; and the September 2025 Reth halt is the
|
||||||
|
reference case for why depending on one producing implementation is a systemic
|
||||||
|
risk. A second Besu instance instead of Nethermind: that is not client diversity,
|
||||||
|
since it shares every bug with the first.
|
||||||
|
|
||||||
|
## Backwards Compatibility
|
||||||
|
|
||||||
|
None. This records the existing topology.
|
||||||
|
|
||||||
|
## Security Considerations
|
||||||
|
|
||||||
|
Cross-client production is proven on an isolated testnet (offline import and,
|
||||||
|
later, live devp2p between test nodes), and a listen-only Nethermind follower has
|
||||||
|
run against the live network. **Nethermind is not yet a live gossiping producer
|
||||||
|
on chain 2800.** Besu remains the sole live producer, so single-implementation
|
||||||
|
risk is mitigated as a cross-check and fail-safe, not eliminated. Making
|
||||||
|
Nethermind a live producer is a founder-supervised change, because a producer bug
|
||||||
|
on a live chain can halt or fork it.
|
||||||
|
|
||||||
|
## Reference Implementation and On-Chain Deployment
|
||||||
|
|
||||||
|
Chain ID 2800; live producer Besu only. Client fork sources and the Nethermind
|
||||||
|
patch live in the consensus and client work trees; the base-fee floor diff is at
|
||||||
|
`aerenew/basefee-floor-dryrun/basefee-floor.diff`.
|
||||||
|
|
||||||
|
## Errata
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
## Copyright
|
||||||
|
|
||||||
|
Released to the public domain (CC0). No rights reserved.
|
||||||
86
aips/AIP-11.md
Normal file
86
aips/AIP-11.md
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
# AIP-11: Interoperability: Hyperlane-Compatible Messaging plus zk Light Clients, not IBC
|
||||||
|
|
||||||
|
## Preamble
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| AIP | 11 |
|
||||||
|
| Title | Interoperability: Hyperlane-Compatible Messaging plus zk Light Clients, not IBC |
|
||||||
|
| Author | Aere Network Foundation |
|
||||||
|
| Type | Informational |
|
||||||
|
| Category | (none) |
|
||||||
|
| Status | Final |
|
||||||
|
| Created | 2026-07-19 |
|
||||||
|
| Requires | None |
|
||||||
|
| Supersedes | None |
|
||||||
|
| Superseded-By | None |
|
||||||
|
| Ratification | Foundation-ratified (pre-decentralization) |
|
||||||
|
|
||||||
|
## Abstract
|
||||||
|
|
||||||
|
This AIP records the decision to build cross-chain interoperability as an
|
||||||
|
EVM-native, Hyperlane-compatible messaging layer plus zero-knowledge light
|
||||||
|
clients, rather than adopting IBC natively. It backfills a decision already made
|
||||||
|
and partly deployed.
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
|
||||||
|
Aere's value proposition is that it is an ordinary EVM chain. Cross-chain interop
|
||||||
|
must serve permissionless, EVM-familiar builders while also offering
|
||||||
|
trust-minimized verification of a counterparty's finality, and those two goals
|
||||||
|
pull in different directions.
|
||||||
|
|
||||||
|
## Specification
|
||||||
|
|
||||||
|
- An EVM-native, Hyperlane-compatible messaging layer: a Mailbox-compatible
|
||||||
|
`AereMessenger` and an interchain gas paymaster `AereIGP`.
|
||||||
|
- An ERC-7683 intent layer and an Across-v3-compatible spoke pool.
|
||||||
|
- A zero-knowledge interop path: on-chain zk light clients verifying a
|
||||||
|
counterparty's consensus finality from inside a contract (inbound Ethereum
|
||||||
|
sync-committee finality, outbound Aere QBFT finality) via SP1 Groth16 proofs.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
IBC's design philosophy, verifying the counterparty's consensus rather than
|
||||||
|
trusting a bridge committee, is the right one, and Aere adopts the philosophy
|
||||||
|
directly. Aere splits the problem: for permissionless, developer-familiar interop
|
||||||
|
it uses the Hyperlane-compatible interfaces the EVM tooling ecosystem already
|
||||||
|
speaks; for the trust-minimization that is IBC's real contribution it built the
|
||||||
|
zk light clients, which capture "verify the counterparty's consensus, do not
|
||||||
|
trust a relayer" without leaving the EVM world.
|
||||||
|
|
||||||
|
**Alternatives rejected.** IBC as a protocol: it is built around Tendermint-style
|
||||||
|
light clients and a non-EVM connection, channel, and packet model. Adopting it
|
||||||
|
natively would import a substantial non-EVM stack and its tooling into a chain
|
||||||
|
whose entire premise is that it is an ordinary EVM.
|
||||||
|
|
||||||
|
## Backwards Compatibility
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
## Security Considerations
|
||||||
|
|
||||||
|
The Hyperlane-compatible endpoints are interface-faithful and deployed, but a
|
||||||
|
live decentralized relayer and interchain-security-module network is **not** yet
|
||||||
|
stood up: the current bridge path runs through a single Foundation signer with a
|
||||||
|
relayer pending. Until that changes, the messaging layer's trust assumption is
|
||||||
|
the Foundation, not a validator set.
|
||||||
|
|
||||||
|
The zk light clients are trust-minimized, not trustless, and **not quantum-safe**:
|
||||||
|
their committed seals are classical secp256k1 and the proof wrap is Groth16 over
|
||||||
|
BN254, which is Shor-breakable. A post-quantum-sound replacement is recorded in
|
||||||
|
AIP-16 and is not live.
|
||||||
|
|
||||||
|
## Reference Implementation and On-Chain Deployment
|
||||||
|
|
||||||
|
Deployed messaging and intent interfaces are listed in `sdk-js/src/addresses.ts`.
|
||||||
|
The zk light-client and verifier-gateway work is under `aere-contracts` and
|
||||||
|
the zk work trees.
|
||||||
|
|
||||||
|
## Errata
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
## Copyright
|
||||||
|
|
||||||
|
Released to the public domain (CC0). No rights reserved.
|
||||||
88
aips/AIP-12.md
Normal file
88
aips/AIP-12.md
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
# AIP-12: The Virtual Machine: Extend the EVM, not a New VM
|
||||||
|
|
||||||
|
## Preamble
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| AIP | 12 |
|
||||||
|
| Title | The Virtual Machine: Extend the EVM, not a New VM |
|
||||||
|
| Author | Aere Network Foundation |
|
||||||
|
| Type | Informational |
|
||||||
|
| Category | (none) |
|
||||||
|
| Status | Final |
|
||||||
|
| Created | 2026-07-19 |
|
||||||
|
| Requires | None |
|
||||||
|
| Supersedes | None |
|
||||||
|
| Superseded-By | None |
|
||||||
|
| Ratification | Foundation-ratified (pre-decentralization) |
|
||||||
|
|
||||||
|
## Abstract
|
||||||
|
|
||||||
|
This AIP records the decision to keep the EVM unchanged and to add Aere's
|
||||||
|
differentiating capability as precompiles and client-fork rules at reserved
|
||||||
|
addresses, rather than designing a new virtual machine. It backfills a decision
|
||||||
|
already live on chain 2800.
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
|
||||||
|
Aere differentiates on post-quantum verification, parallel execution, and
|
||||||
|
extended block-hash lookback. It must add these without taxing the developer
|
||||||
|
surface it depends on for adoption.
|
||||||
|
|
||||||
|
## Specification
|
||||||
|
|
||||||
|
Solidity, EVM bytecode, JSON-RPC, and the developer tooling are unchanged.
|
||||||
|
Differentiation is added as:
|
||||||
|
|
||||||
|
- precompiles at otherwise-empty reserved addresses (the `0x0AE1`..`0x0AE5` band,
|
||||||
|
live from block 9,189,161, AIP-7), and
|
||||||
|
- client-fork rules activated in the same manner Ethereum activates its own hard
|
||||||
|
forks.
|
||||||
|
|
||||||
|
No new instruction set, no new language, no nonstandard account model, and no
|
||||||
|
nonstandard RPC.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
A mature VM has years of implementation hardening, a known cost model, and an
|
||||||
|
operational history; a new VM starts that clock at zero, maximizing both
|
||||||
|
technical and adoption risk. The EVM is the single largest smart-contract
|
||||||
|
developer surface in existence, and every deviation (a nonstandard opcode,
|
||||||
|
account model, or RPC) is a tax on every developer and every tool. Aere's thesis
|
||||||
|
is settlement, not a novel programming model, so the design keeps the tested
|
||||||
|
execution environment intact and adds differentiation only at the EVM's standard
|
||||||
|
extension points. Nothing about Aere's account, passkey, or post-quantum surface
|
||||||
|
depends on a nonstandard EVM.
|
||||||
|
|
||||||
|
**Alternatives rejected.** Designing a new, purpose-built VM (a new bytecode,
|
||||||
|
language, or non-EVM environment) optimized around Aere's differentiators.
|
||||||
|
|
||||||
|
## Backwards Compatibility
|
||||||
|
|
||||||
|
Full EVM compatibility is the point of the decision. Precompiles at previously
|
||||||
|
empty addresses are additive: before activation those addresses were empty
|
||||||
|
accounts, so a call to one returned empty rather than reverting. AIP-7 covers the
|
||||||
|
activation-boundary consequences.
|
||||||
|
|
||||||
|
## Security Considerations
|
||||||
|
|
||||||
|
Some ambitions (base-layer parallel execution, an EVM-in-a-zkVM) must be reached
|
||||||
|
inside the existing model rather than designed in from scratch. Those remain
|
||||||
|
roadmap and are labeled as such wherever they appear. Adding capability at
|
||||||
|
reserved addresses means the address band must be treated as consensus-critical:
|
||||||
|
activating a precompile at an address that historical transactions already called
|
||||||
|
would change their re-execution result, which is why AIP-16 forward-dates its
|
||||||
|
milestone rather than folding into a crossed one.
|
||||||
|
|
||||||
|
## Reference Implementation and On-Chain Deployment
|
||||||
|
|
||||||
|
Chain ID 2800. Live precompiles and their activation block are specified in
|
||||||
|
AIP-7.
|
||||||
|
|
||||||
|
## Errata
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
## Copyright
|
||||||
|
|
||||||
|
Released to the public domain (CC0). No rights reserved.
|
||||||
90
aips/AIP-13.md
Normal file
90
aips/AIP-13.md
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
# AIP-13: Post-Quantum Signatures: Falcon and ML-DSA Together, not a Single Lattice Family
|
||||||
|
|
||||||
|
## Preamble
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| AIP | 13 |
|
||||||
|
| Title | Post-Quantum Signatures: Falcon and ML-DSA Together, not a Single Lattice Family |
|
||||||
|
| Author | Aere Network Foundation |
|
||||||
|
| Type | Informational |
|
||||||
|
| Category | (none) |
|
||||||
|
| Status | Final |
|
||||||
|
| Created | 2026-07-19 |
|
||||||
|
| Requires | 4, 7 |
|
||||||
|
| Supersedes | None |
|
||||||
|
| Superseded-By | None |
|
||||||
|
| Ratification | Foundation-ratified (pre-decentralization) |
|
||||||
|
|
||||||
|
## Abstract
|
||||||
|
|
||||||
|
This AIP records the decision to support multiple post-quantum signature schemes
|
||||||
|
across two distinct lattice families (Falcon and ML-DSA) plus hash-based schemes,
|
||||||
|
rather than standardizing on one. It backfills a decision already live on chain
|
||||||
|
2800. The normative mechanism is in AIP-4 (contract suite) and AIP-7 (precompile
|
||||||
|
activation); this record captures the decision framing.
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
|
||||||
|
Aere verifies post-quantum signatures on-chain at both the contract layer (AIP-4)
|
||||||
|
and, since block 9,189,161, the native precompile layer (AIP-7). A choice of
|
||||||
|
scheme family is a bet on a mathematical assumption, and betting on one is a
|
||||||
|
single point of cryptographic failure.
|
||||||
|
|
||||||
|
## Specification
|
||||||
|
|
||||||
|
Supported families:
|
||||||
|
|
||||||
|
- **Falcon** (Falcon-512, Falcon-1024): NTRU lattices.
|
||||||
|
- **ML-DSA** (Dilithium2 / ML-DSA-44): module lattices with
|
||||||
|
Fiat-Shamir-with-aborts.
|
||||||
|
- **Hash-based**: SLH-DSA, XMSS, WOTS+.
|
||||||
|
|
||||||
|
Live mainnet precompiles occupy `0x0AE1`..`0x0AE5`: Falcon-512 `0x0AE1`,
|
||||||
|
Falcon-1024 `0x0AE2`, ML-DSA-44 `0x0AE3`, SLH-DSA-SHA2-128s `0x0AE4`, SHAKE256
|
||||||
|
`0x0AE5` (**measured**, live from block 9,189,161). `0x0AE6` (ML-KEM-768) and
|
||||||
|
`0x0AE7` (Falcon HashToPoint) are **testnet-only and not live on chain 2800**.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
Cryptographic-risk diversification. Supporting both lattice families means a
|
||||||
|
cryptanalytic break or a standardization flaw in one does not, by itself, remove
|
||||||
|
Aere's ability to verify post-quantum signatures: accounts and settlement
|
||||||
|
authorization can migrate to the surviving family. This mirrors the hybrid
|
||||||
|
`AereHybridAuth` account, which requires both a classical ECDSA and a Falcon-512
|
||||||
|
signature, so that neither a broken curve nor a broken lattice alone suffices to
|
||||||
|
forge.
|
||||||
|
|
||||||
|
**Alternatives rejected.** Standardizing on a single lattice scheme (ML-DSA alone
|
||||||
|
as the NIST primary, or Falcon alone for its compact signatures). The cost of
|
||||||
|
supporting several schemes is more verifier surface to implement, validate, and
|
||||||
|
eventually audit; that cost is accepted deliberately rather than betting the
|
||||||
|
network's post-quantum future on a single assumption.
|
||||||
|
|
||||||
|
## Backwards Compatibility
|
||||||
|
|
||||||
|
None. Additive.
|
||||||
|
|
||||||
|
## Security Considerations
|
||||||
|
|
||||||
|
**Scope boundary (binding).** This is post-quantum at the signature, account and
|
||||||
|
application layer only. Consensus remains classical: validators sign secp256k1
|
||||||
|
QBFT. The zk verification path is also classical (BN254 Groth16, Shor-breakable).
|
||||||
|
**Aere never claims post-quantum consensus.**
|
||||||
|
|
||||||
|
The verifiers and precompiles carry an internal self-audit only. An external
|
||||||
|
audit is pending before they should secure material value. Their assurance today
|
||||||
|
rests on bit-for-bit agreement with official NIST KAT and ACVP vectors and on
|
||||||
|
cross-checks against independent reimplementations.
|
||||||
|
|
||||||
|
## Reference Implementation and On-Chain Deployment
|
||||||
|
|
||||||
|
Contract suite: AIP-4. Precompile activation and addresses: AIP-7. Chain ID 2800.
|
||||||
|
|
||||||
|
## Errata
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
## Copyright
|
||||||
|
|
||||||
|
Released to the public domain (CC0). No rights reserved.
|
||||||
82
aips/AIP-14.md
Normal file
82
aips/AIP-14.md
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
# AIP-14: Account Abstraction: ERC-4337 with EIP-7702 Bridge, not Native AA
|
||||||
|
|
||||||
|
## Preamble
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| AIP | 14 |
|
||||||
|
| Title | Account Abstraction: ERC-4337 with EIP-7702 Bridge, not Native AA |
|
||||||
|
| Author | Aere Network Foundation |
|
||||||
|
| Type | Informational |
|
||||||
|
| Category | (none) |
|
||||||
|
| Status | Final |
|
||||||
|
| Created | 2026-07-19 |
|
||||||
|
| Requires | 6 |
|
||||||
|
| Supersedes | None |
|
||||||
|
| Superseded-By | None |
|
||||||
|
| Ratification | Foundation-ratified (pre-decentralization) |
|
||||||
|
|
||||||
|
## Abstract
|
||||||
|
|
||||||
|
This AIP records the decision to deliver programmable accounts through ERC-4337
|
||||||
|
smart accounts with EIP-7702 as the migration bridge, rather than protocol-level
|
||||||
|
native account abstraction. It backfills a decision already live on chain 2800.
|
||||||
|
The normative stack is in AIP-6; this record captures the decision framing.
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
|
||||||
|
Aere wants programmable accounts (recovery, passkey ownership, post-quantum
|
||||||
|
ownership, gas sponsorship) without breaking EVM and externally-owned-account
|
||||||
|
compatibility.
|
||||||
|
|
||||||
|
## Specification
|
||||||
|
|
||||||
|
ERC-4337 (v0.7) smart accounts as the account-abstraction path, with EIP-7702
|
||||||
|
(live under the Pectra ruleset) as the migration bridge that lets existing
|
||||||
|
externally-owned accounts delegate to smart-account code. EIP-3074 is **not**
|
||||||
|
implemented.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
ERC-4337 needs no consensus change, is an established standard with an existing
|
||||||
|
bundler and tooling ecosystem, and delivers programmable accounts (including the
|
||||||
|
Falcon-owned post-quantum smart account `AerePQCAccountFactory`) without touching
|
||||||
|
the protocol, preserving exact EVM and Ethereum compatibility. EIP-7702 is the
|
||||||
|
chosen bridge precisely because it upgrades existing externally-owned accounts in
|
||||||
|
place without forcing a disruptive "everything is a contract" change.
|
||||||
|
|
||||||
|
**Alternatives rejected.** Native, protocol-level account abstraction up to an
|
||||||
|
"all accounts are smart accounts by default" end state: it changes what an
|
||||||
|
account fundamentally is, breaking existing tooling, contracts, and user keys.
|
||||||
|
EIP-3074, an earlier proposal for empowering externally-owned accounts: it was
|
||||||
|
superseded upstream by EIP-7702, which is the mechanism Aere carries.
|
||||||
|
|
||||||
|
## Backwards Compatibility
|
||||||
|
|
||||||
|
Existing externally-owned accounts keep working unchanged. Migration via EIP-7702
|
||||||
|
is opt-in per account.
|
||||||
|
|
||||||
|
## Security Considerations
|
||||||
|
|
||||||
|
The EntryPoints are Aere's own ERC-4337-compatible implementations: compatible in
|
||||||
|
shape and interface but **not byte-identical to Ethereum's canonical audited
|
||||||
|
singleton**. Integrators should treat them as Aere-specific and should not assume
|
||||||
|
the upstream audit applies to them. These contracts have not had an external
|
||||||
|
audit.
|
||||||
|
|
||||||
|
Gasless onboarding is subsidized (Foundation-funded, rate-limited), not free. A
|
||||||
|
paymaster that runs out of funds stops sponsoring; onboarding degrades rather
|
||||||
|
than fails silently.
|
||||||
|
|
||||||
|
## Reference Implementation and On-Chain Deployment
|
||||||
|
|
||||||
|
The normative stack (accounts, factories, paymasters, EntryPoints) with addresses
|
||||||
|
is in AIP-6. Chain ID 2800.
|
||||||
|
|
||||||
|
## Errata
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
## Copyright
|
||||||
|
|
||||||
|
Released to the public domain (CC0). No rights reserved.
|
||||||
114
aips/AIP-15.md
Normal file
114
aips/AIP-15.md
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
# AIP-15: In-Place Hybrid PQC Consensus Activation via On-Chain Anchor Contract, not Re-Genesis
|
||||||
|
|
||||||
|
## Preamble
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| AIP | 15 |
|
||||||
|
| Title | In-Place Hybrid PQC Consensus Activation via On-Chain Anchor Contract, not Re-Genesis |
|
||||||
|
| Author | Aere Network Foundation |
|
||||||
|
| Type | Standards Track |
|
||||||
|
| Category | Core |
|
||||||
|
| Status | Draft (isolated-testnet R&D; not live on chain 2800) |
|
||||||
|
| Created | 2026-07-19 |
|
||||||
|
| Requires | 9 |
|
||||||
|
| Supersedes | None |
|
||||||
|
| Superseded-By | None |
|
||||||
|
| Ratification | Not ratified; external-audit gated and founder gated |
|
||||||
|
|
||||||
|
## Abstract
|
||||||
|
|
||||||
|
This AIP specifies a way to bind a Falcon-512 validator manifest to on-chain
|
||||||
|
state **after** genesis, via a minimal immutable anchor contract, so that hybrid
|
||||||
|
post-quantum consensus could be activated on a live chain without a re-genesis.
|
||||||
|
It is **Draft**. Nothing in it is live on chain 2800, whose consensus remains
|
||||||
|
classical secp256k1 ECDSA QBFT.
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
|
||||||
|
Aere's hybrid consensus research proved, on isolated test networks, a gossiped,
|
||||||
|
blocking Falcon-512 quorum certificate running alongside the ECDSA
|
||||||
|
committed-seal quorum, empirically at N = 4 (2 s) and N = 7 (0.5 s). Its Falcon
|
||||||
|
registry, however, was bound to chain identity at genesis, by folding
|
||||||
|
`keccak256(manifest)` into the genesis state root. Chain 2800 launched long
|
||||||
|
before any Falcon manifest existed, so blocking activation was previously
|
||||||
|
recorded as "requires a re-genesis". That is a non-starter for a live chain:
|
||||||
|
re-genesis destroys history and chain identity.
|
||||||
|
|
||||||
|
## Specification
|
||||||
|
|
||||||
|
Bind the Falcon manifest to on-chain state post-genesis:
|
||||||
|
|
||||||
|
1. Deploy a minimal, immutable, ownerless **anchor contract** by one ordinary
|
||||||
|
transaction at an activation height. Its runtime code is a single `STOP` byte,
|
||||||
|
so it is never callable and has no admin.
|
||||||
|
2. The contract commits `keccak256(manifest)` to storage slot 0.
|
||||||
|
3. On every block import, the validation rule resolves the manifest from the
|
||||||
|
**parent block's world state** at the anchor address, and activates the
|
||||||
|
pending registry only if the observed hash matches. Any mismatch fails closed.
|
||||||
|
4. The deploy address is deterministic, `keccak256(rlp[deployer, nonce])[12:]`, so
|
||||||
|
validators can be pre-configured before deployment.
|
||||||
|
5. Activation is idempotent and retried each block, so deploy-then-configure and
|
||||||
|
configure-then-deploy both converge.
|
||||||
|
|
||||||
|
The re-genesis requirement is removed.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
The late anchor folds `keccak256(manifest)` into every block hash from the
|
||||||
|
deployment block onward, so two nodes that agree on the chain past that block
|
||||||
|
necessarily agree on the anchored hash. That is the same integrity guarantee the
|
||||||
|
genesis ceremony gave, minus the re-genesis.
|
||||||
|
|
||||||
|
**Alternatives rejected.** Re-genesis carrying a Falcon anchor in the genesis
|
||||||
|
alloc: destroys history and chain identity. A shared per-node manifest file with
|
||||||
|
no on-chain root: a node with a tampered manifest could join silently, whereas the
|
||||||
|
on-chain anchor makes it fail closed.
|
||||||
|
|
||||||
|
## Backwards Compatibility
|
||||||
|
|
||||||
|
Pre-activation blocks remain valid and are unaffected. The design is
|
||||||
|
non-retroactive by construction: the anchor address is an empty account before
|
||||||
|
its deploy block.
|
||||||
|
|
||||||
|
## Security Considerations
|
||||||
|
|
||||||
|
**Evidence and honest scope.** Proven end-to-end on an **isolated N = 4 at 0.5 s
|
||||||
|
testnet** (chain ID 440855) whose genesis is byte-shape-identical to a classical
|
||||||
|
ECDSA-only chain: classical start, deploy anchor at block 16, activate from the
|
||||||
|
contract at block 17, flip to blocking at fork block 150, with 0 forks, 0.5 s
|
||||||
|
cadence maintained, pre-activation blocks still valid, a post-activation
|
||||||
|
sub-quorum block rejected (the chain halts), and recovery in place with no
|
||||||
|
re-genesis. All **measured** on that testnet.
|
||||||
|
|
||||||
|
**Nothing in this AIP is live on chain 2800.** This was written 2026-07-19, when
|
||||||
|
the chain ran N = 7 and carried no Falcon material in any header. Measured
|
||||||
|
2026-09-12: the set is N = 10, and since block 13,014,000 anchor headers carry a
|
||||||
|
post-quantum certificate under the block hash. That anchor is a periodic
|
||||||
|
checkpoint, not the per-block blocking quorum specified here, and the design
|
||||||
|
below has never been armed on chain 2800.
|
||||||
|
|
||||||
|
The hybrid can only shrink the committable set, so it is never worse than the
|
||||||
|
ECDSA-only chain; ECDSA committed seals remain the decisive safety and liveness
|
||||||
|
seal. The corresponding risk is liveness: in this design, which is not live, a
|
||||||
|
blocking Falcon quorum that cannot be met would halt block production. At N = 7,
|
||||||
|
the set size when this was written, the blocking configuration has a zero
|
||||||
|
two-fault margin, which is why a larger set is recommended before any live flip.
|
||||||
|
|
||||||
|
**Remaining gates to a live flip.** No longer a gate: re-genesis. Still required:
|
||||||
|
an external audit of the Falcon consensus patch (quorum, gossip, assembly,
|
||||||
|
late-anchor Java) and of BouncyCastle Falcon-512 on the consensus path;
|
||||||
|
finalizing the full target validator set with an address-bound manifest
|
||||||
|
re-anchored for the full set; a live isolated soak of the combined activation at
|
||||||
|
the full set size (N = 10, measured 2026-09-12); and an explicit founder GO.
|
||||||
|
**No agent activates blocking consensus on chain 2800.**
|
||||||
|
|
||||||
|
## Reference Implementation and On-Chain Deployment
|
||||||
|
|
||||||
|
Not deployed. Reference patch:
|
||||||
|
`aerenew/consensus-pqc/besu-consensus-pqc-fork-activation.patch`, with evidence
|
||||||
|
under `aerenew/consensus-pqc/inplace-activation-evidence/`.
|
||||||
|
|
||||||
|
## Copyright
|
||||||
|
|
||||||
|
Released to the public domain (CC0). No rights reserved.
|
||||||
110
aips/AIP-16.md
Normal file
110
aips/AIP-16.md
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
# AIP-16: PQ STARK-Verify Precompile (0x0AE8)
|
||||||
|
|
||||||
|
## Preamble
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| AIP | 16 |
|
||||||
|
| Title | PQ STARK-Verify Precompile (0x0AE8) |
|
||||||
|
| Author | Aere Network Foundation |
|
||||||
|
| Type | Standards Track |
|
||||||
|
| Category | Core |
|
||||||
|
| Status | Draft (reference skeleton; verifies nothing; not live on any Aere network) |
|
||||||
|
| Created | 2026-07-19 |
|
||||||
|
| Requires | 7, 12 |
|
||||||
|
| Supersedes | None |
|
||||||
|
| Superseded-By | None |
|
||||||
|
| Ratification | Not ratified; prerequisite gated, external-audit gated, founder gated |
|
||||||
|
|
||||||
|
## Abstract
|
||||||
|
|
||||||
|
This AIP reserves precompile address `0x0AE8` for a post-quantum-sound
|
||||||
|
STARK-verify precompile that would verify a hash-based STARK on-chain, removing a
|
||||||
|
BN254 pairing check from Aere's zk paths. It is **Draft**. As of this date the
|
||||||
|
artifact is a reference skeleton that verifies nothing, and `0x0AE8` is not
|
||||||
|
activated on any Aere network.
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
|
||||||
|
Aere's zk interop and validity paths currently wrap proofs as Groth16 over BN254,
|
||||||
|
which is classical and Shor-breakable. A post-quantum-sound proof system (a
|
||||||
|
FRI-based STARK, hash commitments only, no pairing) would remove that assumption.
|
||||||
|
A native precompile is the natural home for STARK verification, matching the same
|
||||||
|
reasoning used for the post-quantum signature precompiles in AIP-7.
|
||||||
|
|
||||||
|
## Specification
|
||||||
|
|
||||||
|
Reserve precompile address `0x0AE8`. It is specified to activate under a new,
|
||||||
|
**forward-dated** milestone (PQ-3), never folded into an already-crossed
|
||||||
|
milestone, so that pre-activation history is byte-identical on old and new
|
||||||
|
binaries and the upgrade itself carries no fork risk.
|
||||||
|
|
||||||
|
**Scope correction (2026-07-19 research finding).** An earlier draft described
|
||||||
|
this as verifying "an SP1 inner-STARK (FRI over a Poseidon2 commitment)". That is
|
||||||
|
corrected here: the verifier skeleton built so far is a BabyBear + FRI STARK
|
||||||
|
verifier, conformance-confirmed against Plonky3 `0.4.3-succinct`, which targets
|
||||||
|
Aere's own Plonky3 circuits and **not** SP1 6.1.0. The pinned SP1 6.1.0 is a
|
||||||
|
Hypercube release (KoalaBear multilinear: BaseFold plus sumcheck-zerocheck plus
|
||||||
|
LogUp-GKR), so FRI does not apply to it and this skeleton does not verify SP1
|
||||||
|
6.1.0 proofs. Retargeting `0x0AE8` to the SP1 Hypercube stack is a separate
|
||||||
|
effort **estimated** at 22 to 32 person-weeks. See
|
||||||
|
`AERE-STARK-SP1-RECURSION-AIR-PORT-SPEC-SUMMARY.md`.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
A forward-dated, non-retroactive milestone plus a rolling binary upgrade (the same
|
||||||
|
zero-liveness-risk posture proven for the base-fee floor in AIP-17 and the
|
||||||
|
in-place activation in AIP-15) means the address stays an empty account, and every
|
||||||
|
consumer adapter fails closed, until the announced activation time. A migrated
|
||||||
|
consumer can keep both the new `0x0AE8` path and the existing BN254 gateway during
|
||||||
|
a defense-in-depth window before dropping the classical path.
|
||||||
|
|
||||||
|
**Alternatives rejected.** Folding `0x0AE8` into the already-crossed
|
||||||
|
`futureEipsTime` milestone (block 9,189,161): every historical block that called
|
||||||
|
the currently-empty address would re-execute with different return data on the
|
||||||
|
upgraded binary, which is a state divergence and a consensus split. Also
|
||||||
|
rejected: presenting the current artifact as a working verifier, because it is
|
||||||
|
not one.
|
||||||
|
|
||||||
|
## Backwards Compatibility
|
||||||
|
|
||||||
|
None, by construction: the address is an empty account until a forward-dated
|
||||||
|
activation, so no historical execution changes.
|
||||||
|
|
||||||
|
## Security Considerations
|
||||||
|
|
||||||
|
**This is the load-bearing honesty statement of this record.** `0x0AE8` is not
|
||||||
|
activated on any Aere network. As of this date it is a reference skeleton that
|
||||||
|
fail-closes, returning EMPTY for every input. **It is not a working verifier and
|
||||||
|
must not be presented as one.** Mainnet 2800 has exactly five PQC precompiles,
|
||||||
|
`0x0AE1` to `0x0AE5`, live from block 9,189,161. The sibling ML-KEM-768 (`0x0AE6`)
|
||||||
|
and Falcon HashToPoint (`0x0AE7`) precompiles are testnet-only.
|
||||||
|
`AerePQStarkVerifier.sol` is a fail-closed adapter that denies every proof, safe
|
||||||
|
by construction. Consensus is untouched by all of this and remains classical
|
||||||
|
ECDSA QBFT.
|
||||||
|
|
||||||
|
**Prerequisites before activation can even begin.** The crypto core must be
|
||||||
|
ported from maintained references (Plonky3 FRI/Poseidon2/uni-stark, SP1 stark) or
|
||||||
|
a pinned native wrap must be built and reproducible; a real SP1 v6.1.0
|
||||||
|
inner-STARK vector corpus must exist, with the precompile accepting every valid
|
||||||
|
vector and rejecting every tampered or wrong-public-values vector, including
|
||||||
|
cross-agreement with the live BN254 gateway; a soundcalc receipt for the exact
|
||||||
|
pinned `FriConfig` must be recorded (no 128-bit claim without the receipt); and a
|
||||||
|
benchmark must confirm a real verify fits under the EIP-7825 2^24 per-transaction
|
||||||
|
gas cap.
|
||||||
|
|
||||||
|
**Gates beyond the prerequisites.** A specialist external STARK/FRI audit of the
|
||||||
|
consensus-critical crypto, a conformance gate green on the frozen artifact, an
|
||||||
|
isolated N = 7 soak across a simulated milestone crossing, and an explicit founder
|
||||||
|
GO. Until all hold, `0x0AE8` stays a skeleton.
|
||||||
|
|
||||||
|
## Reference Implementation and On-Chain Deployment
|
||||||
|
|
||||||
|
Not deployed. Design:
|
||||||
|
`aerenew/docs/PQ-STARK-VERIFIER-PRECOMPILE-2026-07-18.md`. Gated activation plan:
|
||||||
|
`aerenew/docs/PQ-STARK-VERIFIER-ACTIVATION-2026-07-18.md`. Fail-closed adapter:
|
||||||
|
`aere-contracts/contracts/zkverify/AerePQStarkVerifier.sol`.
|
||||||
|
|
||||||
|
## Copyright
|
||||||
|
|
||||||
|
Released to the public domain (CC0). No rights reserved.
|
||||||
161
aips/AIP-17.md
Normal file
161
aips/AIP-17.md
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
# AIP-17: One-Gwei EIP-1559 Base-Fee Floor
|
||||||
|
|
||||||
|
## Preamble
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| AIP | 17 |
|
||||||
|
| Title | One-Gwei EIP-1559 Base-Fee Floor |
|
||||||
|
| Author | Aere Network Foundation |
|
||||||
|
| Type | Standards Track |
|
||||||
|
| Category | Core |
|
||||||
|
| Status | Final |
|
||||||
|
| Created | 2026-07-20 |
|
||||||
|
| Requires | 10 |
|
||||||
|
| Supersedes | None |
|
||||||
|
| Superseded-By | None |
|
||||||
|
| Ratification | Foundation-ratified (pre-decentralization) |
|
||||||
|
|
||||||
|
## Abstract
|
||||||
|
|
||||||
|
This AIP documents the client-flag-gated fork that clamps the EIP-1559 base fee
|
||||||
|
on chain 2800 to a minimum of 1 Gwei from block **10,141,734**. Before that block
|
||||||
|
the real minimum bottomed out at 7 wei. It is a retro-filed record of a change
|
||||||
|
already live on chain 2800: it backfills history and did not go through Draft,
|
||||||
|
Review or Last Call.
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
|
||||||
|
Aere's public RPC and its documentation reported a 1 Gwei base fee while the
|
||||||
|
chain's actual base fee had decayed to 7 wei. That gap was being closed by a
|
||||||
|
presentation-layer shim rather than by the chain, which meant a user who queried
|
||||||
|
the chain directly and a user who read our documentation got different answers,
|
||||||
|
and only one of them was true.
|
||||||
|
|
||||||
|
There were two honest ways to close it: change the documentation to say 7 wei, or
|
||||||
|
change the chain so that 1 Gwei is the real value. The second was chosen because
|
||||||
|
a base fee of 7 wei is not a meaningful price signal, and because a floor is a
|
||||||
|
value the chain can actually enforce and any observer can verify from block data.
|
||||||
|
The shim was then retired, which was the point of the exercise: the number
|
||||||
|
reported is now the number the chain produces.
|
||||||
|
|
||||||
|
## Specification
|
||||||
|
|
||||||
|
For every block `B`:
|
||||||
|
|
||||||
|
```
|
||||||
|
baseFee(B) = max( baseFee_1559(parent), 1000000000 ) if number(B) >= 10141734
|
||||||
|
baseFee(B) = baseFee_1559(parent) otherwise
|
||||||
|
```
|
||||||
|
|
||||||
|
where `baseFee_1559` is the unmodified parent-derived EIP-1559 base fee and
|
||||||
|
`1000000000` wei = 1 Gwei.
|
||||||
|
|
||||||
|
- The clamp is applied at the three exits of
|
||||||
|
`computeBaseFee(blockNumber, parentBaseFee, parentGasUsed, targetGasUsed)`,
|
||||||
|
identically on the produce path and the validate path, so a floored block both
|
||||||
|
produces and self-validates the floored value.
|
||||||
|
- The two driving values are Besu client **system properties**:
|
||||||
|
`AERE_BASEFEE_FLOOR_FORK_BLOCK = 10141734` and
|
||||||
|
`AERE_BASEFEE_FLOOR_VALUE = 1000000000`, exposed as
|
||||||
|
`aere.basefee.floor.forkBlock`.
|
||||||
|
- The defaults are **dormant** (`forkBlock = Long.MAX_VALUE`), so an unflagged
|
||||||
|
build never applies the floor and is byte-identical to stock in behavior.
|
||||||
|
- The change is deliberately **not** an EIP-2124 fork-id input and is not
|
||||||
|
registered as a scheduled fork.
|
||||||
|
|
||||||
|
**Measured activation boundary** (re-confirmed by direct measurement 2026-07-19):
|
||||||
|
block 10,141,733 has `baseFeePerGas = 7` wei; block 10,141,734 has
|
||||||
|
`baseFeePerGas = 0x3b9aca00 = 1,000,000,000` wei; the value holds at 1 Gwei at
|
||||||
|
every later block sampled through head, and `eth_feeHistory` at head reports
|
||||||
|
`0x3b9aca00`.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
**Why a client flag rather than a chain-config fork.** Base-fee validation is
|
||||||
|
absent from the QBFT header ruleset, so a node with a different floor flag does
|
||||||
|
not reject a peer's blocks: two clients with different flags share one fork id
|
||||||
|
and peer normally. That property is what made the rollout carry no liveness risk,
|
||||||
|
because validators could be upgraded one at a time and a lagging node could not
|
||||||
|
halt or split the chain. The flag being dormant by default is what keeps every
|
||||||
|
historical block below 10,141,734 valid with its original sub-Gwei base fee.
|
||||||
|
|
||||||
|
**Why 1 Gwei.** It is the value the documentation already claimed, so the fork
|
||||||
|
made the documentation true rather than choosing a new number and creating a
|
||||||
|
second discrepancy.
|
||||||
|
|
||||||
|
**Alternatives rejected.** Keeping the presentation-layer shim: it makes the RPC
|
||||||
|
lie, and a hash-verifiable chain that needs a shim to look right has a
|
||||||
|
credibility problem worse than a low base fee. Enshrining the floor as a
|
||||||
|
consensus fork rule with a fork id: unnecessary given that base fee is not
|
||||||
|
header-validated here, and it would have introduced a genuine split risk in
|
||||||
|
exchange for nothing.
|
||||||
|
|
||||||
|
## Backwards Compatibility
|
||||||
|
|
||||||
|
Historical blocks are unaffected and still validate with their original base
|
||||||
|
fees. Integrators that hard-coded a sub-Gwei minimum gas price will underprice
|
||||||
|
transactions from block 10,141,734 onward and should read the base fee from the
|
||||||
|
chain. No contract interface changed.
|
||||||
|
|
||||||
|
## Security Considerations
|
||||||
|
|
||||||
|
This modification cannot halt or fork QBFT, because base-fee validation is not
|
||||||
|
part of the QBFT header ruleset (which is also why a non-upgraded node syncs
|
||||||
|
straight past the floor block with no rejection). The corresponding weakness is
|
||||||
|
the same fact stated from the other side: because the floor is not
|
||||||
|
consensus-enforced, a validator running without the flag would produce blocks
|
||||||
|
with a sub-Gwei base fee and no one would reject them. Consistency depends on
|
||||||
|
operational rollout to all validators, not on consensus. All seven validators are
|
||||||
|
Foundation-operated (AIP-9), so today that is an operational guarantee under one
|
||||||
|
operator.
|
||||||
|
|
||||||
|
**Open question, honestly flagged.** Where the EIP-1559 base fee ultimately goes
|
||||||
|
on chain 2800 is **not fully resolved**. Measurement on block 10,487,561 (one
|
||||||
|
transaction, `gasUsed` 22,474, `effectiveGasPrice` = `baseFeePerGas` = 1 Gwei, so
|
||||||
|
zero priority tip) showed a coinbase balance delta of **exactly 0 wei**, which
|
||||||
|
rules out the base fee being credited to the coinbase, since crediting would have
|
||||||
|
moved 22,474,000,000,000 wei. Because the tip was zero, that measurement cannot by
|
||||||
|
itself separate "protocol-burned" from "routed elsewhere". Completing the
|
||||||
|
distinction needs a block containing a transaction with a nonzero priority tip and
|
||||||
|
unpruned state.
|
||||||
|
|
||||||
|
**This floor is not a burn.** Aere's burn is a separate cut of the validator
|
||||||
|
coinbase reward (AIP-2). A base-fee floor sets a minimum price; it does not remove
|
||||||
|
supply. These two must not be conflated in any Aere document.
|
||||||
|
|
||||||
|
## Reference Implementation and On-Chain Deployment
|
||||||
|
|
||||||
|
- Diff: `aerenew/basefee-floor-dryrun/basefee-floor.diff`
|
||||||
|
- Runbook: `aerenew/docs/BASEFEE-FLOOR-FORK-RUNBOOK-2026-07-17.md`
|
||||||
|
- Specification detail: `aerenew/docs/AERE-PROTOCOL-SPECIFICATION.md` Section 5.1
|
||||||
|
- Chain ID 2800, activation block 10,141,734. No contract address: this is a
|
||||||
|
client change.
|
||||||
|
|
||||||
|
Verify it yourself: fetch `baseFeePerGas` for blocks 10,141,733 and 10,141,734
|
||||||
|
from `https://rpc.aere.network` and from the second public endpoint
|
||||||
|
`https://rpc2.aere.network`. Both return 7 wei and 1,000,000,000 wei
|
||||||
|
respectively, and the fork-block hash is identical across both endpoints.
|
||||||
|
|
||||||
|
## Errata
|
||||||
|
|
||||||
|
**Erratum 1 (2026-09-12).** The Security Considerations say "All seven validators
|
||||||
|
are Foundation-operated (AIP-9)" without a date, so read on its own it is a claim
|
||||||
|
about today. That was a measurement of 2026-07-19. Measured 2026-09-12: the set
|
||||||
|
is ten, still all Foundation-operated, so the conclusion of that sentence stands
|
||||||
|
and only its count moved. See the erratum on AIP-9. The original text is left
|
||||||
|
exactly as published, per AIP-1 section 5.
|
||||||
|
|
||||||
|
## Post-Acceptance Outcome Record
|
||||||
|
|
||||||
|
**2026-07-20.** Activation was clean and is **measured**: base fee 7 wei at block
|
||||||
|
10,141,733 became 1 Gwei at 10,141,734 and has stayed 1 Gwei; the fork-block hash
|
||||||
|
was identical across the public RPC and the second RPC, so there was no split;
|
||||||
|
N = 7 held with no halt. The presentation-layer shim was retired, and both public
|
||||||
|
endpoints now serve an honest, hash-verifiable 1 Gwei. Rollback remains available
|
||||||
|
by clearing the flag, which would return the chain to unmodified EIP-1559
|
||||||
|
behavior from the next block.
|
||||||
|
|
||||||
|
## Copyright
|
||||||
|
|
||||||
|
Released to the public domain (CC0). No rights reserved.
|
||||||
147
aips/AIP-18.md
Normal file
147
aips/AIP-18.md
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
# AIP-18: EIP-2935 on Chain 2800: Deviation from the Written Activation Schedule
|
||||||
|
|
||||||
|
## Preamble
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| AIP | 18 |
|
||||||
|
| Title | EIP-2935 on Chain 2800: Deviation from the Written Activation Schedule |
|
||||||
|
| Author | Aere Network Foundation |
|
||||||
|
| Type | Standards Track |
|
||||||
|
| Category | Core |
|
||||||
|
| Status | Final |
|
||||||
|
| Created | 2026-07-20 |
|
||||||
|
| Requires | 7 |
|
||||||
|
| Supersedes | None |
|
||||||
|
| Superseded-By | None |
|
||||||
|
| Ratification | Foundation-ratified (pre-decentralization) |
|
||||||
|
|
||||||
|
## Abstract
|
||||||
|
|
||||||
|
Chain 2800 lists EIP-2935 under its Pectra ruleset, but the history-storage
|
||||||
|
system contract was not populated and the write path did not run until the
|
||||||
|
AerePQC fork at block **9,189,161**. Any client or integrator that assumed
|
||||||
|
"Pectra is active, therefore EIP-2935 serves history" was wrong for every block
|
||||||
|
between the Pectra ruleset taking effect and block 9,189,161. This AIP records
|
||||||
|
that deviation explicitly so it is discoverable, and states exactly what is true
|
||||||
|
before and after that block. It is a retro-filed record and backfills history.
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
|
||||||
|
A deviation from a written standard that is not written down is a trap. It does
|
||||||
|
not cause a problem on the day it is created; it causes one months later, when
|
||||||
|
somebody reads the standard, checks that the fork is active, and writes code
|
||||||
|
against a guarantee the chain was not providing.
|
||||||
|
|
||||||
|
The deviation was found and confirmed by direct measurement while building the
|
||||||
|
EIP compatibility matrix, not by reading our own configuration, which is exactly
|
||||||
|
the failure mode this record exists to prevent for the next person.
|
||||||
|
|
||||||
|
## Specification
|
||||||
|
|
||||||
|
EIP-2935 as written specifies a history-storage system contract at
|
||||||
|
`0x0000F90827F1C53a10cb7A02335B175320002935`, a ring buffer serving the last
|
||||||
|
`HISTORY_SERVE_WINDOW = 8191` block hashes, written by a consensus system call at
|
||||||
|
the start of each block, activated at the fork that adopts it.
|
||||||
|
|
||||||
|
On chain 2800:
|
||||||
|
|
||||||
|
- **Address:** `0x0000F90827F1C53a10cb7A02335B175320002935` (canonical, unchanged).
|
||||||
|
- **Window:** 8191 blocks (`0x1fff`), unchanged from the written EIP.
|
||||||
|
- **Runtime:** 83 bytes, byte-for-byte the canonical EIP-2935 runtime
|
||||||
|
(**measured**). Disassembly confirms the two jump targets: the `JUMPDEST` at
|
||||||
|
`0x42` (revert path) and the `JUMPDEST` at `0x46` (the `SSTORE` path taken when
|
||||||
|
`caller == SYSTEM_ADDRESS`).
|
||||||
|
- **Deviation:** the contract was **not populated at the Pectra ruleset**. It was
|
||||||
|
populated, and the consensus write path began running, at the AerePQC milestone
|
||||||
|
block **9,189,161** (Besu `futureEipsTime = 1783820272`), the same fork
|
||||||
|
documented in AIP-7.
|
||||||
|
|
||||||
|
Therefore, normatively:
|
||||||
|
|
||||||
|
- For `number < 9,189,161`: a call to the history address returns empty, because
|
||||||
|
the address was an empty account. EIP-2935 MUST NOT be relied on.
|
||||||
|
- For `number >= 9,189,161`: the contract serves the window
|
||||||
|
`[number - 8191, number - 1]`. A call passes the 32-byte block number as
|
||||||
|
calldata; a query outside the served window reverts.
|
||||||
|
|
||||||
|
At the 500 ms target block period, 8191 blocks is roughly **68 minutes** of
|
||||||
|
trustless lookback, against roughly 128 seconds for the 256-block `BLOCKHASH`
|
||||||
|
window.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
The deviation was not a design choice made in advance; it is the honest
|
||||||
|
description of what happened. Pectra parity was configured before the EIP-2935
|
||||||
|
write path existed in the Aere Besu fork, so the ruleset listed an EIP whose
|
||||||
|
system contract nothing was writing to. When the write path shipped, it was
|
||||||
|
bundled into the AerePQC fork rather than given its own activation, because the
|
||||||
|
fork was already scheduled and a second coordinated activation would have added
|
||||||
|
rollout risk for no benefit (the same bundling rationale as AIP-7).
|
||||||
|
|
||||||
|
**Alternatives rejected.** Silently correcting the compatibility documentation to
|
||||||
|
say EIP-2935 was live from Pectra: false. Backfilling the ring buffer at
|
||||||
|
activation: impossible without rewriting state, and the fail-empty behavior of an
|
||||||
|
unpopulated contract is the safe outcome anyway.
|
||||||
|
|
||||||
|
## Backwards Compatibility
|
||||||
|
|
||||||
|
This is the whole subject of the AIP. Concretely: a contract deployed before
|
||||||
|
block 9,189,161 that called the history address received empty return data, and
|
||||||
|
if it treated empty as "hash zero" it computed a wrong answer rather than
|
||||||
|
reverting. Any such contract should be re-checked. From block 9,189,161 the same
|
||||||
|
call returns real history, so a contract whose behavior depended on the empty
|
||||||
|
return changes behavior at that block.
|
||||||
|
|
||||||
|
Note the asymmetry that makes this safe at the consensus layer: the transition is
|
||||||
|
from an empty account to a populated one, so no historical block re-executes
|
||||||
|
differently on an upgraded binary.
|
||||||
|
|
||||||
|
## Security Considerations
|
||||||
|
|
||||||
|
The window is 8191 blocks and queries outside it revert. A consumer that assumes
|
||||||
|
a longer lookback fails closed, which is correct, but a consumer that assumes any
|
||||||
|
lookback before block 9,189,161 silently receives nothing, which is not. That
|
||||||
|
asymmetry is the reason this record exists.
|
||||||
|
|
||||||
|
The trustless-lookback guarantee is only as strong as the chain itself: on chain
|
||||||
|
2800 that is a seven-validator, single-operator QBFT chain (AIP-9). EIP-2935
|
||||||
|
removes a trust assumption on an oracle; it does not remove the trust assumption
|
||||||
|
on the validator set.
|
||||||
|
|
||||||
|
## Reference Implementation and On-Chain Deployment
|
||||||
|
|
||||||
|
Chain ID 2800, activation block 9,189,161, contract
|
||||||
|
`0x0000F90827F1C53a10cb7A02335B175320002935`, runtime 83 bytes.
|
||||||
|
|
||||||
|
Verify it yourself against `https://rpc.aere.network`:
|
||||||
|
|
||||||
|
1. `eth_getCode` at the history address returns the canonical 83-byte runtime.
|
||||||
|
2. `eth_call` the address with the 32-byte block number of `head - 100` returns
|
||||||
|
that block's hash, byte-identical to `eth_getBlockByNumber`. This is the
|
||||||
|
stronger check: the ring buffer is not merely populated, it is serving correct
|
||||||
|
history.
|
||||||
|
|
||||||
|
Related: AIP-7 (the fork that activated it),
|
||||||
|
`aerenew/docs/AERE-EIP-COMPATIBILITY-MATRIX.md` (deviation 7),
|
||||||
|
`aerenew/docs/AERE-PROTOCOL-SPECIFICATION.md`.
|
||||||
|
|
||||||
|
## Errata
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
## Post-Acceptance Outcome Record
|
||||||
|
|
||||||
|
**2026-07-20.** Both verification paths above were run against the live chain and
|
||||||
|
both pass (**measured**). The functional check, returning the correct hash for
|
||||||
|
`head - 100`, is recorded as the canonical proof rather than the bytecode check,
|
||||||
|
because matching bytes prove deployment while a correct answer proves operation.
|
||||||
|
|
||||||
|
An adjacent claim remains open and is flagged rather than assumed: whether the
|
||||||
|
EIP-6110 deposit system contract is populated on mainnet 2800 has **not** been
|
||||||
|
checked directly. Given that EIP-2935's contract was listed as active while
|
||||||
|
unpopulated, that claim must be measured, not inferred from the ruleset.
|
||||||
|
|
||||||
|
## Copyright
|
||||||
|
|
||||||
|
Released to the public domain (CC0). No rights reserved.
|
||||||
125
aips/AIP-19.md
Normal file
125
aips/AIP-19.md
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
# AIP-19: AIP Process Hardening: Numbering, Status Transitions, Supersession, and Post-Acceptance Immutability
|
||||||
|
|
||||||
|
## Preamble
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| AIP | 19 |
|
||||||
|
| Title | AIP Process Hardening: Numbering, Status Transitions, Supersession, and Post-Acceptance Immutability |
|
||||||
|
| Author | Aere Network Foundation |
|
||||||
|
| Type | Meta |
|
||||||
|
| Category | (none) |
|
||||||
|
| Status | Review |
|
||||||
|
| Created | 2026-07-20 |
|
||||||
|
| Last Call opens | on ratifier acknowledgement |
|
||||||
|
| Requires | 1 |
|
||||||
|
| Supersedes | None (amends AIP-1, which is Living) |
|
||||||
|
| Superseded-By | None |
|
||||||
|
| Ratification | **Not yet ratified.** Ratifier is the founder. |
|
||||||
|
|
||||||
|
## Abstract
|
||||||
|
|
||||||
|
This AIP records the 2026-07-20 hardening of the Aere Improvement Proposal
|
||||||
|
process: permanent non-reusable numbering, an explicit table of permitted status
|
||||||
|
transitions, paired `Supersedes` / `Superseded-By` headers, a mandatory template,
|
||||||
|
and a rule that a Final AIP is never silently edited (errata and outcome records
|
||||||
|
are appended instead). Each mechanism is adopted from an existing standards body
|
||||||
|
rather than invented. The amendments are written into AIP-1, which is Living.
|
||||||
|
This AIP is the record of why, and is itself in **Review**, not Final.
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
|
||||||
|
Before this change, Aere had a document describing a process rather than a
|
||||||
|
process. The evidence for that statement, gathered 2026-07-20:
|
||||||
|
|
||||||
|
1. **Nothing had moved through the lifecycle.** All eight AIPs that existed
|
||||||
|
entered directly at Final, Living, or Draft. Not one had ever occupied Review
|
||||||
|
or Last Call. Seven of them were written on two days (2026-07-11 and
|
||||||
|
2026-07-16). A lifecycle no document has traversed is a diagram, not a
|
||||||
|
process.
|
||||||
|
2. **The index referenced files that did not exist.** AIP-9 through AIP-16 were
|
||||||
|
published in a numbered index while existing only as sections inside a single
|
||||||
|
prose document, `AERE-AIP-PROCESS-AND-INDEX.md`. A number that does not
|
||||||
|
resolve to a document is not a record.
|
||||||
|
3. **AIP-8 was outside the index**, living at
|
||||||
|
`aerenew/docs/AIP-PQ-TX-2026-07-18.md` under a non-conforming filename.
|
||||||
|
4. **Two mechanisms that the process depends on did not exist at all:**
|
||||||
|
supersession headers and a rule against editing accepted documents. Without
|
||||||
|
the first, a reader landing on an old AIP has no way to find the current one.
|
||||||
|
Without the second, a citation to an AIP is a citation to whatever the file
|
||||||
|
happens to contain today.
|
||||||
|
5. **Real decisions had no number.** The 1 Gwei base-fee floor at block
|
||||||
|
10,141,734, live since 2026-07-17, appeared in four documents and no AIP. The
|
||||||
|
EIP-2935 activation deviation was recorded only in a compatibility matrix.
|
||||||
|
|
||||||
|
The underlying finding is the one that motivated putting effort here at all:
|
||||||
|
formal specifications tend to die (Polkadot's was marked unmaintained on
|
||||||
|
2 October 2024; the Ethereum Yellow Paper stops at Shanghai, April 2023; Bitcoin
|
||||||
|
never produced one), while numbered proposal processes survive. A process is only
|
||||||
|
worth that bet if it has the mechanisms that made the surviving ones survive.
|
||||||
|
|
||||||
|
## Specification
|
||||||
|
|
||||||
|
The normative text is AIP-1 revision 2, sections 2 through 6. Summary of what was
|
||||||
|
added, with the precedent each mechanism is taken from:
|
||||||
|
|
||||||
|
| Mechanism | Precedent | Failure it prevents |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Numbers assigned at Draft entry, never reused, retained through Withdrawn | IETF RFC 2026; PEP 1; EIP-1 | A citation resolving to a different document than the one cited |
|
||||||
|
| Explicit table of permitted status transitions, including that Final has no outbound transition | PEP 1's state diagram; EIP-1's status set | Status becoming an adjective applied by judgment rather than a state with rules |
|
||||||
|
| Paired `Supersedes` / `Superseded-By` headers | IETF `Obsoletes` / `Obsoleted by` (RFC 2026, RFC 7322); PEP 1 `Replaces` / `Superseded-By` | A reader landing on outdated text with no path to the current text |
|
||||||
|
| Mandatory template with no removable sections | EIP-1 required sections; RFC 3552 mandating Security Considerations | An omission being invisible, since "None" is challengeable and an absent section is not |
|
||||||
|
| Post-acceptance immutability, with errata and outcome records appended and dated | RFC Editor immutability plus separate errata; Nygard Architecture Decision Records | Silent revision of accepted decisions, which makes the whole archive uncitable |
|
||||||
|
|
||||||
|
Alongside the process change, this AIP records the housekeeping that made the
|
||||||
|
index true: AIP-8 moved into `aere-research/aips/`; AIP-9 through AIP-16 materialized as
|
||||||
|
individual files; AIP-17 (base-fee floor) and AIP-18 (EIP-2935 deviation) filed as
|
||||||
|
new retro-filed records; and `CONTRIBUTING.md` added as the outsider path.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
Everything here is borrowed. Aere has one operator, no external contributors, and
|
||||||
|
a young archive, so it has not yet encountered the failures these mechanisms
|
||||||
|
prevent. That is precisely the argument for adopting them now: the cost of adding
|
||||||
|
a `Superseded-By` header to a nineteen-document archive is trivial, and the cost
|
||||||
|
of adding it to a two-hundred-document archive that has been edited in place for
|
||||||
|
three years is that you cannot, because the history needed to do it correctly is
|
||||||
|
gone.
|
||||||
|
|
||||||
|
**Alternatives rejected.** Designing an Aere-specific process: it would be a
|
||||||
|
solution to problems we have not had, while missing the ones already known.
|
||||||
|
Deferring until external contributors exist: the mechanisms are cheap now and
|
||||||
|
expensive later, and the archive being built today is the one that would need
|
||||||
|
retrofitting.
|
||||||
|
|
||||||
|
## Backwards Compatibility
|
||||||
|
|
||||||
|
AIP-2 through AIP-16 remain valid and are not rewritten. Missing `Superseded-By`
|
||||||
|
headers on older AIPs read correctly as "not superseded". Sections 2 through 6 of
|
||||||
|
AIP-1 bind every AIP filed from 2026-07-20 onward and are applied to earlier AIPs
|
||||||
|
on their next touch. Post-Acceptance Outcome Records appended to AIP-2, AIP-3 and
|
||||||
|
AIP-7 on 2026-07-20 are additions under the new rule and change no existing
|
||||||
|
sentence in those documents.
|
||||||
|
|
||||||
|
## Security Considerations
|
||||||
|
|
||||||
|
This AIP does not change the fundamental governance weakness: a single party can
|
||||||
|
still both author and ratify. Immutability and sourcing rules limit the damage
|
||||||
|
that state can do (a false claim becomes dated, attributed, and hard to erase
|
||||||
|
quietly) but they do not remove it. Only independent ratifiers do that.
|
||||||
|
|
||||||
|
There is a specific new risk worth naming: an immutability rule that is not
|
||||||
|
enforced by tooling is enforced by discipline, and discipline is not a control. A
|
||||||
|
repository-level check that a Final AIP's normative sections have not changed
|
||||||
|
between commits would make the rule real. That check does not exist yet and is
|
||||||
|
listed here as an open item rather than claimed as shipped.
|
||||||
|
|
||||||
|
## Reference Implementation and On-Chain Deployment
|
||||||
|
|
||||||
|
None. This is a process document. Artifacts: `aere-research/aips/AIP-1.md` (revision 2),
|
||||||
|
`aere-research/aips/aip-template.md`, `aere-research/aips/README.md`,
|
||||||
|
`aere-research/aips/CONTRIBUTING.md`.
|
||||||
|
|
||||||
|
## Copyright
|
||||||
|
|
||||||
|
Released to the public domain (CC0). No rights reserved.
|
||||||
@ -48,7 +48,7 @@ third-party explorer or analyst against the whitepaper.
|
|||||||
anyone, which forwards its native balance to `address(0)` (QBFT Besu permits a
|
anyone, which forwards its native balance to `address(0)` (QBFT Besu permits a
|
||||||
send to the zero address, after which the value is unreachable). Counters
|
send to the zero address, after which the value is unreachable). Counters
|
||||||
`totalBurnedAERE` and `totalSentToZero` make the burn queryable in O(1).
|
`totalBurnedAERE` and `totalSentToZero` make the burn queryable in O(1).
|
||||||
Source: `contracts/contracts/AereFeeBurnVault.sol`.
|
Source: `aere-contracts/contracts/AereFeeBurnVault.sol`.
|
||||||
|
|
||||||
- **AereCoinbaseSplitter** at `0xb4b0eCe9011613A5b84248a9B42a0f309E6F01Ec`. The
|
- **AereCoinbaseSplitter** at `0xb4b0eCe9011613A5b84248a9B42a0f309E6F01Ec`. The
|
||||||
routing contract. A validator or its forwarder daemon calls
|
routing contract. A validator or its forwarder daemon calls
|
||||||
@ -57,11 +57,11 @@ third-party explorer or analyst against the whitepaper.
|
|||||||
burnBps / 10000`, forwards `burnAmount` to AereFeeBurnVault via its `burn()`
|
burnBps / 10000`, forwards `burnAmount` to AereFeeBurnVault via its `burn()`
|
||||||
entrypoint, and returns the remainder to the validator address. It maintains
|
entrypoint, and returns the remainder to the validator address. It maintains
|
||||||
lifetime counters `totalBurned` and `totalDistributed` and per-caller
|
lifetime counters `totalBurned` and `totalDistributed` and per-caller
|
||||||
attributions. Source: `contracts/contracts/AereCoinbaseSplitter.sol`.
|
attributions. Source: `aere-contracts/contracts/AereCoinbaseSplitter.sol`.
|
||||||
|
|
||||||
- **AereCoinbaseSplitterV2** at `0x8C1A48eFA57b66fEE743A00E3899c29ad3Fd27b4`. The
|
- **AereCoinbaseSplitterV2** at `0x8C1A48eFA57b66fEE743A00E3899c29ad3Fd27b4`. The
|
||||||
current canonical splitter. Source:
|
current canonical splitter. Source:
|
||||||
`contracts/contracts/AereCoinbaseSplitterV2.sol`.
|
`aere-contracts/contracts/AereCoinbaseSplitterV2.sol`.
|
||||||
|
|
||||||
### Parameters
|
### Parameters
|
||||||
|
|
||||||
@ -116,9 +116,9 @@ reentrancy-guarded, and the burn vault has no withdraw path or admin. The
|
|||||||
|
|
||||||
## Reference Implementation and On-Chain Deployment
|
## Reference Implementation and On-Chain Deployment
|
||||||
|
|
||||||
- `contracts/contracts/AereCoinbaseSplitter.sol` -> `0xb4b0eCe9011613A5b84248a9B42a0f309E6F01Ec`
|
- `aere-contracts/contracts/AereCoinbaseSplitter.sol` -> `0xb4b0eCe9011613A5b84248a9B42a0f309E6F01Ec`
|
||||||
- `contracts/contracts/AereCoinbaseSplitterV2.sol` -> `0x8C1A48eFA57b66fEE743A00E3899c29ad3Fd27b4`
|
- `aere-contracts/contracts/AereCoinbaseSplitterV2.sol` -> `0x8C1A48eFA57b66fEE743A00E3899c29ad3Fd27b4`
|
||||||
- `contracts/contracts/AereFeeBurnVault.sol` -> `0x696afDF4f814e6Fd6aa45CE14C498ed9375fB2c6`
|
- `aere-contracts/contracts/AereFeeBurnVault.sol` -> `0x696afDF4f814e6Fd6aa45CE14C498ed9375fB2c6`
|
||||||
- Related extra-burn bucket: AereSink `0x69581B86A48161b067Ff4E01544780625B231676` (AIP-5)
|
- Related extra-burn bucket: AereSink `0x69581B86A48161b067Ff4E01544780625B231676` (AIP-5)
|
||||||
|
|
||||||
All addresses copied verbatim from `sdk-js/src/addresses.ts`. Live cumulative
|
All addresses copied verbatim from `sdk-js/src/addresses.ts`. Live cumulative
|
||||||
|
|||||||
@ -14,6 +14,8 @@
|
|||||||
| Status | Final |
|
| Status | Final |
|
||||||
| Created | 2026-07-11 |
|
| Created | 2026-07-11 |
|
||||||
| Requires | None |
|
| Requires | None |
|
||||||
|
| Supersedes | None |
|
||||||
|
| Superseded-By | None |
|
||||||
| Ratification | Foundation-ratified (pre-decentralization) |
|
| Ratification | Foundation-ratified (pre-decentralization) |
|
||||||
|
|
||||||
## Abstract
|
## Abstract
|
||||||
@ -65,12 +67,12 @@ pure Solidity are `view`-only until a native precompile exists (see below).
|
|||||||
|
|
||||||
Validation vectors used, as repo fixtures:
|
Validation vectors used, as repo fixtures:
|
||||||
|
|
||||||
- Falcon-512: `contracts/test/falcon512_kat0.json` (official NIST KAT).
|
- Falcon-512: `aere-contracts/test/falcon512_kat0.json` (official NIST KAT).
|
||||||
- Falcon-1024: `contracts/test/falcon1024_kat0.json` (official round-3 KAT).
|
- Falcon-1024: `aere-contracts/test/falcon1024_kat0.json` (official round-3 KAT).
|
||||||
- XMSS: `contracts/test/fixtures/xmss-sha2_10_256-kat.json` (xmss-reference vectors).
|
- XMSS: `aere-contracts/test/fixtures/xmss-sha2_10_256-kat.json` (xmss-reference vectors).
|
||||||
- ML-DSA-44: `contracts/test/fixtures/mldsa44-acvp-tg8.json` (NIST ACVP
|
- ML-DSA-44: `aere-contracts/test/fixtures/mldsa44-acvp-tg8.json` (NIST ACVP
|
||||||
ML-DSA-sigVer, 15/15 cases reproduce NIST's expected results).
|
ML-DSA-sigVer, 15/15 cases reproduce NIST's expected results).
|
||||||
- SPHINCS+/SLH-DSA: `contracts/test/fixtures/sphincs-sha2-128s-acvp-tg31.json`
|
- SPHINCS+/SLH-DSA: `aere-contracts/test/fixtures/sphincs-sha2-128s-acvp-tg31.json`
|
||||||
(NIST ACVP SLH-DSA-sigVer, 14/14 cases reproduce NIST's expected results).
|
(NIST ACVP SLH-DSA-sigVer, 14/14 cases reproduce NIST's expected results).
|
||||||
|
|
||||||
### Account-layer primitives (live on chain 2800)
|
### Account-layer primitives (live on chain 2800)
|
||||||
@ -102,6 +104,7 @@ in its stack than AERE does, inside its own state proofs. That prior art, with
|
|||||||
sources and dates, is set out in
|
sources and dates, is set out in
|
||||||
`aere-research/research/pqc-onchain-verification.md`, Section 8.
|
`aere-research/research/pqc-onchain-verification.md`, Section 8.
|
||||||
|
|
||||||
|
|
||||||
## Rationale
|
## Rationale
|
||||||
|
|
||||||
Pure-Solidity verifiers were built first because they run on the live chain today
|
Pure-Solidity verifiers were built first because they run on the live chain today
|
||||||
@ -188,7 +191,7 @@ Further honest caveats:
|
|||||||
|
|
||||||
## Reference Implementation and On-Chain Deployment
|
## Reference Implementation and On-Chain Deployment
|
||||||
|
|
||||||
Verifier sources are under `contracts/contracts/` (glob for the PQC, Falcon,
|
Verifier sources are under `aere-contracts/contracts/` (glob for the PQC, Falcon,
|
||||||
XMSS, ML-DSA, and SPHINCS verifiers). All addresses in the tables above are copied
|
XMSS, ML-DSA, and SPHINCS verifiers). All addresses in the tables above are copied
|
||||||
verbatim from `sdk-js/src/addresses.ts`. Each verifier is live and answerable via
|
verbatim from `sdk-js/src/addresses.ts`. Each verifier is live and answerable via
|
||||||
`eth_call` on `https://rpc.aere.network` (chain ID 2800): official vectors return
|
`eth_call` on `https://rpc.aere.network` (chain ID 2800): official vectors return
|
||||||
@ -199,4 +202,3 @@ under the EIP-7825 cap.
|
|||||||
## Copyright
|
## Copyright
|
||||||
|
|
||||||
Released to the public domain (CC0). No rights reserved.
|
Released to the public domain (CC0). No rights reserved.
|
||||||
</content>
|
|
||||||
|
|||||||
@ -12,6 +12,8 @@
|
|||||||
| Status | Final |
|
| Status | Final |
|
||||||
| Created | 2026-07-11 |
|
| Created | 2026-07-11 |
|
||||||
| Requires | 2 |
|
| Requires | 2 |
|
||||||
|
| Supersedes | None |
|
||||||
|
| Superseded-By | None |
|
||||||
| Ratification | Foundation-ratified (pre-decentralization) |
|
| Ratification | Foundation-ratified (pre-decentralization) |
|
||||||
|
|
||||||
## Abstract
|
## Abstract
|
||||||
@ -40,7 +42,7 @@ point of trust or a point of failure.
|
|||||||
### AereSink (immutable three-bucket router)
|
### AereSink (immutable three-bucket router)
|
||||||
|
|
||||||
Address `0x69581B86A48161b067Ff4E01544780625B231676`. Source
|
Address `0x69581B86A48161b067Ff4E01544780625B231676`. Source
|
||||||
`contracts/contracts/sink/AereSink.sol`.
|
`aere-contracts/contracts/sink/AereSink.sol`.
|
||||||
|
|
||||||
Fee-source contracts call `flush(token, amount)` after approving the sink. The
|
Fee-source contracts call `flush(token, amount)` after approving the sink. The
|
||||||
sink splits the amount into three buckets by immutable basis points that MUST sum
|
sink splits the amount into three buckets by immutable basis points that MUST sum
|
||||||
@ -67,7 +69,7 @@ router means redeploying and rewiring fee sources, not mutating this contract.
|
|||||||
### sAERE (ERC-4626 receipt token)
|
### sAERE (ERC-4626 receipt token)
|
||||||
|
|
||||||
Address `0xA2125bE9C6fd4196D9F94757Df18B3a2A5e650b0`. Source
|
Address `0xA2125bE9C6fd4196D9F94757Df18B3a2A5e650b0`. Source
|
||||||
`contracts/contracts/staking/sAERE.sol`.
|
`aere-contracts/contracts/staking/sAERE.sol`.
|
||||||
|
|
||||||
sAERE is a standard ERC-4626 vault: deposit WAERE, receive sAERE shares. The
|
sAERE is a standard ERC-4626 vault: deposit WAERE, receive sAERE shares. The
|
||||||
WAERE-per-sAERE rate rises as the staker-yield bucket arrives. Two hardening
|
WAERE-per-sAERE rate rises as the staker-yield bucket arrives. Two hardening
|
||||||
@ -131,8 +133,8 @@ not change existing contracts. Fee sources opt in by calling `flush`.
|
|||||||
|
|
||||||
## Reference Implementation and On-Chain Deployment
|
## Reference Implementation and On-Chain Deployment
|
||||||
|
|
||||||
- `contracts/contracts/sink/AereSink.sol` -> `0x69581B86A48161b067Ff4E01544780625B231676`
|
- `aere-contracts/contracts/sink/AereSink.sol` -> `0x69581B86A48161b067Ff4E01544780625B231676`
|
||||||
- `contracts/contracts/staking/sAERE.sol` -> `0xA2125bE9C6fd4196D9F94757Df18B3a2A5e650b0`
|
- `aere-contracts/contracts/staking/sAERE.sol` -> `0xA2125bE9C6fd4196D9F94757Df18B3a2A5e650b0`
|
||||||
- Burn destination: AereFeeBurnVault `0x696afDF4f814e6Fd6aa45CE14C498ed9375fB2c6` (AIP-2)
|
- Burn destination: AereFeeBurnVault `0x696afDF4f814e6Fd6aa45CE14C498ed9375fB2c6` (AIP-2)
|
||||||
- Base token: WAERE `0x7e84d7d66d5da4cfE46Da67CDEeB05B323e1f5e8`
|
- Base token: WAERE `0x7e84d7d66d5da4cfE46Da67CDEeB05B323e1f5e8`
|
||||||
- Deploy script: `contracts/deploy/deploy-saere-sink-stack.js` (splits 1500/4000/4500)
|
- Deploy script: `contracts/deploy/deploy-saere-sink-stack.js` (splits 1500/4000/4500)
|
||||||
@ -144,4 +146,3 @@ is readable on-chain via `AereSink.BURN_BPS()`, `BUYBACK_BPS()`, and
|
|||||||
## Copyright
|
## Copyright
|
||||||
|
|
||||||
Released to the public domain (CC0). No rights reserved.
|
Released to the public domain (CC0). No rights reserved.
|
||||||
</content>
|
|
||||||
|
|||||||
@ -12,6 +12,8 @@
|
|||||||
| Status | Final |
|
| Status | Final |
|
||||||
| Created | 2026-07-11 |
|
| Created | 2026-07-11 |
|
||||||
| Requires | None |
|
| Requires | None |
|
||||||
|
| Supersedes | None |
|
||||||
|
| Superseded-By | None |
|
||||||
| Ratification | Foundation-ratified (pre-decentralization) |
|
| Ratification | Foundation-ratified (pre-decentralization) |
|
||||||
|
|
||||||
## Abstract
|
## Abstract
|
||||||
@ -132,9 +134,9 @@ a paymaster.
|
|||||||
|
|
||||||
## Reference Implementation and On-Chain Deployment
|
## Reference Implementation and On-Chain Deployment
|
||||||
|
|
||||||
Sources under `contracts/contracts/passkey/` (accounts, factories, MultiOwnable,
|
Sources under `aere-contracts/contracts/passkey/` (accounts, factories, MultiOwnable,
|
||||||
EntryPointV2, WebAuthn, P256Probe) and `contracts/contracts/` plus
|
EntryPointV2, WebAuthn, P256Probe) and `aere-contracts/contracts/` plus
|
||||||
`contracts/contracts/paymaster/` (the paymasters and EntryPoint). Addresses:
|
`aere-contracts/contracts/paymaster/` (the paymasters and EntryPoint). Addresses:
|
||||||
|
|
||||||
- AereEntryPoint `0x19773ba45287A64B05d0BCBD59D1371BF51Bd5D2`
|
- AereEntryPoint `0x19773ba45287A64B05d0BCBD59D1371BF51Bd5D2`
|
||||||
- AereEntryPointV2 `0x8D6f40598d552fF0Cb358b6012cF4227B86aF770`
|
- AereEntryPointV2 `0x8D6f40598d552fF0Cb358b6012cF4227B86aF770`
|
||||||
@ -152,4 +154,3 @@ activation (unix 1780220351, block 2,106,597).
|
|||||||
## Copyright
|
## Copyright
|
||||||
|
|
||||||
Released to the public domain (CC0). No rights reserved.
|
Released to the public domain (CC0). No rights reserved.
|
||||||
</content>
|
|
||||||
|
|||||||
390
aips/AIP-8.md
Normal file
390
aips/AIP-8.md
Normal file
@ -0,0 +1,390 @@
|
|||||||
|
# AIP-8: Post-Quantum-Authorized Transaction Envelope (EIP-2718 Type 0x2A)
|
||||||
|
|
||||||
|
> **Note added 2026-08-19.** Statements in this document that consensus on chain 2800 is (or remains) classical secp256k1 ECDSA QBFT were written before the post-quantum header anchor went live, and remain true for block-by-block finality. Since block 13,014,000 anchor blocks (every 32nd block, on every one since block 13,889,296) also carry, under the block hash, a certificate of validator Falcon-512 seals, and since 2026-08-14 a node rejects an anchor block with fewer than three valid seals (f+1 of nine; eight or nine are carried in practice). That is a post-quantum checkpoint about every 16 seconds, not a per-block quorum: the claim published on 2026-08-15 that from block 14,050,000 no block finalizes without a post-quantum quorum was wrong (the per-block rule armed at that height is retired in the shipped code in favour of the anchor rules) and was withdrawn on 2026-08-19. Details: https://aere.network/quantum.html and the aere-node repository, anchor/README.md.
|
||||||
|
|
||||||
|
## Preamble
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| AIP | 8 |
|
||||||
|
| Title | Post-Quantum-Authorized Transaction Envelope (EIP-2718 Type 0x2A) |
|
||||||
|
| Author | Aere Network Foundation |
|
||||||
|
| Type | Standards Track |
|
||||||
|
| Category | Core |
|
||||||
|
| Status | Draft |
|
||||||
|
| Created | 2026-07-18 |
|
||||||
|
| Requires | 7 |
|
||||||
|
| Supersedes | None |
|
||||||
|
| Superseded-By | None |
|
||||||
|
| Ratification | Not ratified; Draft. Ratifier is the founder (pre-decentralization). |
|
||||||
|
|
||||||
|
## Abstract
|
||||||
|
|
||||||
|
This AIP specifies a new EIP-2718 typed transaction, `TransactionType = 0x2A`, whose
|
||||||
|
**sender authorization is a NIST post-quantum signature** (Falcon-512 or ML-DSA-44)
|
||||||
|
rather than a secp256k1 ECDSA signature. The transaction carries a scheme selector, a
|
||||||
|
raw PQC public key, and a PQC signature; the sender address is derived from the public
|
||||||
|
key, and the transaction is valid only if the signature verifies against the exact same
|
||||||
|
native precompiles that are already live on AERE mainnet chain 2800 (Falcon-512 `0x0AE1`,
|
||||||
|
ML-DSA-44 `0x0AE3`, activated at block 9,189,161 per AIP-7). It makes ordinary value and
|
||||||
|
contract-call transactions authorizable by a quantum-resistant key with no smart-account
|
||||||
|
indirection. This is a **base-layer execution change requiring a coordinated Besu hard
|
||||||
|
fork**; it is NOT yet live. It is explicit that this does not change how AERE blocks are
|
||||||
|
proposed, signed, or committed: consensus remains classical secp256k1 ECDSA QBFT and is
|
||||||
|
not post-quantum. A deploy-today reference path that needs no fork
|
||||||
|
(`AerePQCTxAccount.sol`, an ERC-4337 account) accompanies this AIP.
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
|
||||||
|
AERE has live, mainnet-proven post-quantum signature verification at the precompile layer
|
||||||
|
(AIP-7) and usable post-quantum authorization at the account layer (AerePQCAccount,
|
||||||
|
AereThresholdAccount, AerePQCSocialRecoveryModule). What is still missing is the most
|
||||||
|
basic object of all: an ordinary externally-originated transaction whose right to spend an
|
||||||
|
account is a post-quantum signature.
|
||||||
|
|
||||||
|
Today every transaction on chain 2800, including one that calls a post-quantum contract,
|
||||||
|
is itself authorized by a secp256k1 ECDSA signature. The account's ability to move its
|
||||||
|
native balance rests on ECDSA. A cryptographically-relevant quantum computer running
|
||||||
|
Shor's algorithm breaks secp256k1: it recovers the private key from the public key, and on
|
||||||
|
any account that has ever sent a transaction the public key is already on-chain. Account-
|
||||||
|
layer PQC (a 4337 smart account) closes this for smart-contract wallets, but it cannot
|
||||||
|
protect a plain externally-owned account (EOA), and it adds a bundler/EntryPoint and a
|
||||||
|
deployment step. A base-layer post-quantum transaction type closes the gap for the EOA
|
||||||
|
itself: the account is a hash of a PQC public key, and only a PQC signature can spend it.
|
||||||
|
|
||||||
|
The goal is a transaction type that (1) reuses the audited, mainnet-live precompile verify
|
||||||
|
paths verbatim (no new cryptography), (2) is a pure function of the transaction bytes for
|
||||||
|
validation (like ECDSA sender recovery, so mempool validation reads no state), (3) fits far
|
||||||
|
under the Fusaka EIP-7825 per-transaction gas cap, and (4) is a strictly additive,
|
||||||
|
client-only hard fork with no re-genesis, exactly like AIP-7.
|
||||||
|
|
||||||
|
## Specification
|
||||||
|
|
||||||
|
The keywords MUST, SHOULD, and MAY are to be interpreted as in RFC 2119.
|
||||||
|
|
||||||
|
### Transaction type byte
|
||||||
|
|
||||||
|
The transaction type is `0x2A`.
|
||||||
|
|
||||||
|
EIP-2718 constrains a valid `TransactionType` to the range `[0x00, 0x7f]`: a first byte
|
||||||
|
`>= 0xc0` is ambiguous with the RLP list header of a legacy transaction and is excluded,
|
||||||
|
and EIP-2718 recommends implementers stay within `0x00`..`0x7f`. Within that range the
|
||||||
|
Ethereum L1 assignments are `0x01` (EIP-2930), `0x02` (EIP-1559), `0x03` (EIP-4844), and
|
||||||
|
`0x04` (EIP-7702); AERE recognizes all four. `0x2A` is chosen because it is unassigned by
|
||||||
|
any Ethereum L1 EIP and sits well below the `0x64`..`0x7f` band that existing L2s have
|
||||||
|
informally colonized (Arbitrum `0x64`..`0x6c`, zkSync Era `0x71`+, Optimism deposit
|
||||||
|
`0x7e`, Celo `0x7b`..`0x7d`), which minimizes the chance that an imported third-party tool
|
||||||
|
misparses an AERE PQ transaction as some other chain's type. `0x2A` is reserved henceforth
|
||||||
|
in the AERE chain specification for this purpose. If Ethereum L1 later assigns `0x2A`, AERE
|
||||||
|
will re-evaluate to preserve equivalence, as AIP-7 commits to for the precompile band.
|
||||||
|
|
||||||
|
### Signature-scheme selector
|
||||||
|
|
||||||
|
A one-byte `pq_scheme` selects the NIST scheme and the precompile that validates it. The
|
||||||
|
values match AIP-7 and AerePQCAttestation:
|
||||||
|
|
||||||
|
| `pq_scheme` | Scheme | Precompile | Public-key length | Signature envelope |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| `0x01` | Falcon-512 | `0x0AE1` | 897 bytes (header `0x09`) | `nonce(40) || esig` (esig starts `0x29`) |
|
||||||
|
| `0x03` | ML-DSA-44 | `0x0AE3` | 1312 bytes | `sig`, exactly 2420 bytes |
|
||||||
|
|
||||||
|
`pq_scheme` `0x02` (Falcon-1024, `0x0AE2`, 1793-byte pk) and `0x04` (SLH-DSA-128s, `0x0AE4`,
|
||||||
|
32-byte pk, 7856-byte sig) MAY be enabled by the same rules; they are omitted from the
|
||||||
|
mandatory set because Falcon-512 (NIST level 1, smallest signature) and ML-DSA-44 (FIPS 204,
|
||||||
|
fixed-size, conservative) span the practical trade-off between signature size and margin.
|
||||||
|
Any other value MUST be rejected as an invalid transaction.
|
||||||
|
|
||||||
|
### RLP wire format
|
||||||
|
|
||||||
|
A type-`0x2A` transaction is the concatenation of the type byte and the RLP encoding of a
|
||||||
|
12-element list:
|
||||||
|
|
||||||
|
```
|
||||||
|
0x2A || rlp([
|
||||||
|
chain_id, # scalar; MUST equal 2800 for AERE mainnet
|
||||||
|
nonce, # scalar; the PQC-derived sender's account nonce
|
||||||
|
max_priority_fee_per_gas, # scalar (EIP-1559 semantics)
|
||||||
|
max_fee_per_gas, # scalar (EIP-1559 semantics)
|
||||||
|
gas_limit, # scalar
|
||||||
|
to, # 20-byte address, or empty (0x) for contract creation
|
||||||
|
value, # scalar
|
||||||
|
data, # byte string
|
||||||
|
access_list, # EIP-2930 [[address, [storageKey, ...]], ...]
|
||||||
|
pq_scheme, # single byte, 0x01 or 0x03 (see selector table)
|
||||||
|
pq_public_key, # raw NIST public key for pq_scheme
|
||||||
|
pq_signature # signature envelope for pq_scheme (see selector table)
|
||||||
|
])
|
||||||
|
```
|
||||||
|
|
||||||
|
The fee, gas, `to`, `value`, `data`, and `access_list` fields are identical in meaning to
|
||||||
|
EIP-1559 (type `0x02`) with an EIP-2930 access list, so existing execution and fee-market
|
||||||
|
logic is unchanged. The three trailing fields replace the ECDSA `(y_parity, r, s)` triple.
|
||||||
|
|
||||||
|
The transaction hash is `keccak256(0x2A || rlp([...all 12 fields...]))`, as for any typed
|
||||||
|
transaction.
|
||||||
|
|
||||||
|
### Sender derivation
|
||||||
|
|
||||||
|
The sender is derived from the PQC public key and the scheme, not from signature recovery:
|
||||||
|
|
||||||
|
```
|
||||||
|
sender = keccak256(pq_scheme || pq_public_key)[12:32] # last 20 bytes
|
||||||
|
```
|
||||||
|
|
||||||
|
Binding the address to `pq_scheme` as well as the key means the same raw key bytes under a
|
||||||
|
different scheme selector yield a different account, so there is no cross-scheme aliasing. A
|
||||||
|
user migrates to post-quantum custody by moving assets to their `sender` address; from then
|
||||||
|
on only a valid PQC signature can spend it. Unlike ECDSA, the public key is transmitted in
|
||||||
|
full on every transaction (the verify precompiles are stateless), which is safe: Falcon and
|
||||||
|
ML-DSA remain secure with the public key exposed. This is the point of the design, not a
|
||||||
|
weakness.
|
||||||
|
|
||||||
|
### Signing message and verification
|
||||||
|
|
||||||
|
`pq_signature` MUST be a valid signature, under `pq_public_key` and `pq_scheme`, over the
|
||||||
|
32-byte digest:
|
||||||
|
|
||||||
|
```
|
||||||
|
sig_hash = keccak256(0x2A || rlp([
|
||||||
|
chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit,
|
||||||
|
to, value, data, access_list, pq_scheme, pq_public_key
|
||||||
|
])) # the 12-field list WITHOUT pq_signature
|
||||||
|
```
|
||||||
|
|
||||||
|
Validation MUST assemble the precompile input for `pq_scheme` exactly as
|
||||||
|
AerePQCAttestation / AerePQCKeyRegistry do, with `sig_hash` as the signed message, and
|
||||||
|
accept the transaction only if the corresponding precompile returns the 32-byte
|
||||||
|
"valid" word `0x…01`:
|
||||||
|
|
||||||
|
- Falcon-512: `input = pk(897) || sm`, where `sm = sigLen(2, big-endian) || nonce(40) ||
|
||||||
|
sig_hash(32) || esig` and `sigLen == esig.length`; call `0x0AE1`.
|
||||||
|
- ML-DSA-44: `input = pk(1312) || sig(2420) || sig_hash(32)`; call `0x0AE3`.
|
||||||
|
|
||||||
|
The client MUST use the same Bouncy Castle 1.83 verify path the precompile wraps, so
|
||||||
|
that transaction validation and an in-EVM `STATICCALL` to the precompile agree bit-for-bit
|
||||||
|
on every `(pq_public_key, sig_hash, pq_signature)` triple. A transaction whose signature
|
||||||
|
does not verify has no valid sender and is invalid: it MUST be rejected from the mempool and
|
||||||
|
MUST NOT be included in a block, exactly as an ECDSA transaction with an unrecoverable
|
||||||
|
signature is.
|
||||||
|
|
||||||
|
### Nonce and replay handling
|
||||||
|
|
||||||
|
- **Cross-chain replay** is prevented by `chain_id` inside both the transaction and
|
||||||
|
`sig_hash`: a signature for chain 2800 does not verify for any other chain id.
|
||||||
|
- **Intra-chain replay and ordering** are enforced by `nonce`, the account nonce of the
|
||||||
|
PQC-derived `sender`, tracked in world state and incremented on inclusion, identical to an
|
||||||
|
ECDSA account. A given `(sender, nonce)` can be mined at most once.
|
||||||
|
- **Cross-protocol replay** (reusing a PQ tx signature as an AerePQCAttestation,
|
||||||
|
AerePQCKeyRegistry, or ERC-4337 authorization, or vice-versa) is prevented because those
|
||||||
|
surfaces sign structurally different messages: attestation/registry/account challenges are
|
||||||
|
`keccak256(abi.encode(DOMAIN, ...))` or `abi.encodePacked(domain, hash)` byte strings that
|
||||||
|
can never equal the `0x2A || rlp(...)` preimage of `sig_hash`. The leading type byte `0x2A`
|
||||||
|
in the signed preimage is the domain tag for this transaction type, mirroring how EIP-1559
|
||||||
|
signs `keccak256(0x02 || rlp(...))`.
|
||||||
|
|
||||||
|
### Gas accounting
|
||||||
|
|
||||||
|
Intrinsic gas for a type-`0x2A` transaction is:
|
||||||
|
|
||||||
|
```
|
||||||
|
intrinsic = 21000
|
||||||
|
+ calldata_gas(entire type-0x2A payload, including pq_public_key + pq_signature)
|
||||||
|
+ access_list_gas # EIP-2930: 2400 per address, 1900 per storage key
|
||||||
|
+ PQ_VERIFY_GAS[pq_scheme] # fork constant, MUST equal the live precompile verify gas
|
||||||
|
```
|
||||||
|
|
||||||
|
`PQ_VERIFY_GAS` MUST equal the marginal verify-op gas the corresponding precompile charges,
|
||||||
|
which AIP-7 measured on the pre-activation scratch fork (chain 28099) and carried to
|
||||||
|
mainnet:
|
||||||
|
|
||||||
|
| Scheme | `PQ_VERIFY_GAS` (measured, AIP-7) |
|
||||||
|
| --- | --- |
|
||||||
|
| Falcon-512 (`0x0AE1`) | 40,000 |
|
||||||
|
| ML-DSA-44 (`0x0AE3`) | 55,000 |
|
||||||
|
| Falcon-1024 (`0x0AE2`) | 75,000 |
|
||||||
|
| SLH-DSA-128s (`0x0AE4`) | 350,000 |
|
||||||
|
|
||||||
|
The dominant *additional* cost versus an EIP-1559 transaction is the calldata for the public
|
||||||
|
key and signature. Approximate PQ-material sizes and the resulting calldata component (to be
|
||||||
|
measured on the scratch fork; calldata is priced at EIP-2028 rates, subject to the EIP-7623
|
||||||
|
floor):
|
||||||
|
|
||||||
|
| Scheme | pk bytes | sig-envelope bytes | PQ material | approx. calldata gas |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| Falcon-512 | 897 | ~707 (40 + 1 + ~666) | ~1,605 B | ~24,000 (to be measured) |
|
||||||
|
| ML-DSA-44 | 1,312 | 2,420 | ~3,732 B | ~56,000 (to be measured) |
|
||||||
|
|
||||||
|
A complete Falcon-512 PQ transaction therefore lands near `21,000 + ~24,000 + 40,000 ≈
|
||||||
|
85,000` gas of intrinsic cost before execution, consistent with AIP-7's measured
|
||||||
|
end-to-end Falcon-512 verify-and-record transaction of 86,336 gas; a ML-DSA-44 PQ
|
||||||
|
transaction lands near `21,000 + ~56,000 + 55,000 ≈ 132,000`. Both are a tiny fraction of
|
||||||
|
the EIP-7825 per-transaction cap of 16,777,216 (2^24), leaving the full block-execution
|
||||||
|
budget for the call itself.
|
||||||
|
|
||||||
|
`PQ_VERIFY_GAS` is folded into intrinsic gas so the sender pays for the verification work
|
||||||
|
that validators perform. Because signature validity is a precondition of transaction
|
||||||
|
validity, a transaction with an invalid signature is never included and thus is never
|
||||||
|
charged on-chain, exactly as with a bad ECDSA signature; it simply cannot be mined.
|
||||||
|
|
||||||
|
### Base-layer activation sketch (Besu fork)
|
||||||
|
|
||||||
|
The change is a strictly additive execution-layer fork of the AERE Besu build (base
|
||||||
|
`hyperledger/besu:26.4.0`, the same tree that carries the AIP-7 precompiles). No re-genesis,
|
||||||
|
no state migration. The implementation touches, at minimum:
|
||||||
|
|
||||||
|
1. **TransactionType.** Add `PQ_AUTHORIZED((byte) 0x2A)` to
|
||||||
|
`org.hyperledger.besu.datatypes.TransactionType`.
|
||||||
|
2. **Codec.** Add a `PQAuthorizedTransactionDecoder` / `PQAuthorizedTransactionEncoder`
|
||||||
|
implementing the 12-field RLP layout above and register them in the `TransactionDecoder` /
|
||||||
|
`TransactionEncoder` dispatch. Extend the `Transaction` model to carry `pqScheme`,
|
||||||
|
`pqPublicKey`, and `pqSignature`, and override sender computation for this type to
|
||||||
|
`keccak256(pqScheme || pqPublicKey)[12:]`, defined only when the PQC signature verifies.
|
||||||
|
3. **PQ signature verifier.** A `PQAuthorizedSignatureVerifier` that calls the exact same
|
||||||
|
Bouncy Castle 1.83 BCPQC verify path (`AereFalconSupport.verify`, ML-DSA `verifyInternal`)
|
||||||
|
the `0x0AE1` / `0x0AE3` precompiles wrap. Zero new cryptography; reuse the precompile
|
||||||
|
adapters through the same classloader-isolation boundary AIP-7 established.
|
||||||
|
4. **Validation.** In `MainnetTransactionValidator` (via `TransactionValidatorFactory`), for
|
||||||
|
type `0x2A`: reconstruct `sig_hash`, verify the PQC signature (reject with an INVALID
|
||||||
|
reason on failure), derive the sender, and validate nonce, balance, and intrinsic gas as
|
||||||
|
usual.
|
||||||
|
5. **Gas.** Extend the `GasCalculator` with `pqAuthorizationIntrinsicGasCost(scheme, payload)`
|
||||||
|
returning the calldata component plus `PQ_VERIFY_GAS[scheme]`, wired into
|
||||||
|
`transactionIntrinsicGasCost`.
|
||||||
|
6. **Mempool and wire.** Teach `TransactionPool` and the eth/68 `Transactions` /
|
||||||
|
`PooledTransactions` codecs to carry the larger typed body; expose the type in the JSON-RPC
|
||||||
|
transaction serialization (`eth_getTransactionByHash`, receipts).
|
||||||
|
7. **Fork gating.** Add an `AerePQTx` milestone to `ProtocolScheduleBuilder` / the chain spec,
|
||||||
|
activated at a future block or timestamp distinct from the AIP-7 precompile activation.
|
||||||
|
Before activation, a `0x2A` first byte is an unknown type and is rejected; after
|
||||||
|
activation it is valid. Because chain 2800 runs seven QBFT validators under one operator on
|
||||||
|
one client, activation is a flag-day client upgrade across the validator set, exactly as in
|
||||||
|
AIP-7. A non-upgraded validator would reject the type and fork off, so the upgrade is
|
||||||
|
mandatory at the fork block.
|
||||||
|
8. **Differential testing.** Gate ship on a test that, for the NIST KAT vectors in
|
||||||
|
`pqc-fork/kat` and randomized cases, asserts the transaction-validation verify agrees
|
||||||
|
bit-for-bit with a `STATICCALL` to the matching precompile over the same
|
||||||
|
`(pk, sig_hash, sig)`, plus round-trip encode/decode and a full mine-and-receipt path on an
|
||||||
|
isolated testnet.
|
||||||
|
|
||||||
|
Consensus is untouched: QBFT proposal, the committed-seal ECDSA signatures, and block
|
||||||
|
structure are unchanged; type `0x2A` is simply another transaction a block may contain, with
|
||||||
|
its own receipt type.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
**Full public key in every transaction, not a registry keyId.** An alternative shrinks
|
||||||
|
calldata by replacing `pq_public_key` with a `keyId` into AerePQCKeyRegistry
|
||||||
|
(`0x1eCa…3691`). It is rejected for the base type because it makes transaction validation
|
||||||
|
depend on world state (a registry lookup), which breaks the property that a transaction's
|
||||||
|
validity is a pure function of its own bytes, the same property ECDSA sender recovery has,
|
||||||
|
and which mempool validation relies on. The stateless full-key form keeps validation pure
|
||||||
|
and matches how the live precompiles already work. A registry-indexed companion type could be
|
||||||
|
specified later once the state-dependency implications for the mempool are worked through.
|
||||||
|
|
||||||
|
**Sender = hash of (scheme, key), reusing the 20-byte address space.** This keeps the PQ
|
||||||
|
account indistinguishable from any other address to every downstream contract, tool, and
|
||||||
|
explorer: balances, `CALL`, `msg.sender`, and logs all behave normally. The only thing that
|
||||||
|
changes is who may originate a transaction from that address.
|
||||||
|
|
||||||
|
**Type `0x2A` over a higher value.** Staying in the low half of the valid range and away
|
||||||
|
from the L2-colonized `0x64`..`0x7f` band reduces cross-ecosystem tool confusion, at no cost.
|
||||||
|
|
||||||
|
**A base-layer type at all, given 4337 exists.** ERC-4337 already gives post-quantum
|
||||||
|
authorization for smart-contract wallets and is the recommended path today (see the reference
|
||||||
|
implementation). But a 4337 account cannot protect a plain EOA, requires a deployed contract
|
||||||
|
and a bundler, and pays EVM-execution overhead for validation. The base type is the only way
|
||||||
|
to make an *ordinary* account post-quantum, and it prices verification at the native
|
||||||
|
precompile cost rather than in-EVM. The trade-off is that it requires a hard fork and touches
|
||||||
|
the entire transaction-decoding surface of the ecosystem, which is exactly why it is filed as
|
||||||
|
a Draft with a shipping 4337 alternative rather than activated immediately.
|
||||||
|
|
||||||
|
## Backwards Compatibility
|
||||||
|
|
||||||
|
Additive. Existing legacy, `0x01`, `0x02`, `0x03`, and `0x04` transactions are unaffected.
|
||||||
|
Before the `AerePQTx` fork block, a `0x2A` transaction is an unknown type and is rejected by
|
||||||
|
all nodes; after it, all nodes accept it. There is no change to existing accounts, contracts,
|
||||||
|
receipts of other types, or the genesis state root.
|
||||||
|
|
||||||
|
Ecosystem tooling that decodes raw transactions (wallets, explorers, indexers, the RPC
|
||||||
|
transaction serializer, hardware-wallet firmware, signing libraries) MUST learn type `0x2A`
|
||||||
|
to build, sign, display, or index these transactions. Tools that only handle types they
|
||||||
|
recognize will treat a `0x2A` transaction as opaque or unsupported rather than misdecode it,
|
||||||
|
because the type byte is self-describing. This ecosystem surface is the principal cost of the
|
||||||
|
change and the reason the ERC-4337 path is preferred for immediate use.
|
||||||
|
|
||||||
|
Because AERE runs all validators under one operator and one client, activation is a
|
||||||
|
mandatory flag-day client upgrade across the validator set at the fork block, as in AIP-7. A
|
||||||
|
validator that had not upgraded would reject the type and fork.
|
||||||
|
|
||||||
|
## Security Considerations
|
||||||
|
|
||||||
|
**This change does not make AERE consensus post-quantum.** Validators continue to sign
|
||||||
|
classical secp256k1 QBFT committed seals; blocks are proposed and committed exactly as today.
|
||||||
|
Type `0x2A` makes an individual transaction's *sender authorization* post-quantum. It does
|
||||||
|
not make block production, finality, or the validator set post-quantum, and any claim to that
|
||||||
|
effect on the basis of this AIP would be false and must not be made.
|
||||||
|
|
||||||
|
**A valid signature is not authorization beyond spend rights.** A "valid" precompile decision
|
||||||
|
establishes only that `pq_signature` is a valid signature by `pq_public_key` over `sig_hash`.
|
||||||
|
Freshness and ordering come from `nonce`; scope comes from the tx fields themselves. There is
|
||||||
|
no key rotation or recovery at this layer: losing the PQC private key loses the account, the
|
||||||
|
same as losing an ECDSA key. Users who need rotation or social recovery should hold assets in
|
||||||
|
an ERC-7579 account guarded by AerePQCSocialRecoveryModule instead of, or in addition to, a
|
||||||
|
PQ EOA.
|
||||||
|
|
||||||
|
**Single operator, one client (no client-diversity safety net).** Chain 2800's seven QBFT
|
||||||
|
validators are one operator on one execution client. A consensus bug in the PQ-transaction
|
||||||
|
validation path (for example a decoder edge case, or a divergence between the tx-validation
|
||||||
|
verify and the precompile verify) would not be caught by a second live client, because there
|
||||||
|
is none. This raises the bar for external audit and for the mandatory bit-for-bit
|
||||||
|
differential testing in the activation sketch.
|
||||||
|
|
||||||
|
**Determinism.** Transaction validation, like a precompile, must be deterministic and read no
|
||||||
|
node-local state or block context beyond the transaction and the account nonce/balance.
|
||||||
|
Falcon verification MUST use the integer-only verify path (never the floating-point signing
|
||||||
|
path). Malformed structure MUST be rejected deterministically as an invalid transaction, not
|
||||||
|
faulted.
|
||||||
|
|
||||||
|
**Public-key exposure is intended.** The public key is on-chain from the account's first
|
||||||
|
transaction. This is safe for Falcon and ML-DSA and is the mechanism by which the account is
|
||||||
|
quantum-resistant; it is called out only to preempt the ECDSA-era intuition that an unspent
|
||||||
|
address "hides" its key.
|
||||||
|
|
||||||
|
**Not live; external audit pending.** This is a Draft specification and a reference-
|
||||||
|
implementation sketch. Nothing here is deployed on chain 2800. The precompiles it reuses
|
||||||
|
carry an internal self-audit only (AIP-7). This transaction type MUST NOT secure material
|
||||||
|
value until it is implemented, differentially tested against the live precompiles, and
|
||||||
|
covered by an external security audit.
|
||||||
|
|
||||||
|
## Reference Implementation and On-Chain Deployment
|
||||||
|
|
||||||
|
**Not yet live.** The base-layer fork above is a specification and a Besu implementation
|
||||||
|
sketch, not a deployed change.
|
||||||
|
|
||||||
|
**Deploy-today reference path (no fork required).** The same user-visible guarantee, "a
|
||||||
|
transaction is authorized by a post-quantum signature and nothing else", is delivered today,
|
||||||
|
with no base-layer change, by an ERC-4337 v0.7 smart account whose sole owner is a NIST PQC
|
||||||
|
key and whose `validateUserOp` verifies via the live precompiles:
|
||||||
|
|
||||||
|
- Contract: `aere-contracts/contracts/pqc/AerePQCTxAccount.sol` (this repository).
|
||||||
|
- Tests: `aere-contracts/test/AerePQCTxAccount.test.js` (MockPQCPrecompile across all four schemes
|
||||||
|
plus a genuine Falcon-512 path through the NIST-KAT-proven AereFalcon512Verifier).
|
||||||
|
- **Verified 2026-07-18:** compiled and tested under the canonical Hardhat toolchain,
|
||||||
|
`npx hardhat compile` then `npx hardhat test test/AerePQCTxAccount.test.js`. The contract
|
||||||
|
compiles clean and all 20 tests pass: the mock verifier across all four schemes, the
|
||||||
|
domain-separation and single-use replay checks, and two genuine Falcon-512 paths through the
|
||||||
|
NIST-KAT-proven verifier. This bullet records an actual machine run; it should be read as a
|
||||||
|
verified result, not an untested present-tense assertion.
|
||||||
|
- It calls the live precompiles (`0x0AE1`..`0x0AE4`) directly with the identical wire
|
||||||
|
encoding proven on mainnet by AerePQCAttestation
|
||||||
|
(`0x465d9E3b476BF98Aa1393079e240Db5D2a9bEA6A`) and AerePQCKeyRegistry
|
||||||
|
(`0x1eCa3c5ADcBD0b22636D8672b00faC6D89363691`), and targets AereEntryPointV2
|
||||||
|
(`0x8D6f40598d552fF0Cb358b6012cF4227B86aF770`). Addresses are copied verbatim from
|
||||||
|
`sdk-js/src/addresses.ts`.
|
||||||
|
|
||||||
|
The precompile band, its activation block (9,189,161), and the wire encoding are verifiable
|
||||||
|
on `https://rpc.aere.network` (chain id 2800) as documented in AIP-7.
|
||||||
|
|
||||||
|
## Copyright
|
||||||
|
|
||||||
|
Released to the public domain (CC0). No rights reserved.
|
||||||
102
aips/AIP-9.md
Normal file
102
aips/AIP-9.md
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
# AIP-9: Consensus Mechanism: QBFT, not HotStuff
|
||||||
|
|
||||||
|
## Preamble
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| AIP | 9 |
|
||||||
|
| Title | Consensus Mechanism: QBFT, not HotStuff |
|
||||||
|
| Author | Aere Network Foundation |
|
||||||
|
| Type | Informational |
|
||||||
|
| Category | (none) |
|
||||||
|
| Status | Final |
|
||||||
|
| Created | 2026-07-19 |
|
||||||
|
| Requires | 3 |
|
||||||
|
| Supersedes | None |
|
||||||
|
| Superseded-By | None |
|
||||||
|
| Ratification | Foundation-ratified (pre-decentralization) |
|
||||||
|
|
||||||
|
## Abstract
|
||||||
|
|
||||||
|
This AIP records the decision to run QBFT as Aere's consensus protocol rather
|
||||||
|
than HotStuff or a pipelined HotStuff variant. It backfills a decision that is
|
||||||
|
already live on chain 2800. It is a decision record: it explains why a shipped
|
||||||
|
choice was made and mandates nothing new.
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
|
||||||
|
Aere is a settlement layer whose core promise is deterministic, single-slot
|
||||||
|
finality at a sub-second cadence, running a small permissioned validator set:
|
||||||
|
seven validators today, with a roadmap target in the 9 to 21 range. The consensus
|
||||||
|
choice determines whether that promise is deliverable at all, and it was taken
|
||||||
|
without being written down anywhere citable.
|
||||||
|
|
||||||
|
## Specification
|
||||||
|
|
||||||
|
Aere runs QBFT, the Byzantine-fault-tolerant IBFT-family protocol as implemented
|
||||||
|
in Hyperledger Besu, producing deterministic single-block finality.
|
||||||
|
|
||||||
|
- Validator count N = 7 (**measured**, all Foundation-operated).
|
||||||
|
- Fault tolerance f = 2, commit quorum 2f + 1 = 5-of-7 (**spec**).
|
||||||
|
- Target block period 500 ms (**spec**, see AIP-3); measured mean interval
|
||||||
|
516.4 ms.
|
||||||
|
- Validator seals are classical secp256k1 ECDSA. **Consensus is not
|
||||||
|
post-quantum** and no part of this record implies otherwise.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
At Aere's validator-set size, QBFT's O(N^2) message complexity is negligible in
|
||||||
|
absolute terms: a 5-of-7 quorum verify costs on the order of a few milliseconds
|
||||||
|
per block, a small fraction of the 500 ms slot. Against that non-cost, QBFT gives
|
||||||
|
three concrete advantages. It provides deterministic instant single-block
|
||||||
|
finality, which is the exact settlement guarantee the network sells. It is mature
|
||||||
|
and already integrated in Besu, so there is no new-protocol implementation risk.
|
||||||
|
And Aere's post-quantum consensus research, second-client work, and zk finality
|
||||||
|
proofs are all built against QBFT, so changing it would invalidate that work.
|
||||||
|
|
||||||
|
**Alternatives rejected.** HotStuff and its pipelined variants, whose linear
|
||||||
|
per-round communication complexity is engineered to scale BFT to hundreds of
|
||||||
|
validators. That scaling regime is one Aere does not operate in and does not plan
|
||||||
|
to enter under this design, so HotStuff's headline benefit is unavailable, while
|
||||||
|
adopting it would add the risk and integration cost of a protocol less
|
||||||
|
battle-tested in the chosen client.
|
||||||
|
|
||||||
|
## Backwards Compatibility
|
||||||
|
|
||||||
|
None. This records the existing protocol.
|
||||||
|
|
||||||
|
## Security Considerations
|
||||||
|
|
||||||
|
At N = 7 the fault tolerance against node outages is real, but **all seven
|
||||||
|
validators are Foundation-operated**, so the effective Nakamoto coefficient is 1.
|
||||||
|
Decentralization, not the consensus mechanism, is the binding trust assumption on
|
||||||
|
this chain. A reader should not read "Byzantine fault tolerant" as "trustless".
|
||||||
|
|
||||||
|
Consensus seals are secp256k1 ECDSA and are therefore classically breakable by a
|
||||||
|
cryptographically relevant quantum computer. Work on a hybrid post-quantum
|
||||||
|
consensus path is recorded in AIP-15 and is **not live**.
|
||||||
|
|
||||||
|
## Reference Implementation and On-Chain Deployment
|
||||||
|
|
||||||
|
Chain ID 2800. Configuration lives in the Besu QBFT genesis and chain config; the
|
||||||
|
block period transition is documented in AIP-3. There is no contract address for
|
||||||
|
a consensus choice.
|
||||||
|
|
||||||
|
## Errata
|
||||||
|
|
||||||
|
**Erratum 1 (2026-09-12).** Every validator count in this document is a
|
||||||
|
measurement of 2026-07-19, the day it was written, and none of them carries that
|
||||||
|
date in its own sentence, so a sentence quoted on its own reads as a claim about
|
||||||
|
today. Read them as dated: "seven validators today" in the Motivation,
|
||||||
|
"Validator count N = 7 (**measured**)" and "commit quorum 2f + 1 = 5-of-7" in the
|
||||||
|
Specification, and "At N = 7 ... all seven validators are Foundation-operated" in
|
||||||
|
the Security Considerations were all true on 2026-07-19. Measured 2026-09-12 on
|
||||||
|
the live chain: N = 10, f = 3, commit quorum 7-of-10, and one of the ten runs a
|
||||||
|
different client implementation. The decision this AIP records, QBFT rather than
|
||||||
|
HotStuff, is unaffected, and so is the Nakamoto argument in the Security
|
||||||
|
Considerations: the set grew, the operator count did not. The original text is
|
||||||
|
left exactly as published, per AIP-1 section 5.
|
||||||
|
|
||||||
|
## Copyright
|
||||||
|
|
||||||
|
Released to the public domain (CC0). No rights reserved.
|
||||||
130
aips/CONTRIBUTING.md
Normal file
130
aips/CONTRIBUTING.md
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
# Proposing a change to Aere Network
|
||||||
|
|
||||||
|
This document is for someone who is not part of the Aere Foundation and wants to
|
||||||
|
change how Aere Network works. It tells you what to do, what happens next, and
|
||||||
|
who decides. The last of those three is the one most projects are vague about, so
|
||||||
|
it is answered first.
|
||||||
|
|
||||||
|
## Who decides
|
||||||
|
|
||||||
|
**The founder decides.** Today, ratification of an AIP is one person's decision,
|
||||||
|
exercised through the Aere Foundation account
|
||||||
|
`0x0243A4f47D44b40b65D33f20329dE20D00c6f3C3`. That account is a single key. It is
|
||||||
|
not a multisig, it is not a timelock, and there is no on-chain vote that binds it.
|
||||||
|
|
||||||
|
There is a governance stack deployed on chain 2800 (a Governor, a Timelock, and a
|
||||||
|
governance token). **It controls nothing.** No production contract on chain 2800
|
||||||
|
is owned by a timelock, and the governance contracts hold no authority over the
|
||||||
|
protocol. They exist as deployed, inert infrastructure for a future in which they
|
||||||
|
do. Do not read their existence as a claim that Aere has on-chain governance.
|
||||||
|
|
||||||
|
The network runs seven QBFT validators, all operated by the Foundation, on one
|
||||||
|
live client, with no external security audit. The effective Nakamoto coefficient
|
||||||
|
is 1.
|
||||||
|
|
||||||
|
This is worth stating plainly rather than implying a governance that does not
|
||||||
|
exist. If you are deciding whether to invest engineering effort in an Aere
|
||||||
|
proposal, that paragraph is the fact you need, and finding it out later would be
|
||||||
|
worse for you and for us.
|
||||||
|
|
||||||
|
**What this means in practice for you:**
|
||||||
|
|
||||||
|
- A good technical argument can win. There is no stake threshold, no token
|
||||||
|
requirement, no membership, and no fee. Your proposal is judged on whether it
|
||||||
|
is correct and worth doing.
|
||||||
|
- There is no appeal. If the founder declines your proposal, that is the end of
|
||||||
|
it inside this process. Aere's proposals are CC0, so forking the record and
|
||||||
|
implementing your version elsewhere is always available to you, and nobody here
|
||||||
|
will treat that as hostile.
|
||||||
|
- A rejection will be written down. If your AIP is rejected, it keeps its number,
|
||||||
|
moves to Withdrawn, and stays in the repository with the reason recorded. We do
|
||||||
|
not delete proposals we disagreed with.
|
||||||
|
|
||||||
|
## What we will not do
|
||||||
|
|
||||||
|
Two commitments, so you know what you are relying on:
|
||||||
|
|
||||||
|
1. **We will not renumber or reuse your number.** Once your proposal is assigned
|
||||||
|
AIP-N it is AIP-N permanently, including if it is withdrawn (AIP-1 section 2).
|
||||||
|
2. **We will not silently edit your proposal after it is accepted.** A Final AIP
|
||||||
|
is frozen. Corrections are appended as dated errata that leave the original
|
||||||
|
text visible (AIP-1 section 5).
|
||||||
|
|
||||||
|
## How to propose
|
||||||
|
|
||||||
|
### Step 0: check it belongs in an AIP
|
||||||
|
|
||||||
|
**In scope:** a protocol or consensus change (block time, fee routing,
|
||||||
|
precompiles); a new contract standard or interface others integrate against; a
|
||||||
|
token or account standard convention; a process or governance change.
|
||||||
|
|
||||||
|
**Out of scope:** bug-fix redeploys that preserve an existing interface, routine
|
||||||
|
parameter tuning inside an already-ratified bound, and pure documentation. A
|
||||||
|
security vulnerability is **not** an AIP: do not publish it. Report it privately
|
||||||
|
first.
|
||||||
|
|
||||||
|
If you are unsure, propose it anyway. The editor will tell you.
|
||||||
|
|
||||||
|
### Step 1: write it
|
||||||
|
|
||||||
|
Copy `aip-template.md`. Fill in every section. Do not delete a header; write
|
||||||
|
"None" if a section does not apply, because "Security Considerations: None" is a
|
||||||
|
claim a reviewer can challenge and a missing section is not.
|
||||||
|
|
||||||
|
The rules that get proposals bounced fastest:
|
||||||
|
|
||||||
|
- **Cite addresses verbatim** from `sdk-js/src/addresses.ts`. Do not retype them.
|
||||||
|
- **Label every number** as **measured** (reproducible from the chain or a repo
|
||||||
|
fixture), **spec** (a configured or standardized value), or **estimate**.
|
||||||
|
- **Write "to be measured"** rather than guessing. A guessed gas figure is worse
|
||||||
|
than an absent one, because the reader cannot tell it is a guess.
|
||||||
|
- **Do not claim post-quantum consensus.** Aere consensus is classical secp256k1
|
||||||
|
ECDSA QBFT. Aere's post-quantum work is at the signature, account and
|
||||||
|
application layers. A proposal that blurs this will be sent back.
|
||||||
|
|
||||||
|
### Step 2: submit it
|
||||||
|
|
||||||
|
Open a pull request against `aere-research/aips/` adding `AIP-N.md`, where N is the
|
||||||
|
next free integer, plus a row in `README.md`. If you cannot open a pull request,
|
||||||
|
send the document by any route that reaches the Foundation; the format matters,
|
||||||
|
the transport does not.
|
||||||
|
|
||||||
|
### Step 3: what happens next
|
||||||
|
|
||||||
|
| Stage | What happens | Who | Typical time |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Well-formedness check | The editor checks the template is complete, the number is right, and every cited address, hash and number is real. This is not a merit review. | Editor (the Foundation today) | days |
|
||||||
|
| **Draft** | Your number is assigned. You own the document and can keep changing it. | You | as long as you want |
|
||||||
|
| **Review** | You declare it ready for scrutiny. Open questions are tracked inside the document itself, not in a side channel. | You, plus anyone who comments | open-ended |
|
||||||
|
| **Last Call** | A final review window, 14 days by default, with the end date written into the document. | Editor | 14 days |
|
||||||
|
| **Final** | Ratified. Frozen under AIP-1 section 5. | Founder | one decision |
|
||||||
|
|
||||||
|
You can stop at any point by withdrawing. The editor moves a proposal to Stagnant
|
||||||
|
after six months of inactivity in Draft or Review; anyone, including you later,
|
||||||
|
can revive it.
|
||||||
|
|
||||||
|
### Step 4: honestly, about "review"
|
||||||
|
|
||||||
|
Aere has **no external technical community commenting on AIPs yet**. This is not
|
||||||
|
a modesty statement, it is the current state: decentralization is thin and
|
||||||
|
external usage is thin. If you file a proposal today, the review you get is from
|
||||||
|
the Foundation, and it may be the only review you get.
|
||||||
|
|
||||||
|
We record that rather than inventing the alternative. There are no fabricated
|
||||||
|
comment threads in this repository, no invented "the community debated", and no
|
||||||
|
imagined participants. When real external comment arrives it will be recorded as
|
||||||
|
it happened. Until then, do not expect a crowd, and do not mistake an empty
|
||||||
|
comment section for consensus.
|
||||||
|
|
||||||
|
## Reporting a vulnerability instead
|
||||||
|
|
||||||
|
If you found a security bug, this is the wrong document. Do not file an AIP, do
|
||||||
|
not open a public pull request, and do not include the vulnerability in any
|
||||||
|
public issue. Report it privately to the Foundation first. Publishing a live
|
||||||
|
vulnerability against a chain with a single operator and no external audit
|
||||||
|
endangers users who have no way to react.
|
||||||
|
|
||||||
|
## Copyright
|
||||||
|
|
||||||
|
Everything you submit here is CC0, released to the public domain. If that is not
|
||||||
|
acceptable to you, do not submit it.
|
||||||
Loading…
Reference in New Issue
Block a user