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

# GNSBorrowingFees

*Facet #9: Borrowing Fees and open interests*

## constructor

```solidity theme={null}
constructor() public
```

## setBorrowingPairParams

```solidity theme={null}
function setBorrowingPairParams(uint8 _collateralIndex, uint16 _pairIndex, struct IBorrowingFees.BorrowingPairParams _value) external
```

*Updates borrowing pair params of a pair*

### Parameters

| Name              | Type                                                                                                                               | Description             |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ----------------------- |
| \_collateralIndex | uint8                                                                                                                              | index of the collateral |
| \_pairIndex       | uint16                                                                                                                             | index of the pair       |
| \_value           | [IBorrowingFees.BorrowingPairParams](/developer/technical-reference/contracts/interfaces/types/iborrowingfees#borrowingpairparams) | new value               |

## setBorrowingPairParamsArray

```solidity theme={null}
function setBorrowingPairParamsArray(uint8 _collateralIndex, uint16[] _indices, struct IBorrowingFees.BorrowingPairParams[] _values) external
```

*Updates borrowing pair params of multiple pairs*

### Parameters

| Name              | Type                                                                                                                                   | Description             |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- |
| \_collateralIndex | uint8                                                                                                                                  | index of the collateral |
| \_indices         | uint16\[]                                                                                                                              | indices of the pairs    |
| \_values          | [IBorrowingFees.BorrowingPairParams\[\]](/developer/technical-reference/contracts/interfaces/types/iborrowingfees#borrowingpairparams) | new values              |

## setBorrowingGroupParams

```solidity theme={null}
function setBorrowingGroupParams(uint8 _collateralIndex, uint16 _groupIndex, struct IBorrowingFees.BorrowingGroupParams _value) external
```

*Updates borrowing group params of a group*

### Parameters

| Name              | Type                                                                                                                                 | Description                  |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------- |
| \_collateralIndex | uint8                                                                                                                                | index of the collateral      |
| \_groupIndex      | uint16                                                                                                                               | index of the borrowing group |
| \_value           | [IBorrowingFees.BorrowingGroupParams](/developer/technical-reference/contracts/interfaces/types/iborrowingfees#borrowinggroupparams) | new value                    |

## setBorrowingGroupParamsArray

```solidity theme={null}
function setBorrowingGroupParamsArray(uint8 _collateralIndex, uint16[] _indices, struct IBorrowingFees.BorrowingGroupParams[] _values) external
```

*Updates borrowing group params of multiple groups*

### Parameters

| Name              | Type                                                                                                                                     | Description             |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- |
| \_collateralIndex | uint8                                                                                                                                    | index of the collateral |
| \_indices         | uint16\[]                                                                                                                                | indices of the groups   |
| \_values          | [IBorrowingFees.BorrowingGroupParams\[\]](/developer/technical-reference/contracts/interfaces/types/iborrowingfees#borrowinggroupparams) | new values              |

## handleTradeBorrowingCallback

```solidity theme={null}
function handleTradeBorrowingCallback(uint8 _collateralIndex, address _trader, uint16 _pairIndex, uint32 _index, uint256 _positionSizeCollateral, bool _open, bool _long) external virtual
```

*Callback after a trade is opened/closed to store pending borrowing fees and adjust open interests*

### Parameters

| Name                     | Type    | Description                                                   |
| ------------------------ | ------- | ------------------------------------------------------------- |
| \_collateralIndex        | uint8   | index of the collateral                                       |
| \_trader                 | address | address of the trader                                         |
| \_pairIndex              | uint16  | index of the pair                                             |
| \_index                  | uint32  | index of the trade                                            |
| \_positionSizeCollateral | uint256 | position size of the trade in collateral tokens               |
| \_open                   | bool    | true if trade has been opened, false if trade has been closed |
| \_long                   | bool    | true if trade is long, false if trade is short                |

## resetTradeBorrowingFees

```solidity theme={null}
function resetTradeBorrowingFees(uint8 _collateralIndex, address _trader, uint16 _pairIndex, uint32 _index, bool _long) external virtual
```

*Resets a trade borrowing fee to 0 (useful when new trade opened or when partial trade executed)*

### Parameters

| Name              | Type    | Description                                    |
| ----------------- | ------- | ---------------------------------------------- |
| \_collateralIndex | uint8   | index of the collateral                        |
| \_trader          | address | address of the trader                          |
| \_pairIndex       | uint16  | index of the pair                              |
| \_index           | uint32  | index of the trade                             |
| \_long            | bool    | true if trade is long, false if trade is short |

## getBorrowingPairPendingAccFees

```solidity theme={null}
function getBorrowingPairPendingAccFees(uint8 _collateralIndex, uint16 _pairIndex, uint256 _currentBlock) public view returns (uint64 accFeeLong, uint64 accFeeShort, uint64 pairAccFeeDelta)
```

*Returns the pending acc borrowing fees for a pair on both sides*

### Parameters

| Name              | Type    | Description             |
| ----------------- | ------- | ----------------------- |
| \_collateralIndex | uint8   | index of the collateral |
| \_pairIndex       | uint16  | index of the pair       |
| \_currentBlock    | uint256 | current block number    |

### Return Values

| Name            | Type   | Description                                          |
| --------------- | ------ | ---------------------------------------------------- |
| accFeeLong      | uint64 | new pair acc borrowing fee on long side              |
| accFeeShort     | uint64 | new pair acc borrowing fee on short side             |
| pairAccFeeDelta | uint64 | pair acc borrowing fee delta (for side that changed) |

## getBorrowingGroupPendingAccFees

```solidity theme={null}
function getBorrowingGroupPendingAccFees(uint8 _collateralIndex, uint16 _groupIndex, uint256 _currentBlock) public view returns (uint64 accFeeLong, uint64 accFeeShort, uint64 groupAccFeeDelta)
```

*Returns the pending acc borrowing fees for a borrowing group on both sides*

### Parameters

| Name              | Type    | Description                  |
| ----------------- | ------- | ---------------------------- |
| \_collateralIndex | uint8   | index of the collateral      |
| \_groupIndex      | uint16  | index of the borrowing group |
| \_currentBlock    | uint256 | current block number         |

### Return Values

| Name             | Type   | Description                                           |
| ---------------- | ------ | ----------------------------------------------------- |
| accFeeLong       | uint64 | new group acc borrowing fee on long side              |
| accFeeShort      | uint64 | new group acc borrowing fee on short side             |
| groupAccFeeDelta | uint64 | group acc borrowing fee delta (for side that changed) |

## getTradeBorrowingFee

```solidity theme={null}
function getTradeBorrowingFee(struct IBorrowingFees.BorrowingFeeInput _input) public view returns (uint256 feeAmountCollateral)
```

*Returns the borrowing fee for a trade*

### Parameters

| Name    | Type                                                                                                                           | Description                                                                        |
| ------- | ------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------- |
| \_input | [IBorrowingFees.BorrowingFeeInput](/developer/technical-reference/contracts/interfaces/types/iborrowingfees#borrowingfeeinput) | input data (collateralIndex, trader, pairIndex, index, long, collateral, leverage) |

### Return Values

| Name                | Type    | Description                          |
| ------------------- | ------- | ------------------------------------ |
| feeAmountCollateral | uint256 | borrowing fee (collateral precision) |

## getTradeLiquidationPrice

```solidity theme={null}
function getTradeLiquidationPrice(struct IBorrowingFees.LiqPriceInput _input) external view returns (uint256)
```

*Returns the liquidation price for a trade*

### Parameters

| Name    | Type                                                                                                                   | Description                                                                                   |
| ------- | ---------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
| \_input | [IBorrowingFees.LiqPriceInput](/developer/technical-reference/contracts/interfaces/types/iborrowingfees#liqpriceinput) | input data (collateralIndex, trader, pairIndex, index, openPrice, long, collateral, leverage) |

## getPairOisCollateral

```solidity theme={null}
function getPairOisCollateral(uint8 _collateralIndex, uint16 _pairIndex) public view returns (uint256 longOi, uint256 shortOi)
```

*Returns the open interests for a pair*

### Parameters

| Name              | Type   | Description             |
| ----------------- | ------ | ----------------------- |
| \_collateralIndex | uint8  | index of the collateral |
| \_pairIndex       | uint16 | index of the pair       |

### Return Values

| Name    | Type    | Description                 |
| ------- | ------- | --------------------------- |
| longOi  | uint256 | open interest on long side  |
| shortOi | uint256 | open interest on short side |

## getBorrowingPairGroupIndex

```solidity theme={null}
function getBorrowingPairGroupIndex(uint8 _collateralIndex, uint16 _pairIndex) public view returns (uint16 groupIndex)
```

*Returns the borrowing group index for a pair*

### Parameters

| Name              | Type   | Description             |
| ----------------- | ------ | ----------------------- |
| \_collateralIndex | uint8  | index of the collateral |
| \_pairIndex       | uint16 | index of the pair       |

### Return Values

| Name       | Type   | Description           |
| ---------- | ------ | --------------------- |
| groupIndex | uint16 | borrowing group index |

## getPairOiCollateral

```solidity theme={null}
function getPairOiCollateral(uint8 _collateralIndex, uint16 _pairIndex, bool _long) external view returns (uint256)
```

*Returns the open interest in collateral tokens for a pair on one side*

### Parameters

| Name              | Type   | Description             |
| ----------------- | ------ | ----------------------- |
| \_collateralIndex | uint8  | index of the collateral |
| \_pairIndex       | uint16 | index of the pair       |
| \_long            | bool   | true if long side       |

## withinMaxBorrowingGroupOi

```solidity theme={null}
function withinMaxBorrowingGroupOi(uint8 _collateralIndex, uint16 _pairIndex, bool _long, uint256 _positionSizeCollateral) external view returns (bool)
```

*Returns whether a trade is within the max group borrowing open interest*

### Parameters

| Name                     | Type    | Description                                     |
| ------------------------ | ------- | ----------------------------------------------- |
| \_collateralIndex        | uint8   | index of the collateral                         |
| \_pairIndex              | uint16  | index of the pair                               |
| \_long                   | bool    | true if long side                               |
| \_positionSizeCollateral | uint256 | position size of the trade in collateral tokens |

## getBorrowingGroup

```solidity theme={null}
function getBorrowingGroup(uint8 _collateralIndex, uint16 _groupIndex) external view returns (struct IBorrowingFees.BorrowingData)
```

*Returns a borrowing group's data*

### Parameters

| Name              | Type   | Description                  |
| ----------------- | ------ | ---------------------------- |
| \_collateralIndex | uint8  | index of the collateral      |
| \_groupIndex      | uint16 | index of the borrowing group |

## getBorrowingGroupOi

```solidity theme={null}
function getBorrowingGroupOi(uint8 _collateralIndex, uint16 _groupIndex) external view returns (struct IBorrowingFees.OpenInterest)
```

*Returns a borrowing group's oi data*

### Parameters

| Name              | Type   | Description                  |
| ----------------- | ------ | ---------------------------- |
| \_collateralIndex | uint8  | index of the collateral      |
| \_groupIndex      | uint16 | index of the borrowing group |

## getBorrowingPair

```solidity theme={null}
function getBorrowingPair(uint8 _collateralIndex, uint16 _pairIndex) external view returns (struct IBorrowingFees.BorrowingData)
```

*Returns a borrowing pair's data*

### Parameters

| Name              | Type   | Description             |
| ----------------- | ------ | ----------------------- |
| \_collateralIndex | uint8  | index of the collateral |
| \_pairIndex       | uint16 | index of the pair       |

## getBorrowingPairOi

```solidity theme={null}
function getBorrowingPairOi(uint8 _collateralIndex, uint16 _pairIndex) external view returns (struct IBorrowingFees.OpenInterest)
```

*Returns a borrowing pair's oi data*

### Parameters

| Name              | Type   | Description             |
| ----------------- | ------ | ----------------------- |
| \_collateralIndex | uint8  | index of the collateral |
| \_pairIndex       | uint16 | index of the pair       |

## getBorrowingPairGroups

```solidity theme={null}
function getBorrowingPairGroups(uint8 _collateralIndex, uint16 _pairIndex) external view returns (struct IBorrowingFees.BorrowingPairGroup[])
```

*Returns a borrowing pair's oi data*

### Parameters

| Name              | Type   | Description             |
| ----------------- | ------ | ----------------------- |
| \_collateralIndex | uint8  | index of the collateral |
| \_pairIndex       | uint16 | index of the pair       |

## getAllBorrowingPairs

```solidity theme={null}
function getAllBorrowingPairs(uint8 _collateralIndex) external view returns (struct IBorrowingFees.BorrowingData[], struct IBorrowingFees.OpenInterest[], struct IBorrowingFees.BorrowingPairGroup[][])
```

*Returns all borrowing pairs' borrowing data, oi data, and pair groups data*

### Parameters

| Name              | Type  | Description             |
| ----------------- | ----- | ----------------------- |
| \_collateralIndex | uint8 | index of the collateral |

## getBorrowingGroups

```solidity theme={null}
function getBorrowingGroups(uint8 _collateralIndex, uint16[] _indices) external view returns (struct IBorrowingFees.BorrowingData[], struct IBorrowingFees.OpenInterest[])
```

*Returns borrowing groups' data and oi data*

### Parameters

| Name              | Type      | Description             |
| ----------------- | --------- | ----------------------- |
| \_collateralIndex | uint8     | index of the collateral |
| \_indices         | uint16\[] | indices of the groups   |

## getBorrowingInitialAccFees

```solidity theme={null}
function getBorrowingInitialAccFees(uint8 _collateralIndex, address _trader, uint32 _index) external view returns (struct IBorrowingFees.BorrowingInitialAccFees)
```

*Returns borrowing groups' data*

### Parameters

| Name              | Type    | Description             |
| ----------------- | ------- | ----------------------- |
| \_collateralIndex | uint8   | index of the collateral |
| \_trader          | address | address of trader       |
| \_index           | uint32  | index of trade          |

## getPairMaxOi

```solidity theme={null}
function getPairMaxOi(uint8 _collateralIndex, uint16 _pairIndex) external view returns (uint256)
```

*Returns the max open interest for a pair*

### Parameters

| Name              | Type   | Description             |
| ----------------- | ------ | ----------------------- |
| \_collateralIndex | uint8  | index of the collateral |
| \_pairIndex       | uint16 | index of the pair       |

## getPairMaxOiCollateral

```solidity theme={null}
function getPairMaxOiCollateral(uint8 _collateralIndex, uint16 _pairIndex) external view returns (uint256)
```

*Returns the max open interest in collateral tokens for a pair*

### Parameters

| Name              | Type   | Description             |
| ----------------- | ------ | ----------------------- |
| \_collateralIndex | uint8  | index of the collateral |
| \_pairIndex       | uint16 | index of the pair       |
