Overview
Offrecord is the public anonymous Ring on Solana Privacy Rings, and the account people use it through.
What Offrecord is
A person connects the Solana wallet they already use and moves SOL, USDC or any SPL or Token-2022 asset off the record. From then on they hold, send and receive it with sender, recipient, asset and amount hidden.
The Ring is one program on the Solana Privacy Program. Balances are notes backed by the assets people already hold, addresses stay Solana addresses, and a transfer settles in one Solana transaction.
These docs use ten words, each with one meaning.
| Word | Meaning |
|---|---|
| account | a wallet's shielded keys in the Ring |
| off the record | held in the Ring |
| on the record | held in a public wallet |
| note | one piece of off-record balance |
| receipt | a link that opens one transfer |
| relayer | submits each transfer and is paid from it |
| the Ring | the public anonymous Ring Offrecord runs on Solana Privacy Rings |
| the empty seat | the Ring's auditor key, a public key with no private half |
| block list | the Solana addresses on the OFAC SDN list |
| exit fee | the share of a withdrawal the Ring keeps, in the asset withdrawn |
What a person does
| Action | What happens |
|---|---|
| Open your account | The wallet signs two messages. The account keys derive from the first in the browser, and the second enrolls them in the Ring. Nothing moves. |
| Go off the record | A deposit moves an asset from the public wallet into the Ring, where it becomes a note. |
| Send | The owner enters a Solana address, an asset and an amount, reads the quote and signs. The relayer submits the transfer. |
| Receive | The account scans the Ring with its viewing key and finds the notes paid to it. |
| Go back on the record | A withdrawal sends an asset to any public address. The exit fee is taken here. |
| Create receipt | The owner exports one transfer as a link. Whoever holds the link can verify that transfer in a browser. |
How a transfer works follows one send through every step and lists what the chain shows for each kind of transfer.
Where to start
- Open the appConnect a wallet, open your account and go off the record.
- How a transfer worksNotes, the two proofs, the relayer and what the chain ends up showing.
- The empty seatThe Ring’s auditor key, and how to recompute it yourself.
- The clean-funds proof and the block listThe two policy rules and the list every transfer proves against.
- Receipts and viewing keysOpening one transfer, or a whole history, for someone else.
- The relayerWho submits a transfer, how it is paid and what it sees.
- SDK quickstartInstall, open an account and move an asset, in order.
- SDK referenceEvery method, type, stage and error code.
- The Ring programAccounts, instructions, roles and ids.
- TokenOFFRECORD for a developer.
Developers get the same account the app uses, through @offrecord/sdk.
TypeScript
const account = await offrecord.open(wallet)
await account.send({ to, amount, mint })