A ZK pool represents private value as cryptographic outputs instead of public account balances. You spend an existing private output and create new outputs through a proof-backed pool transition.

Core elements

Pool transition

1

Select private inputs

The transaction selects the private output or outputs it will spend and an accepted pool root.
2

Build outputs and a witness

The transaction defines the new private outputs and builds the private witness needed to prove the state transition.
3

Generate the proof

The prover produces a zero-knowledge proof and the public signals required by the pool verifier.
4

Authorize the transaction

The wallet authorizes the blockchain invocation without publishing the private witness.
5

Verify the transition

The pool checks authorization, the accepted root, unused nullifiers, and the zero-knowledge proof.
6

Commit the new state

The pool records the nullifiers, adds the new commitments, updates its root, and performs any required public deposit or withdrawal leg.
7

Emit encrypted audit data

The transaction emits encrypted audit output for the separate controlled disclosure workflow.

Public and private information

Protect private witnesses, wallet-derived secrets, and decrypted outputs. Publishing them can reveal information that the on-chain proof keeps private.