Skip to main content

Protocol fees

  • Fixed fee floor: 0.005 SOL
  • Variable fee: amount * 3 / 1000 (0.3%)
  • Minimum deposit: 10_000_000 lamports
SOL withdraw and swap math:
  • gross = abs(publicAmount)
  • fee = 5_000_000 + floor(gross * 3 / 1000)
  • net = gross - fee

Proof and payload sizes

  • Groth16 proof payload: 256 bytes
  • Public inputs payload: 264 bytes
Public inputs layout:
  • root[32]
  • publicAmount[8]
  • extDataHash[32]
  • mintAddress[32]
  • nullifiers[64]
  • commitments[64]
  • chainNoteHash[32]

Relay request limits

From relay transact handlers:
  • encrypted_notes: max 2 notes
  • total decoded encrypted_notes bytes: max 1024

Program/runtime constants

  • Merkle tree height: 32
  • Root history ring: 100
  • Swap flow uses two-phase state (TransactSwap + worker settlement)

Operational guidance

  • Use bigint for amounts in SDK UTXO paths.
  • Prefer relay-backed commitment sync for stable proof inputs.
  • For large account lists, use v0 transactions with ALT support.