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

# IFeeTiersUtils

*Interface for GNSFeeTiers facet (inherits types and also contains functions, events, and custom errors)*

## initializeFeeTiers

```solidity theme={null}
function initializeFeeTiers(uint256[] _groupIndices, uint256[] _groupVolumeMultipliers, uint256[] _feeTiersIndices, struct IFeeTiers.FeeTier[] _feeTiers) external
```

### Parameters

| Name                     | Type                                                                                                 | Description                                                     |
| ------------------------ | ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- |
| \_groupIndices           | uint256\[]                                                                                           | group indices (pairs storage fee index) to initialize           |
| \_groupVolumeMultipliers | uint256\[]                                                                                           | corresponding group volume multipliers (1e3)                    |
| \_feeTiersIndices        | uint256\[]                                                                                           | fee tiers indices to initialize                                 |
| \_feeTiers               | [IFeeTiers.FeeTier\[\]](/developer/technical-reference/contracts/interfaces/types/ifeetiers#feetier) | fee tiers values to initialize (feeMultiplier, pointsThreshold) |

## setGroupVolumeMultipliers

```solidity theme={null}
function setGroupVolumeMultipliers(uint256[] _groupIndices, uint256[] _groupVolumeMultipliers) external
```

*Updates groups volume multipliers*

### Parameters

| Name                     | Type       | Description                                |
| ------------------------ | ---------- | ------------------------------------------ |
| \_groupIndices           | uint256\[] | indices of groups to update                |
| \_groupVolumeMultipliers | uint256\[] | corresponding new volume multipliers (1e3) |

## setFeeTiers

```solidity theme={null}
function setFeeTiers(uint256[] _feeTiersIndices, struct IFeeTiers.FeeTier[] _feeTiers) external
```

*Updates fee tiers*

### Parameters

| Name              | Type                                                                                                 | Description                                           |
| ----------------- | ---------------------------------------------------------------------------------------------------- | ----------------------------------------------------- |
| \_feeTiersIndices | uint256\[]                                                                                           | indices of fee tiers to update                        |
| \_feeTiers        | [IFeeTiers.FeeTier\[\]](/developer/technical-reference/contracts/interfaces/types/ifeetiers#feetier) | new fee tiers values (feeMultiplier, pointsThreshold) |

## setTradersFeeTiersEnrollment

```solidity theme={null}
function setTradersFeeTiersEnrollment(address[] _traders, struct IFeeTiers.TraderEnrollment[] _values) external
```

*Updates traders enrollment status in fee tiers*

### Parameters

| Name      | Type                                                                                                                   | Description                     |
| --------- | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------- |
| \_traders | address\[]                                                                                                             | group of traders                |
| \_values  | [IFeeTiers.TraderEnrollment\[\]](/developer/technical-reference/contracts/interfaces/types/ifeetiers#traderenrollment) | corresponding enrollment values |

## addTradersUnclaimedPoints

```solidity theme={null}
function addTradersUnclaimedPoints(address[] _traders, enum IFeeTiers.CreditType[] _creditTypes, uint224[] _points) external
```

*Credits points to traders*

### Parameters

| Name          | Type                         | Description                            |
| ------------- | ---------------------------- | -------------------------------------- |
| \_traders     | address\[]                   | traders addresses                      |
| \_creditTypes | enum IFeeTiers.CreditType\[] | types of credit (IMMEDIATE, CLAIMABLE) |
| \_points      | uint224\[]                   | points to credit (1e18)                |

## updateTraderPoints

```solidity theme={null}
function updateTraderPoints(address _trader, uint256 _volumeUsd, uint256 _pairIndex) external
```

*Increases daily points from a new trade, re-calculate trailing points, and cache daily fee tier for a trader.*

### Parameters

| Name        | Type    | Description                  |
| ----------- | ------- | ---------------------------- |
| \_trader    | address | trader address               |
| \_volumeUsd | uint256 | trading volume in USD (1e18) |
| \_pairIndex | uint256 | pair index                   |

## calculateFeeAmount

```solidity theme={null}
function calculateFeeAmount(address _trader, uint256 _normalFeeAmountCollateral) external view returns (uint256)
```

*Returns fee amount after applying the trader's active fee tier multiplier*

### Parameters

| Name                        | Type    | Description                            |
| --------------------------- | ------- | -------------------------------------- |
| \_trader                    | address | address of trader                      |
| \_normalFeeAmountCollateral | uint256 | base fee amount (collateral precision) |

## getFeeTiersCount

```solidity theme={null}
function getFeeTiersCount() external view returns (uint256)
```

Returns the current number of active fee tiers

## getFeeTier

```solidity theme={null}
function getFeeTier(uint256 _feeTierIndex) external view returns (struct IFeeTiers.FeeTier)
```

*Returns a fee tier's details (feeMultiplier, pointsThreshold)*

### Parameters

| Name           | Type    | Description    |
| -------------- | ------- | -------------- |
| \_feeTierIndex | uint256 | fee tier index |

## getGroupVolumeMultiplier

```solidity theme={null}
function getGroupVolumeMultiplier(uint256 _groupIndex) external view returns (uint256)
```

*Returns a group's volume multiplier*

### Parameters

| Name         | Type    | Description                           |
| ------------ | ------- | ------------------------------------- |
| \_groupIndex | uint256 | group index (pairs storage fee index) |

## getFeeTiersTraderInfo

```solidity theme={null}
function getFeeTiersTraderInfo(address _trader) external view returns (struct IFeeTiers.TraderInfo)
```

*Returns a trader's info (lastDayUpdated, trailingPoints)*

### Parameters

| Name     | Type    | Description    |
| -------- | ------- | -------------- |
| \_trader | address | trader address |

## getFeeTiersTraderDailyInfo

```solidity theme={null}
function getFeeTiersTraderDailyInfo(address _trader, uint32 _day) external view returns (struct IFeeTiers.TraderDailyInfo)
```

*Returns a trader's daily fee tier info (feeMultiplierCache, points)*

### Parameters

| Name     | Type    | Description    |
| -------- | ------- | -------------- |
| \_trader | address | trader address |
| \_day    | uint32  | day            |

## getTraderFeeTiersEnrollment

```solidity theme={null}
function getTraderFeeTiersEnrollment(address _trader) external view returns (struct IFeeTiers.TraderEnrollment)
```

*Returns a trader's fee tiers enrollment status*

### Parameters

| Name     | Type    | Description    |
| -------- | ------- | -------------- |
| \_trader | address | trader address |

## getTraderUnclaimedPoints

```solidity theme={null}
function getTraderUnclaimedPoints(address _trader) external view returns (uint224)
```

*Returns a trader's unclaimed points, credited by Governance*

### Parameters

| Name     | Type    | Description    |
| -------- | ------- | -------------- |
| \_trader | address | trader address |

## GroupVolumeMultipliersUpdated

```solidity theme={null}
event GroupVolumeMultipliersUpdated(uint256[] groupIndices, uint256[] groupVolumeMultipliers)
```

*Emitted when group volume multipliers are updated*

### Parameters

| Name                   | Type       | Description                                |
| ---------------------- | ---------- | ------------------------------------------ |
| groupIndices           | uint256\[] | indices of updated groups                  |
| groupVolumeMultipliers | uint256\[] | new corresponding volume multipliers (1e3) |

## FeeTiersUpdated

```solidity theme={null}
event FeeTiersUpdated(uint256[] feeTiersIndices, struct IFeeTiers.FeeTier[] feeTiers)
```

*Emitted when fee tiers are updated*

### Parameters

| Name            | Type                        | Description                                                         |
| --------------- | --------------------------- | ------------------------------------------------------------------- |
| feeTiersIndices | uint256\[]                  | indices of updated fee tiers                                        |
| feeTiers        | struct IFeeTiers.FeeTier\[] | new corresponding fee tiers values (feeMultiplier, pointsThreshold) |

## TraderDailyPointsIncreased

```solidity theme={null}
event TraderDailyPointsIncreased(address trader, uint32 day, uint224 points)
```

*Emitted when a trader's daily points are updated*

### Parameters

| Name   | Type    | Description                   |
| ------ | ------- | ----------------------------- |
| trader | address | trader address                |
| day    | uint32  | day                           |
| points | uint224 | points added (1e18 precision) |

## TraderInfoFirstUpdate

```solidity theme={null}
event TraderInfoFirstUpdate(address trader, uint32 day)
```

*Emitted when a trader info is updated for the first time*

### Parameters

| Name   | Type    | Description       |
| ------ | ------- | ----------------- |
| trader | address | address of trader |
| day    | uint32  | day               |

## TraderTrailingPointsExpired

```solidity theme={null}
event TraderTrailingPointsExpired(address trader, uint32 fromDay, uint32 toDay, uint224 expiredPoints)
```

*Emitted when a trader's trailing points are updated*

### Parameters

| Name          | Type    | Description                            |
| ------------- | ------- | -------------------------------------- |
| trader        | address | trader address                         |
| fromDay       | uint32  | from day                               |
| toDay         | uint32  | to day                                 |
| expiredPoints | uint224 | expired points amount (1e18 precision) |

## TraderInfoUpdated

```solidity theme={null}
event TraderInfoUpdated(address trader, struct IFeeTiers.TraderInfo traderInfo)
```

*Emitted when a trader's info is updated*

### Parameters

| Name       | Type                        | Description                                            |
| ---------- | --------------------------- | ------------------------------------------------------ |
| trader     | address                     | address of trader                                      |
| traderInfo | struct IFeeTiers.TraderInfo | new trader info value (lastDayUpdated, trailingPoints) |

## TraderFeeMultiplierCached

```solidity theme={null}
event TraderFeeMultiplierCached(address trader, uint32 day, uint32 feeMultiplier)
```

*Emitted when a trader's cached fee multiplier is updated (this is the one used in fee calculations)*

### Parameters

| Name          | Type    | Description                        |
| ------------- | ------- | ---------------------------------- |
| trader        | address | address of trader                  |
| day           | uint32  | day                                |
| feeMultiplier | uint32  | new fee multiplier (1e3 precision) |

## TraderEnrollmentUpdated

```solidity theme={null}
event TraderEnrollmentUpdated(address trader, struct IFeeTiers.TraderEnrollment enrollment)
```

*Emitted when a trader's enrollment status is updated*

### Parameters

| Name       | Type                              | Description                    |
| ---------- | --------------------------------- | ------------------------------ |
| trader     | address                           | address of trader              |
| enrollment | struct IFeeTiers.TraderEnrollment | trader's new enrollment status |

## TraderPointsCredited

```solidity theme={null}
event TraderPointsCredited(address trader, uint32 day, enum IFeeTiers.CreditType creditType, uint224 points)
```

*Emitted when a trader is credited points by governance*

### Parameters

| Name       | Type                      | Description                                                                            |
| ---------- | ------------------------- | -------------------------------------------------------------------------------------- |
| trader     | address                   | trader address                                                                         |
| day        | uint32                    | day the points were credited on, may be different from the day the points were claimed |
| creditType | enum IFeeTiers.CreditType | credit type (IMMEDIATE, CLAIMABLE)                                                     |
| points     | uint224                   | points added (1e18 precision)                                                          |

## TraderUnclaimedPointsClaimed

```solidity theme={null}
event TraderUnclaimedPointsClaimed(address trader, uint32 day, uint224 points)
```

*Emitted when a trader's unclaimed points are claimed*

### Parameters

| Name   | Type    | Description                   |
| ------ | ------- | ----------------------------- |
| trader | address | trader address                |
| day    | uint32  | day of claim                  |
| points | uint224 | points added (1e18 precision) |

## WrongFeeTier

```solidity theme={null}
error WrongFeeTier()
```

## PointsOverflow

```solidity theme={null}
error PointsOverflow()
```
