The Stellar privacy pool is implemented by the Soroban contract, Circom circuits, and the client SDK. It is independent from the Audit UI execution path: applications submit wallet-signed Soroban transactions directly to the contract.

Privacy Pool components

Privacy Pool components

Runtime responsibilities

ComponentCode locationResponsibility
Soroban contractstellar-privacy-layer-contracts/contract/src/lib.rsPrivacyPoolsContract, transact, storage, proof verification, token transfers, audit event emission
Circuitsstellar-privacy-layer-contracts/circuitsTransaction(20,2,2,1,1), deposit/withdraw constraints, commitment/nullifier logic, public signals
Client SDKstellar-privacy-layer-contracts/client-sdkPrivacyPoolSDK, stealth addresses, coin generation, witness preparation, proof generation, Soroban serialization
WalletIntegrator wallet connectionMessage signing for private address derivation and Soroban transaction signing
Stellar/Soroban ledgerStellar networkContract state, token movement, events, and transaction metadata

Transaction model

The contract exposes one public transaction entrypoint:
pub fn transact(
    env: &Env,
    from: Address,
    proof_bytes: Bytes,
    pub_signals_bytes: Bytes,
    encoded: Bytes,
) -> Result<(), Error>
deposit, withdraw, transfer, and mixed transactions are protocol-level shapes represented by transact inputs. They are not separate Soroban methods in the current contract.

Documentation

Soroban Contract

Contract entrypoint, verification sequence, state writes, token transfers, and event emission.

Cryptography

Commitments, nullifiers, stealth addresses, ECDH recovery, and SDK cryptographic helpers.

Client SDK

Application-side SDK responsibilities and integration boundary.

On-Chain State

Commitments, nullifiers, root history, leaf ephemeral keys, token balance, and public getters.

Audit Events

AuditEncodedDigest event shape and the handoff to the off-chain audit pipeline.