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. When few people deposited at least the amount you send, the same line adds that the receiver could also find you by the amount. 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 12 minutes after your click, then sends anyway: it could then be matched by its time. In Send, To my wallet fills in the wallet you connected.
- A payment link works like cash: whoever holds it can claim it, with no wallet. The claim page says how long is left to claim it; claiming takes a few seconds. 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 once found, and move into v2 when a send needs them. Since 2026-10-15 the app looks for them only when you press Look for my old v1 funds, in Advanced: our site can see that your device searched, not what it found.
- 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.00000031 SOL for the app’s fixed compute price since 2026-10-07) 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
- 9.01 s
- Median of 10 private sends from a funded balance through our hosted worker, p90 10.16 s (devnet, from a browser on the open internet, 2026-10-15; white paper claim W146). Earlier: 30 payments from a funded balance, median 20.0 s, p90 33.0 s (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.
Using Styx with Tor Browser
- There are two routes. Route 1, the private route, is for everyone and needs nothing installed: this site passes your requests on sealed, so it sees your IP address but not what you do, and our worker sees what you do but not your IP address. Route 2 is Tor, optional, for people who already use Tor Browser. Nobody is asked to use Tor.
- In Tor Browser, open styx.cash as usual. The app recognises Tor Browser and checks that it can reach our .onion address (a server address that works only through Tor) within 15 seconds. It then sends every request there, sealed as on route 1. Our onion gateway sees only Tor’s own local address; this site and our worker never see your IP address. Helius sees only our servers, never you.
- If the .onion address does not answer within 15 seconds, the app uses route 1 through Tor instead. This site then sees a Tor exit’s address (the last Tor relay on the way), not yours.
- You need a Solana wallet extension installed in Tor Browser: the app asks it for a signature to create your keys. Without one, the app cannot be used in Tor Browser.
- Measured on the real Tor network in a Firefox that sent Tor Browser’s user agent, not in Tor Browser itself. The .onion route was taken in 10 of 10 direct page loads and 9 of 10 through bridges (hidden entry points for networks that block Tor) on 2026-10-14, and in 6 of 6 loads on 2026-10-15. A page took a median of 2.7 s to load direct and 16.7 s through bridges (2026-10-14, 10 loads each). In 3 payments on 2026-10-15, nothing reached this site’s API and every payment landed.
- Through Tor, the start was slow: a new device’s initial sync took the payer 447.8 to 805.7 seconds, about 7 to 13 minutes, in those 3 payments (2026-10-15). From the click to the landing took 181.5 to 532.6 seconds; the slowest payment read the pool’s whole history a second time after one failed read. Since the release of 2026-10-15, about 06:00 Paris, a failed read no longer does that: only a part that the device’s own check refuses is fetched again. Since 2026-10-17, a new device reads that history in large blocks: 37 requests instead of about 6,217. With Tor’s delays simulated on one computer, a new device was then ready in 19.0 to 25.8 seconds, against more than 20 minutes before (2026-10-17). This has not yet been measured on the real Tor network.
- What happens when you quit. We tested Tor Browser 15.0.25 itself on 2026-10-17, on Linux in a test container, not on Windows. At its default settings ("Always use private browsing mode" on), quitting Tor Browser erases everything styx.cash stored in it, including the encrypted copy of your private balance’s secret. Closing only the Styx tab, with Tor Browser still open, keeps that data. New Identity erases it. So keep your 24 words. If you switch "Always use private browsing mode" off (Settings, Privacy & Security, History), Tor Browser keeps styx.cash’s data on disk across restarts, in a profile folder named after styx.cash, until you use New Identity or clear the site’s data.
- When the app finds nothing stored, it opens a new, empty private balance. Your old balance stays in the pool, but only its 24 words open it again: use "Restore my private balance" before you put anything in the new one, because the app offers it only while the new balance holds no funds and no requests.
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. The same line warns when few depositors could cover the amount, since the amount can then point to you too. Withdrawals to your own wallets keep their protection: the app warns, offers a safer amount and waits at most 12 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, whose read route has been live since 2026-10-07; if that route is unavailable, in clear, and this site then 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 only while their logs are never joined, 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. In Tor Browser, an optional second route sends every request sealed to our .onion address, so neither this site nor our worker sees your IP address. 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.