Perp v2
Perp v2
  • About Perpetual Protocol
    • Social Links
    • Governance
    • v2 Era Ecosystem
    • PERP Token
  • Terms of Service
  • General
    • Wallets
    • Transfering Assets
    • Deposit & Withdrawal
    • Perpetual + Uniswap
    • FAQs
    • Guides
    • Legacy Reward Programs
    • Security
  • Hot Tub
  • Trading on Perp v2
    • How It Works
    • UI Overview
    • Perpetual Futures Basics
    • Trading Quick-start
    • Opening and Closing Positions
    • Account Value & More
    • Funding Payments
    • Order Types
    • Trading Fees and Gas Fees
    • Managing Risk
    • Multi-collateral
    • More docs
  • Providing Liquidity
    • Basics
    • Introduction to Maker UI
    • Add / Remove Liquidity
    • Estimated Fees and Rewards APR
    • More on LPing
    • Tools for LPs
  • Perp v2 Specs
  • Developer Docs
    • Developer FAQs
    • Source Code
    • Protocol Attributes
    • Contract guide
      • AccountBalance
      • BaseToken
      • ClearingHouse
      • CollateralManager
      • DelegateApproval
      • Exchange
      • InsuranceFund
      • MarketRegistry
      • OrderBook
      • QuoteToken
      • Vault
      • VirtualToken
    • Interface Contracts
      • IAccountBalance
      • IBaseToken
      • IClearingHouse
      • IClearingHouseConfig
      • IClearingHouseConfigEvent
      • ICollateralManager
      • IDelegateApproval
      • IERC20Metadata
      • IExchange
      • IIndexPrice
      • IInsuranceFund
      • IMarketRegistry
      • IOrderBook
      • IVault
      • IVirtualToken
    • Integration guide
    • Dev tools
Powered by GitBook
On this page
  • Functions​
  • Events​

Was this helpful?

  1. Developer Docs
  2. Interface Contracts

IClearingHouse

Last updated 1 year ago

Was this helpful?

AddLiquidityParams

  struct AddLiquidityParams(
    address baseToken
    uint256 base
    uint256 quote
    int24 lowerTick
    int24 upperTick
    uint256 minBase
    uint256 minQuote
    bool useTakerBalance
    uint256 deadline
  )

RemoveLiquidityParams

  struct RemoveLiquidityParams(
    address baseToken
    int24 lowerTick
    int24 upperTick
    uint128 liquidity
    uint256 minBase
    uint256 minQuote
    uint256 deadline
  )
  struct AddLiquidityResponse(
    uint256 base
    uint256 quote
    uint256 fee
    uint256 liquidity
  )
  struct RemoveLiquidityResponse(
    uint256 base
    uint256 quote
    uint256 fee
  )
  struct OpenPositionParams(
    address baseToken
    bool isBaseToQuote
    bool isExactInput
    uint256 amount
    uint256 oppositeAmountBound
    uint256 deadline
    uint160 sqrtPriceLimitX96
    bytes32 referralCode
  )
  struct ClosePositionParams(
    address baseToken
    uint160 sqrtPriceLimitX96
    uint256 oppositeAmountBound
    uint256 deadline
    bytes32 referralCode
  )
  struct CollectPendingFeeParams(
    address trader
    address baseToken
    int24 lowerTick
    int24 upperTick
  )
  function addLiquidity(
    struct IClearingHouse.AddLiquidityParams params
  ) external returns (struct IClearingHouse.AddLiquidityResponse response)

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 accept false now

Name
Type
Description

params

struct IClearingHouse.AddLiquidityParams

AddLiquidityParams struct

Name
Type
Description

response

struct IClearingHouse.AddLiquidityResponse

AddLiquidityResponse struct

  function removeLiquidity(
    struct IClearingHouse.RemoveLiquidityParams params
  ) external returns (struct IClearingHouse.RemoveLiquidityResponse response)

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

Name
Type
Description

params

struct IClearingHouse.RemoveLiquidityParams

RemoveLiquidityParams struct

Name
Type
Description

response

struct IClearingHouse.RemoveLiquidityResponse

RemoveLiquidityResponse struct

  function settleAllFunding(
    address trader
  ) external

Settle all markets fundingPayment to owedRealized Pnl

Name
Type
Description

trader

address

The address of trader

  function openPosition(
    struct IClearingHouse.OpenPositionParams params
  ) external returns (uint256 base, uint256 quote)

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

Name
Type
Description

params

struct IClearingHouse.OpenPositionParams

OpenPositionParams struct

Name
Type
Description

base

uint256

The amount of baseToken the taker got or spent

quote

uint256

The amount of quoteToken the taker got or spent

  function openPositionFor(
    address trader,
    struct IClearingHouse.OpenPositionParams params
  ) external returns (uint256 base, uint256 quote, uint256 fee)
Name
Type
Description

trader

address

The address of trader

params

struct IClearingHouse.OpenPositionParams

OpenPositionParams struct is the same as openPosition()

Name
Type
Description

base

uint256

The amount of baseToken the taker got or spent

quote

uint256

The amount of quoteToken the taker got or spent

fee

uint256

The trading fee

  function closePosition(
    struct IClearingHouse.ClosePositionParams params
  ) external returns (uint256 base, uint256 quote)

Close trader's position

Name
Type
Description

params

struct IClearingHouse.ClosePositionParams

ClosePositionParams struct

Name
Type
Description

base

uint256

The amount of baseToken the taker got or spent

quote

uint256

The amount of quoteToken the taker got or spent

  function liquidate(
    address trader,
    address baseToken,
    int256 positionSize
  ) external

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

Name
Type
Description

trader

address

The address of trader

baseToken

address

The address of baseToken

positionSize

int256

the position size to be liquidated by liquidator

  function liquidate(
    address trader,
    address baseToken
  ) external

liquidate trader's position and will liquidate the max possible position size

If margin ratio >= 0.5 mmRatio, maxLiquidateRatio = MIN((1, 0.5 totalAbsPositionValue / absPositionValue) If margin ratio < 0.5 mmRatio, maxLiquidateRatio = 1 maxLiquidatePositionSize = positionSize maxLiquidateRatio

Name
Type
Description

trader

address

The address of trader

baseToken

address

The address of baseToken

  function cancelExcessOrders(
    address maker,
    address baseToken,
    bytes32[] orderIds
  ) external

Cancel excess order of a maker

Order id can get from OrderBook.getOpenOrderIds

Name
Type
Description

maker

address

The address of Maker

baseToken

address

The address of baseToken

orderIds

bytes32[]

The id of the order

  function cancelAllExcessOrders(
    address maker,
    address baseToken
  ) external

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

Name
Type
Description

maker

address

The address of maker

baseToken

address

The address of baseToken

  function quitMarket(
    address trader,
    address baseToken
  ) external returns (uint256 base, uint256 quote)

Close all positions and remove all liquidities of a trader in the closed market

Name
Type
Description

trader

address

The address of trader

baseToken

address

The address of baseToken

Name
Type
Description

base

uint256

The amount of base token that is closed

quote

uint256

The amount of quote token that is closed

  function getAccountValue(
    address trader
  ) external returns (int256 accountValue)

Get account value of trader

accountValue = totalCollateralValue + totalUnrealizedPnl, in 18 decimals

Name
Type
Description

trader

address

The address of trader

Name
Type
Description

accountValue

int256

The account value of trader

  function getQuoteToken(
  ) external returns (address quoteToken)

Get QuoteToken address

Name
Type
Description

quoteToken

address

The quote token address

  function getUniswapV3Factory(
  ) external returns (address factory)

Get UniswapV3Factory address

Name
Type
Description

factory

address

UniswapV3Factory address

  function getClearingHouseConfig(
  ) external returns (address clearingHouseConfig)

Get ClearingHouseConfig address

Name
Type
Description

clearingHouseConfig

address

ClearingHouseConfig address

  function getVault(
  ) external returns (address vault)

Get Vault address

Name
Type
Description

vault

address

Vault address

  function getExchange(
  ) external returns (address exchange)

Get Exchange address

Name
Type
Description

exchange

address

Exchange address

  function getOrderBook(
  ) external returns (address orderBook)

Get OrderBook address

Name
Type
Description

orderBook

address

OrderBook address

  function getAccountBalance(
  ) external returns (address accountBalance)

Get AccountBalance address

Name
Type
Description

accountBalance

address

AccountBalance address

  function getInsuranceFund(
  ) external returns (address insuranceFund)

Get InsuranceFund address

Name
Type
Description

insuranceFund

address

InsuranceFund address

  function getDelegateApproval(
  ) external returns (address delegateApproval)

Get DelegateApproval address

Name
Type
Description

delegateApproval

address

DelegateApproval address

  event ReferredPositionChanged(
    bytes32 referralCode
  )

Emitted when open position with non-zero referral code

Name
Type
Description

referralCode

bytes32

The referral code by partners

  event PositionLiquidated(
    address trader,
    address baseToken,
    uint256 positionNotional,
    uint256 positionSize,
    uint256 liquidationFee,
    address liquidator
  )

Emitted when taker position is being liquidated

Name
Type
Description

trader

address

The trader who has been liquidated

baseToken

address

Virtual base token(ETH, BTC, etc...) address

positionNotional

uint256

The cost of position

positionSize

uint256

The size of position

liquidationFee

uint256

The fee of liquidate

liquidator

address

The address of liquidator

  event LiquidityChanged(
    address maker,
    address baseToken,
    address quoteToken,
    int24 lowerTick,
    int24 upperTick,
    int256 base,
    int256 quote,
    int128 liquidity,
    uint256 quoteFee
  )

Emitted when maker's liquidity of a order changed

Name
Type
Description

maker

address

The one who provide liquidity

baseToken

address

The address of virtual base token(ETH, BTC, etc...)

quoteToken

address

The address of virtual USD token

lowerTick

int24

The lower tick of the position in which to add liquidity

upperTick

int24

The upper tick of the position in which to add liquidity

base

int256

The amount of base token added (> 0) / removed (< 0) as liquidity; fees not included

quote

int256

The amount of quote token added ... (same as the above)

liquidity

int128

The amount of liquidity unit added (> 0) / removed (< 0)

quoteFee

uint256

The amount of quote token the maker received as fees

  event PositionChanged(
    address trader,
    address baseToken,
    int256 exchangedPositionSize,
    int256 exchangedPositionNotional,
    uint256 fee,
    int256 openNotional,
    int256 realizedPnl,
    uint256 sqrtPriceAfterX96
  )

Emitted when taker's position is being changed

Name
Type
Description

trader

address

Trader address

baseToken

address

The address of virtual base token(ETH, BTC, etc...)

exchangedPositionSize

int256

The actual amount swap to uniswapV3 pool

exchangedPositionNotional

int256

The cost of position, include fee

fee

uint256

The fee of open/close position

openNotional

int256

The cost of open/close position, < 0: long, > 0: short

realizedPnl

int256

The realized Pnl after open/close position

sqrtPriceAfterX96

uint256

The sqrt price after swap, in X96

  event PositionClosed(
    address trader,
    address baseToken,
    int256 closedPositionSize,
    int256 closedPositionNotional,
    int256 openNotional,
    int256 realizedPnl,
    uint256 closedPrice
  )

Emitted when taker close her position in closed market

Name
Type
Description

trader

address

Trader address

baseToken

address

The address of virtual base token(ETH, BTC, etc...)

closedPositionSize

int256

Trader's position size in closed market

closedPositionNotional

int256

Trader's position notional in closed market, based on closed price

openNotional

int256

The cost of open/close position, < 0: long, > 0: short

realizedPnl

int256

The realized Pnl after close position

closedPrice

uint256

The close price of position

  event FundingPaymentSettled(
    address trader,
    address baseToken,
    int256 fundingPayment
  )

Emitted when settling a trader's funding payment

Name
Type
Description

trader

address

The address of trader

baseToken

address

The address of virtual base token(ETH, BTC, etc...)

fundingPayment

int256

The fundingPayment of trader on baseToken market, > 0: payment, < 0 : receipt

  event TrustedForwarderChanged(
    address forwarder
  )

Emitted when trusted forwarder address changed

TrustedForward is only used for metaTx

Name
Type
Description

forwarder

address

The trusted forwarder address

  event DelegateApprovalChanged(
    address delegateApproval
  )

Emitted when DelegateApproval address changed

Name
Type
Description

delegateApproval

address

The address of DelegateApproval

AddLiquidityResponse

RemoveLiquidityResponse

OpenPositionParams

ClosePositionParams

CollectPendingFeeParams

Functions

addLiquidity

Parameters:

Return Values:

removeLiquidity

Parameters:

Return Values:

settleAllFunding

Parameters:

openPosition

Parameters:

Return Values:

openPositionFor

Parameters:

Return Values:

closePosition

Parameters:

Return Values:

liquidate

Parameters:

liquidate

Parameters:

cancelExcessOrders

Parameters:

cancelAllExcessOrders

Parameters:

quitMarket

Parameters:

Return Values:

getAccountValue

Parameters:

Return Values:

getQuoteToken

Return Values:

getUniswapV3Factory

Return Values:

getClearingHouseConfig

Return Values:

getVault

Return Values:

getExchange

Return Values:

getOrderBook

Return Values:

getAccountBalance

Return Values:

getInsuranceFund

Return Values:

getDelegateApproval

Return Values:

Events

ReferredPositionChanged

Parameters:

PositionLiquidated

Parameters:

LiquidityChanged

Parameters:

PositionChanged

Parameters:

PositionClosed

Parameters:

FundingPaymentSettled

Parameters:

TrustedForwarderChanged

Parameters:

DelegateApprovalChanged

Parameters:

​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​