Private balances for Solana
Your balance is nobody’s business.
Nocta gives any Solana wallet a private balance. Hold, send and get paid in USDC without your amounts, balance or counterparties landing on a public explorer.
Private transfer
Confirmed · slot 455,210,394
- To
- Mira · design retainer
- Amount
- 2,400.00 USDC
- From
- Your private balance
- Memo
- October, invoice #31
Decrypted locally with your viewing key.
01 · Wallet
A private balance in your browser
Shield USDC, pay anyone and prove what you hold. Your keys stay in your wallet, and nobody at Nocta can move your funds.
Launch app02 · Program
One open Solana program
A vault, a Merkle tree of commitments and a nullifier set. Built reproducibly, so the bytecode on chain matches the public repo.
How it's secured03 · SDK
Private payments in your product
A TypeScript SDK for wallets, payroll tools and agents. Proofs are generated client-side in WebAssembly, never on a server.
Developer docsThe problem
Solana is fast, cheap and completely see-through.
Paste a wallet into any explorer and you get its whole financial life: salary, rent, suppliers, savings and everyone it pays. Nocta keeps settlement on Solana and takes the details off the page.
A normal USDC transfer, as anyone sees it
6,200.00 USDC
7Hx2…kP4q 9aBq…Qe1L
2,150.00 USDC
4mNe…Zr8s Gt7w…2pXa
18,940.00 USDC
Cq3V…uM9d 8kLr…Hn2T
1,275.00 USDC
Rz9k…3wYb 5pFd…aQ7m
400.00 USDC
2xWe…Lk6h Jm4s…Vc1r
0.42 USDC
Bv8n…Tq5e 6yHu…Pd3k
125,000.00 USDC
Ns5g…Ej2w 3cKa…Wm8z
The same payments through Nocta
commitment 3fa9e1…c07b
commitment b81d44…9a2e
commitment 0e7c3a…f415
commitment d2a690…13cc
commitment 5c11fe…7b80
commitment 91e0b7…e6d2
commitment a47f2c…08f9
Live demo · runs in your browser
Use it, then look at what the chain saw.
Every action below builds real SHA-256 commitments, a Merkle root and nullifiers, exactly like the on-chain program. Keep an eye on the right-hand side: that's all an explorer ever gets.
Move USDC from your wallet into the vault.
Deposits are public: the chain sees your wallet put money in. Everything after this step is not.
What you see
Only youPrivate balance
0USDC
Public wallet: 0 USDC
Your notes
- None yet.
Activity
- Nothing yet.
What the explorer sees
AnyoneMerkle root
00000000
Leaves · nullifiers
0 · 0
Nothing on chain yet. Shield some USDC to create the first public record.
Where the secret lives
The proof is built on your device.
Not on ours.
Some privacy tools send your transaction to a server or a committee that sees everything before hiding it. That server becomes the thing to hack. Nocta builds every proof locally, so there is no central place your history can leak from.
- 01
Your device
Knows the amount, recipient and your balance
secret stays here - 02
Proof
A few hundred bytes that reveal none of it
- 03
Relayer
Pays the SOL fee and submits. Learns nothing.
- 04
Solana
Checks the proof, records hashes, settles
Server-side proving
A service sees your payment, then hides it.
Convenient, until that service is breached, subpoenaed or simply logs too much. Then every user’s past is exposed at once.
Nocta · client-side proving
Only your device ever sees the numbers.
A 2-in, 2-out transfer proves in about a second in the browser. If one phone is compromised, one person is affected. There is no honeypot.
Who it's for
For money that has a person behind it.
Stablecoins made onchain dollars useful. The missing piece was discretion, for the people, teams and software that actually move them.
Salaries
Pay a team in USDC without publishing a spreadsheet of who earns what.
Freelance income
Bill every client in stablecoins. None of them can look up what the others pay you.
Company treasury
Pay vendors and move reserves without broadcasting your burn rate to competitors.
AI agents
Give an agent a spending budget it can use per request, without exposing the wallet behind it.
Everyday money
Save, split rent and send to family without strangers tracking your net worth.
Creators and tips
Accept support from your audience without turning your income into a public leaderboard.
Payroll
Payday, without the public spreadsheet.
Drop in a list of people and amounts. Nocta pays each of them from your private treasury through the relayer, so neither the salaries nor the company wallet show up on chain.
- Upload a CSV
- name, Nocta address, amount
- Preview the public view
- No names, no amounts
- Run it
- ~1 second per person
November payroll
5 people · USDC
- AB
Ayo Bakare
nocta1ay0q…zn8g
6,200
Queued - MT
Mei Tanaka
nocta1me7t…5za9
5,400
Queued - LO
Lucía Ortega
nocta1lu5c…7k4d
4,850
Queued - SW
Sam Whitfield
nocta1s4mw…5e2n
4,100
Queued - PR
Priya Raman
nocta1pr7y…2c9h
3,600
Queued
Agents
Give your agent a budget, not your treasury.
Agents that pay per request leave a trail that maps your whole stack: which APIs you use, how often, and how much is in the wallet funding them. Nocta lets them pay from a capped private balance instead.
- Per-call payments over x402, paid from a private balance
- Daily and per-request caps enforced before a proof is built
- The wallet that funds the agent never appears on chain
- An MCP server so any model can pay, inside your limits
For developers
Private payments in three calls.
The SDK gives any wallet, app or agent private balances, private transfers and balance proofs. It works with the Solana wallet adapter you already use.
import { Nocta } from "@nocta/sdk";const nocta = await Nocta.connect({ connection, wallet });// Wallet -> private balance. The deposit is public, the rest isn't.await nocta.shield({ mint: USDC, amount: 250_000_000n });// Proof is built on this device, then handed to the relayer.const { signature } = await nocta.send({ to: "nocta1m7qz4x0d8kfr2c5h9wn3tj6y…", amount: 120_000_000n,});Trust the code,
not us.
Read the program designNo one can take the money
The vault program has no admin withdrawal path. Funds move only with a valid proof from the note's owner.
Seven days to leave
Any upgrade to the program is queued on chain for a week before it can run. If you don't like it, withdraw first.
Built in the open
Program, circuits, app and SDK are public. Verified builds let anyone match the deployed bytecode to the source.
FAQ
Fair questions.
What exactly is public?
Deposits and withdrawals: the wallet, the amount and the time, because tokens cross the vault boundary. Transfers inside Nocta reveal only that a valid transfer happened: two nullifiers, two new commitments and a proof.
Is this a mixer?
No. Nocta is a private balance for everyday payments, with no pooled timing games. You can export a viewing key or a scoped proof for an accountant, auditor or regulator whenever you need to show your history.
Who pays the SOL network fee?
The relayer signs and pays for every private transfer so your wallet never appears. It takes a small fee in the same token from the transfer itself.
Which tokens are supported?
USDC and USDT first, then other SPL and Token-2022 stablecoins. Each token has its own pool so amounts can't be mixed across assets.
What happens if Nocta disappears?
Your notes live on chain and your keys live with you. The open-source app can be run locally to withdraw, with no server involved.
Is it live?
Nocta is on devnet. The demo on this page runs entirely in your browser: commitments, Merkle roots and nullifiers are real SHA-256, while the zero-knowledge proof itself is simulated.
Your next payment doesn’t need an audience.
Shield some devnet USDC and send a private transfer. It takes about a minute.