Skip to content

Styx Protocol · Devnet app · Solana

Send, receive, shield, subscribe.

Devnet onlyTest tokens, not real funds. This software has not been audited, and there is no mainnet deployment. Anything you move here you should be able to afford to lose.

The v1 trust pointShield can hand you an older note from this deployment’s stock instead of the note your payment creates. This deployment derived that note, knows which one it handed you, and can spend it until you do.

Solana devnet · your keys stay in this tab

DevnetNot auditedNo mainnet deployment
Test tokens only. What a deposit costs, and who signs it.

Test tokens only. Depositing costs your wallet one public signature paying this deployment, which then funds the one-time key that touches the pool — so your address is not on the pool transaction itself. Each screen says who paid for that screen.

  1. 01Connectyour wallet
  2. 02Sign
  3. 03Send or subscribe

Connect a wallet

One signature to start. Nothing is sent, nothing is paid.

What a deposit costs, and what your keys are

Everything here runs on a P01 key: subscriptions belong to it and notes are sealed to it. A deposit costs you one signature — the denomination, a 0.3% protocol fee and a 1% operator fee — while this deployment fronts the refundable proof rent and takes it back afterwards. Recipient addresses are hybrid post-quantum. The signature that pays is Ed25519 and stays Ed25519.

  • Proof system

    Hash-based STARK

    Poseidon and Merkle trees only. No elliptic curves anywhere in the proof.

  • Stealth address

    X25519 + ML-KEM-768

    Hybrid key encapsulation, with keys derived from your Ed25519 wallet key. The lattice half follows FIPS 203.

  • Signatures

    Ed25519

    Solana verifies nothing else, so every transaction you send from here stays classically signed.

  • Status

    Devnet, not audited

    Deployed and running on devnet. There is no mainnet deployment.

On a stealth send, the payee is a one-time address, not a wallet. Your keys are derived from one wallet signature and live in this tab’s worker. They are never uploaded.

Connect a wallet, then sign to derive your stealth spending, viewing and ML-KEM keys. Your wallet is asked for two signatures, and the second one is only there to prove it signs deterministically, so your keys can still be re-derived next session. Neither signature leaves this tab and no transaction is sent to derive anything. From there the tabs cover sending to a one-time address, importing a sealed note, moving value in and out of the shielded pool, and opening or reviewing a subscription vault.

The signing prompt is still headed with the old Protocol 01 name. That heading is the seed of every key this app derives for you, so renaming it would orphan the notes and vaults of everyone who already has some. It stays exactly as it is. The name on the prompt is old; the keys it produces are yours.

Each of these is checkable on a block explorer or in the source, which is the only reason it is written here. The recipient side is what this app hides. The payer side is not, and the link between a deposit and the withdrawal that spends it is hidden only in part: limit 2 says where it still holds.

  1. Your wallet signs, and it is not always on chain

    A deposit costs your wallet one signature: a single, fully visible transaction paying this deployment, plus a 1% operator fee in the same transaction. This deployment then funds the single-use key that touches the pool, from a different address of its own — so the transaction that deposits does not name you. A withdrawal or a subscription asks the deployment to cover the whole job; when it does, your wallet is on no transaction at all, and when it cannot, the job stops before anything moves and the screen says so — your wallet never pays in its place. A deposit that cannot be relayed is refused rather than quietly falling back.

    you signone transfer, to this deployment
    the pool deposita single-use key we funded
    relayerthis deployment, for the funding leg
  2. Some withdrawals can still be paired with their deposit

    From this web app, a recent note is withdrawn on one circuit-7 proof, which publishes the nullifier, a subtree root and a hash of the payout address, and not the commitment the deposit published. The commitment still appears in both transactions when a note is withdrawn from the phone, and anyone reading the chain can match them. A note deposited before we randomised the blinding can only be spent on the older C1 + C3 pair, which republishes it too and binds no payee, so a copy of its public proof could redirect the note: this web app refuses that pair now, and such a note cannot be spent from this web app until v2. Even on circuit 7 the timing is not hidden, and the pool is small enough that the minutes or hours between a deposit and a withdrawal can narrow it down. The pair below is one of those older withdrawals on devnet; read it before you decide what to move.

    clusterdevnet
    leaf16
    commitment8901821612542787864
    appears inboth the deposit and the withdrawal
  3. One public hop, and it points at us, not at the pool

    Shielding still begins with one ordinary, fully visible transfer signed by your wallet — but it now pays this deployment rather than the single-use signer, and this deployment funds that signer from a separate address. Two transfers, neither naming both ends. What still ties them is the amount and the minutes between them, and nothing here hides either. A pool withdrawal then pays a payout address derived per note, and refuses to pay the connected wallet at all.

    pre-fundpublic transfer, from you to this deployment
    signerone use, funded by this deployment
    payoutderived per note, never your wallet
  4. The amounts are not hidden, and neither is the clock

    The pool is denominated, so a shield or a withdrawal reveals which denomination you used, and the timing of every transaction is public because you sent it yourself. What the proof withholds from a chain reader is which note in the tree you spent. That is the whole of the guarantee. It does not hold against this deployment for a note it handed you (limit 5), and it is worth exactly as much as the number of other unspent notes sitting beside yours.

    hiddenwhich note was spent
    publicdenomination, timing, your wallet
    verified bya Solana program, not a server
  5. A note this deployment hands you is not yours alone

    The older-note exchange keeps your payment from pointing at the note you spend: your deposit funds a note this deployment keeps, and you hold an older one it deposited and derived from its own seed. A chain reader cannot match the two, although on a quiet pool the timing still can. This deployment always can: it knows which note it handed you, and it can spend that note until you do.

    you holdan older note from its stock
    this deployment knowswhich note it handed you
    can spend ityou, and this deployment until you do

The honest offer

Test it with money you can afford to lose.

That is what a devnet can offer. Shield, pay, withdraw, then read the programs that did it and the transactions they left behind.

Every claim on this page is either visible on devnet or readable in the source. Nothing about users, volume or throughput appears here, because none of it is benchmarked.