01Styx v2
Styx v2 on devnet
Since 2026-10-07, styx.cash runs Styx v2 on Solana devnet: one private balance that pays any amount up to 10 SOL, to a Styx address, a payment request, a link or a Solana address. The chapters after this one describe v1.
What the app does today
- Your private balance opens by itself. Connecting asks for two signatures: one makes your keys, one unlocks the copy of your private balance kept encrypted in this browser. Neither sends a transaction, moves funds or costs anything. The balance then syncs in the background.
- Later, the app asks you to write down 24 words. Those words alone restore the private balance in another browser: no file is needed.
- Sends leave at once. Before each send the app counts the people who deposited since your own deposits. Below 20, it says in one line that the receiver could match this payment by its time, and sends it anyway. In quiet periods, a receiver who knows the amount and the minute could pair your payment with your deposit.
- Withdrawals to your own wallets keep their protection: to the wallet you connected, to a wallet you withdrew to before, or to a wallet that funded your deposits. The app warns when the amount would match a payment you received and offers a different amount. If few others withdrew since you were paid, or few people deposited since your deposits, it waits for them at most about 10 minutes after your click, then sends anyway: it could then be matched by its time.
- A payment link works like cash: whoever holds it can claim it, with no wallet. The sender can see when it is claimed, and takes it back if it expires unclaimed.
- A payment request lets someone pay into your private balance, the amount set by you or chosen by the payer.
- v1 notes of 0.1, 1 or 10 SOL that you already hold count in your balance and move into v2 when a send needs them.
- Deposits go one at a time: several deposits at once from one wallet would show the amount. A wallet that deposited less than an hour ago waits, and a top-up that needs several deposit sizes makes one now and the next ones 1 to 6 hours apart. A send that one deposit covers leaves after that one deposit.
Figures, set or measured on devnet
- Deposit sizes
- 0.005 to 5 SOL
- Ten sizes: 0.005, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2 and 5 SOL. Each deposit is public: its size, its time and the wallet that paid it. Pool settings, devnet, 2026-10-04.
- Deposit fee
- 1 %
- Of each deposit, to the Styx treasury, plus the Solana fee of the deposit (0.000005 SOL) and 0.000000469 SOL to the pool’s fee pot. Pool settings, devnet, 2026-10-04.
- Payment fee
- 0.00065 SOL
- Per payment or withdrawal, from your private balance. Our relayer pays the Solana fees of the transactions behind it: 60.7 per payment on average over 30 payments (devnet, 2026-10-05).
- Limits
- 10 SOL
- At most per payment. A withdrawal to a Solana address starts at 0.0016 SOL and moves on a 0.0001 SOL grid.
- A fresh deposit
- about 3 min
- Before it can be spent: the pool’s next checkpoint must include it. One checkpoint every 750 slots, 179 s at the devnet slot time measured on 2026-10-05 (238.4 ms).
- Click to landing
- 20.0 s
- Median of 30 payments from a funded balance through our hosted worker, p90 33.0 s (devnet, 2026-10-06, before the private route was on). One payment through the private route: 32.5 s (2026-10-07). Two payouts to fresh Solana addresses: 23.3 s and 24.4 s (2026-10-07). From an empty private balance, one deposit included: 134 s for one payment, which left 108 s after the click, once a checkpoint held its deposit (2026-10-07).
Programs on devnet
- Pool program (zk_shielded):
GbVM5yvetrSD194Hnn1BXnR56F8ZWNKnij7DoVP9j27c. Upgraded for v2 on 2026-10-04, last upgraded on 2026-10-06. It still holds the v1 pools. - Proof verifier (p01_stark_verifier_v2):
DpqfTShwGBKQVe21EDHpg6rxkWsMYVVmbMUuK33nnAJN. Deployed on 2026-10-04, last upgraded on 2026-10-06.
How it is built
- Proofs: hash-based STARKs, with no trusted setup. Your browser computes each proof; the verifier program checks it in full on chain, over the transactions our relayer submits. No committee and no hardware enclave is involved.
- The hash is Poseidon2 with a four-element fingerprint, and the verifier draws its challenges from a cubic extension field: the design answer to v1’s findings F2 and F52. Not externally audited.
- A payment to a Styx address: the receiver’s note is sealed with post-quantum encryption, ML-KEM-768, combined with X25519. Every record on chain has the same size and shape, whatever it holds.
- Your own records, your change and your deposits, are hidden under keys derived from your private balance’s random secret. That hiding rests on the hash function: it is computational, not unconditional.
- Solana signatures stay Ed25519: your wallet signs your deposits. Our relayer signs and pays each payment, so your wallet does not sign it.
What v2 does not hide
- A payment shows a proof, not an amount. A payment from your private balance is one pool transaction carrying a proof made on your device and two sealed notes: one for the receiver, one for your change. The chain does not show the amount. The receiver sees what they got, not which deposit or wallet it came from. Our relayer submits it, so your wallet does not sign it.
- Your top-up is public. Money enters through deposits from a public wallet, in pieces from 0.005 SOL to 5 SOL. Each deposit shows its amount, its time and the wallet that paid it, like any transfer.
- A payout to a Solana address is public. A payment to an ordinary Solana address leaves the pool as a public transfer: that address and the amount it receives are on chain, exact to 0.0001 SOL.
- On a quiet pool, the time of a payment can give it away. Sends leave at once. If few people entered the pool since your deposit, a receiver who knows the amount and the minute could pair your deposit with your payment by its time. Before every send this app counts that crowd; below its threshold it says so in one line and still sends. Withdrawals to your own wallets keep their protection: the app warns, offers a safer amount and waits at most about 10 minutes for others to withdraw.
- Who sees your IP address. On styx.cash your payment goes through a private route: this site passes it on as a sealed message, so it sees your IP address but not the payment, and our worker opens and submits it, so it sees the payment but not your IP address. The app reads the chain and sends your deposits through this site too, never from your browser to Helius: sealed to our worker once the worker offers its read route, until then in clear, and then this site sees your IP address and what is read; the line before you send says which. Helius sees only our servers. Styx runs both: this splits what each server sees, it does not hide you from Styx itself. Where no private route is set up, our relayer sees your IP address when it relays, and the app says so before you send. Our code stores no IP address, or its hash, next to a payment; our hosting providers keep their own request logs. Your wallet extension may contact its own servers when it shows you a transaction to sign. There is no Tor address yet. A merchant who knows you through an account of its own knows you. One payment carries at most 10 SOL.
Every change since v1, with the test or the devnet log behind each line: the v2 changelog.
