Pool fees (in ZEC)#
| Action | Pool fee | Goes to |
|---|---|---|
| Shield | deposit_fee_rate, 0 in the parameter files | Reward budget and relayer |
| Send out, exit | withdrawal_fee_rate, 25 bps (0.25 %) | 60 % reward budget, 40 % relayer |
| Lock, unlock | Up to max_relayer_fee (0.01 ZEC); the app sends 0 today | Relayer |
| Claims | None | |
| Exit to Zcash | Withdrawal fee plus the bridge's own cost (see Exit to Zcash) | Pool, relayer, bridge |
The deposit and withdrawal fee rates are capped in the program at 100 bps (1 %), whatever the admin sets, and any change waits before it applies. See Admin powers and limits.
Solana costs (in SOL)#
Every transaction pays the base network fee of 5,000 lamports per signature. Some actions also create small accounts that stay on chain forever as markers: a spent-note marker is 9 bytes, and closing one would let the note be spent again. The figures below were measured on 19/09/2026 (docs/COUTS.md): real transactions on a local validator, then the same accounts priced at the mainnet rent read live from two RPC endpoints, (128 + size) * 5,080 lamports. A marker costs 695,960 lamports on mainnet (953,520 on a local validator, which charges 6,960 per byte).
| Action | Who pays the SOL | Accounts created | Compute used / reserved | Mainnet lamports | USD |
|---|---|---|---|---|---|
| Shield (deposit) | Your wallet | 2 markers | 241,517 / 282,745 | 1,396,920 | 0.156 |
| Private transfer, merge | Relayer | 2 markers | 237,065 / 277,625 | 1,396,920 | 0.156 |
| Lock (opens the end epoch) | Relayer | epoch + 2 markers | 252,776 / 295,693 | 2,738,040 | 0.306 |
| Lock (end epoch already open) | Relayer | 2 markers | 243,922 / 285,511 | 1,396,920 | 0.156 |
| Send out, exit to Zcash | Relayer | 2 markers | 279,216 / 326,099 | 1,396,920 | 0.156 |
| + recipient token account, if missing | Relayer | 165 bytes | 21,933 / 30,223 | 1,493,440 | 0.167 |
| Stake claim (per note, per epoch) | Relayer | 1 marker | 188,615 / 221,908 | 700,960 | 0.078 |
| Volume claim (1 to 4 credits) | Relayer | 4 markers | 219,872 / 257,853 | 2,788,840 | 0.312 |
| Unlock | Relayer | 1 marker | 182,778 / 215,195 | 700,960 | 0.078 |
| Open an epoch (not yet open) | Keeper | 136 bytes | 16,104 / 23,520 | 1,346,120 | 0.151 |
| Finalize up to 8 epochs | Keeper | none | 21,070 / 29,231 | 5,000 | 0.001 |
| Initialize the pool (once) | Admin | state, 3 trees, epoch 0, vault | 65,103 / 79,869 | 70,256,320 | 7.858 |
USD at 111.85 dollars per SOL (Coinbase and Kraken, 19/09/2026). The compute reserved per transaction is the simulated use plus 15 % plus 5,000; the priority fee follows the median of the last 150 slots on the written accounts, capped at 20,000 micro-lamports per unit, and that median was 0 on the day of the measurement.
In SOL: only your deposit, 0.0014 SOL. After it, no relayed action takes a lamport from you (tested). In ZEC: the 0.25 % withdrawal fee when you send out or exit. Lock, unlock and claims cost 0 ZEC.
A deposit has no input note, but the circuit has two input slots, so it still creates two markers. A volume claim with one credit creates four. Changing this needs a circuit change and a new ceremony; it is a proposal in docs/COUTS.md, not decided.
Why the relayer pays#
If your own wallet paid the Solana fee of a withdrawal or a claim, it would sign it and appear on chain next to your private action. The relayer signs instead and is paid back in ZEC from the withdrawal fee. An action counts as paid when the relayer receives at least 21,000 ZEC base units (0.00021 ZEC, the measured cost of a withdrawal to a new wallet); everything else is free and draws on a daily SOL quota, 1 SOL by default (see Relayer API).