> ## 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.

# DecreasePositionSizeUtils

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

## validateRequest

```solidity theme={null}
function validateRequest(struct ITradingStorage.Trade _trade, struct IUpdatePositionSize.DecreasePositionSizeInput _input) internal view returns (uint256 positionSizeCollateralDelta)
```

\_Validates decrease position size request

Possible inputs: collateral delta > 0 and leverage delta = 0 (decrease collateral by collateral delta) collateral delta = 0 and leverage delta > 0 (decrease leverage by leverage delta)

@param \_trade trade of request @param *input input values*

## prepareCallbackValues

```solidity theme={null}
function prepareCallbackValues(struct ITradingStorage.Trade _existingTrade, struct ITradingStorage.Trade _partialTrade, struct ITradingCallbacks.AggregatorAnswer _answer) internal view returns (struct IUpdatePositionSize.DecreasePositionSizeValues values)
```

*Calculates values for callback*

### Parameters

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

## validateCallback

```solidity theme={null}
function validateCallback(struct ITradingStorage.Trade _existingTrade, struct ITradingStorage.PendingOrder _pendingOrder, struct IUpdatePositionSize.DecreasePositionSizeValues _values, struct ITradingCallbacks.AggregatorAnswer _answer) internal view returns (enum ITradingCallbacks.CancelReason)
```

*Validates callback, and returns corresponding cancel reason*

### Parameters

| Name            | Type                                                                                                                                                       | Description                  |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- |
| \_existingTrade | [ITradingStorage.Trade](/developer/technical-reference/contracts/interfaces/types/itradingstorage#trade)                                                   |                              |
| \_pendingOrder  | [ITradingStorage.PendingOrder](/developer/technical-reference/contracts/interfaces/types/itradingstorage#pendingorder)                                     |                              |
| \_values        | [IUpdatePositionSize.DecreasePositionSizeValues](/developer/technical-reference/contracts/interfaces/types/iupdatepositionsize#decreasepositionsizevalues) | pre-calculated useful values |
| \_answer        | [ITradingCallbacks.AggregatorAnswer](/developer/technical-reference/contracts/interfaces/types/itradingcallbacks#aggregatoranswer)                         |                              |

## updateTradeSuccess

```solidity theme={null}
function updateTradeSuccess(struct ITradingStorage.Trade _existingTrade, struct IUpdatePositionSize.DecreasePositionSizeValues _values) internal
```

*Updates trade (for successful request)*

### Parameters

| Name            | Type                                                                                                                                                       | Description                  |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- |
| \_existingTrade | [ITradingStorage.Trade](/developer/technical-reference/contracts/interfaces/types/itradingstorage#trade)                                                   | existing trade data          |
| \_values        | [IUpdatePositionSize.DecreasePositionSizeValues](/developer/technical-reference/contracts/interfaces/types/iupdatepositionsize#decreasepositionsizevalues) | pre-calculated useful values |

## handleCanceled

```solidity theme={null}
function handleCanceled(struct ITradingStorage.Trade _existingTrade, 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#trade) | trade to update |
| \_cancelReason  | enum ITradingCallbacks.CancelReason                                                                      | cancel reason   |

## \_getMultiCollatDiamond

```solidity theme={null}
function _getMultiCollatDiamond() internal view returns (contract IGNSMultiCollatDiamond)
```

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