> For the complete documentation index, see [llms.txt](https://docs.algebra.finance/algebra-integral-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.algebra.finance/algebra-integral-documentation/algebra-v1-technical-reference/contracts/api-reference-v1.0/v1.0-tokenomics/ialgebrafarming.md).

# IAlgebraFarming

Algebra Farming Interface Allows farming nonfungible liquidity tokens in exchange for reward tokens

## Events

### IncentiveDetached

`IncentiveDetached(contract IERC20Minimal,contract IERC20Minimal,contract IAlgebraPool,address,uint256,uint256)`

Event emitted when a liquidity mining incentive has been stopped from the outside

| Name             | Type                   | Description                                   |
| ---------------- | ---------------------- | --------------------------------------------- |
| rewardToken      | contract IERC20Minimal | The token being distributed as a reward       |
| bonusRewardToken | contract IERC20Minimal | The token being distributed as a bonus reward |
| pool             | contract IAlgebraPool  | The Algebra pool                              |
| virtualPool      | address                | The detached virtual pool address             |
| startTime        | uint256                | The time when the incentive program begins    |
| endTime          | uint256                | The time when rewards stop accruing           |

### IncentiveAttached

`IncentiveAttached(contract IERC20Minimal,contract IERC20Minimal,contract IAlgebraPool,address,uint256,uint256)`

Event emitted when a liquidity mining incentive has been runned again from the outside

| Name             | Type                   | Description                                   |
| ---------------- | ---------------------- | --------------------------------------------- |
| rewardToken      | contract IERC20Minimal | The token being distributed as a reward       |
| bonusRewardToken | contract IERC20Minimal | The token being distributed as a bonus reward |
| pool             | contract IAlgebraPool  | The Algebra pool                              |
| virtualPool      | address                | The attached virtual pool address             |
| startTime        | uint256                | The time when the incentive program begins    |
| endTime          | uint256                | The time when rewards stop accruing           |

### FarmEntered

`FarmEntered(uint256,bytes32,uint128,uint256)`

Event emitted when a Algebra LP token has been farmd

| Name         | Type    | Description                                  |
| ------------ | ------- | -------------------------------------------- |
| tokenId      | uint256 | The unique identifier of an Algebra LP token |
| incentiveId  | bytes32 | The incentive in which the token is farming  |
| liquidity    | uint128 | The amount of liquidity farmd                |
| tokensLocked | uint256 | The amount of tokens locked for multiplier   |

### FarmEnded

`FarmEnded(uint256,bytes32,address,address,address,uint256,uint256)`

Event emitted when a Algebra LP token has been exitFarmingd

| Name             | Type    | Description                                         |
| ---------------- | ------- | --------------------------------------------------- |
| tokenId          | uint256 | The unique identifier of an Algebra LP token        |
| incentiveId      | bytes32 | The incentive in which the token is farming         |
| rewardAddress    | address | The token being distributed as a reward             |
| bonusRewardToken | address | The token being distributed as a bonus reward       |
| owner            | address | The address where claimed rewards were sent to      |
| reward           | uint256 | The amount of reward tokens to be distributed       |
| bonusReward      | uint256 | The amount of bonus reward tokens to be distributed |

### IncentiveMaker

`IncentiveMaker(address)`

Emitted when the incentive maker is changed

| Name           | Type    | Description                                       |
| -------------- | ------- | ------------------------------------------------- |
| incentiveMaker | address | The incentive maker after the address was changed |

### FarmingCenter

`FarmingCenter(address)`

Emitted when the farming center is changed

| Name          | Type    | Description                                      |
| ------------- | ------- | ------------------------------------------------ |
| farmingCenter | address | The farming center after the address was changed |

### RewardsAdded

`RewardsAdded(uint256,uint256,bytes32)`

Event emitted when rewards were added

| Name              | Type    | Description                                          |
| ----------------- | ------- | ---------------------------------------------------- |
| rewardAmount      | uint256 | The additional amount of main token                  |
| bonusRewardAmount | uint256 | The additional amount of bonus token                 |
| incentiveId       | bytes32 | The ID of the incentive for which rewards were added |

### RewardClaimed

`RewardClaimed(address,uint256,address,address)`

Event emitted when a reward token has been claimed

| Name          | Type    | Description                                    |
| ------------- | ------- | ---------------------------------------------- |
| to            | address | The address where claimed rewards were sent to |
| reward        | uint256 | The amount of reward tokens claimed            |
| rewardAddress | address | The token reward address                       |
| owner         | address | The address where claimed rewards were sent to |

## Functions

### nonfungiblePositionManager

`nonfungiblePositionManager()` view external

The nonfungible position manager with which this farming contract is compatible

**Returns:**

| Name | Type                                 | Description |
| ---- | ------------------------------------ | ----------- |
| \[0] | contract INonfungiblePositionManager |             |

### farmingCenter

`farmingCenter()` view external

The farming Center

**Returns:**

| Name | Type                    | Description |
| ---- | ----------------------- | ----------- |
| \[0] | contract IFarmingCenter |             |

### deployer

`deployer()` external

The pool deployer

**Returns:**

| Name | Type                          | Description |
| ---- | ----------------------------- | ----------- |
| \[0] | contract IAlgebraPoolDeployer |             |

### setIncentiveMaker

`setIncentiveMaker(address)` external

Updates the incentive maker

| Name             | Type    | Description                     |
| ---------------- | ------- | ------------------------------- |
| \_incentiveMaker | address | The new incentive maker address |

### incentives

`incentives(bytes32)` view external

Represents a farming incentive

| Name        | Type    | Description                                          |
| ----------- | ------- | ---------------------------------------------------- |
| incentiveId | bytes32 | The ID of the incentive computed from its parameters |

**Returns:**

| Name               | Type                         | Description |
| ------------------ | ---------------------------- | ----------- |
| totalReward        | uint256                      |             |
| bonusReward        | uint256                      |             |
| virtualPoolAddress | address                      |             |
| totalLiquidity     | uint224                      |             |
| multiplierToken    | address                      |             |
| tiers              | struct IAlgebraFarming.Tiers |             |

### detachIncentive

`detachIncentive(struct IIncentiveKey.IncentiveKey)` external

Detach incentive from the pool

| Name | Type                              | Description              |
| ---- | --------------------------------- | ------------------------ |
| key  | struct IIncentiveKey.IncentiveKey | The key of the incentive |

### attachIncentive

`attachIncentive(struct IIncentiveKey.IncentiveKey)` external

Attach incentive to the pool

| Name | Type                              | Description              |
| ---- | --------------------------------- | ------------------------ |
| key  | struct IIncentiveKey.IncentiveKey | The key of the incentive |

### rewards

`rewards(address,contract IERC20Minimal)` view external

Returns amounts of reward tokens owed to a given address according to the last time all farms were updated

| Name        | Type                   | Description                                      |
| ----------- | ---------------------- | ------------------------------------------------ |
| owner       | address                | The owner for which the rewards owed are checked |
| rewardToken | contract IERC20Minimal | The token for which to check rewards             |

**Returns:**

| Name        | Type    | Description |
| ----------- | ------- | ----------- |
| rewardsOwed | uint256 |             |

### setFarmingCenterAddress

`setFarmingCenterAddress(address)` external

Updates farming center address

| Name            | Type    | Description                             |
| --------------- | ------- | --------------------------------------- |
| \_farmingCenter | address | The new farming center contract address |

### enterFarming

`enterFarming(struct IIncentiveKey.IncentiveKey,uint256,uint256)` external

enter farming for Algebra LP token

| Name         | Type                              | Description                                                |
| ------------ | --------------------------------- | ---------------------------------------------------------- |
| key          | struct IIncentiveKey.IncentiveKey | The key of the incentive for which to enterFarming the NFT |
| tokenId      | uint256                           | The ID of the token to exitFarming                         |
| tokensLocked | uint256                           | The amount of tokens locked for boost                      |

### exitFarming

`exitFarming(struct IIncentiveKey.IncentiveKey,uint256,address)` external

exitFarmings for Algebra LP token

| Name    | Type                              | Description                                               |
| ------- | --------------------------------- | --------------------------------------------------------- |
| key     | struct IIncentiveKey.IncentiveKey | The key of the incentive for which to exitFarming the NFT |
| tokenId | uint256                           | The ID of the token to exitFarming                        |
| \_owner | address                           | Owner of the token                                        |

### claimReward

`claimReward(contract IERC20Minimal,address,uint256)` external

Transfers \`amountRequested\` of accrued \`rewardToken\` rewards from the contract to the recipient \`to\`

| Name            | Type                   | Description                                                                    |
| --------------- | ---------------------- | ------------------------------------------------------------------------------ |
| rewardToken     | contract IERC20Minimal | The token being distributed as a reward                                        |
| to              | address                | The address where claimed rewards will be sent to                              |
| amountRequested | uint256                | The amount of reward tokens to claim. Claims entire reward amount if set to 0. |

**Returns:**

| Name   | Type    | Description |
| ------ | ------- | ----------- |
| reward | uint256 |             |

### claimRewardFrom

`claimRewardFrom(contract IERC20Minimal,address,address,uint256)` external

Transfers \`amountRequested\` of accrued \`rewardToken\` rewards from the contract to the recipient \`to\` only for FarmingCenter

| Name            | Type                   | Description                                                                    |
| --------------- | ---------------------- | ------------------------------------------------------------------------------ |
| rewardToken     | contract IERC20Minimal | The token being distributed as a reward                                        |
| from            | address                | The address of position owner                                                  |
| to              | address                | The address where claimed rewards will be sent to                              |
| amountRequested | uint256                | The amount of reward tokens to claim. Claims entire reward amount if set to 0. |

**Returns:**

| Name   | Type    | Description |
| ------ | ------- | ----------- |
| reward | uint256 |             |

### getRewardInfo

`getRewardInfo(struct IIncentiveKey.IncentiveKey,uint256)` external

Calculates the reward amount that will be received for the given farm

| Name    | Type                              | Description              |
| ------- | --------------------------------- | ------------------------ |
| key     | struct IIncentiveKey.IncentiveKey | The key of the incentive |
| tokenId | uint256                           | The ID of the token      |

**Returns:**

| Name        | Type    | Description |
| ----------- | ------- | ----------- |
| reward      | uint256 |             |
| bonusReward | uint256 |             |

***
