aere-docs/AERE-MIGRATION-TOOLKIT.md
Aere Network e4cead319d Initial public release
Aere Network public source. Everything here can be checked against the live
chain (chain id 2800, https://rpc.aere.network).

Scope note, stated up front rather than buried: consensus on chain 2800 is
classical secp256k1 ECDSA QBFT. The post-quantum work in this repository is at
the signature, precompile, account and transport layers. Nothing here makes the
consensus post-quantum, and no document in it should be read as claiming so.
2026-07-20 01:01:36 +03:00

5.3 KiB

spec-31: Aere Quantum Migration Toolkit

Status date: 2026-07-19 Location: aerenew/pqc-migration-toolkit/ Runtime: pure Node built-ins (Node 18+), zero runtime dependencies.

What it is

A real, runnable toolkit that helps anyone assess and migrate an EVM account toward post-quantum readiness on Aere Network (chain 2800) or any EVM chain via RPC. It extends Aere's internal account-migration work outward into a usable tool. Three parts plus a self-test and a README.

The four deliverables

  1. PQC-readiness scanner, scan.js. Given an EVM address, detects EOA vs contract, and for contracts scans bytecode for quantum-vulnerable signature primitives (ecrecover 0x01, P-256 0x100) versus Aere's live post-quantum precompiles (0x0AE1..0x0AE5). Outputs RED (classical-only), YELLOW (hybrid), GREEN (PQC-capable). Runnable: node scan.js <address> --rpc <url>, plus offline --bytecode 0x.. and --fixture <name> paths.

  2. Migration SDK, lib/migrate.js + plan.js. CREATE2 address derivation mirroring AerePQCAccountFactory.predictAddress, calldata builders for createAccount (PQC account) and registerIdentity (hybrid ECDSA+Falcon), and a step-by-step migration plan over Aere's existing live primitives (AerePQCAccount/Factory, AereHybridAuth, AerePQCKeyRegistry, EIP-7702).

  3. Migration cost simulator, simulate.js. Estimates migration gas from the MEASURED PQC verify costs (Falcon-512 86,336 verify-and-record tx / 40,000 marginal; hybrid 89,336 / 43,000; Falcon-1024 145,496; ML-DSA-44 351,050; SLH-DSA-128s 558,276), plus the CREATE2 deploy (1,493,084) and the deployed Solidity-verifier path (~10.5M), at the 1 Gwei floor.

  4. README, README.md. Honest positioning: Aere is the post-quantum EVM L1 (five live NIST PQC precompiles + a live Falcon-owned account and factory), so it is the natural home for PQC migration tooling. This is a STARTING toolkit, not a finished product.

How the scanner is genuinely honest (not a grep)

  • Opcode-aware decoding: walks the instruction stream skipping PUSH immediates, so a matched constant is a real push (a naive 610ae1 substring search false-positives).
  • Local stack simulation: for every CALL/STATICCALL/DELEGATECALL/CALLCODE it recovers the address argument (2nd stack item) per basic block, so it flags an actual call to 0x0AE1 rather than the number 0x0AE5 used as a memory length. An earlier proximity-only version misread AereHybridAuth as YELLOW for exactly that reason; the stack-simulation version reads it RED correctly.
  • Signature-verify addresses 0x0AE1..0x0AE4 are distinctive, so a bare push is a medium-confidence fallback. The common literals 0x01, 0x100, 0x0AE5 count only when resolved as an actual CALL target.

What actually ran (real results, this session)

node selftest.js (no network) ALL PASS:

  • keccak256("") == c5d2460186f7233c... (zero-dep keccak is correct).
  • predictPqcAccountAddress re-derived the LIVE sample AerePQCAccount address 0xa42a5e7F72E46BadC11367650Ec34D676194326f from its real 897-byte Falcon key (CREATE2 math byte-correct vs a real deployment).
  • Scanner on 4 REAL bytecode fixtures: AerePQCAttestation GREEN, AerePQCTxAccount GREEN, AereHybridAuth RED (Solidity-verifier scope limit), AereFalcon512Verifier RED (0x0100 are literals). Synthetic hybrid YELLOW; empty code RED (EOA).

Live against https://rpc.aere.network (the --rpc path is NOT [MEASURE]; it ran):

  • AerePQCAttestation 0x465d... => GREEN, chainId 2800, 4402 bytes (matches fixture).
  • Foundation EOA 0x0243... => RED, 0 bytes of code.
  • createAccount(bytes,uint256) selector 0x0fd8377b computed by the zero-dep keccak is present in the live factory's deployed bytecode.

Scope boundary (restated in tool output)

Migrating account authentication to a PQC scheme does NOT make Aere consensus post-quantum. Mainnet 2800 still seals blocks with classical secp256k1 QBFT, and the ZK verifiers (BN254 Groth16) are classical.

[VERIFY] / [MEASURE] flags carried

  • [VERIFY] AereHybridAuth is repo source only; no mainnet address in the address book as of 2026-07-19, so the hybrid path's deploy step is founder/deployer gated (flagged in plan output).
  • [VERIFY] Scanner cannot see Falcon verification done via the SOLIDITY AereFalcon512Verifier (a contract call, not a precompile), so such contracts read RED; confirm auth paths against source.
  • [VERIFY] ecrecover (0x01) is resolved by stack sim, but the literal 1 is common; a contract with no signature precompile call correctly reads RED.
  • [VERIFY] Testnet-only precompiles 0x0AE6..0x0AE8 are not on mainnet 2800.
  • [MEASURE] Only the live scan needs network; offline scans and the whole self-test run with no RPC.

Founder-gated caveat

The AerePQCAccountFactory (0xd5315Ea7...CE58) is live and createAccount is permissionless, so deploying a PQC account is possible today. Deploying NEW contracts or a corrected V2 redeploy of an account factory is signed by the Foundation/deployer key, not by this toolkit.

Files

scan.js, plan.js, simulate.js, selftest.js, README.md, package.json, lib/{keccak,bytecode,scanner,migrate,simulate,precompiles,rpc}.js, fixtures/{AerePQCAttestation,AerePQCTxAccount,AereHybridAuth,AereFalcon512Verifier}.hex

  • fixtures/index.json (real deployed bytecode extracted from repo artifacts).