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

# OtcUtils

*OTC facet internal library*

## initializeOtc

```solidity theme={null}
function initializeOtc(struct IOtc.OtcConfig _config) internal
```

*Check IOtcUtils interface for documentation*

## updateOtcConfig

```solidity theme={null}
function updateOtcConfig(struct IOtc.OtcConfig _config) internal
```

*Check IOtcUtils interface for documentation*

## addOtcCollateralBalance

```solidity theme={null}
function addOtcCollateralBalance(uint8 _collateralIndex, uint256 _collateralAmount) internal
```

*Check IOtcUtils interface for documentation*

## sellGnsForCollateral

```solidity theme={null}
function sellGnsForCollateral(uint8 _collateralIndex, uint256 _collateralAmount) internal
```

*Check IOtcUtils interface for documentation*

## getOtcConfig

```solidity theme={null}
function getOtcConfig() internal view returns (struct IOtc.OtcConfig)
```

*Check IOtcUtils interface for documentation*

## getOtcBalance

```solidity theme={null}
function getOtcBalance(uint8 _collateralIndex) internal view returns (uint256)
```

*Check IOtcUtils interface for documentation*

## getOtcRate

```solidity theme={null}
function getOtcRate(uint8 _collateralIndex) internal view returns (uint256)
```

*Check IOtcUtils interface for documentation*

## \_getSlot

```solidity theme={null}
function _getSlot() internal pure returns (uint256)
```

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

## \_getStorage

```solidity theme={null}
function _getStorage() internal pure returns (struct IOtc.OtcStorage s)
```

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

## \_getMultiCollatDiamond

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

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

## \_calculateGnsAmount

```solidity theme={null}
function _calculateGnsAmount(uint8 _collateralIndex, uint256 _collateralAmount, uint256 _gnsPriceCollateral) internal view returns (uint256)
```

*Calculate GNS amount for given collateral amount*

### Parameters

| Name                 | Type    | Description                                 |
| -------------------- | ------- | ------------------------------------------- |
| \_collateralIndex    | uint8   | index of the collateral                     |
| \_collateralAmount   | uint256 | amount of collateral (collateral precision) |
| \_gnsPriceCollateral | uint256 | price of GNS in collateral (1e10)           |

## \_calculateGnsDistribution

```solidity theme={null}
function _calculateGnsDistribution(uint256 _gnsAmount) internal view returns (uint256 treasuryAmountGns, uint256 stakingAmountGns, uint256 burnAmountGns)
```

*Calculate GNS distribution for treasury, GNS staking and burn*

### Parameters

| Name        | Type    | Description                               |
| ----------- | ------- | ----------------------------------------- |
| \_gnsAmount | uint256 | amount of GNS tokens to distribute (1e18) |

## \_distributeTreasuryGns

```solidity theme={null}
function _distributeTreasuryGns(uint256 _gnsAmount) internal
```

*Distributes treasury rewards in GNS tokens*

### Parameters

| Name        | Type    | Description                               |
| ----------- | ------- | ----------------------------------------- |
| \_gnsAmount | uint256 | amount of GNS tokens to distribute (1e18) |

## \_distributeStakingGns

```solidity theme={null}
function _distributeStakingGns(uint256 _gnsAmount) internal
```

*Distributes staking rewards in GNS tokens*

### Parameters

| Name        | Type    | Description                               |
| ----------- | ------- | ----------------------------------------- |
| \_gnsAmount | uint256 | amount of GNS tokens to distribute (1e18) |

## \_burnGns

```solidity theme={null}
function _burnGns(uint256 _gnsAmount) internal
```

*Burns GNS tokens*

### Parameters

| Name        | Type    | Description                         |
| ----------- | ------- | ----------------------------------- |
| \_gnsAmount | uint256 | amount of GNS tokens to burn (1e18) |
