Skip to content

How it works

From receiptto tradeable claim,in ten stages.

Each stage in plain words, and what actually happens underneath.

  1. 01

    Purchase

    You buy something from a supported brand, as you always do.

    Nothing on-chain yet. Zen never touches the payment.

  2. 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.

  3. 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.

  4. 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.

  5. 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).

  6. 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.

  7. 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.

  8. 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.

  9. 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. 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