# 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="/files/ZhcmNTM6pxQp29ryXxJW" %}

* 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&#xA;>)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.asterdex.com/trading/1001x/direct-contract-interaction.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
