The margin engine is responsible for managing user positions and collateral. Allows users to take positions in all registered vAMMs.

const client = isSimulate 
? new SimulateCosmWasmClient({
chainId: 'Oraichain',
bech32Prefix: 'orai'
})
: await SigningCosmWasmClient.connectWithSigner('https://rpc.orai.io', await keplr.getOfflineSignerAuto('Oraichain'), {
prefix: 'orai',
gasPrice: GasPrice.fromString(`0.002orai`)
});

const engineClient = new MarginedEngineClient(client);

Hierarchy

Implements

Constructors

Properties

contractAddress: string
sender: string

Methods

  • Enables a user to close a position they have for a specific vAMM including slippage limits.

    Close Position

    If partial_liquidation_ratio == 1 then close the whole position

    Close Whole Position

    await engineClient.closePosition({
    vamm: vammClient.contractAddress,
    quoteAssetLimit: '0'
    });

    Parameters

    • __namedParameters: {
          positionId: number;
          quoteAssetLimit: string;
          vamm: string;
      }
      • positionId: number
      • quoteAssetLimit: string
      • vamm: string
    • _fee: number | StdFee | "auto" = "auto"
    • Optional _memo: string
    • Optional _funds: Coin[]

    Returns Promise<ExecuteResult>

  • Users can deposit additional margin to their positions to prevent them from becoming under-collateralised.

    Deposit Margin

    await engineClient.depositMargin({ 
    amount: '500000000',
    vamm: vammClient.contractAddress
    });

    Parameters

    • __namedParameters: {
          amount: string;
          positionId: number;
          vamm: string;
      }
      • amount: string
      • positionId: number
      • vamm: string
    • _fee: number | StdFee | "auto" = "auto"
    • Optional _memo: string
    • Optional _funds: Coin[]

    Returns Promise<ExecuteResult>

  • Allows third parties to liquidate users positions when they are no longer sufficiently collateralised.

    Liquidate Position

    If partial_liquidation_ratio == 0 then liquidate the whole position.

    Liquidate Whole Position

    await engineClient.liquidate({
    vamm: vammClient.contractAddress,
    trader: "orai...",
    quoteAssetLimit: '0'
    });

    Parameters

    • __namedParameters: {
          positionId: number;
          quoteAssetLimit: string;
          vamm: string;
      }
      • positionId: number
      • quoteAssetLimit: string
      • vamm: string
    • _fee: number | StdFee | "auto" = "auto"
    • Optional _memo: string
    • Optional _funds: Coin[]

    Returns Promise<ExecuteResult>

  • Enables a user to open a position for a specific vAMM with leverage. Also allows order to be placed with slippage limits.

    If side is buy (direction is 'add_to_amm') then open position (increase)

    Open Position Increase

    If old position is larger then reduce position (decrease)

    Open Position Decrease

    Otherwise close position then swap out the entire position (reverse)

    Open Position Reverse

    await engineClient.openPosition({
    vamm: vammClient.contractAddress,
    side: 'buy',
    marginAmount: '10000000',
    leverage: '8000000',
    baseAssetLimit: '4000000'
    })

    Parameters

    • __namedParameters: {
          baseAssetLimit: string;
          leverage: string;
          marginAmount: string;
          side: Side;
          stopLoss?: string;
          takeProfit: string;
          vamm: string;
      }
      • baseAssetLimit: string
      • leverage: string
      • marginAmount: string
      • side: Side
      • Optional stopLoss?: string
      • takeProfit: string
      • vamm: string
    • _fee: number | StdFee | "auto" = "auto"
    • Optional _memo: string
    • Optional _funds: Coin[]

    Returns Promise<ExecuteResult>

  • Allows third parties to trigger funding payments to be processed for a specific vAMM.

    The funding rate helps keep the perp price in line with the underlying asset's spot price. When the perp trades at a premium, longs pay shorts. Conversely, at a discount, shorts pay longs. Although the funding rate can take place at any cadence, it is generally set to one hour. If a perp trades at a 0.1% discount for 24 hours, purchasers of that perp will receive 0.1% as the summation of the 24 funding period.

    Pay Funding

    await engineContract.payFunding({ 
    vamm: vammContract.contractAddress
    });

    Parameters

    • __namedParameters: {
          vamm: string;
      }
      • vamm: string
    • _fee: number | StdFee | "auto" = "auto"
    • Optional _memo: string
    • Optional _funds: Coin[]

    Returns Promise<ExecuteResult>

  • Enables owner to update key contract parameters.

    await engineClient.updateConfig({ 
    tollRatio: '5000',
    spreadRatio: '5000'
    })

    Parameters

    • __namedParameters: {
          feePool?: string;
          initialMarginRatio?: string;
          insuranceFund?: string;
          liquidationFee?: string;
          maintenanceMarginRatio?: string;
          owner?: string;
          partialLiquidationRatio?: string;
          tpSlSpread?: string;
      }
      • Optional feePool?: string
      • Optional initialMarginRatio?: string
      • Optional insuranceFund?: string
      • Optional liquidationFee?: string
      • Optional maintenanceMarginRatio?: string
      • Optional owner?: string
      • Optional partialLiquidationRatio?: string
      • Optional tpSlSpread?: string
    • _fee: number | StdFee | "auto" = "auto"
    • Optional _memo: string
    • Optional _funds: Coin[]

    Returns Promise<ExecuteResult>

  • Users can withdraw excess collateral from their positions if they are over-collateralised

    Withdraw Margin

    await engineClient.withdrawMargin({ 
    amount: '500000000',
    vamm: vammClient.contractAddress
    });

    Parameters

    • __namedParameters: {
          amount: string;
          positionId: number;
          vamm: string;
      }
      • amount: string
      • positionId: number
      • vamm: string
    • _fee: number | StdFee | "auto" = "auto"
    • Optional _memo: string
    • Optional _funds: Coin[]

    Returns Promise<ExecuteResult>

©2020 - 2023 Oraichain Foundation