Docs / 09

Sealing and privacy

Asking about someone is itself information. A wallet that looks into a deployer before a launch, a fund that checks a token, a holder who suspects their own project: each would rather nobody knew. FixMyBags is built so that the question stays yours.

Your browserthe plaintext filethe 256-bit keythe private link #k=pe:files in storageThe servercase id + file hashthe ciphertextno payer link keptplaintext only if openedThe chainyour USDG paymenta Merkle root per batchno target, no fileOpened(caseId) if opened
Who holds what after a sealed case. Only the left column can read the file.

No account

There is no sign-up, no login, no email, no profile. A case needs an address and a payment, and any wallet can pay: the server checks that the authorization is valid and funded, runs the case and settles the transfer. It does not record which wallet paid for which case. The USDG transfer itself is public on the chain, as every transfer is, so pay from a wallet you do not mind being seen paying the case vault.

The file is sealed in your browser

The server sends the file to your browser once, inside the response to your request, and keeps only its case id and SHA-256 hash. Your browser generates a random 256-bit key with the Web Crypto API, encrypts the file with AES-256-GCM, and uploads the ciphertext and its IV. The key goes into the private link after the # (the fragment, which browsers never send to a server) and into your browser's local storage. Without the key, the stored ciphertext is noise to us and to anyone else.

A sealed case-file envelope tied with string

The chain sees a root, not a file

Each file is reduced to one leaf, a hash of its case id, its file hash and whether it is sealed. Leaves from paid cases and from the Night Watch's public cases go into the same Merkle batch, and only the batch root is written on-chain. Nothing on-chain names a target, and because a batch holds many cases and goes out on a timer, an anchor does not line up with a payment. The root still proves the file existed, unchanged, at the time of its batch.

Opening a file is your choice

A sealed file stays sealed until you open it. Opening sends the plaintext back to the server, which recomputes the hash, checks it against the anchored leaf and publishes the file on the board; the clerk then records Opened(caseId) on the registry. Only someone holding the plaintext can open it, which in practice means whoever holds the key.

What the target can see

Nothing. The detectives only read public data through the RPC and Sourcify; they send no transaction to the target and nothing in their reads names you. The RPC provider sees the reads come from the server, not from you.

What runs where

  • The detectives and the server run on Vercel's serverless functions.
  • Chain reads go to Robinhood Chain's public RPC; source lookups to Sourcify.
  • Ciphertexts, public files and the anchor queue are kept in Vercel Blob.
  • The summary is written by a template on the server. When the protocol's Anthropic key has credit, a paid case's findings are sent to Anthropic's API to write it, with the target's address and no information about you.

The legal side of the same facts is in the privacy policy.