How this PoC serves a carbon MRV use case
From project report → commitment → verifier attestation → registry. Raw emissions data stays offchain; only the fingerprint and signed attestation are shared.
A carbon project prepares an emissions summary (period, methodology, tCO₂e). Raw data stays private.
Project reports
Summary → hash
Commitment
Verifier reviews
Signed attestation
Registry
~30s loop · Project → commitment → verifier → attestation → registry
Carbon MRV Proof of Concept
A minimal proof of concept for Carbon MRV (Measurement, Reporting, Verification) that demonstrates:
- Dataset commitments — canonical hash of reported data for audit trail
- Verifier attestations — signed statement that a dataset was verified (PoC: HMAC; production: EIP-712 or similar)
- Registry — append-only list of attestations (PoC: file-based; production: onchain or verified API)
The design is assessed against CROPS and the walkaway test (user-side exit). See Design philosophy for how those properties map to this design — not as a claim that the PoC fully satisfies them in production.
This repo follows the EPIC Use Case Template for govtech domain use cases.
Quick start
npm install
npm run demo
The demo will:
- Create a dataset commitment (hash of a small emissions summary)
- Create a verifier attestation and sign it
- Append the attestation to the local registry
- Confirm the registry has one entry
Commands
| Command | Description |
|---|---|
npm run demo | Run full flow: commitment → attestation → registry |
npm run build | Compile TypeScript to dist/ |
npm test | Run tests |
npm run spec:view | Print the specification document |
CLI (after npm run build or with npx tsx)
# Create a dataset commitment
npx tsx src/cli.ts commit "emissions-2024-Q1" '{"period":"2024-Q1","tCO2e":1200,"methodology":"GHG Protocol"}'
# List attestations (optionally filter by project or outcome)
npx tsx src/cli.ts list
npx tsx src/cli.ts list --project proj-001 --outcome verified
# Verify an attestation's signature (paste JSON)
npx tsx src/cli.ts verify '<attestation-json>'
Architecture
flowchart LR
subgraph Offchain
Prover[Prover / Project]
Data[Dataset Summary]
Verifier[Verifier]
Prover --> Data
Data --> Verifier
end
subgraph PoC Registry
Commit[Commitment Hash]
Attest[Attestation]
Registry[(Registry)]
Data --> Commit
Verifier --> Attest
Commit --> Attest
Attest --> Registry
end
subgraph Future
Chain[Ethereum / L2]
Registry -.->|anchor| Chain
end
- Prover (project or operator): Produces a dataset summary (what was measured, period, methodology). The summary is hashed to form a commitment; the raw data stays offchain. See User guide for personas and step-by-step flows.
- Verifier (accredited body): Reviews the data and creates an attestation (verified/rejected) bound to the commitment. The attestation is signed (PoC: HMAC; production: EIP-712 or similar). No central authority is required to verify attestations.
- Registry: Stores attestations (PoC: local JSON file; production: onchain or verified API). Multiple registries can coexist; the protocol is open. Optionally anchors a commitment or attestation root onchain for cross-registry reconciliation.
Repository structure
carbon-mrv-poc/
├── README.md # This file
├── spec/
│ └── README.md # Formal specification (zkspecs-style)
├── docs/
│ ├── problem-and-research.md
│ ├── value-proposition.md
│ ├── requirements.md
│ ├── architecture.md
│ └── user-guide.md
├── src/
│ ├── index.ts # Public API
│ ├── types.ts # Attestation, commitment, registry types
│ ├── commitment.ts # Dataset commitment (hash)
│ ├── attestation.ts # Attestation create/verify
│ ├── registry.ts # File-based registry
│ └── cli.ts # CLI entry
└── package.json
Documentation
| Document | Description |
|---|---|
| Problem & research | Problem space (in depth), parties affected, existing solutions and limitations |
| Value proposition | Why Ethereum / verifiable data fits Carbon MRV; solution required; CROPS alignment |
| Design philosophy | CROPS (Censorship Resistance, Open Source and Free, Privacy, Security); walkaway test |
| Requirements | Functional and non-functional requirements |
| Architecture | Components and data flow |
| User guide | Personas, parties, step-by-step user flows, running the demo |
| Specification | Formal spec (COSS/zkspecs-style) |
| Security | Threat model, trust assumptions, security considerations and limitations |
Call to action
- Feedback and spec review: Registries, verifiers, or programs interested in commenting on the open spec (not EPIC-endorsed deployment) — open an issue with label
pilot-interestor contact the maintainers. - Spec feedback: Open an issue or PR on the spec.
- Code: See CONTRIBUTING.md.
Potential features (out of scope for this PoC)
- Multi-registry reconciliation and double-counting checks
- IoT/sensor data pipeline integration with signed commitments
- Privacy-preserving aggregation for project-level reporting
- Onchain anchoring (commitment or attestation root) to Ethereum or L2
- Alignment with voluntary and compliance carbon standards (e.g. Article 6)
License
MIT
References
- UNFCCC MRV
- World Bank: MRV of carbon credits
- EPIC Use Case Template — template this PoC follows