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.
64 lines
3.7 KiB
Markdown
64 lines
3.7 KiB
Markdown
# Spec 13: Self-verifying parallel Shadow Block Producer
|
|
|
|
Date: 2026-07-19. Chain 2800 (Aere Network mainnet), head ~10,364,611 at build time.
|
|
|
|
## What was built
|
|
|
|
A live compliance monitor under `aerenew/shadow-producer/` that re-derives each
|
|
canonical chain-2800 block independently and raises a DIVERGENCE ALARM on any
|
|
mismatch. It never produces the canonical chain (read-only monitor).
|
|
|
|
Files:
|
|
- `aerenew/shadow-producer/shadow-producer.mjs` - the runner (real, runnable).
|
|
- `aerenew/shadow-producer/blockstm-adapter.mjs` - Phase C [MEASURE] scaffold seam
|
|
to the Block-STM parallel executor.
|
|
- `aerenew/shadow-producer/README.md` - overview + honest scope + run instructions.
|
|
- `aerenew/shadow-producer/package.json` - type:module, scripts, no deps (ethers
|
|
resolved from repo installs via ../conformance/lib.mjs, same as the conformance suite).
|
|
- `aerenew/shadow-producer/logs/` - captured live run logs (monitor, selftest, reexec).
|
|
- `aerenew/docs/AERE-SHADOW-PRODUCER.md` - architecture + honest-status design doc.
|
|
|
|
## Phases
|
|
|
|
- Phase A [FRESH, RUNS LIVE]: recompute QBFT block hash from header fields, assert ==
|
|
canonical blockHash; recover committed seals to quorum against the validator set
|
|
AS OF THAT BLOCK (set grew N=3 -> N=7 over history; per-block set is the honest check).
|
|
- Phase B [FRESH, RUNS LIVE]: for a post-EIP-2935 empty block the only state delta is
|
|
one history-ring SSTORE, history[(n-1) % 8191] = blockhash(n-1); re-derive and assert.
|
|
Verifiable for recent blocks (ring holds last 8191; public RPC non-archival).
|
|
- Phase C [MEASURE, SCAFFOLD]: full parallel re-execution of the block's txs through the
|
|
Block-STM executor -> full world-state root, diff vs canonical stateRoot. Needs a
|
|
full-state node + forked-Besu parallel EVM; adapter emits an inspectable plan + the
|
|
exact command. Faithful backend = aerenew/parallel/ (253 real blocks re-imported, 0
|
|
mismatch), NOT the toy Rust executor (which proves concurrency correctness only).
|
|
|
|
## REAL run result (FRESH)
|
|
|
|
`node shadow-producer.mjs` against https://rpc.aere.network, chain 2800:
|
|
- 29 blocks Phase A: block hash re-derived byte-for-byte at EVERY block, spanning the
|
|
whole chain incl. EIP-2935 activation (9,189,161) and base-fee floor fork (10,141,734);
|
|
per-block seal quorum verified (2/3 early N=3, 5/7 current N=7).
|
|
- 17 EIP-2935 empty-block state-delta re-derivations verified (Phase B).
|
|
- 75 total re-derivation assertions, 0 divergences, exit 0.
|
|
- Non-vacuity self-test (`--selftest`): genuine block re-derives (PASS); one-byte
|
|
stateRoot tamper is CAUGHT (PASS). Proves the alarm is not a rubber stamp.
|
|
- Phase C (`--reexec`): emits [MEASURE] re-execution plans honestly (no fabricated root).
|
|
|
|
## Flags / honesty
|
|
|
|
- Parallel execution is NOT live on L1; canonical chain is sequential Besu. Stated
|
|
everywhere.
|
|
- Monitor never produces the canonical chain; a bug in it cannot affect consensus
|
|
(writes nothing consensus reads). Zero-risk on-ramp reasoning documented.
|
|
- Consensus stays classical secp256k1 ECDSA QBFT; not touched, not post-quantum.
|
|
- Full parallel re-execution against real world state = [MEASURE]; block-fetch +
|
|
hash/state-delta re-derivation = [FRESH] and actually ran.
|
|
- No em-dashes / no "--" in prose (only markdown rules, tables, ASCII diagram, CLI in
|
|
code fences). Brand "Aere Network"/"Aere" title case; ticker AERE uppercase.
|
|
- One correctness fix during build: initial seal check wrongly used the current N=7
|
|
quorum on historical blocks -> false alarms; fixed to per-block validator set. This
|
|
itself demonstrated the alarm firing, then passing cleanly once correct.
|
|
- Reused existing hashing/RLP/seal helpers from aerenew/conformance/lib.mjs (did not
|
|
reinvent). Wired to existing evidence (Block-STM, cross-client determinism, 253-block
|
|
re-import) rather than inventing new numbers.
|