How it works
From receiptto tradeable claim,in ten stages.
Each stage in plain words, and what actually happens underneath.
- 01
Purchase
You buy something from a supported brand, as you always do.
Nothing on-chain yet. Zen never touches the payment.
- 02
Evidence
You scan the merchant's signed QR, or photograph a paper receipt.
Tier 1: a merchant-signed receipt (Ed25519 over every field, checked off-chain; simulated merchant in this demo). Tier 2: tesseract.js OCR in the browser, every field editable, so authenticity is not established.
- 03
Attestation
The attester checks the evidence and signs a claim.
For merchant receipts the attester first verifies the merchant signature, expiry and prior use. It then signs the EIP-712 digest with ECDSA. Keys never reach the browser.
- 04
Commitment
Your purchase becomes a fingerprint with no personal data.
claimId = EIP-712 hash of claimant, brand, merchant hash, salted receipt hash, amount, currency, time and deadline. A nullifier keyed on merchant and receipt makes it count once, for anyone.
- 05
Verification
The signature and the rules are checked on-chain.
ReceiptCommitmentRegistry calls the ECDSA attestation verifier, then EligibilityPolicy (brand, INR, amount, date) and RewardPolicy (rate, per-claim and daily caps, sponsor budget).
- 06
Conditional claim
Your reward is locked in a claim, not paid out yet.
RewardPool escrows the reward in mock tokenized equity and ConditionalClaim mints an ERC-721 with unlockAt = purchase time + the category's return window (5–10 min demo windows on testnet; 14–30 days in production). Stages 3 to 6 are one transaction.
- 07
Instant exit
Don't want to wait? Sell the locked claim now.
InstantExitPool.quote prices it: amount × (1 − refund probability × wallet risk) × (1 − time value to unlock) × (1 − LP fee). sellClaim pays you in the equity token and the pool becomes the holder.
- 08
Void
If the purchase is refunded before unlock, the claim dies.
A refund attester signs an EIP-712 RefundAttestation(claimId, refundRef, deadline); VoidOracle checks it, burns refundRef so one refund can't void two claims, and the escrow returns to the sponsor. If a pool holds the claim, that is the LP's loss.
- 09
Settle
After the window closes, the equity is released.
Anyone can call settle(id) once unlockAt has passed. The escrowed equity goes to whoever holds the claim: you, or the pool that bought it, which books the gain.
- 10
The market
LPs earn by pricing refund risk well.
LPs deposit equity into a brand's pool and earn the discount on claims that settle, minus losses on claims voided by refunds. Every quote, sale, void and settlement is on Monad.
Try it with a demo receipt. It takes under a minute, on Monad testnet.
Scan a receipt