PoV Core: Attestors, One-Claim & Claim IDs

Summary: Proof of Verification (PoV) is an application-layer standard on Ethereum/Base. It gates mints/settlements by requiring a governed attestor quorum on the same evidence and enforcing route-agnostic One-Claim exclusivity. It is not base-layer consensus.

What this page covers

  • Roles & quorum policy (attestors and the default QuorumSpec)

  • Canonical evidence → evidenceHash (why and how to hash)

  • EAS schemas you reference in proofs: MeterReadingBatch.v1, Verification.v1

  • Route-agnostic claimId and the One-Claim exclusivity rule

  • The invariants PoV requires on every mint/settle

Roles & quorum policy

Base roles (v0.1):

  • 1 = METER_OP (or Source Operator)

  • 2 = AUDITOR (independent verifier — mandatory)

  • 3 = OEM (device maker / device attestation)

  • 4 = GRID (TSO/DSO/market operator)

  • 5 = CUSTODIAN (asset/collateral)

  • 6 = INSPECTOR (lab/QA/assay)

  • 7 = PROGRAM (grant/issuer/authority)

Default QuorumSpec (v0.1): minTotal = 2, auditorRequired = true, minDistinctRoles = 2

Governance MAY tighten by product line (for example, require AUDITOR + GRID for compliance REC).

Canonical evidence → evidenceHash

Why canonicalize: the same reality must hash to the same bytes. Pretty-print tricks or field re-ordering must not change the digest you verify on-chain.

Canonical JSON rules (normative):

  • Sorted keys (ASCII ascending)

  • UTF-8 encoded

  • Minified (, : separators only)

  • Numeric fields are integers unless explicitly declared decimal strings

Minimal energy example:

Hash: evidenceHash = SHA-256(utf8(canonical_json))

EAS schemas (attestations you reference)

MeterReadingBatch.v1

Fields (revocable):

Verification.v1 (PoV unit attestation)

Fields (revocable):

Rule: counted verifications MUST reference the same evidenceHash and batch/window as the meter attestation.

Route-agnostic claimId

Purpose: prevent the same evidence from being consumed across routes/registries. If you need splits, create smaller batches and attest them independently

Definition:

  • Solidity

  • TypeScript

One-Claim exclusivity

Contract: One-Claim Ledger records the first (and only) successful consumer of a claimId.

API (conceptual):

  • reserve(claimId) → succeeds only if unclaimed; locks to msg.sender

  • finalize(claimId) → only reserver can finalize; emits Finalized

  • release(claimId) → only reserver can release before finalization

Atomicity: reserve → checks → finalize MUST occur inside the Gate in a single transaction; any revert rolls back the reservation

PoV invariants (MUST hold)

  1. Equality of evidence — all counted verifications reference the same evidenceHash and batch/window

  2. Quorum — at least minTotal, with ≥ 1 AUDITOR, and ≥ minDistinctRoles

  3. Exclusivity — a claimId can be finalized exactly once network-wide

  4. Revocability — if a counted verification is revoked/expired and quorum drops, dependent assets MUST be flagged/frozen/burned per policy until rectified

  5. Fail-safe — uncertainty means no mint/settle/access (revert

Conformance checklist (integrators)

  • Produce canonical JSON and compute evidenceHash

  • Publish MeterReadingBatch.v1 for the batch

  • Obtain ≥ minTotal Verification.v1 attestations (same evidenceHash; includes AUDITOR)

  • Compute route-agnostic claimId

  • Call the PoV Gate in the same transaction that mints/settles/accesses; Gate will reserve → validate → finalize in One-Claim

  • Store attestation UIDs and emitted events for audit (subgraph/indexer)

  • Subscribe to the PoV Feed and implement flag/rectify handlers in your asset contracts

Last updated