# IncreasePositionSizeUtils

*This is an internal utils library for position size increases Used by UpdatePositionSizeLifecycles internal library*

## validateRequest

```solidity
function validateRequest(struct ITradingStorage.Trade _trade, struct IUpdatePositionSize.IncreasePositionSizeInput _input) internal view returns (uint256 positionSizeCollateralDelta)
```

\_Validates increase position request.

Possible inputs: collateral delta > 0 and leverage delta > 0 (increase position size by collateral delta \* leverage delta) collateral delta = 0 and leverage delta > 0 (increase trade leverage by leverage delta)\_

### Parameters

| Name    | Type                                                                                                                                                                   | Description      |
| ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- |
| \_trade | [ITradingStorage.Trade](https://docs.gains.trade/developer/technical-reference/interfaces/types/itradingstorage#trade)                                                 | trade of request |
| \_input | [IUpdatePositionSize.IncreasePositionSizeInput](https://docs.gains.trade/developer/technical-reference/interfaces/types/iupdatepositionsize#increasepositionsizeinput) | input values     |

## prepareCallbackValues

```solidity
function prepareCallbackValues(struct ITradingStorage.Trade _existingTrade, struct ITradingStorage.Trade _partialTrade, struct ITradingCallbacks.AggregatorAnswer _answer) internal view returns (struct IUpdatePositionSize.IncreasePositionSizeValues values)
```

*Calculates values for callback*

### Parameters

| Name            | Type                                                                                                                                             | Description             |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------- |
| \_existingTrade | [ITradingStorage.Trade](https://docs.gains.trade/developer/technical-reference/interfaces/types/itradingstorage#trade)                           | existing trade data     |
| \_partialTrade  | [ITradingStorage.Trade](https://docs.gains.trade/developer/technical-reference/interfaces/types/itradingstorage#trade)                           | partial trade data      |
| \_answer        | [ITradingCallbacks.AggregatorAnswer](https://docs.gains.trade/developer/technical-reference/interfaces/types/itradingcallbacks#aggregatoranswer) | price aggregator answer |

## validateCallback

```solidity
function validateCallback(struct ITradingStorage.Trade _existingTrade, struct IUpdatePositionSize.IncreasePositionSizeValues _values, struct ITradingCallbacks.AggregatorAnswer _answer, uint256 _expectedPrice, uint256 _maxSlippageP) internal view returns (enum ITradingCallbacks.CancelReason cancelReason)
```

*Validates callback, and returns corresponding cancel reason*

### Parameters

| Name            | Type                                                                                                                                                                     | Description                                           |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------- |
| \_existingTrade | [ITradingStorage.Trade](https://docs.gains.trade/developer/technical-reference/interfaces/types/itradingstorage#trade)                                                   | existing trade data                                   |
| \_values        | [IUpdatePositionSize.IncreasePositionSizeValues](https://docs.gains.trade/developer/technical-reference/interfaces/types/iupdatepositionsize#increasepositionsizevalues) | pre-calculated useful values                          |
| \_answer        | [ITradingCallbacks.AggregatorAnswer](https://docs.gains.trade/developer/technical-reference/interfaces/types/itradingcallbacks#aggregatoranswer)                         |                                                       |
| \_expectedPrice | uint256                                                                                                                                                                  | user expected price before callback (1e10)            |
| \_maxSlippageP  | uint256                                                                                                                                                                  | maximum slippage percentage from expected price (1e3) |

## updateTradeSuccess

```solidity
function updateTradeSuccess(struct ITradingStorage.Trade _existingTrade, struct IUpdatePositionSize.IncreasePositionSizeValues _values) internal
```

*Updates trade (for successful request)*

### Parameters

| Name            | Type                                                                                                                                                                     | Description                  |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------- |
| \_existingTrade | [ITradingStorage.Trade](https://docs.gains.trade/developer/technical-reference/interfaces/types/itradingstorage#trade)                                                   | existing trade data          |
| \_values        | [IUpdatePositionSize.IncreasePositionSizeValues](https://docs.gains.trade/developer/technical-reference/interfaces/types/iupdatepositionsize#increasepositionsizevalues) | pre-calculated useful values |

## handleCanceled

```solidity
function handleCanceled(struct ITradingStorage.Trade _existingTrade, struct ITradingStorage.Trade _partialTrade, enum ITradingCallbacks.CancelReason _cancelReason) internal
```

*Handles callback canceled case (for failed request)*

### Parameters

| Name            | Type                                                                                                                   | Description         |
| --------------- | ---------------------------------------------------------------------------------------------------------------------- | ------------------- |
| \_existingTrade | [ITradingStorage.Trade](https://docs.gains.trade/developer/technical-reference/interfaces/types/itradingstorage#trade) | existing trade data |
| \_partialTrade  | [ITradingStorage.Trade](https://docs.gains.trade/developer/technical-reference/interfaces/types/itradingstorage#trade) | partial trade data  |
| \_cancelReason  | enum ITradingCallbacks.CancelReason                                                                                    | cancel reason       |

## \_getMultiCollatDiamond

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

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