# Spec 10: Aere Compute Market V3 (proof-carrying DePIN) ## Delivered 1. `aerenew/contracts/contracts/depin/AereComputeMarketV3.sol` (new; deployed V1/V2 untouched) 2. `aerenew/contracts/test/AereComputeMarketV3.test.js` (13 tests, all passing) 3. `aerenew/docs/AERE-COMPUTE-MARKET-V3.md` ## What it does Proof-carrying compute marketplace. Requester posts a job (specHash, reward escrow, deadline, verification mode); provider claims + runs off-chain; result acceptance depends on the mode: - REPLAY (0): deterministic recompute. Result bytes emitted; challenge window; dispute records the challenger's recomputed hash; arbiter resolves. - ZK_VERIFIED (1): SP1 proof verified on-chain via the deployed SP1 gateway (ISP1Verifier). publicValues bound to the job (abi.encode(specHash, resultHash), specHash must match). Paid in the SAME tx, only on a valid proof. No other pay path exists for a ZK job. - OPTIMISTIC (2): challenge window + provider bond. Successful dispute slashes provider bond to the challenger, refunds requester. PQC settlement path: any job can set pqcSettlement + an 897-byte Falcon-512 key. Final payout then requires a Falcon-512 signature (verified via live precompile 0x0AE1) over a digest binding (chainId, contract, jobId, provider, token, amount, resultHash). Fail-closed. This is payout authorization only; it does NOT make consensus post-quantum (documented). Settlement asset: native AERE (address(0)) or an allowlisted ERC-20 (governance-gated allowlist). Bonds always native AERE. No new token. ## Fail-closed / invariants (all tested) - Escrow solvency: totalLiabilities[token] = sum(open rewards + posted bonds); contract balance always >= liabilities per asset. isSolvent() view. Asserted after every mutating step in every test. - No double-pay: terminal statuses (Paid/Refunded/Slashed) reached once; nonReentrant; CEI ordering. - No pay-without-proof (ZK): settle inside submitResultZK after verifyProof (reverts on invalid). - No admin drain: no owner, no sweep. Arbiter only routes a DISPUTED job's escrow; governance only flips a token-allowlist bool. - Fee-on-transfer/rebasing reward tokens rejected at escrow (received must equal stated reward). ## Real test result `npx hardhat test test/AereComputeMarketV3.test.js` (from aerenew/contracts): 13 passing (~2s). Covers: ZK pay-on-valid + reject-invalid + wrong-spec rejection; OPTIMISTIC finalize + dispute-slash; REPLAY dispute (provider upheld) + off-chain re-run match; ERC-20 reward allowlist accept/reject; Falcon valid-accept + tampered-reject + wrong-amount-reject + sig-on-nonpqc-job reject; solvency across a mixed batch; deadline reclaim with bond slash. ## Grounding used - Built on AereComputeMarketV2 job/escrow model (depin/). - ZK: ISP1Verifier.sol + SP1VerifierGateway.sol; deployed gateway 0x9ca479C8c52C0EbB4599319a36a5a017BCC70628. - Falcon: input encoding + fail-closed raw-32-byte return pattern from AerePQCMessageVerifier.sol; test uses MockPQCPrecompile(1) @0x0AE1 and MockSp1Verifier (reverts on invalid), MockERC20Lending. ## Flags - [VERIFY] ZK path tested vs MockSp1Verifier (mirrors gateway revert-on-invalid); real gateway wired at deploy. - [VERIFY] Falcon path tested vs MockPQCPrecompile; real wire encoding KAT-proven elsewhere; 0x0AE1 live on 2800. - [MEASURE] Real GPU supply, off-chain provers, real SP1 proving are external (adoption, not code). - Not deployed; founder-gated.