# TradingCallbacksUtils

*GNSTradingCallbacks facet internal library*

## tradingActivated

```solidity
modifier tradingActivated()
```

*Modifier to only allow trading action when trading is activated (= revert if not activated)*

## tradingActivatedOrCloseOnly

```solidity
modifier tradingActivatedOrCloseOnly()
```

*Modifier to only allow trading action when trading is activated or close only (= revert if paused)*

## initializeCallbacks

```solidity
function initializeCallbacks(uint8 _vaultClosingFeeP) internal
```

*Check ITradingCallbacksUtils interface for documentation*

## updateVaultClosingFeeP

```solidity
function updateVaultClosingFeeP(uint8 _valueP) internal
```

*Check ITradingCallbacksUtils interface for documentation*

## updateTreasuryAddress

```solidity
function updateTreasuryAddress(address _treasury) internal
```

*Check ITradingCallbacksUtils interface for documentation*

## claimPendingGovFees

```solidity
function claimPendingGovFees() internal
```

*Check ITradingCallbacksUtils interface for documentation*

## openTradeMarketCallback

```solidity
function openTradeMarketCallback(struct ITradingCallbacks.AggregatorAnswer _a) internal
```

*Check ITradingCallbacksUtils interface for documentation*

## closeTradeMarketCallback

```solidity
function closeTradeMarketCallback(struct ITradingCallbacks.AggregatorAnswer _a) internal
```

*Check ITradingCallbacksUtils interface for documentation*

## executeTriggerOpenOrderCallback

```solidity
function executeTriggerOpenOrderCallback(struct ITradingCallbacks.AggregatorAnswer _a) internal
```

*Check ITradingCallbacksUtils interface for documentation*

## executeTriggerCloseOrderCallback

```solidity
function executeTriggerCloseOrderCallback(struct ITradingCallbacks.AggregatorAnswer _a) internal
```

*Check ITradingCallbacksUtils interface for documentation*

## updateLeverageCallback

```solidity
function updateLeverageCallback(struct ITradingCallbacks.AggregatorAnswer _a) internal
```

*Check ITradingCallbacksUtils interface for documentation*

## increasePositionSizeMarketCallback

```solidity
function increasePositionSizeMarketCallback(struct ITradingCallbacks.AggregatorAnswer _a) internal
```

*Check ITradingCallbacksUtils interface for documentation*

## decreasePositionSizeMarketCallback

```solidity
function decreasePositionSizeMarketCallback(struct ITradingCallbacks.AggregatorAnswer _a) internal
```

*Check ITradingCallbacksUtils interface for documentation*

## getVaultClosingFeeP

```solidity
function getVaultClosingFeeP() internal view returns (uint8)
```

*Check ITradingCallbacksUtils interface for documentation*

## getPendingGovFeesCollateral

```solidity
function getPendingGovFeesCollateral(uint8 _collateralIndex) internal view returns (uint256)
```

*Check ITradingCallbacksUtils interface for documentation*

## validateTriggerOpenOrderCallback

```solidity
function validateTriggerOpenOrderCallback(struct ITradingStorage.Id _tradeId, enum ITradingStorage.PendingOrderType _orderType, uint64 _open, uint64 _high, uint64 _low) internal view returns (struct ITradingStorage.Trade t, enum ITradingCallbacks.CancelReason cancelReason, struct ITradingCallbacks.Values v)
```

*Check ITradingCallbacksUtils interface for documentation*

## validateTriggerCloseOrderCallback

```solidity
function validateTriggerCloseOrderCallback(struct ITradingStorage.Id _tradeId, enum ITradingStorage.PendingOrderType _orderType, uint64 _open, uint64 _high, uint64 _low) internal view returns (struct ITradingStorage.Trade t, enum ITradingCallbacks.CancelReason cancelReason, struct ITradingCallbacks.Values v)
```

*Check ITradingCallbacksUtils interface for documentation*

## \_getSlot

```solidity
function _getSlot() internal pure returns (uint256)
```

*Returns storage slot to use when fetching storage relevant to library*

## \_getStorage

```solidity
function _getStorage() internal pure returns (struct ITradingCallbacks.TradingCallbacksStorage s)
```

*Returns storage pointer for storage struct in diamond contract, at defined slot*

## \_getMultiCollatDiamond

```solidity
function _getMultiCollatDiamond() internal view returns (contract IGNSMultiCollatDiamond)
```

*Returns current address as multi-collateral diamond interface to call other facets functions.*

## \_registerTrade

```solidity
function _registerTrade(struct ITradingStorage.Trade _trade, struct ITradingStorage.PendingOrder _pendingOrder) internal returns (struct ITradingStorage.Trade)
```

*Registers a trade in storage, and handles all fees and rewards*

### Parameters

| Name           | Type                                                                                                                      | Description                 |
| -------------- | ------------------------------------------------------------------------------------------------------------------------- | --------------------------- |
| \_trade        | [ITradingStorage.Trade](/developer/technical-reference/contracts/interfaces/types/itradingstorage.md#trade)               | Trade to register           |
| \_pendingOrder | [ITradingStorage.PendingOrder](/developer/technical-reference/contracts/interfaces/types/itradingstorage.md#pendingorder) | Corresponding pending order |

### Return Values

| Name | Type                                                                                                        | Description            |
| ---- | ----------------------------------------------------------------------------------------------------------- | ---------------------- |
| \[0] | [ITradingStorage.Trade](/developer/technical-reference/contracts/interfaces/types/itradingstorage.md#trade) | Final registered trade |

## \_unregisterTrade

```solidity
function _unregisterTrade(struct ITradingStorage.Trade _trade, int256 _profitP, enum ITradingStorage.PendingOrderType _orderType, uint256 _oraclePrice, uint256 _liqPrice) internal returns (uint256 tradeValueCollateral)
```

*Unregisters a trade from storage, and handles all fees and rewards*

### Parameters

| Name          | Type                                                                                                        | Description                                       |
| ------------- | ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------- |
| \_trade       | [ITradingStorage.Trade](/developer/technical-reference/contracts/interfaces/types/itradingstorage.md#trade) | Trade to unregister                               |
| \_profitP     | int256                                                                                                      | Profit percentage (1e10)                          |
| \_orderType   | enum ITradingStorage.PendingOrderType                                                                       | pending order type                                |
| \_oraclePrice | uint256                                                                                                     | oracle price without closing spread/impact (1e10) |
| \_liqPrice    | uint256                                                                                                     | trade liquidation price (1e10)                    |

### Return Values

| Name                 | Type    | Description                                                                  |
| -------------------- | ------- | ---------------------------------------------------------------------------- |
| tradeValueCollateral | uint256 | Amount of collateral sent to trader, collateral + pnl (collateral precision) |

## \_openTradePrep

```solidity
function _openTradePrep(struct ITradingStorage.Trade _trade, uint256 _executionPrice, uint256 _oraclePrice, uint256 _spreadP, uint256 _maxSlippageP) internal view returns (uint256 priceImpactP, uint256 priceAfterImpact, enum ITradingCallbacks.CancelReason cancelReason)
```

*Makes pre-trade checks: price impact, if trade should be cancelled based on parameters like: PnL, leverage, slippage, etc.*

### Parameters

| Name             | Type                                                                                                        | Description                      |
| ---------------- | ----------------------------------------------------------------------------------------------------------- | -------------------------------- |
| \_trade          | [ITradingStorage](/developer/technical-reference/contracts/interfaces/types/itradingstorage.md#trade).Trade | trade input                      |
| \_executionPrice | uint256                                                                                                     | execution price (1e10 precision) |
| \_oraclePrice    | uint256                                                                                                     | oracle price (1e10 precision)    |
| \_spreadP        | uint256                                                                                                     | spread % (1e10 precision)        |
| \_maxSlippageP   | uint256                                                                                                     | max slippage % (1e3 precision)   |

## \_getPendingOrder

```solidity
function _getPendingOrder(struct ITradingStorage.Id _orderId) internal view returns (struct ITradingStorage.PendingOrder)
```

*Returns pending order from storage*

### Parameters

| Name      | Type                                                                                                  | Description |
| --------- | ----------------------------------------------------------------------------------------------------- | ----------- |
| \_orderId | [ITradingStorage.Id](/developer/technical-reference/contracts/interfaces/types/itradingstorage.md#id) | Order ID    |

### Return Values

| Name | Type                                                                                                                      | Description   |
| ---- | ------------------------------------------------------------------------------------------------------------------------- | ------------- |
| \[0] | [ITradingStorage.PendingOrder](/developer/technical-reference/contracts/interfaces/types/itradingstorage.md#pendingorder) | Pending order |

## \_getCollateralPriceUsd

```solidity
function _getCollateralPriceUsd(uint8 _collateralIndex) internal view returns (uint256)
```

*Returns collateral price in USD*

### Parameters

| Name              | Type  | Description      |
| ----------------- | ----- | ---------------- |
| \_collateralIndex | uint8 | Collateral index |

### Return Values

| Name | Type    | Description             |
| ---- | ------- | ----------------------- |
| \[0] | uint256 | Collateral price in USD |

## \_getTrade

```solidity
function _getTrade(address _trader, uint32 _index) internal view returns (struct ITradingStorage.Trade)
```

*Returns trade from storage*

### Parameters

| Name     | Type    | Description    |
| -------- | ------- | -------------- |
| \_trader | address | Trader address |
| \_index  | uint32  | Trade index    |

### Return Values

| Name | Type                                                                                                        | Description |
| ---- | ----------------------------------------------------------------------------------------------------------- | ----------- |
| \[0] | [ITradingStorage.Trade](/developer/technical-reference/contracts/interfaces/types/itradingstorage.md#trade) | Trade       |

## \_getTradeInfo

```solidity
function _getTradeInfo(address _trader, uint32 _index) internal view returns (struct ITradingStorage.TradeInfo)
```

*Returns trade info from storage*

### Parameters

| Name     | Type    | Description    |
| -------- | ------- | -------------- |
| \_trader | address | Trader address |
| \_index  | uint32  | Trade index    |

### Return Values

| Name | Type                                                                                                                | Description |
| ---- | ------------------------------------------------------------------------------------------------------------------- | ----------- |
| \[0] | [ITradingStorage.TradeInfo](/developer/technical-reference/contracts/interfaces/types/itradingstorage.md#tradeinfo) | TradeInfo   |


---

# 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.gains.trade/developer/technical-reference/contracts/libraries/tradingcallbacksutils.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.
