> For the complete documentation index, see [llms.txt](https://developers.lfj.gg/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.lfj.gg/contracts/libraries/feehelper.md).

# FeeHelper

[Git Source](https://github.com/traderjoe-xyz/joe-v2/blob/16f011d25e6bf6d0a0c479974345b623d491104f/src/libraries/FeeHelper.sol)

**Author:**\
Trader Joe

This library contains functions to calculate fees

## Functions

### verifyFee

*Modifier to check that the fee is not too large*

```solidity
modifier verifyFee(uint128 fee);
```

**Parameters**

| Name  | Type      | Description |
| ----- | --------- | ----------- |
| `fee` | `uint128` | The fee     |

### verifyProtocolShare

*Modifier to check that the protocol share is not too large*

```solidity
modifier verifyProtocolShare(uint128 protocolShare);
```

**Parameters**

| Name            | Type      | Description        |
| --------------- | --------- | ------------------ |
| `protocolShare` | `uint128` | The protocol share |

### getFeeAmountFrom

*Calculates the fee amount from the amount with fees, rounding up*

```solidity
function getFeeAmountFrom(uint128 amountWithFees, uint128 totalFee)
    internal
    pure
    verifyFee(totalFee)
    returns (uint128);
```

**Parameters**

| Name             | Type      | Description          |
| ---------------- | --------- | -------------------- |
| `amountWithFees` | `uint128` | The amount with fees |
| `totalFee`       | `uint128` | The total fee        |

**Returns**

| Name     | Type      | Description              |
| -------- | --------- | ------------------------ |
| `<none>` | `uint128` | feeAmount The fee amount |

### getFeeAmount

*Calculates the fee amount that will be charged, rounding up*

```solidity
function getFeeAmount(uint128 amount, uint128 totalFee) internal pure verifyFee(totalFee) returns (uint128);
```

**Parameters**

| Name       | Type      | Description   |
| ---------- | --------- | ------------- |
| `amount`   | `uint128` | The amount    |
| `totalFee` | `uint128` | The total fee |

**Returns**

| Name     | Type      | Description              |
| -------- | --------- | ------------------------ |
| `<none>` | `uint128` | feeAmount The fee amount |

### getCompositionFee

*Calculates the composition fee amount from the amount with fees, rounding down*

```solidity
function getCompositionFee(uint128 amountWithFees, uint128 totalFee)
    internal
    pure
    verifyFee(totalFee)
    returns (uint128);
```

**Parameters**

| Name             | Type      | Description          |
| ---------------- | --------- | -------------------- |
| `amountWithFees` | `uint128` | The amount with fees |
| `totalFee`       | `uint128` | The total fee        |

**Returns**

| Name     | Type      | Description          |
| -------- | --------- | -------------------- |
| `<none>` | `uint128` | The amount with fees |

### getProtocolFeeAmount

*Calculates the protocol fee amount from the fee amount and the protocol share, rounding down*

```solidity
function getProtocolFeeAmount(uint128 feeAmount, uint128 protocolShare)
    internal
    pure
    verifyProtocolShare(protocolShare)
    returns (uint128);
```

**Parameters**

| Name            | Type      | Description        |
| --------------- | --------- | ------------------ |
| `feeAmount`     | `uint128` | The fee amount     |
| `protocolShare` | `uint128` | The protocol share |

**Returns**

| Name     | Type      | Description                               |
| -------- | --------- | ----------------------------------------- |
| `<none>` | `uint128` | protocolFeeAmount The protocol fee amount |

### \_verifyFee

*Internal function to check that the fee is not too large*

```solidity
function _verifyFee(uint128 fee) private pure;
```

**Parameters**

| Name  | Type      | Description |
| ----- | --------- | ----------- |
| `fee` | `uint128` | The fee     |

## Errors

### FeeHelper\_\_FeeTooLarge

```solidity
error FeeHelper__FeeTooLarge();
```

### FeeHelper\_\_ProtocolShareTooLarge

```solidity
error FeeHelper__ProtocolShareTooLarge();
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://developers.lfj.gg/contracts/libraries/feehelper.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
