ClearingHouse
InternalOpenPositionParams
InternalCheckSlippageParams
Functions
initialize
this function is public for testing
setDelegateApproval
remove to reduce bytecode size, might add back when we need it
addLiquidity
Maker can call addLiquidity
to provide liquidity on Uniswap V3 pool
Tx will fail if adding base == 0 && quote == 0
/ liquidity == 0
AddLiquidityParams.useTakerBalance
is only acceptfalse
now
Parameters:
Name | Type | Description |
---|---|---|
| struct IClearingHouse.AddLiquidityParams | AddLiquidityParams struct |
Return Values:
Name | Type | Description |
---|---|---|
| struct IClearingHouse.AddLiquidityResponse | AddLiquidityResponse struct |
removeLiquidity
Maker can call removeLiquidity
to remove liquidity
remove liquidity will transfer maker impermanent position to taker position, if liquidity
of RemoveLiquidityParams struct is zero, the action will collect fee from pool to maker
Parameters:
Name | Type | Description |
---|---|---|
| struct IClearingHouse.RemoveLiquidityParams | RemoveLiquidityParams struct |
Return Values:
Name | Type | Description |
---|---|---|
| struct IClearingHouse.RemoveLiquidityResponse | RemoveLiquidityResponse struct |
settleAllFunding
Settle all markets fundingPayment to owedRealized Pnl
Parameters:
Name | Type | Description |
---|---|---|
| address | The address of trader |
openPosition
Trader can call openPosition
to long/short on baseToken market
OpenPositionParams.oppositeAmountBound
B2Q + exact input, want more output quote as possible, so we set a lower bound of output quote
B2Q + exact output, want less input base as possible, so we set a upper bound of input base
Q2B + exact input, want more output base as possible, so we set a lower bound of output base
Q2B + exact output, want less input quote as possible, so we set a upper bound of input quote
when it's set to 0, it will disable slippage protection entirely regardless of exact input or output when it's over or under the bound, it will be reverted
OpenPositionParams.sqrtPriceLimitX96
B2Q: the price cannot be less than this value after the swap
Q2B: the price cannot be greater than this value after the swap
it will fill the trade until it reaches the price limit but WON'T REVERT when it's set to 0, it will disable price limit; when it's 0 and exact output, the output amount is required to be identical to the param amount
Parameters:
Name | Type | Description |
---|---|---|
| struct IClearingHouse.OpenPositionParams | OpenPositionParams struct |
Return Values:
Name | Type | Description |
---|---|---|
| uint256 | The amount of baseToken the taker got or spent |
| uint256 | The amount of quoteToken the taker got or spent |
openPositionFor
Parameters:
Name | Type | Description |
---|---|---|
| address | The address of trader |
| struct IClearingHouse.OpenPositionParams | OpenPositionParams struct is the same as |
Return Values:
Name | Type | Description |
---|---|---|
| uint256 | The amount of baseToken the taker got or spent |
| uint256 | The amount of quoteToken the taker got or spent |
| uint256 | The trading fee |
closePosition
Close trader's position
Parameters:
Name | Type | Description |
---|---|---|
| struct IClearingHouse.ClosePositionParams | ClosePositionParams struct |
Return Values:
Name | Type | Description |
---|---|---|
| uint256 | The amount of baseToken the taker got or spent |
| uint256 | The amount of quoteToken the taker got or spent |
liquidate
If trader is underwater, any one can call liquidate
to liquidate this trader
If trader has open orders, need to call cancelAllExcessOrders
first If positionSize is greater than maxLiquidatePositionSize, liquidate maxLiquidatePositionSize by default If margin ratio >= 0.5 mmRatio, maxLiquidateRatio = MIN((1, 0.5 totalAbsPositionValue / absPositionValue) If margin ratio < 0.5 mmRatio, maxLiquidateRatio = 1 maxLiquidatePositionSize = positionSize maxLiquidateRatio
Parameters:
Name | Type | Description |
---|---|---|
| address | The address of trader |
| address | The address of baseToken |
| int256 | the position size to be liquidated by liquidator |
liquidate
If trader is underwater, any one can call liquidate
to liquidate this trader
If trader has open orders, need to call cancelAllExcessOrders
first If positionSize is greater than maxLiquidatePositionSize, liquidate maxLiquidatePositionSize by default If margin ratio >= 0.5 mmRatio, maxLiquidateRatio = MIN((1, 0.5 totalAbsPositionValue / absPositionValue) If margin ratio < 0.5 mmRatio, maxLiquidateRatio = 1 maxLiquidatePositionSize = positionSize maxLiquidateRatio
Parameters:
Name | Type | Description |
---|---|---|
| address | The address of trader |
| address | The address of baseToken |
| the position size to be liquidated by liquidator |
cancelExcessOrders
Cancel excess order of a maker
Order id can get from OrderBook.getOpenOrderIds
Parameters:
Name | Type | Description |
---|---|---|
| address | The address of Maker |
| address | The address of baseToken |
| bytes32[] | The id of the order |
cancelAllExcessOrders
Cancel all excess orders of a maker if the maker is underwater
This function won't fail if the maker has no order but fails when maker is not underwater
Parameters:
Name | Type | Description |
---|---|---|
| address | The address of maker |
| address | The address of baseToken |
quitMarket
Close all positions and remove all liquidities of a trader in the closed market
Parameters:
Name | Type | Description |
---|---|---|
| address | The address of trader |
| address | The address of baseToken |
Return Values:
Name | Type | Description |
---|---|---|
| uint256 | The amount of base token that is closed |
| uint256 | The amount of quote token that is closed |
uniswapV3MintCallback
Called to msg.sender
after minting liquidity to a position from IUniswapV3Pool#mint.
namings here follow Uniswap's convention
Parameters:
Name | Type | Description |
---|---|---|
| uint256 | The amount of token0 due to the pool for the minted liquidity |
| uint256 | The amount of token1 due to the pool for the minted liquidity |
| bytes | Any data passed through by the caller via the IUniswapV3PoolActions#mint call |
uniswapV3SwapCallback
Called to msg.sender
after executing a swap via IUniswapV3Pool#swap.
namings here follow Uniswap's convention
Parameters:
Name | Type | Description |
---|---|---|
| int256 | The amount of token0 that was sent (negative) or must be received (positive) by the pool by |
the end of the swap. If positive, the callback must send that amount of token0 to the pool. |amount1Delta
| int256 | The amount of token1 that was sent (negative) or must be received (positive) by the pool by the end of the swap. If positive, the callback must send that amount of token1 to the pool. |data
| bytes | Any data passed through by the caller via the IUniswapV3PoolActions#swap call
getQuoteToken
Get QuoteToken address
Return Values:
Name | Type | Description |
---|---|---|
| address | The quote token address |
getUniswapV3Factory
Get UniswapV3Factory address
Return Values:
Name | Type | Description |
---|---|---|
| address | UniswapV3Factory address |
getClearingHouseConfig
Get ClearingHouseConfig address
Return Values:
Name | Type | Description |
---|---|---|
| address | ClearingHouseConfig address |
getVault
Get Vault
address
Return Values:
Name | Type | Description |
---|---|---|
| address |
|
getExchange
Get Exchange
address
Return Values:
Name | Type | Description |
---|---|---|
| address |
|
getOrderBook
Get OrderBook
address
Return Values:
Name | Type | Description |
---|---|---|
| address |
|
getAccountBalance
Get AccountBalance address
Return Values:
Name | Type | Description |
---|---|---|
| address |
|
getInsuranceFund
Get InsuranceFund
address
Return Values:
Name | Type | Description |
---|---|---|
| address |
|
getDelegateApproval
Get DelegateApproval
address
Return Values:
Name | Type | Description |
---|---|---|
| address |
|
getAccountValue
Get account value of trader
accountValue = totalCollateralValue + totalUnrealizedPnl, in 18 decimals
Parameters:
Name | Type | Description |
---|---|---|
| address | The address of trader |
Return Values:
Name | Type | Description |
---|---|---|
| int256 | The account value of trader |
ClearingHouseConfig
Functions
initialize
setLiquidationPenaltyRatio
setPartialCloseRatio
setTwapInterval
setMaxMarketsPerAccount
setSettlementTokenBalanceCap
setMaxFundingRate
setMarkPriceMarketTwapInterval
setMarkPricePremiumInterval
getMaxMarketsPerAccount
Return Values:
Name | Type | Description |
---|---|---|
| uint8 | Max value of total markets per account |
getImRatio
Return Values:
Name | Type | Description |
---|---|---|
| uint24 | Initial margin ratio |
getMmRatio
Return Values:
Name | Type | Description |
---|---|---|
| uint24 | Maintenance margin requirement ratio |
getLiquidationPenaltyRatio
Return Values:
Name | Type | Description |
---|---|---|
| uint24 | Liquidation penalty ratio |
getPartialCloseRatio
Return Values:
Name | Type | Description |
---|---|---|
| uint24 | Partial close ratio |
getTwapInterval
Return Values:
Name | Type | Description |
---|---|---|
| uint32 | TwapInterval for funding and prices (market & index) calculations |
getSettlementTokenBalanceCap
Return Values:
Name | Type | Description |
---|---|---|
| uint256 | Max value of settlement token balance |
getMaxFundingRate
Return Values:
Name | Type | Description |
---|---|---|
| uint24 | Max value of funding rate |
getMarkPriceConfig
Return Values:
Name | Type | Description |
---|---|---|
| uint32 | MarketTwapInterval is the interval of market twap used for mark price calculations |
| uint32 | PremiumInterval is the interval of premium used for mark price calculations |
Last updated