zkStackstestnet
Open the wallet
Testnet only. Nothing here touches real bitcoin. The sBTC is a mock token that anyone can mint, and the STX is testnet STX with no value.

Payments on Stacks that do not show up on the chain

A shielded pool for sBTC. Deposits go in, and a transfer publishes a commitment and a nullifier, with the amount, the sender and the recipient proved correct without any of them being revealed. The proof is a ZK-STARK and it is verified on chain, in Clarity, inside one block.

What is hidden

The chain sees that a transfer happened and that some commitment was spent. It does not see the amount, who sent it, or who received it. A deposit and a withdrawal are public at the edges, because that is where value crosses in and out.

Where the keys are

Proving a spend consumes the spending key, so it happens in your browser tab and nowhere else. There is no hosted prover, because whoever ran one could spend the notes that passed through it.

What it costs

A 306 KB proof, verified on chain for about half a block's execution budget. The whole flow for a user is one block.

Try it with a test account

These are throwaway testnet accounts, already funded with testnet STX for gas and mock sBTC to deposit. Import one into Leather or Xverse, switch the wallet to testnet, then open the wallet.

These phrases are public, so these accounts are not private.

Anyone reading this page has them. Your zkStacks private address is derived from your wallet signature, so everyone using the same phrase derives the same private address and can read the same notes. That is a property of sharing a wallet, not of the pool: an account you generate yourself is private in the way the protocol intends. Never put anything you care about behind one of these, on any network.

  1. In Leather or Xverse, choose to import or restore a wallet.
  2. Paste one of the phrases below.
  3. Switch the wallet's network to testnet.
  4. Open the wallet and connect.

Pick a different account from anyone else trying this at the same time. Two people sending from one account at once will collide on the wallet's transaction nonce, and both will see a failure that has nothing to do with the pool.

Out of test sBTC? The mock token's mint is deliberately ungated on testnet, so call it yourself from the token contract: amount in satoshis, recipient your address. Each account above starts with 5 sBTC, which is enough for several runs.

What is not finished

This is a testnet demonstration of a protocol, not a product, and the honest list matters more than the demo: