# Direct Contract Interaction

Some users choose to interact directly with the contract for full control, automation, or when the app interface is unavailable or limited.

### How to Get Trading Pair Information

* **Contract address**: 0x1b6f2d3844c6ae7d56ceb3c3643b9060ba28feb0
* **Method**: ParisV3

#### **Response:**

```
  struct LeverageMargin {
        uint256 notionalUsd;
        uint16 tier;
        uint16 maxLeverage;
        uint16 initialLostP; // 1e4
        uint16 liqLostP;     // 1e4
    }

    struct SlippageConfig {
        string name;
        uint256 onePercentDepthAboveUsd;
        uint256 onePercentDepthBelowUsd;
        uint16 slippageLongP;       // 1e4
        uint16 slippageShortP;      // 1e4
        uint16 index;
        ISlippageManager.SlippageType slippageType;
        bool enable;
    }

    struct FeeConfig {
        string name;
        uint16 index;
        uint16 openFeeP;     // 1e4
        uint16 closeFeeP;    // 1e4
        bool enable;
        uint24 shareP;       // 1e5
        uint24 minCloseFeeP; // 1e5
    }

    struct PairView {
        // BTC/USD
        string name;
        // BTC address
        address base;
        uint16 basePosition;
        PairType pairType;
        PairStatus status;
        uint256 maxLongOiUsd;
        uint256 maxShortOiUsd;
        uint256 fundingFeePerBlockP;  // 1e18
        uint256 minFundingFeeR;       // 1e18
        uint256 maxFundingFeeR;       // 1e18

        LibPairsManager.LeverageMargin[] leverageMargins;

        uint16 slippageConfigIndex;
        uint16 slippagePosition;
        LibPairsManager.SlippageConfig slippageConfig;

        uint16 feeConfigIndex;
        uint16 feePosition;
        LibFeeManager.FeeConfig feeConfig;

        uint40 longHoldingFeeRate;    // 1e12
        uint40 shortHoldingFeeRate;   // 1e12
  }
```

### **How to open a position at the opening price** <a href="#id-1.-how-to-open-a-position-at-the-opening-price" id="id-1.-how-to-open-a-position-at-the-opening-price"></a>

* **Contract address:** 0x1b6f2d3844c6ae7d56ceb3c3643b9060ba28feb0
* **Method**: openMarketTrade
* **Parameters**: data (tuple) Tuple: A tuple is an array of values e.g. \[ "0x4sd…","100","100"..]. It can contain strings, integers, and boolean values. The structure for this tuple is:

```
struct OpenDataInput {
        // Pair.base
        address pairBase;
        bool isLong;
        // BUSD/USDT address
        address tokenIn;
        uint256 amountIn;   // tokenIn decimals
        uint256 qty;        // 1e10
        // Limit Order: limit price
        // Market Trade: worst price acceptable
        uint256 price;      // 1e8
        uint256 stopLoss;   // 1e8
        uint256 takeProfit; // 1e8
        uint256 broker;
    }
```

**Example**: If the user wants to use 100 USDT to place a pending order for a BTC Long position with Price 20000, Quantity 0.001, Take Profit Price 25000, and Stop Poss price 19000, the inPutData should be:\["0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c","True","0x55d398326f99059fF775485246999027B3197955","100000000000000000000","10000000",,"2000000000000"2500000000000","1900000000000",1]

### **How to place a limit order** <a href="#id-2.-how-to-place-a-limit-order" id="id-2.-how-to-place-a-limit-order"></a>

* **Contract address**: 0x1b6f2d3844c6ae7d56ceb3c3643b9060ba28feb0
* **Method**: createLimitOrder(
* **Parameters**: data (tuple)

```
struct OpenDataInput {
        // Pair.base
        address pairBase;
        bool isLong;
        // BUSD/USDT address
        address tokenIn;
        uint256 amountIn;   // tokenIn decimals
        uint256 qty;        // 1e10
        // Limit Order: limit price
        // Market Trade: worst price acceptable (acceptable price=index Price*(1+/- spread)
        uint256 price;      // 1e8
        uint256 stopLoss;   // 1e8
        uint256 takeProfit; // 1e8
        uint256 broker;
    }
```

### **How to check a user’s position information** <a href="#id-3.-how-to-check-users-position-information" id="id-3.-how-to-check-users-position-information"></a>

```
query OrderAndTradeHistorys {
    orderAndTradeHistories(
        skip: 0
        first: 1000
        orderBy: timestamp
        orderDirection: desc
        where: { user: "0x04e5fe43af1306e5fc2d4b0f9daa04d3a587b28f" }
    ) {
        id
        orderOrTradeHash
        actionType
        timestamp
        marginIncrement
        txHash
        limitOrder {
            id
            pair {
                name
            }
            isLong
            token {
                symbol
            }
            amountIn
            limitPrice
            qty
            takeProfit
            stopLoss
        }
        trade {
            id
            pair {
                name
            }
            isLong
            token {
                symbol
            }
            margin
            entryPrice
            qty
            openFee
            executionFee
            closeType
            closePrice
            closeFee
            fundingFee
            holdingFee
            pnl
            actualPnl
            broker {
                name
            }
        }
        user {
            id
        }
    }
}
```

### **How to check an open order** <a href="#id-4.-how-to-check-open-order" id="id-4.-how-to-check-open-order"></a>

* **Contract address**: 0x1b6f2d3844c6ae7d56ceb3c3643b9060ba28feb0
* **Method**: getLimitOrders

Parameters:

* **User**: address
* **Pairs**: 0x0000000000000000000000000000000000000000

**Response**:

```
struct Position {
```

### **How to close a position** <a href="#id-5.-how-to-close-a-position" id="id-5.-how-to-close-a-position"></a>

**Contract address**: 0x1b6f2d3844c6ae7d56ceb3c3643b9060ba28feb0

**Method**: closeTrade

**Parameters**:&#x20;

```
bytes32 tradeHash
```

### **How to add margin** <a href="#id-6.-how-to-add-margin" id="id-6.-how-to-add-margin"></a>

* Contract address: 0x1b6f2d3844c6ae7d56ceb3c3643b9060ba28feb0
* Method: addMargin

**Parameters**:&#x20;

```
  bytes32 tradeHash；
    unit256 amount；   // 1e10
```

### **How to adjust Take Profit and Stop Loss price** <a href="#id-7.-how-to-adjust-take-profit-and-stop-loss-price" id="id-7.-how-to-adjust-take-profit-and-stop-loss-price"></a>

* **Contract address**: 0x1b6f2d3844c6ae7d56ceb3c3643b9060ba28feb0
* **Method**: updateTradeTpAndSl

**Parameters**:&#x20;

```
bytes32 tradeHash；
    unit256 stopLossPrice；     // 1e8
    unit256 takeProfitPrice；   // 1e8
```

### **How to cancel the Limit order** <a href="#id-8.-how-to-cancel-the-limit-order" id="id-8.-how-to-cancel-the-limit-order"></a>

* **Contract address**: 0x1b6f2d3844c6ae7d56ceb3c3643b9060ba28feb0
* **Method**: cancelLimitOrder

**Parameters**:&#x20;

```
bytes32 tradeHash
```

\
**Margin amount decimals**:

* USDT: 1e18&#x20;
* USDC: 1e18&#x20;
* Price decimal: 1e8&#x20;
* Contract qty decimal: 1e10

### **Resources** <a href="#attachment" id="attachment"></a>

* ABI:

{% file src="<https://4068247257-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWhSHuKmgnGREbVb12PK2%2Fuploads%2FF8Wrzwq4EkVBtAP81vqp%2FAsterEX%20ABI.rtf?alt=media&token=dbfbbe3a-fcde-4783-b07a-8dfa57522f4a>" %}

* The Ethereum Diamond Inspector: <https://louper.dev/diamond/0x1b6F2d3844C6ae7D56ceb3C3643b9060ba28FEb0?network=bsc>
* Index price API: [https://www.apollox.finance/fapi/v1/premiumIndex<br>](https://www.apollox.finance/fapi/v1/premiumIndex)
