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

Sealed data.
Rented, never seen.

Your strangest data is worth something, and it never leaves its shell. Labs and agents rent it inside an attested enclave, and 70% of every query goes to the people whose plates it read.

I

The shell, drawn

A plate is one file and its type: a voice note, a dashcam ride, a dream journal. Each one is a cell of the armour. Renters can read the shape of the shell but not what any cell holds.

Seal from a phone.Sign in with Google or email. No wallet, and the protocol pays the gas.
In the clear
Sealed
One enclave, attested.An Intel TDX virtual machine. Its quote binds the running image to the key your browser seals to.
Query 4,812 example
AskedCommute minutes by weekday
Rowsride_0193.gps, ride_0611.gps
2.73USDG to uploaders
Receiptsigned by enclave 0
Every plate is ciphertext.Encrypted in your browser. Only the enclave holds the key to open it.
The crowd is the floor.No answer comes out of fewer than 25 plates.
402
Agents pay by the query.x402 in USDG, from the SDK or the MCP server. 0.01 USDG per 100 plates read.
70% goes back to the plates it read.Paid daily in USDG by merkle root, to the account made at sign-in.
II

Four steps

Each step fixes what goes on the public record and what stays sealed. The line in each row shows where the record stops.

Seal

Your browser encrypts the file to the enclave's attested key before it leaves the phone. Only its hash, type, size and owner go onchain.

On the record
Plate hash, type, size, owner
Sealed
The contents
Measured
HPKE X25519 + AES-GCM

Query

A renter asks for an aggregate or an evaluation. It runs inside the enclave and only the answer leaves, with a signed receipt.

On the record
Price, plates read, receipt
Sealed
Every row it read
Measured
k ≥ 25 plates

Canary

Each renter's view carries made-up rows that exist nowhere else. If one surfaces outside, its secret is the proof.

On the record
The revealed secret, the case
Sealed
The other canaries
Measured
48 h challenge

Payout

70% of every query goes to the uploaders whose plates it read, posted daily as a merkle root and claimed in USDG.

On the record
Each account's daily total
Sealed
Which query read which plate
Measured
1 root a day
III

A canary for every renter

The enclave mints made-up rows inside each renter's view: names, emails, phone numbers, URLs. Each carries a random secret that exists nowhere else, so anyone who knows one must have seen that row.

9c41 07e2 b8a0 5d13 e6f4 21c9 0a7b 3e58
f02d 6a91 c4e7 18b3 7d05 ae62 39cf 840b
view idcanary secret
leaf = keccak(view, secret)
slash if MerkleProof(leaf, root[view]) holds for 48 h

Every view has its own rows

The enclave commits a merkle root of a view's canaries onchain before the view answers its first query. Nobody else's view contains them.

A leak is a proof

Whoever finds a canary outside (a fetched URL, a mail to a canary address, a string in a published model) reveals its secret and the proof. The contract checks it.

The deposit goes to the uploaders

The renter has 48 hours to dispute. Otherwise its whole USDG deposit moves to the uploaders. An enclave canary slashes the operator's $POD bond instead.

A canary proves that a row left the enclave through one view. How cases and disputes run.

IV

Three things a data market does not usually do

Deleting a plate takes it out of the next payout and the next training. The model belongs to the people whose plates trained it, and the operator stakes its own token on the box it runs.

Delete means deleted

Remove a plate from the app or with one signed message. It leaves the next epoch's set and the next Armour training, and its ciphertext is dropped from the enclave disk.

On the record
The delete flag
Sealed
What the plate held

A model its uploaders own

The Armour is a LoRA adapter on Qwen2.5 0.5B Instruct, trained on CPU inside the enclave each week. Its weights never leave. Every call pays the uploaders whose plates trained it. It trains when the enclave is live.

On the record
0.002 USDG a call
Sealed
The weights

Operators bond behind the box

An enclave can hold plates only after its operator bonds 100,000 $POD. If an enclave canary surfaces, half the bond is burned and half goes to the uploaders. The operator earns 5% of query revenue.

On the record
Bond, image hash, quote hash
Sealed
The enclave canaries
V

Fixed in the contracts

These numbers are constants or timelocked parameters in the Meter, Enclaves and Canaries contracts. Changing a parameter waits 48 hours in public.

70%
to uploaders

of every query, pro-rata to the plates it read. 15% to the Armour, 15% to burn $POD.

25
plates

the least any aggregate may read. Fewer and the enclave refuses before it charges.

105
$POD per enclave

bonded by its operator, slashed by an enclave canary: half burned, half to uploaders.

48
hours

to dispute a canary case. After that anyone can finalize the slash.

An armour of plates, and nothing it lets out.

Six plate types on day one, voice notes and dashcam rides among them. You can seal one from your phone once the enclave runs. Agents can already call the query API for quotes.