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

# Calculating borrowing fees

> Learn how to calculate trader's borrowing fees

## Overview

* Borrowing fees are paid only by one side (either longs or shorts) which is decided by current open interest (higher OI pays the fee)
* Each pair is part of a group, meaning that borrowing fee should be calculated for pair and pair's group and the higher of two should be charged (never both)
* Borrowing fee is charged on trader's position size (collateral \* leverage)

## Borrowing fee per block

The formula for borrowing fee per block is:

<Info>
  ```
  feePerBlock * (abs(longOi - shortOi) / maxOi) ** feeExponent
  ```
</Info>

### *Example:*

Let's calculate the borrowing fee for **ENA/USD** pair (`pairIndex` is `219`) against USDC collateral (`collateralIndex` is `3`)

#### 1) Fetching Open Interest and Fees

Access current open interests and fees for given collateral and pair index via [`trading-variables`](/developer/integrators/backend#trading-variables) endpoint described [**here**](/developer/integrators/backend#trading-variables)**.**

#### 2) Calculating Pair Borrowing Fees

To calculate ENA/USD borrowing fees, we use the following object retrieved from Step 1:

```javascript theme={null}
tradingVariables.collaterals[2].borrowingFees.pairs[219] // collaterals[2] because its 0 indexed
```

```javascript theme={null}
{
    "oi": {
        "long": "228761980790000", // 1e10
        "short": "59904000000000", // 1e10
        "max": "8806660000000000" // 1e10
    },
    "feePerBlock": "100236", // 1e10
    "feeExponent": "1",
    "groups": [
        {
            "groupIndex": "2",
            ...
        }
    ],
    ...
}
```

With these values, we can calculate the pair's borrowing fee (per block):

```javascript theme={null}
feePerBlock = 0.0000100236
longOi = 22876.198079
shortOi = 5990.4
maxOi = 880666

pairFeePerBlock = 0.0000100236 * Math.abs(22876.198079 - 5990.4) / 880666 ** 1 = 1.9219146149012726e-7
```

#### 3) Calculating Group Borrowing Fees

Now we need to do the same for group fee, reading the `groupIndex` from the same `trading-variables` response (for this example, `groupIndex` is `2`). The process is the same as for calculating pair fees, using `groups` values of `borrowingFees`:

```javascript theme={null}
tradingVariables.collaterals[2].borrowingFees.groups[2]
```

```javascript theme={null}
{
    "oi": {
        "long": "7704464978990000", // 1e10
        "short": "1841270854980000", // 1e10
        "max": "50906510000000000" // 1e10
    },
    "feePerBlock": "16871", // 1e10
    "feeExponent": "1"
    ...
}
```

Therefore, the group's borrowing fee (per block) will be:

```javascript theme={null}
feePerBlock = 0.0000016871
longOi = 770446.497899
shortOi = 184127.085498
maxOi = 5090651

groupFeePerBlock = 0.0000016871 * Math.abs(770446.497899 - 184127.085498) / 5090651 ** 1 = 1.9431296324610092e-7
```

In this example, `groupFeePairBlock`is greater than `pairFeePerBlok` (`1.9431296324610092e-7 > 1.9219146149012726e-7`) so `groupFeePairBlock` is the effective `feePerBlock`.

#### 4) Estimating Borrowing fee per hour

To estimate the hourly paid fee, we need to multiply the number of blocks per hour `feePerBlock`.

```javascript theme={null}
feePerHour = blocksPerHour * Math.max(pairFeePerBlock, groupFeePerBlock)
```

For this example, on **Arbitrum** (12000 blocks per hour), the estimated borrowing fee per hour is:

```javascript theme={null}
feePerHour = 12000 * Math.max(1.9219146149012726e-7, 1.9431296324610092e-7) // 0.002331755558953211% Borrowing (L)
```

Which corresponds to the **Gains** UI:

<img src="https://mintcdn.com/gains/IoupFIThDEsTzJuI/images/J01QQSqITaxkLo93Jgq7-image.png?fit=max&auto=format&n=IoupFIThDEsTzJuI&q=85&s=6e658eb25d38dcbec9da491164a0f892" alt="" width="881" height="137" data-path="images/J01QQSqITaxkLo93Jgq7-image.png" />
