Money on Solana,
off the record.

Hold, send and receive SOL, USDC or any token with sender, recipient, asset and amount hidden. Nobody holds a key to read it.

The auditor’s seatEmpty for the life of the Ring.

Notes in the Ring
00,000
Assets held
00,000
Addresses on the block list
00,000
Block list synced
00,000

One transfer, on the record and off it

Paying someone from a Solana wallet shows them what you hold and everything you have done. Paying them inside the Ring shows them the payment.

On the record
Sender
7xKX…gAsU
Recipient
Fh3q…w9Lp
Asset
USDC
Amount
12,480.50
Read by
Anyone
Off the record
Sender
Recipient
Asset
Amount
Read by
The two people in it

The auditor’s seat is empty. Check it here.

A Ring fixes one auditor key when it is created, and every transfer is sealed to it. Offrecord’s key is the SHA-256 of a published sentence: a public key with no private half, for the life of the Ring.

How the key is fixed

“Offrecord seats no auditor. Nobody holds the key to this Ring.”

SHA-256, read as an X25519 public key, in this browser
0000000000000000000000000000000000000000000000000000000000000000
Auditor key on the Ring account
0000000000000000000000000000000000000000000000000000000000000000
Private half
None exists

Two proofs travel with every transfer

The block list is kept from the OFAC Specially Designated Nationals list.

The clean-funds proof
Owned and conservedChecked by Solana Privacy Program
The notes exist, are unspent, belong to a hidden signer, and value is conserved.
CleanChecked by the Ring
Sender and every recipient are absent from the block list, and the transfer is sealed as the Ring requires.
Read by an auditor
No one

A receipt opens one transfer

When an accountant or a counterparty needs to see a payment, hand them a link. It opens that transfer in their browser, without a wallet, and nothing else of your account.

Receipts and viewing keys
A transfer in the Ring Off the record
Sender
Recipient
Asset
Amount

The wallet, addresses and assets you already have

  • Go off the record

    Move SOL, USDC or any SPL or Token-2022 asset from your wallet into the Ring.

  • Send

    Pay a normal Solana address. A relayer submits the transfer and is paid from it, so you need no public SOL.

  • Receive

    Share the address you already have. Payments from other accounts arrive off the record.

  • Go back on the record

    Send an asset to any public address whenever you want it there.

The same account in your app

account.ts
import { createOffrecord } from '@offrecord/sdk'

const offrecord = createOffrecord({ apiUrl })
const account = await offrecord.open(wallet)
await account.send({ to, mint, amount })
SDK quickstart

Two signatures open your account. Nothing moves.