# 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](/developer/technical-reference/contracts/interfaces/types/itradingstorage.md#trade)                                                 | trade of request |
| \_input | [IUpdatePositionSize.IncreasePositionSizeInput](/developer/technical-reference/contracts/interfaces/types/iupdatepositionsize.md#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](/developer/technical-reference/contracts/interfaces/types/itradingstorage.md#trade)                           | existing trade data     |
| \_partialTrade  | [ITradingStorage.Trade](/developer/technical-reference/contracts/interfaces/types/itradingstorage.md#trade)                           | partial trade data      |
| \_answer        | [ITradingCallbacks.AggregatorAnswer](/developer/technical-reference/contracts/interfaces/types/itradingcallbacks.md#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](/developer/technical-reference/contracts/interfaces/types/itradingstorage.md#trade)                                                   | existing trade data                                   |
| \_values        | [IUpdatePositionSize.IncreasePositionSizeValues](/developer/technical-reference/contracts/interfaces/types/iupdatepositionsize.md#increasepositionsizevalues) | pre-calculated useful values                          |
| \_answer        | [ITradingCallbacks.AggregatorAnswer](/developer/technical-reference/contracts/interfaces/types/itradingcallbacks.md#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](/developer/technical-reference/contracts/interfaces/types/itradingstorage.md#trade)                                                   | existing trade data          |
| \_values        | [IUpdatePositionSize.IncreasePositionSizeValues](/developer/technical-reference/contracts/interfaces/types/iupdatepositionsize.md#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](/developer/technical-reference/contracts/interfaces/types/itradingstorage.md#trade) | existing trade data |
| \_partialTrade  | [ITradingStorage.Trade](/developer/technical-reference/contracts/interfaces/types/itradingstorage.md#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.*


---

# 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/updatepositionsize/increasepositionsizeutils.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.
