> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gains.trade/llms.txt
> Use this file to discover all available pages before exploring further.

# GNSTradingInteractions

*Facet #7: Trading (user interactions)*

## constructor

```solidity theme={null}
constructor() public
```

## initializeTrading

```solidity theme={null}
function initializeTrading(uint16 _marketOrdersTimeoutBlocks, address[] _usersByPassTriggerLink) external
```

*Initializes the trading facet*

### Parameters

| Name                        | Type       | Description                                                             |
| --------------------------- | ---------- | ----------------------------------------------------------------------- |
| \_marketOrdersTimeoutBlocks | uint16     | The number of blocks after which a market order is considered timed out |
| \_usersByPassTriggerLink    | address\[] |                                                                         |

## updateMarketOrdersTimeoutBlocks

```solidity theme={null}
function updateMarketOrdersTimeoutBlocks(uint16 _valueBlocks) external
```

*Updates marketOrdersTimeoutBlocks*

### Parameters

| Name          | Type   | Description                                 |
| ------------- | ------ | ------------------------------------------- |
| \_valueBlocks | uint16 | blocks after which a market order times out |

## updateByPassTriggerLink

```solidity theme={null}
function updateByPassTriggerLink(address[] _users, bool[] _shouldByPass) external
```

*Updates the users that can bypass the link cost of triggerOrder*

### Parameters

| Name           | Type       | Description                                                      |
| -------------- | ---------- | ---------------------------------------------------------------- |
| \_users        | address\[] | array of addresses that can bypass the link cost of triggerOrder |
| \_shouldByPass | bool\[]    | whether each user should bypass the link cost                    |

## setTradingDelegate

```solidity theme={null}
function setTradingDelegate(address _delegate) external
```

\_Sets *delegate as the new delegate of caller (can call delegatedAction)*

### Parameters

| Name       | Type    | Description              |
| ---------- | ------- | ------------------------ |
| \_delegate | address | the new delegate address |

## removeTradingDelegate

```solidity theme={null}
function removeTradingDelegate() external
```

*Removes the delegate of caller (can't call delegatedAction)*

## delegatedTradingAction

```solidity theme={null}
function delegatedTradingAction(address _trader, bytes _callData) external returns (bytes)
```

\_Caller executes a trading action on behalf of *trader using delegatecall*

### Parameters

| Name       | Type    | Description                                            |
| ---------- | ------- | ------------------------------------------------------ |
| \_trader   | address | the trader address to execute the trading action for   |
| \_callData | bytes   | the data to be executed (open trade/close trade, etc.) |

## openTrade

```solidity theme={null}
function openTrade(struct ITradingStorage.Trade _trade, uint16 _maxSlippageP, address _referrer) external
```

*Opens a new trade/limit order/stop order*

### Parameters

| Name           | Type                                                                                                     | Description                                                        |
| -------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
| \_trade        | [ITradingStorage.Trade](/developer/technical-reference/contracts/interfaces/types/itradingstorage#trade) | the trade to be opened                                             |
| \_maxSlippageP | uint16                                                                                                   | the maximum allowed slippage % when open the trade (1e3 precision) |
| \_referrer     | address                                                                                                  | the address of the referrer (can only be set once for a trader)    |

## openTradeNative

```solidity theme={null}
function openTradeNative(struct ITradingStorage.Trade _trade, uint16 _maxSlippageP, address _referrer) external payable
```

*Wraps native token and opens a new trade/limit order/stop order*

### Parameters

| Name           | Type                                                                                                     | Description                                                        |
| -------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
| \_trade        | [ITradingStorage.Trade](/developer/technical-reference/contracts/interfaces/types/itradingstorage#trade) | the trade to be opened                                             |
| \_maxSlippageP | uint16                                                                                                   | the maximum allowed slippage % when open the trade (1e3 precision) |
| \_referrer     | address                                                                                                  | the address of the referrer (can only be set once for a trader)    |

## updateMaxClosingSlippageP

```solidity theme={null}
function updateMaxClosingSlippageP(uint32 _index, uint16 _maxSlippageP) external
```

*Updates existing trade's max closing slippage % for caller*

### Parameters

| Name           | Type   | Description                                |
| -------------- | ------ | ------------------------------------------ |
| \_index        | uint32 | index of trade                             |
| \_maxSlippageP | uint16 | new max closing slippage % (1e3 precision) |

## closeTradeMarket

```solidity theme={null}
function closeTradeMarket(uint32 _index, uint64 _expectedPrice) external
```

*Closes an open trade (market order) for caller*

### Parameters

| Name            | Type   | Description                                                         |
| --------------- | ------ | ------------------------------------------------------------------- |
| \_index         | uint32 | the index of the trade of caller                                    |
| \_expectedPrice | uint64 | expected closing price, used to check max slippage (1e10 precision) |

## updateOpenOrder

```solidity theme={null}
function updateOpenOrder(uint32 _index, uint64 _triggerPrice, uint64 _tp, uint64 _sl, uint16 _maxSlippageP) external
```

*Updates an existing limit/stop order for caller*

### Parameters

| Name           | Type   | Description                                            |
| -------------- | ------ | ------------------------------------------------------ |
| \_index        | uint32 | index of limit/stop order of caller                    |
| \_triggerPrice | uint64 | new trigger price of limit/stop order (1e10 precision) |
| \_tp           | uint64 | new tp of limit/stop order (1e10 precision)            |
| \_sl           | uint64 | new sl of limit/stop order (1e10 precision)            |
| \_maxSlippageP | uint16 | new max slippage % of limit/stop order (1e3 precision) |

## cancelOpenOrder

```solidity theme={null}
function cancelOpenOrder(uint32 _index) external
```

*Cancels an open limit/stop order for caller*

### Parameters

| Name    | Type   | Description                         |
| ------- | ------ | ----------------------------------- |
| \_index | uint32 | index of limit/stop order of caller |

## updateTp

```solidity theme={null}
function updateTp(uint32 _index, uint64 _newTp) external
```

*Updates the tp of an open trade for caller*

### Parameters

| Name    | Type   | Description                           |
| ------- | ------ | ------------------------------------- |
| \_index | uint32 | index of open trade of caller         |
| \_newTp | uint64 | new tp of open trade (1e10 precision) |

## updateSl

```solidity theme={null}
function updateSl(uint32 _index, uint64 _newSl) external
```

*Updates the sl of an open trade for caller*

### Parameters

| Name    | Type   | Description                           |
| ------- | ------ | ------------------------------------- |
| \_index | uint32 | index of open trade of caller         |
| \_newSl | uint64 | new sl of open trade (1e10 precision) |

## updateLeverage

```solidity theme={null}
function updateLeverage(uint32 _index, uint24 _newLeverage) external
```

*Update trade leverage*

### Parameters

| Name          | Type   | Description        |
| ------------- | ------ | ------------------ |
| \_index       | uint32 | index of trade     |
| \_newLeverage | uint24 | new leverage (1e3) |

## increasePositionSize

```solidity theme={null}
function increasePositionSize(uint32 _index, uint120 _collateralDelta, uint24 _leverageDelta, uint64 _expectedPrice, uint16 _maxSlippageP) external
```

*Increase trade position size*

### Parameters

| Name              | Type    | Description                                  |
| ----------------- | ------- | -------------------------------------------- |
| \_index           | uint32  | index of trade                               |
| \_collateralDelta | uint120 | collateral to add (collateral precision)     |
| \_leverageDelta   | uint24  | partial trade leverage (1e3)                 |
| \_expectedPrice   | uint64  | expected price of execution (1e10 precision) |
| \_maxSlippageP    | uint16  | max slippage % (1e3)                         |

## decreasePositionSize

```solidity theme={null}
function decreasePositionSize(uint32 _index, uint120 _collateralDelta, uint24 _leverageDelta, uint64 _expectedPrice) external
```

*Decrease trade position size*

### Parameters

| Name              | Type    | Description                                                         |
| ----------------- | ------- | ------------------------------------------------------------------- |
| \_index           | uint32  | index of trade                                                      |
| \_collateralDelta | uint120 | collateral to remove (collateral precision)                         |
| \_leverageDelta   | uint24  | leverage to reduce by (1e3)                                         |
| \_expectedPrice   | uint64  | expected closing price, used to check max slippage (1e10 precision) |

## triggerOrder

```solidity theme={null}
function triggerOrder(uint256 _packed) external
```

*Initiates a new trigger order (for tp/sl/liq/limit/stop orders)*

### Parameters

| Name     | Type    | Description                                                     |
| -------- | ------- | --------------------------------------------------------------- |
| \_packed | uint256 | the packed data of the trigger order (orderType, trader, index) |

## cancelOrderAfterTimeout

```solidity theme={null}
function cancelOrderAfterTimeout(uint32 _orderIndex) external
```

*Safety function in case oracles don't answer in time, allows caller to cancel a pending order and if relevant claim back any stuck collateral Only allowed for MARKET\_OPEN, MARKET\_CLOSE, UPDATE\_LEVERAGE, MARKET\_PARTIAL\_OPEN, and MARKET\_PARTIAL\_CLOSE orders*

### Parameters

| Name         | Type   | Description                           |
| ------------ | ------ | ------------------------------------- |
| \_orderIndex | uint32 | the id of the pending order to cancel |

## getWrappedNativeToken

```solidity theme={null}
function getWrappedNativeToken() external view returns (address)
```

*Returns the wrapped native token or address(0) if the current chain, or the wrapped token, is not supported.*

## isWrappedNativeToken

```solidity theme={null}
function isWrappedNativeToken(address _token) external view returns (bool)
```

*Returns true if the token is the wrapped native token for the current chain, where supported.*

### Parameters

| Name    | Type    | Description   |
| ------- | ------- | ------------- |
| \_token | address | token address |

## getTradingDelegate

```solidity theme={null}
function getTradingDelegate(address _trader) external view returns (address)
```

*Returns the address a trader delegates his trading actions to*

### Parameters

| Name     | Type    | Description           |
| -------- | ------- | --------------------- |
| \_trader | address | address of the trader |

## getMarketOrdersTimeoutBlocks

```solidity theme={null}
function getMarketOrdersTimeoutBlocks() external view returns (uint16)
```

*Returns the current marketOrdersTimeoutBlocks value*

## getByPassTriggerLink

```solidity theme={null}
function getByPassTriggerLink(address _user) external view returns (bool)
```

*Returns whether a user bypasses trigger link costs*

### Parameters

| Name   | Type    | Description         |
| ------ | ------- | ------------------- |
| \_user | address | address of the user |
