Docs

Private payments

Kalyx has two ways to move the same coin. A public send names the account and the amount. A private note is a second balance. The note is not the wallet seed. The chain stores a commitment. It does not store the note.

This is a testnet. Do not put value here that you cannot lose. Client audits are not finished. The payment check is hash-based. It does not use the elliptic-curve lock. It is not the ML-DSA-87 validator signature, and it is not the XMSS account signature. Those two signatures still do their own jobs.

One pool

One pool holds every note on this testnet. The operator publishes it once, from a wallet that already has a little KALYX for the network fee. After that, every wallet uses the same pool. A visitor does not publish a second one.

The account that publishes the pool does not control it. There is no admin key. That account cannot take a note, pause the pool, change the rules, or replace the contract. The explorer accepts only this pool. A different contract is refused.

Two balances

  • Public. The KAL account. The explorer shows the balance. A public send spends one XMSS leaf. The account page is the rule for that leaf.
  • Private. Notes kept in this browser and locked by the wallet seed. Spending a note does not use an XMSS leaf. The transaction that submits the update still does, because your account has to sign it.

Shielding moves coins from the public balance into a note. Unshielding moves them back. The coin is the same KALYX.

What people can see

Shield

You send public KALYX into the pool. The explorer shows your account and the amount. That is the last public view of those coins. The transaction spends one XMSS leaf, the same way a public send does. The note is created in the browser. The chain records the commitment, not the secret inside the note.

Private payment

The whole note moves to the next account. The transaction value does not show the amount. The transaction names the account that holds the note, and the account that will hold it next. That is what stops a stranger from taking the coins. A person who sees the proof still cannot spend the note unless they are that named account and they also have the note.

The note does not split. To move a smaller amount, shield a smaller note. A fee of 0.001 KALYX leaves the note and goes to the block proposer. Your public account still pays the ordinary network fee, so the account that submits the update is the sender of the transaction. The fee page is the rule for that network fee. The base fee still burns. The tip still goes to the proposer.

Unshield

The note returns to the public balance of the account that holds it, minus 0.001 KALYX. That return is public. The account is named, and the coins are in a public balance again.

The note

This browser keeps the note on this machine, locked by the wallet seed. Refresh the page and the tab forgets the seed until you open the wallet again. Opening the same wallet in this browser brings the notes back.

Clearing this browser’s site data does not bring the notes back. Another computer does not have them. If you pay someone else, the page shows a note code once. That code is the note. Give it only to the person who holds the account you named, through a channel you trust. They paste it into Private on their wallet.

The code without the named account cannot move the coins. The named account without the code cannot move the coins. Lose every copy of the note and the coins cannot come back. The chain never receives the note, so there is no recovery desk and no operator who can return them.

Amounts

  • Steps of 0.001 KALYX. An amount between those steps is refused.
  • The largest note is 16,777.215 KALYX.
  • A note must be larger than 0.001 KALYX before it can pay or unshield, because that 0.001 KALYX is the proof fee.
  • The pool holds 256 notes. A shield adds one. A private payment adds the next note. A full unshield does not add one. When 256 notes have been added, the pool is full.

How to use it

  1. Open the wallet at testnet.kalyx.si/dashboard. Create a wallet, or open one you already saved. The wallet page covers the passphrase, the file, and the seed.
  2. You need a little public KALYX for the network fee on each step. The faucet can send 10 KALYX to a new address, once a day.
  3. Choose Private.
  4. If the page says the pool is not on the chain yet, stop. The operator publishes it once. Do not treat a visitor’s click as a second pool.
  5. Shield. Type an amount in steps of 0.001 KALYX. Choose Shield. A person check runs. Wait for the block. The public balance goes down by that amount plus the network fee. The note stays in this browser.
  6. Pay privately. Choose the note. Type the next KAL account. That account can be your own. Choose Pay privately. Building the proof can take about half a minute. It stays in this tab. Then the page waits for the block.
  7. If the next account is someone else, copy the note code and give it only to them. They open the wallet for that account, choose Private, paste the code, and choose Save this note.
  8. Unshield. Choose the note. Choose Unshield to this account. After the block, the public balance shows the coins again, minus 0.001 KALYX.

Each of those steps is a normal transaction from the account that is open. A person check runs. The seed stays in the tab. The explorer links the transaction. Shield shows the amount. A private payment does not put the amount on the transaction value. Unshield puts the coins back where a public balance can show them.

What the chain checks

Every node checks the payment. The check is built from hashes. Shor's algorithm is not the tool for that check, because the check does not use elliptic curves. The chain learns that a real note was spent, that this note was not spent before, and that the amounts add up. It does not learn the secret inside the note.

A second spend of the same note is rejected. A proof that does not add up is rejected. Nothing in that check replaces the validator signature or the account signature. A block is still signed with ML-DSA-87. The account that submits the update still signs with XMSS when that is the account’s lock.

What this does not do

  • It does not hide a shield. The account and the amount show.
  • It does not hide who holds the note, or who will hold it next.
  • It does not hide an unshield. The coins return to a public balance.
  • It does not hide the account that pays the network fee.
  • It does not split one note into two.
  • It does not recover a lost note.
  • It does not make these coins safe to treat as money you cannot lose.