Companion to
verifier-architecture.md.
Five ADRs finalized 2026-05-05. Status column reflects implementation reality as of the 2026-10 public-site refresh.
| ADR | Decision | Status |
|---|---|---|
| ADR-001 | Backend language: Go | Accepted · implemented |
| ADR-002 | Primary anchor chain: Base (8453) | Accepted · Sepolia live; Base mainnet pending |
| ADR-003 | Cold storage: no Arweave/IPFS; digests on-chain only | Accepted · implemented (local/artifacts/ + future S3) |
| ADR-004 | User verification: fully local in-browser WASM | Accepted · roadmap (deposit spot-check page exists; WASM L3 pending) |
| ADR-005 | Multi-exchange: OKX prioritized after Binance MVP | Accepted · six adapters live (OKX / Binance / Gate / Bitget / Bybit / HTX) |
Date: 2026-05-05 · Status: Accepted
The verifier must reuse exchange-published proof tooling (notably Binance zkmerkle-proof-of-solvency and OKX zk-STARK CLI bindings), run concurrent on-chain sampling, and ship as a single CLI (por) operators can run locally.
Implement the verification backend and CLI in Go.
Date: 2026-05-05 · Status: Accepted (target) · Runtime today: Ethereum Sepolia only
Root digests (artifactBundleRoot, verificationBundleRoot) must be cheap enough for per-snapshot anchors and weekly heartbeats, while remaining publicly verifiable on an EVM explorer.
Primary production anchor chain = Base (OP Stack L2, chain id 8453). Testnet development and the first live deployments use Ethereum Sepolia (11155111).
| Network | Role | Contract | Notes |
|---|---|---|---|
| Ethereum Sepolia | Active testnet primary | See deployments.md |
UUPS proxy + impl v3 verified |
Base mainnet (8453) |
Intended production primary | Not deployed | Blocked on operator keys / Base RPC / funded deployer |
| Base Sepolia | Optional L2 testnet | Not deployed | May precede mainnet |
Until Base mainnet is deployed, CLI defaults (.env.example, docs/ledger-rpc-runbook.md) keep Sepolia as the operable anchor chain. Architecture text that says “Primary = Base” refers to the product target, not the currently live chain.
BASE_RPC_URL, PRIVATE_KEY / ANCHOR_SIGNER in operator env, verify on BaseScan/Sourcify, then update deployments.md and .env.example.Date: 2026-05-05 · Status: Accepted
Raw PoR artifacts (wallet zips, summaries, zk bundles) are large. Putting bulk bytes on-chain or on permanent public storage (Arweave / IPFS) adds cost and availability coupling without improving digest integrity.
artifacts/; target: S3 + Postgres metadata).artifacts/ (directory is gitignored). Archive index links may 404 for casual visitors; reproducibility requires a local artifacts/ tree or a future release mirror.Date: 2026-05-05 · Status: Accepted · partially delivered
User inclusion proofs must not require uploading private account trees to ardmere servers.
User inclusion verification is fully local (in-browser WASM / local CLI). The hosted site may guide the flow but must not receive the user zip contents.
verify/deposit/) is a related, lighter-weight public check—not a substitute for full WASM inclusion verify.Date: 2026-05-05 · Status: Accepted · expanded
Binance was the MVP evidence surface. Other CEXs differ in public API depth, login walls, and zk packaging.
After Binance MVP, prioritize OKX (full public artifact stack → Stage 1 reference), then broaden adapters.
| Exchange | Public depth (typical) | Notes |
|---|---|---|
| OKX | High | Often Stage 1 when wallet + ownership + global zk are public |
| Binance | Medium | Summary + wallet zip; ownership / global zk often stub |
| Gate.io / Bitget / Bybit | Low–medium | Scrape / browser capture common → Stage 0 acceptable when honest |
| HTX | Sample / login-gated | May remain on dated sample until public-data.zip is obtainable |
por exchanges is the canonical upstream map.UNVERIFIABLE.