> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.adid.dev/llms.txt.
> For full documentation content, see https://docs.adid.dev/llms-full.txt.

# ZKP Verification + On-Chain Anchoring

**Used in:** §3.3.4 Sharing & Anchoring Proofs, §11.6 ZKProofVerifier
**Audience:** Verifier, Holder, SC Developer
**IA ID:** D8

```mermaid
sequenceDiagram
  autonumber
  participant Verifier
  participant API
  participant ZKProofVerifier
  participant Holder
  participant Wallet

  Verifier->>API: POST /api/v1/zkp/verify (proof, proverDid)
  API->>API: Off-chain verification (pkg/zkp)
  API-->>Verifier: { verified: true, predicateHash }

  Note over Holder,ZKProofVerifier: Optional anchoring (one-time per proof)
  Holder->>Wallet: "Anchor proof on chain"
  Wallet->>ZKProofVerifier: submitProof(proofHash, proverDID, credentialId, predicateHash)
  ZKProofVerifier-->>Wallet: emit ProofSubmitted
  Verifier->>ZKProofVerifier: verifyProofOnChain(proofHash)
  ZKProofVerifier-->>Verifier: ProofRecord (submittedAt, verifiedAt, revoked)
```

**Reading guide:** Off-chain verify is the fast path (no gas). On-chain anchoring is opt-in and produces an immutable audit trail; revocation is restricted to the original submitter (`onlySubmitter` modifier in `ZKProofVerifier.sol:40`).

***