ZK Finality Gates, converting the 8 optimistic rollups

Coming soon. This feature is built and on the AERE roadmap, its on-chain contracts are not yet deployed. Actions are disabled until launch.

All eight optimistic rollups now have a companion AereL2ZKFinalityGate. Anyone holding a valid Groth16 proof of the batch's state transition can call submitProof() to mark a batch ZK-final, skipping the 7-day fraud window entirely. The same AereZKRollup8Verifier Groth16 verifier checks the proofs, public signals are bound to the batch's old/new state roots, so a proof for one batch can't be reused for another.

ZK validity-proof verifier

AereZKRollup8Verifier0xC6936869…B1Cf4548

A Groth16 verifier produced by snarkjs from the transfer8.circom circuit (depth-3 Poseidon Merkle tree, single transfer per batch). All 8 finality gates delegate proof-checking to this single verifier, so the trusted setup is shared.

8 finality gates · one per rollup

RollupChain IDOptimistic verifierZK finality gateZK-final batches
#1280010x3f9A9D9C…ef98039f1c0x2EF1eA2B…869f295AC,
#2280020x6012cf3F…C5ee604f0x140572e0…15678aFa7,
#3280030xF8958484…68d93A3420xdd41326D…0d6223cD8,
#4280040xb7F3354C…f2FfE3F0x3A097A45…30e473C2f1,
#5280050xCB1DDf3D…327007840x089d24ef…013AE94b19,
#6280060xb4b0eCe9…309e6F01Ec0xc0f18A56…b70A4C49,
#7280070x9C2957B1…EC70de8750x7D8ec9F2…b8c483E01,
#8280080x93C2a2D4…a4Ec05A0F460x760e246d…465dFf721,

How the conversion works

Optimistic rollup (status quo)            +     ZK Finality Gate (this layer)
────────────────────────────                    ───────────────────────────────
Sequencer posts batch:                          Anyone holding a valid Groth16 proof
  - blockRange, batchHash                       of the batch's state transition calls:
  - oldStateRoot, newStateRoot                    submitProof(batchId, sIdx, rIdx, amount,
Fraud window: 7 days                              pA, pB, pC)
   (anyone can challenge with a fault proof)    The gate fetches (oldRoot, newRoot) from the
                                                rollup verifier, builds the public signals,
                                                and asks AereZKRollup8Verifier to verify.
                                                On success: zkFinalAt[batchId] = block.timestamp.

Result:                                          Result:
  Batch is "soft-final" until day 7              Batch is HARD-final immediately, 
  (some apps may delay withdrawals)              instant settlement, no fraud window,
                                                 verified entirely on-chain.
    

The same gate template applies to all 8 rollups; we deployed all 8. Sequencers can be upgraded one at a time to start producing proofs alongside their batch posts. The optimistic path remains in place as a fallback so this is a safe, incremental conversion.