Carbon MRV PoC

Source on GitHub
This is a minimal reference implementation for learning and spec review. It is not production MRV infrastructure, not climate finance advice, and not an EF endorsement of any registry or verifier.

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:

  1. Create a dataset commitment (hash of a small emissions summary)
  2. Create a verifier attestation and sign it
  3. Append the attestation to the local registry
  4. Confirm the registry has one entry

Commands

CommandDescription
npm run demoRun full flow: commitment → attestation → registry
npm run buildCompile TypeScript to dist/
npm testRun tests
npm run spec:viewPrint 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

DocumentDescription
Problem & researchProblem space (in depth), parties affected, existing solutions and limitations
Value propositionWhy Ethereum / verifiable data fits Carbon MRV; solution required; CROPS alignment
Design philosophyCROPS (Censorship Resistance, Open Source and Free, Privacy, Security); walkaway test
RequirementsFunctional and non-functional requirements
ArchitectureComponents and data flow
User guidePersonas, parties, step-by-step user flows, running the demo
SpecificationFormal spec (COSS/zkspecs-style)
SecurityThreat 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-interest or 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

Use the sidebar to open each section: Problem & research, Value proposition, Requirements, Architecture, User guide, Design philosophy, Security, and Specification.