ZKDepth's own perps are oracle-priced and peer to pool. You hold an isolated position with USDG margin at Chainlink prices, against PerpVault, the USDG vault that takes the other side.
Markets and tiers
Tiers set leverage and caps by how hard an asset gaps over a closed market. Every open interest cap is the lower of a share of the vault and a dollar amount, so a market stays in proportion to what the vault holds.
| Tier | Max leverage | Maintenance margin | Liquidation fee | Open interest per side |
|---|---|---|---|---|
| ETH | 20x | 2.5 % | 1 % | 30 % of the vault, up to $5M |
| Index: SPY, QQQ | 10x | 5 % | 1 % | 20 % of the vault, up to $2M |
| Large: other stock tokens | 5x | 10 % | 1 % | 10 % of the vault, up to $1M |
| Volatile | 3x | 15 % | 1.5 % | 5 % of the vault, up to $250K |
The volatile tier is PLTR, COIN, MSTR, SNDK, RKLB, CRWV, NBIS, CRCL, GME, IONQ, CLSK, RGTI, SPCX and USAR.
SGOV has no market: a T-bill ETF barely moves, so its perp would only collect carry from the LPs.
The vault must hold USDG before any position can open, since open interest is capped by what it holds.
What a trade costs
| Item | Value |
|---|---|
| Open fee, close fee | 0.10 % of notional each |
| Early close fee | Up to 0.20 % more right after an increase, decaying to zero over 30 minutes |
| Price impact | Grows with the skew, up to 1 % |
| Funding, skew part | Up to 100 % APR. The heavier side pays |
| Funding, base part | 5 % APR, paid by both sides to the vault |
| Liquidation fee | Half to the keeper (at least 0.50 USDG), half to the insurance fund |
| Minimum margin | 10 USDG |
The funding scale differs by tier: $1M of skew reaches the cap on ETH, $500K on the index tier, $250K on the large tier and $100K on the volatile tier. The impact scale is $100M, $50M, $20M and $5M.
Profit cap and reserves
A position can be paid at most 50 % of its entry notional. That amount is locked as a reserve in the vault while the position exists, so a winner's capped profit is always in the vault as cash. Past the cap, more price move earns nothing. One position can reserve at most 10 % of the vault, and all positions together at most 80 %.
Oracle and market hours
Feeds are Chainlink only. Stock markets follow the session their feeds run on, from 20:00 New York time on the evening before a trading day to 16:00 on the last trading day of a run, minus listed US market holidays. ETH never closes.
The feeds update on a 0.5 % deviation, so three things price that latency in:
- Entry guard. For 90 seconds after a fill, a new oracle round that goes against you re-bases your entry to that round.
- Early close fee. It makes cycling a position around each round cost more than the round can pay.
- Caps. Open interest and reserves bound what one mispriced fill can take.
When a market is closed
While the price is not live, there is no open, no increase, no close and no liquidation, in either direction. You can still add margin, and funding does not charge. The position trades again at the first new round after the session reopens.
Reduce-only and delisting stop new size only. If a feed dies for good, emergencyClose returns the margin at no profit or loss after 14 days. No role exists that can touch a position.
Providing liquidity
PerpVault is an ERC-4626 vault. Its share price is its cash, plus or minus what traders stand to win or lose right now, with the premium a skew has paid counted as theirs, since walking the skew back pays it back. Shares trade around that mid at a spread equal to the oracle's uncertainty times the vault's net exposure: 0.5 % per unit while a market is open, and 3 % to 20 % by tier while it is closed. A vault with a flat book has no spread.
Deposits are immediate. Exiting takes two steps: requestExit, then claimExit after 1 hour, which pays the worse of the price at the request and the price at the claim. A request cannot be cancelled and earns nothing while it waits, and its owner can point it at a new receiver with setExitReceiver. Shares are transferable, so a share can sit in a private note.
What the owner can change
The owner can change a live market's parameters and add markets, each within hard bounds in PerpMarketRegistry (for example leverage up to 50x, exit delay from 15 minutes to 7 days). Feeds, market hours, maintenance margin and the liquidation fee are fixed when a market is added. Nobody can touch the vault's money or a position.
contracts/src/perps/PerpEngine.solpositions, fills and liquidationscontracts/src/perps/PerpVault.solthe LP vault and the exitcontracts/script/perps/PerpWiring.solthe launch values above