This chapter lists what ZKDepth charges and where it goes. Private lanes first, then the public venue.
Private lanes
| Action | Fee |
|---|---|
| Deposit | Free |
| Private transfer | Free |
| Private action (swap, bins, vault, launch, perps) | 0.10 % |
| Withdrawal | 0.10 % |
| Sealed batch | 0.10 %, out of the batch |
| Relayer | The relayer's quote, paid from the note |
The 0.10 % is set at deploy and cannot change after that, and the pool caps it at 1 %. It applies to what leaves the pool, so the relayer's own fee carries it too. A private transfer through a relayer pays the relayer and 0.10 % of that fee, and nothing on the amount sent.
A private position is one share, too small for the fee to round above zero. So it pays the 0.10 % once, on the margin going in, at the open and on any margin you add, and nothing on the way out.
A sealed batch takes the 0.10 % from what each side gets, before the rate is set. A launch's batch takes it from the quote token before the fill. A void batch pays none.
Venue costs still apply: a private swap pays the pools' fees, a private launch trade pays the curve's, and private perps pay the engine's.
The relayer's quote
A quote is the gas of the transaction, priced in the fee token, plus the relayer's margin. It carries a 60 second expiry, and when the proof arrives the relayer checks the fee against the gas cost at that moment. Your browser checks a quote against the gas price it reads itself before it builds the proof, and shows it before anything is sent. Anyone can run a relayer, so the quote is theirs and not ZKDepth's.
The fee token is private WETH when the balance holds some, which keeps the token out of the fee. Otherwise it is the note's own token, if the relayer takes it: WETH and USDG by default, and any other its operator lists. Bin shares and positions pay only from private WETH. A sealed claim pays in what it claims and a refund in what it refunds, so a claim of launch tokens has no relayer until one prices them. You can skip the quote by choosing to send from a fresh address, which needs a little ETH.
Public venue
| Action | Fee | Taken from |
|---|---|---|
| Swap in a ZKDepth pool | The pool's fee, 20 % of which is the protocol share | Your input |
| Swap through the ZKDepth Router | The pools' fees, nothing more | Your input |
| Spot trade on the Uniswap path | 25 bps | The output |
| Zap into a Uniswap range | 25 bps | The input |
| Keeper harvest or rebalance | 10 % | The fees collected |
| Range order fill or cancel | 10 % | The fees the order earned |
| LP or hedged vault harvest or rebalance | 10 % | The fees collected |
| Structured note exit before maturity | 50 bps | The amount withdrawn |
| On-chain perps open and close | 10 bps each, plus an early close fee | The margin |
| Pre-market perp open, close or liquidation | 30 bps | The notional |
| Launchpad trade | 1 % | The quote side |
A deposit into a vault, a withdrawal from an LP, hedged, DLMM or stock vault, and a DLMM limit order pay no ZKDepth fee.
Pool fees depend on the pool. A DAMM pool charges 5 to 100 bps plus a volatility surcharge, at most 500 bps, and a new pool may add an anti-snipe fee that falls to the base fee within an hour. Stock pools charge 30 bps while the market is open, 150 bps while it is closed and 500 bps when the feed is stale. A DLMM pair charges a base fee plus a variable fee, capped at 10 %. See ZKDepth pools.
Pons and Lighter charge their own fees.
Fees come out of earnings
When a keeper, a vault or a range order closes or re-centres a Uniswap position, the contract charges only on what it collected beyond the principal. A position that has earned nothing pays nothing. Inside one split the order is fixed: the protocol share, then the caller's bounty, then everything left to the owner.
Where the money goes
Pool shares and private lane fees go straight to the FeeCollector. Every other fee goes through FeeRouter, a contract with no owner: 20 % to the payer's referrer, if any, and the rest flushed to the FeeCollector. From there it becomes ETH, then a buyback and burn of $ZKD. See Buyback and burn.
Referrals
ReferralRegistry holds two write-once links and has no owner.
- Your code. Register 1 to 8 letters or digits on Portfolio. An address owns one code for life.
- Your referrer. Opening a
?ref=CODElink offers a one-click bind if you have no referrer yet. A binding never changes, and you cannot refer yourself. - Earnings. A referrer earns 20 % of the FeeRouter fees their wallets generate, out of the protocol's share, and claims them per token from Portfolio.
Vaults and notes name themselves as the user, so their fees never pay a referrer. A private action has no wallet to name, so it pays no referrer either.
Bounties
A bounty pays the gas of a public call nobody else is paid to make.
| Call | Bounty | Paid from |
|---|---|---|
PositionKeeper.harvest, rebalance | The owner's choice, at most 3 % | The fees collected, after the 10 % |
LPVault.harvest, rebalance | 0.5 % | The fees collected, after the 10 % |
RangeOrders.fill | 1 % | The order's output |
PreMarketPerp.liquidate | 1 % | The margin left |
PerpEngine liquidation | Half the liquidation fee, at least 0.50 USDG | The liquidation fee |
Points
Points are an off-chain ledger: 1 point per dollar of volume and 5 per dollar of fees earned, and volume counts double for 7 days after you post an idea. See Lounge and Ideas.
contracts/src/FeeRouter.soltake, claim and flushcontracts/src/ReferralRegistry.solregister and bindcontracts/src/shielded/ShieldedPool.solthe private lane fee