Evidence Pipeline (PoV)
Purpose. Show, step-by-step, how raw meter data becomes on-chain proofs and energy assets under Proof of Verification—with gas-only proof mints on Base (L2) and EDM-settled actions (fees/burn) anchored to Ethereum (L1).
Capture & Canonicalize (off-chain)
Source: AMI/SCADA smart meters (or operator exports) produce a strict JSON describing a batch: device, window, quantity, method.
Canonical form: sorted keys, minified, fixed units (Wh).
Hash:
evidenceHash = SHA-256(utf8(canonical_json)).Signatures: device/operator signs the payload (or the file that produced it).
Why: canonicalization blocks “pretty-print” hash tricks; the same reality always hashes to the same bytes.
Attest (on-chain attestations)
Independent roles attest to the same evidenceHash via EAS-style records:
MeterReadingBatch.v1— (batchId, deviceId, startTs, endTs, quantityWh, evidenceHash,…).Verification.v1— role-tagged PASS/FAIL over that identical evidenceHash (e.g., AUDITOR required).(Optional)
validUntil TTLfor time-boxed verifications.
Quorum (v0.1 default): ≥2 verifications, ≥1 AUDITOR, ≥2 distinct roles.
Gate & Exclusivity (assertVerified)
The asset contract calls PoV Gate with the batch params and verification UIDs. The Gate:
Computes route-agnostic
claimId = keccak256(deviceId,startTs,endTs,quantityWh,evidenceHash).Reserves the claim in the One-Claim Ledger (atomic lock).
Validates schema/equality (all attestations reference the same evidenceHash & window).
Checks quorum (roles enabled, counts unrevoked, TTL valid; AUDITOR present).
Emits
PoVPassedand finalizes theclaimin One-Claim (uniqueness guaranteed).
Fail-safe: any mismatch ⇒ revert (QUORUM_NOT_MET, EVIDENCE_HASH_MISMATCH, ALREADY_CLAIMED, etc.). No gate pass, no mint/settle.
Mint Proofs (Base, gas-only)
On PoV pass, proofs mint on Base at gas cost only:
ETT (proof, non-transferable): 1 ETT = 10 kWh verified. Stores
claimId + attestation refs.Energy NFT (1 MWh): when an account holds 100 ETT (policy-valid grouping), mint a 1 MWh certificate.
Carbon Credit NFTs: carbon projects mint directly per verified tCO₂ (with project/method metadata).
EMT (milestone proof): non-transferable proofs for on board / cleared / delivered / assay.
CLE is minted separately per verified MWh as a supplier reward; it is not converted from ETT.
Settle & Anchor (EDM, fees, burn)
When value moves, it settles in $EDM; proof creation remains free (gas-only).
Energy & Carbon trades/retirements: 4% total (2% buyer + 2% seller).
Commodity payout releases: 0.5% per milestone (caps: $5k ≤$1M, $12.5k $1–5M, $25k >$5M).
Split: 50% of every fee is burned on-chain; 50% goes to treasury (rebates may reduce treasury half only).
Anchoring: final lineage (evidence → attestations → proof → settlement/retirement) is anchored to Ethereum (L1) for auditability.
No auto-swap: if the payer lacks EDM, settlement reverts. Proofs remain unaffected.
Developer notes (quick glue)
Call the Gate in the same tx that mints/settles.
Use the route-agnostic claimId above; do not embed route codes.
Proof mints/conversions: call after PoVPassed (gas-only on Base).
Settlement: invoke Fee Router; it enforces route fees and 50% burn.
TypeScript (claimId helper):
import { solidityPackedKeccak256 } from "ethers";
const claimId = solidityPackedKeccak256(
["bytes32","uint64","uint64","uint128","bytes32"],
[deviceId, startTs, endTs, quantityWh, evidenceHash]
);Bottom line: this pipeline turns meter data into admissible, unique, and auditable energy assets—cheap to prove, strict to settle.
Last updated
