What the vault is
A contract that holds NFTs. Each NFT that goes in gets a box: a token of its own whose holder is encrypted, like the game's boxes. The NFT stays inside until the box's holder takes it out, sells it on Seaport, or sells the box privately.
The vault accepts the collections its owner allows. On the test network that is a free test collection anyone can mint.
Sealing an NFT
Sealing is one transaction: the NFT moves into the vault and a box is made for it, held by you. It is public, since it is a plain NFT transfer: anyone sees who sealed which NFT. What happens to the box afterwards is not.
Until the box moves, its depositor is its obvious holder. The doubt comes with a transfer: as soon as boxes change hands, nobody can tell who holds which.
To find your boxes again, the page reads your own receipts and decrypts, for you alone, which ones really reached you. One signature.
The box's key
Each box has a key: a 256-bit secret, stored encrypted, that nobody can read, you included. The vault only ever compares it. Anything that leaves the vault (the NFT, a listing, the ETH of a sale) is asked with the key, never with your address.
You never type the key. Your wallet signs one fixed message, free, and the page derives each box's key from that signature: the same wallet makes the same keys on any device. Sign that message only on DO NOT OPEN: whoever gets the signature can take your NFTs out.
A key is never sent as is: it is mixed with the exact terms of the request (the box, the action, the address, the price, the end date, and a counter). Change one term, or send the same request again later, and the key no longer matches: the request is refused.
A box that changes hands gets a random key, so its previous holder can do nothing more with it. Its new holder makes the key theirs with one transaction ("Make the key mine"). Anyone may try, but it only takes effect for the holder, and from the outside both look the same.
Asking for something
Taking an NFT out, listing it, taking a listing down and collecting a sale's ETH all go the same way, in two steps. A request on-chain: the vault checks the key under encryption. Then a proof from Zama's key management service that the key matched, which anyone can bring back.
The request settles one of three ways: done; refused, when the key did not match (nothing happens, nothing reverts, so a stranger learns nothing); or missed, when the box changed in between (sold on Seaport meanwhile, say).
While a request waits for its proof the box is busy: it cannot move or take another request. That usually takes a few seconds.
At the sealed vault. The relayer carries your request, the key is checked blind, and the NFT goes where you said. Your address appears nowhere.
- Ciphertext
- Transaction
- Value with proof
- Clear value
Selling on Seaport
A listing is a real Seaport 1.5 order, OpenSea's protocol, whose seller is the vault itself: your address appears nowhere. The vault validates the order on-chain, so it signs nothing, and only the orders it validated can sell its NFTs.
Any Seaport marketplace can fill it. The buyer pays in ETH and gets the NFT straight away. Buyers see the NFT, the price and the end date, like any listing.
The ETH waits in the box for whoever holds the key, minus the vault's fee (2.5%, never more than 10%). You collect it to any address. A listing lasts up to 180 days; one that ran out without a buyer goes back to sealed.
Private sales
Offer a box to one buyer, for a price in cUSDC (a confidential dollar) that only the two of you can read. The buyer reads it in the page, then pays and takes the box in one transaction.
Everything settles under encryption: if the price arrived and the seller still held the box, the box moves with a key that is the buyer's, and the seller is paid; otherwise nothing moves and the buyer gets their cUSDC back. To everyone else, a sale that went through and one that did not look the same.
Anyone may offer any box, so an offer proves nothing about who holds it. The seller can cancel an open offer; only the named buyer can accept it, once.
Giving a box
Send a box to any address. It only moves if you hold it, and it arrives without a key: the receiver finds it in their receipts and makes the key theirs. Until then nobody can take anything out of it.
The relayer
A request sent from your wallet shows your address. So the site's API can send your requests and their proofs from its own wallet, and pay the gas: then your address appears in no transaction.
It learns nothing the chain does not show. The key reaches it encrypted for the vault and bound to the request's terms: it can neither read it, nor change a term, nor reuse it. It sees, like any web server, the IP a request comes from.
It can refuse, not cheat. It has limits a day and a minute; if it is down or says no, the page sends the request from your wallet, and tells you your address then shows.
What is public, what is not
Public
- Who sealed which NFT (the deposit is an NFT transfer)
- The NFT inside each box, its state, its listing
- Seaport listings and purchases, with the vault as the seller
- The address an NFT or a sale's ETH goes out to, and the amount
- That a request was made, on which box, for what, and whether it was done, refused or missed
- The two addresses of a transfer or a private sale
Never public
- Who holds a box
- The box's key
- A private sale's price, and whether it went through
- Whether a transfer moved anything
- Who asked for a listing, a withdrawal or a payout, when the relayer sends it
In practice: take things out to an address with no history, let the relayer send your requests, and know that timing can still give hints (a "Make the key mine" right after a transfer to the same address, say).
On the test network
The vault runs on Sepolia, Ethereum's test network, with the real Seaport 1.5. Its fee is 2.5%. The test collection is free to mint from the vault's page; nothing here is worth money.
- The sealed vault0x8B07…fb18
- The free test collection0xf72E…6f9b
- Seaport 1.50x0000…14dC
Further reading
- About DO NOT OPENThe idea, the encryption, who you trust.
- The design notesEvery flow, every check, every leak, for developers.
- The contractSealedVault.sol, open source.