ZKDepth pools are the venue ZKDepth runs itself on Robinhood Chain. DAMM and stock pools are Uniswap v4 pools behind a ZKDepth hook, and DLMM pairs keep liquidity in fixed-price bins.
Choosing a pool type
| Pool | Price moves | Fee per swap | Good for |
|---|---|---|---|
| DAMM | along v4 ticks | base fee, optional anti-snipe schedule, volatility surcharge | new tokens, volatile pairs |
| DLMM | bin to bin, fixed inside a bin | bin-step preset plus a volatility term | shaped liquidity, limit orders |
| Stock | v4 ticks inside an oracle band | set by the market session | tokenized stocks |
Anyone can open a pool or provide to one, in one permissionless transaction from the Pools page. The protocol's part of the fee goes to buyback and burn.
DAMM pools
The fee has three parts:
- Schedule.
baseFeeBps(5 to 100), or during an anti-snipe window a fee that falls in a straight line fromsnipeStartFeeBps(up to 5,000) to the base oversnipeSeconds(up to 3,600). - Surcharge. It grows with the square of the ticks recent swaps moved the price, and decays to zero over 600 s. At a
variableFeeControlof 10,000, 100 ticks of movement adds 10 bps. - Cap. 500 bps, or the schedule itself while it is higher.
DLMM pairs
Bin id trades at (1 + binStep / 10,000)^(id − 2^23) of token Y per token X. A swap fills at exactly one bin's price until the bin is empty, then moves to the next bin with liquidity. There is one pair per token pair and bin step, ERC-20 only.
Bin steps of 1, 5, 10, 25, 50 and 100 bps have base fees of 2, 5, 10, 20, 40 and 80 bps. A variable fee grows with how far, in bins, the price has recently travelled, and the pair caps the total at 10 %.
DlmmPositionNFT.mint gives you one ERC-721 over a range of bins, with a Spot, Curve or Bid-Ask shape. A deposit reverts if the active bin has moved more than ceil(50 / binStep) bins, if less than 99.5 % of what you typed lands, or after the deadline. A deposit into the active bin with a different X/Y mix pays the swap fee on the part that amounts to a swap. decrease and burn take minimum amounts and do not check the pause.
Stock pools
A stock pool pairs an AssetRegistry asset with USDG (priced at $1), ETH or WETH (priced by Chainlink ETH/USD), and starts at the oracle price. These are the deploy values, tunable per asset by the owner up to a 1,000 bps fee.
| Session | When | Fee | Band |
|---|---|---|---|
| Open | Monday to Friday, 13:30-20:00 UTC, except holidays | 30 bps | ± 200 bps |
| Closed | any other time | 150 bps | ± 50 bps |
| Stale | a feed is over 25 h old | 500 bps | ± 50 bps |
After a swap the price must sit inside the band or be strictly closer to the oracle than before, so anyone can pull a drifted pool back. While the feed is stale only such swaps pass. Outside the session the oracle stops moving, so a pool can sit far from where the stock reopens.
Limit orders in a bin
DlmmLimitOrders.place rests your tokens in one bin past the active one: X above it to sell, Y below it to buy. Orders in the same bin and side share a batch, fill at that bin's exact price and earn swap fees. The contract charges no fee.
Once the price has crossed the whole bin, anyone may execute the batch, and claim executes a filled batch itself. If the price crosses back first, the order trades back into the token you started with. Before execution, cancel returns whatever the bin holds for you.
The owner's powers over these pools are in Who can do what.
contracts/src/venue/hooks/DammHook.solcreatePool, the schedule, the surcharge and the capcontracts/src/venue/hooks/StockHook.solthe band and the toward-oracle rulecontracts/src/venue/dlmm/DlmmPair.solbins, swap, mint, burn and the fee