Carbon markets run on trust — and that trust is breaking. The same tonne of CO₂e can be sold twice, credit histories vanish once they change hands, and weak projects earn credits with little scrutiny. Greenwashing scandals follow one after another. CarbonProof rebuilds the registry itself around cryptographic proof and AI due-diligence, so a credit's authenticity is verifiable by anyone, forever.
What it does
- One credit, one owner, provably final. A Solidity registry (CarbonCreditRegistry) gives every credit exactly one owner. Retiring a credit — claiming the offset — is permanent and irreversible: a retired credit can never be transferred or retired again. Double counting isn't discouraged, it's impossible.
- AI pre-issuance verification. Before issuance, a Google Gemini scorer rates each project's credibility 0–100 — methodology recognition, monitoring evidence, additionality, claimed tonnes vs. project type. Weak projects get flagged before they're minted, not after a scandal. A local heuristic fallback runs when no API key is set (and is labelled as such).
- Tamper-evident metadata. Project details live off-chain but their SHA-256 hash is anchored on-chain at issuance. The Verify page re-hashes the stored metadata and compares — a green "metadata intact" check or a red tamper warning.
- Provenance timeline. Issuance, every transfer, and retirement are reconstructed from on-chain events into a full history per credit.
- Public authenticity check. Enter a credit ID and get a straight answer: authentic or not, active or retired, who owns it, its full history.
- Live registry dashboard. Totals issued, retired, and active across six seeded projects (55,650 tCO₂e issued, 3,400 t retired), with the full credit table.
How we built it
A Hardhat project holds the CarbonCreditRegistry.sol contract plus a deploy script that seeds six realistic projects. An Express + TypeScript API signs transactions with demo accounts and serves enriched registry data. The React + TypeScript (Vite) frontend gives the dashboard, credit detail with provenance timeline, the AI-gated issue flow, and the public Verify page. For single-port judging, the API serves the built frontend at http://localhost:4100.
Challenges we ran into
- Designing the verifier role so issuance stays permissioned while transfers stay open.
- Reconstructing provenance from raw event logs into a readable timeline.
- Calibrating the AI scorer so vague claims fail and strong ones pass — prompt engineering plus the heuristic fallback.
- Making SHA-256 anchoring verifiable in the browser without exposing the contract to real funds.
Accomplishments that we're proud of
- A real on-chain registry where double counting is mathematically impossible, not just discouraged.
- An AI gatekeeper that scores projects before issuance, with an honest fallback when offline.
- A public Verify page that gives anyone a straight authentic-or-not answer.
- A complete local demo: chain → deploy & seed → API → frontend, all from the README.
What we learned
- How role-based access control and event sourcing work in practice on the EVM.
- That AI verification is only as good as the evidence you feed it — monitoring data and methodology references matter more than marketing copy.
- How to anchor off-chain metadata with hashes so anyone can verify integrity without trusting the server.
What's next for CarbonProof
- Deploy to Sepolia with MetaMask-signed transfers instead of demo accounts.
- Verifier staking/slashing and multi-verifier approval for large issuances.
- Evidence uploads (monitoring reports) hashed alongside metadata.
- Cross-checking serial numbers against real registry APIs (Verra / Gold Standard).
- Automatic NFT offset certificates at retirement.
Built With
- api
- ethers.js
- express.js
- gemini
- hardhat
- node.js
- react
- sha-256
- solidity
- typescript
- vite
Log in or sign up for Devpost to join the conversation.