Proof of Data
App
Open the app
Seal, rent, verify, waitlist.
Seal a plate
Encrypt a file in this browser to the enclave key.
402
Rent a query
Quote an aggregate and pay it over x402 in USDG.
Verify the enclave
Check a TDX quote against the onchain registry.
The Armour
The model its uploaders own. Trains when the enclave is live.
Join the waitlist
Uploads open in waves, in sign-up order.
Read
Protocol
Documentation
Dev log
X
Docs · How it works

Canaries and slashing

Every renter's view carries made-up rows that exist nowhere else. If one surfaces outside the enclave, its secret proves which view it came from.

Revealedsecret + proofOpen48 hDisputedarbiter decidesSlashedto uploadersDismissedunfrozen
A canary case. 48 hours to dispute, then anyone can finalize.

Canary rows

When a renter's view is created, the enclave mints twelve rows that look like real ones of each type: a name, an email at a trap domain, a phone number, a URL. Each row carries a random 32-byte secret, written into its email, URL and phone number.

The onchain proof

Before the view answers its first query, the enclave commits the merkle root of the view's canaries in Canaries.commitView. The leaf is keccak256(keccak256(abi.encode(viewId, secret))). Revealing a secret with its proof is checked by the contract and can only be done by someone who saw that row.

A case, step by step

  1. The keeper sweeps the trap endpoints every 10 minutes. A fetched URL or a mail to a canary address gives it the secret.
  2. Anyone calls reportRenter(viewId, secret, proof, evidenceHash). The renter's deposit is frozen.
  3. The renter has 48 hours to call dispute. A disputed case goes to the arbiter.
  4. Otherwise anyone calls finalize: the whole USDG deposit moves to the uploaders.

Enclave canaries

A second set of canaries is never shown to any renter; its root is fixed when the enclave registers. If one of those surfaces, the leak came from the enclave itself: reportEnclave opens the same 48 hour case, and finalizing it slashes the operator's 100,000 $POD bond, half burned and half to the uploaders.