AMM Pricing Model
Currently, all markets are AMM-based with value-backed liquidity, optimized for low-liquidity bootstrapping. In the future we have plans to build a module with support for additional mechanism configurations, such as CLOBs and thresholds for graduation.
Summary
Each market is built on Uniswap V4 using accounting tokens to enable native leverage without the need for undercollateralized borrows.
- Perp markets are tied to Uniswap V4 pools that serve as the pricing engine
- Accounting tokens (perp and USD) mirror real assets for AMM operations but hold no intrinsic value
- All real collateral (USDC) remains in the perp contract while accounting tokens facilitate trades
- Makers provide ranged liquidity and earn fees, with token composition determined by price range
- Takers open leveraged positions by swapping accounting tokens at multiples of their margin
Note
Perp City markets differ from traditional vAMM perps. In vAMM designs, trades are typically unmatched, making the protocol the effective counterparty. Market parameters such as liquidity depth (k) are often set arbitrarily or become out of sync with real market conditions. In contrast, Perp City markets use AMMs with value-backed liquidity.
Uniswap Pools & Accounting Tokens
Each perp is tied to a unique Uniswap V4 pool. The Uniswap AMM serves as the perp's pricing engine. The price that it exposes is the perp's mark price.
Uniswap pools allow swapping between two tokens. In our context, one token represents the perp contracts and the other represents a quote asset such as USD. However, using these tokens directly would not allow for native leverage. For instance, to take a 2x long position, a trader would need to swap in twice the USD they provided as margin, requiring an undercollateralized borrow.
To address this, each Uniswap pool in Perp City is instantiated alongside two unique accounting tokens: a perp accounting token and a USD accounting token. These tokens mirror their real counterparts purely for accounting purposes and hold no intrinsic value. Users never hold them directly; instead, they’re transferred between the perp contract and the Uniswap pool to represent liquidity and trading actions.