EIP-712 proof schema and reason taxonomy
Schema version: 2026-09-03.1
Backlog item: VERIFY-001
Status: frozen for local implementation and contract review
This specification does not authorize deployment, verifier-key use, settlement with real value, or a token action. It defines the signed proof contract that VERIFY-002 and CONTRACT-002 must implement and test.
Domain
Every proof uses the EIP-712 domain below. Chain ID and verifying contract are runtime values and are signed by EIP-712 domain separation; a proof from another chain or escrow must fail closed.
| Field | Value / type |
|---|---|
name | RaidzCampaignEscrow |
version | 1 |
chainId | uint256, positive |
verifyingContract | non-zero escrow address |
Primary types
Initial verification uses Verification; the retention recheck uses Retention. Both bind the same ordered fields:
uint256 campaignId
address creator
bytes32 deliverableHash
uint8 status
uint16 reasonCode
uint256 amount
uint256 nonce
uint256 observedAt
uint256 expiry
For Verification, amount is the exact gross creator reward from which the canonical 70/30 split is calculated. For Retention, it is the exact retained amount. observedAt is when the verifier observed the evidence, and expiry must be later than observedAt. The digest is single-use. The contract must still enforce current time, campaign state, creator, hash, amount, nonce, signer authorization, distinct 2-of-3 quorum and replay rules.
Status codes
| Code | Name | Proof kind | Settlement behavior |
|---|---|---|---|
| 1 | VERIFIED | Initial | Release the immediate portion and enter retention |
| 2 | REJECTED | Initial | Release the full reservation to unused campaign value |
| 3 | REVIEW_FLAG | Initial | Never settle; retain the obligation pending fresh evidence |
| 4 | RETENTION_VALID | Retention | Release retained value to the creator |
| 5 | RETENTION_INVALID | Retention | Return only retained value to the project |
Successful statuses (VERIFIED, RETENTION_VALID) require reason NONE. Every rejection, invalidation, or review flag requires a non-zero known reason.
Reason codes
| Range | Codes |
|---|---|
| 0 | NONE |
| 100–106 evidence | DELIVERABLE_NOT_FOUND, CREATOR_OWNERSHIP_MISMATCH, PUBLISHED_OUTSIDE_WINDOW, DELIVERABLE_HASH_MISMATCH, REQUIRED_DISCLOSURE_MISSING, CONTENT_CHANGED, CONTENT_DELETED |
| 200–202 policy | POLICY_METRIC_INFLATION, POLICY_PROHIBITED_CLAIM, POLICY_JURISDICTION_BLOCK |
| 300–301 integrity | DUPLICATE_SUBMISSION, FRAUD_SIGNAL |
| 400–402 exceptional review | SOURCE_UNAVAILABLE, AMBIGUOUS_EVIDENCE, MANUAL_REVIEW_REQUIRED |
The numeric registry in packages/domain/src/proof-schema.ts is canonical for local implementations. Codes are append-only within schema version 1; existing meanings must not be reassigned. Human explanations and private evidence remain offchain, while the signed reason code makes the economic decision attributable without publishing personal scoring data.

ATTENTION, WITH PROOF.