-
-
Check a credit: paste a Verra serial, get the registry's own status as proven on Base Sepolia.
-
Pacajai REDD+ (VCS 981) is On Hold at Verra: refused for general use, CORSIA, Türkiye ETS and VCMI, with the on-chain proof.
-
Kariba REDD+ (VCS 902): registry withdrawal and over-issuance finding, recalled on-chain at 56.74%.
-
Satellite evidence: Sentinel-2 dry seasons 2023 vs 2025, detected canopy loss checked against Hansen GFC, model and output hashes.
-
Recall board: 8 Verra projects tracked on-chain, 1 recalled, 3 under watch, 4 clear.
-
Sandbox: purchase, delivery, recall and refund on a synthetic project with play money; every step is a real transaction.
-
Verify it yourself: recompute every hash and signature in the browser, without trusting Recourse.
-
Method: six layers from signed sources to applications, and published accuracy for each model.
Track alignment
Track 1 — Carbon Markets & Emissions Trading, with satellite monitoring from Track 4 (Climate Data & Monitoring). The track names the problem exactly: double counting and hard verification erode trust. Recourse makes a registry's own integrity decisions — holds, withdrawals, over-issuance findings — reach every holder, escrowed purchase and corporate claim on-chain, and enforces one tonne, one claim.
Inspiration
In the last 12 months, 1,725,010 tonnes of carbon credits were retired from projects that Verra itself had put On Hold or Withdrawn — 63% of them with no public beneficiary. 9.7 million such credits are still listed on exchanges today. Kariba REDD+, where Verra found 56.74% of credits issued in excess, was retired 87 more times after that finding. Pacajai REDD+, On Hold, was retired the day before we pulled the data. These are registry statuses, not findings of fraud; the problem is that nothing downstream finds out, and nobody's money is exposed to the risk.
What it does
- Reads the registry itself. A zkTLS proof of Verra's public API response (Reclaim attestor) is verified inside the contract, pinned byte-for-byte to the exact request — the chain sees "Pacajai: ON_HOLD" without trusting us.
- Adds independent evidence, governed. Two versioned AI oracles — a satellite forest-loss detector (Sentinel-2 vs Hansen GFC, pre-registered evaluation) and a registry-notice reader (open-weights model + deterministic evidence validator) — propose integrity events signed with input/model/output hashes by secp256k1 (EAS) and post-quantum ML-DSA-87. A proposal activates only with a reviewer's second attestation, after an undisputed 14-day window, or by arbiter decision.
- Refuses at the point of use. CreditGate answers per purpose — generic, CORSIA First Phase (vintage 2021–2026 + letter of authorization), Türkiye ETS offsets, VCMI claims — and fails closed on stale or unknown state.
- Moves the money. WarrantyEscrow pays sellers minus a holdback on a proven retirement; if a recall activates inside the warranty, the buyer is refunded automatically.
- One tonne, one claim. ClaimsLedger binds each claim to a proven retirement and its named beneficiary; later recalls impair claims instead of deleting them.
Named user: a buyer's compliance lead (corporate buyer, airline under CORSIA, Turkish installation under the ETS) who must decide "may I use this tonne for this claim?" — plus integrity reviewers, exchanges (SDK/MCP) and anyone verifying without trusting Recourse.
How we built it
Solidity on Base Sepolia (proof-of-stake L2): RegistryOracle (Reclaim zkTLS verifier), IntegrityRegistry (state machine with dispute window and bonded disputes), an EAS schema resolver for AI attestations, CreditGate, WarrantyEscrow (Circle USDC), ClaimsLedger, ProvenanceAnchor (Merkle roots of AI manifests, pre-registrations and the registry snapshot). 218 Foundry tests (unit, fuzz, invariants, fork tests against the live verifier and EAS). Python oracles with pre-registered, reproducible evaluations. TypeScript SDK, CLI and a read-only MCP server; an independent verifier that recomputes every hash and signature in the browser. Next.js app.
Proof (all on Base Sepolia, source-verified)
- Registry state for 8 Verra projects proven over live zkTLS; 8 real retirements proven.
- Kariba recalled at 56.74% after a reviewer countersign; two satellite alarms that Hansen data did not corroborate were disputed and rejected by the arbiter.
- Seven deliberate refusals executed on-chain (same tonnes in a second report, wrong beneficiary, double claim on an anonymous retirement, claim on an on-hold project, claim on a recalled project, CORSIA use without authorization, delivery from an on-hold project).
- A sandbox where anyone runs purchase → delivery → recall → refund on a synthetic project with play money, every step a real transaction.
Every address and transaction: PROOF.md in the repository. Judges' walkthrough: JUDGES.md.
Measured
- Notice reader: blind holdout F1 1.00 (4 events), evaluation split F1 0.99, 9 of 10 prompt-injection attacks resisted, ~0.01 Wh per document.
- Satellite detector: pooled F1 0.46 (AUC 0.97); Amazon areas F1 0.56–0.72; weak in miombo and peat — published, and the dispute window caught its false alarms.
- Footprint: training 5 Wh; an upper bound of 54 Wh per registry proof on-chain.
Challenges
Verra moved its registry to S&P Global in July 2026, so we rebuilt the data layer on the new public endpoints. Pinning zkTLS proofs by substring turned out to be spoofable (a second regex could inject a status), so the contract now requires the exact request bytes. Three security-review passes hardened the notice validator against stitched quotes and number fragments without changing a single verdict.
What's next
Gold Standard, Puro and CAD Trust v2 feeds; Article 6 corresponding-adjustment checks; a decentralised attestor quorum; on-chain post-quantum verification when EVM precompiles land; pilots with an exchange listing check and Türkiye ETS offset checks ahead of the 2028 compliance cycle.
Built With
- base-sepolia
- eip-712
- ethereum-attestation-service
- foundry
- gitlab-ci
- hansen-global-forest-change
- ml-dsa
- model-context-protocol
- next.js
- post-quantum-cryptography
- python
- rasterio
- react
- reclaim-protocol
- scikit-learn
- sentinel-2
- solidity
- stac
- typescript
- usdc
- vercel
- viem
- zktls
Log in or sign up for Devpost to join the conversation.