# ClaimableFee

[Git Source](https://github.com/Sperax/Demeter-Protocol/blob/cc93b9106874316d6dd016cdace652e2ca4ef8e1/contracts/features/ClaimableFee.sol)

**Inherits:** Farm

**Author:** Sperax Foundation.

Farms build for pairs/ pools in which fee can be claimed can extend and override \_claimPoolFee function of this contract.

## Functions

### claimPoolFee

A function to claim the pool fee earned by lp.

*Only the deposit owner can call this function.*

```solidity
function claimPoolFee(uint256 _depositId) external nonReentrant;
```

**Parameters**

| Name         | Type      | Description        |
| ------------ | --------- | ------------------ |
| `_depositId` | `uint256` | ID of the deposit. |

### \_claimPoolFee

Claim pool fee internal logic to be implemented by child farm contract.

*Just override this function and write the logic to claim fee, validation and other checks are handled in `claimPoolFee`.*

```solidity
function _claimPoolFee(uint256 _depositId)
    internal
    virtual
    returns (uint256 tokenId, uint256 amt0Recv, uint256 amt1Recv);
```

**Parameters**

| Name         | Type      | Description                            |
| ------------ | --------- | -------------------------------------- |
| `_depositId` | `uint256` | Deposit ID of the deposit in the farm. |

**Returns**

| Name       | Type      | Description                                                               |
| ---------- | --------- | ------------------------------------------------------------------------- |
| `tokenId`  | `uint256` | Token ID of the deposit for E721 farms, for other farms return depositId. |
| `amt0Recv` | `uint256` | Amount 0 received as fee.                                                 |
| `amt1Recv` | `uint256` | Amount 1 received as fee.                                                 |

## Events

### PoolFeeCollected

```solidity
event PoolFeeCollected(address indexed recipient, uint256 tokenId, uint256 amt0Recv, uint256 amt1Recv);
```

## Errors

### NoFeeToClaim

```solidity
error NoFeeToClaim();
```
