# AlgebraEternalFarming

Algebra eternal (v2-like) farming

## Modifiers

### onlyIncentiveMaker

`modifier onlyIncentiveMaker()` internal

### onlyAdministrator

`modifier onlyAdministrator()` internal

### onlyFarmingCenter

`modifier onlyFarmingCenter()` internal

## Variables

### contract INonfungiblePositionManager nonfungiblePositionManager immutable

The nonfungible position manager with which this farming contract is compatible

### contract IFarmingCenter farmingCenter

### mapping(bytes32 => struct AlgebraEternalFarming.Incentive) incentives

Represents a farming incentive

*Developer note: bytes32 refers to the return value of IncentiveId.compute*

### mapping(uint256 => mapping(bytes32 => struct AlgebraEternalFarming.Farm)) farms

Returns information about a farmd liquidity NFT

*Developer note: farms\[tokenId]\[incentiveHash] => Farm*

### uint256 numOfIncentives

### bytes32 INCENTIVE\_MAKER\_ROLE constant

### bytes32 FARMINGS\_ADMINISTRATOR\_ROLE constant

### mapping(address => mapping(contract IERC20Minimal => uint256)) rewards

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

*Developer note: rewards\[owner]\[rewardToken] => uint256*

## Functions

### constructor

`constructor(contract IAlgebraPoolDeployer _deployer, contract INonfungiblePositionManager _nonfungiblePositionManager) public` public

| Name                         | Type                                 | Description                               |
| ---------------------------- | ------------------------------------ | ----------------------------------------- |
| \_deployer                   | contract IAlgebraPoolDeployer        | pool deployer contract address            |
| \_nonfungiblePositionManager | contract INonfungiblePositionManager | the NFT position manager contract address |

### isIncentiveActiveInPool

`function isIncentiveActiveInPool(bytes32 incentiveId, contract IAlgebraPool pool) external view returns (bool res)` view external

Check if incentive is active in Algebra pool *Developer note: Does not check that the pool is indeed an Algebra pool*

| Name        | Type                  | Description                                          |
| ----------- | --------------------- | ---------------------------------------------------- |
| incentiveId | bytes32               | The ID of the incentive computed from its parameters |
| pool        | contract IAlgebraPool | Corresponding Algebra pool                           |

**Returns:**

| Name | Type | Description                                 |
| ---- | ---- | ------------------------------------------- |
| res  | bool | True if incentive is active in Algebra pool |

### createEternalFarming

`function createEternalFarming(struct IncentiveKey key, struct IAlgebraEternalFarming.IncentiveParams params) external returns (address virtualPool)` external

Creates a new liquidity mining incentive program

| Name   | Type                                          | Description                        |
| ------ | --------------------------------------------- | ---------------------------------- |
| key    | struct IncentiveKey                           | Details of the incentive to create |
| params | struct IAlgebraEternalFarming.IncentiveParams | Params of incentive                |

**Returns:**

| Name        | Type    | Description      |
| ----------- | ------- | ---------------- |
| virtualPool | address | The virtual pool |

### deactivateIncentive

`function deactivateIncentive(struct IncentiveKey key) external` external

Detach incentive from the pool and deactivate it

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

### decreaseRewardsAmount

`function decreaseRewardsAmount(struct IncentiveKey key, uint128 rewardAmount, uint128 bonusRewardAmount) external` external

| Name              | Type                | Description |
| ----------------- | ------------------- | ----------- |
| key               | struct IncentiveKey |             |
| rewardAmount      | uint128             |             |
| bonusRewardAmount | uint128             |             |

### setFarmingCenterAddress

`function setFarmingCenterAddress(address _farmingCenter) external` external

Updates farming center address

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

### addRewards

`function addRewards(struct IncentiveKey key, uint128 rewardAmount, uint128 bonusRewardAmount) external` external

| Name              | Type                | Description |
| ----------------- | ------------------- | ----------- |
| key               | struct IncentiveKey |             |
| rewardAmount      | uint128             |             |
| bonusRewardAmount | uint128             |             |

### setRates

`function setRates(struct IncentiveKey key, uint128 rewardRate, uint128 bonusRewardRate) external` external

| Name            | Type                | Description |
| --------------- | ------------------- | ----------- |
| key             | struct IncentiveKey |             |
| rewardRate      | uint128             |             |
| bonusRewardRate | uint128             |             |

### enterFarming

`function enterFarming(struct IncentiveKey key, uint256 tokenId) external` external

enter farming for Algebra LP token

| Name    | Type                | Description                                                |
| ------- | ------------------- | ---------------------------------------------------------- |
| key     | struct IncentiveKey | The key of the incentive for which to enterFarming the NFT |
| tokenId | uint256             | The ID of the token to exitFarming                         |

### exitFarming

`function exitFarming(struct IncentiveKey key, uint256 tokenId, address _owner) external` external

exitFarmings for Algebra LP token

| Name    | Type                | Description                                               |
| ------- | ------------------- | --------------------------------------------------------- |
| key     | struct 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

`function claimReward(contract IERC20Minimal rewardToken, address to, uint256 amountRequested) external returns (uint256 reward)` 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 | The amount of reward tokens claimed |

### claimRewardFrom

`function claimRewardFrom(contract IERC20Minimal rewardToken, address from, address to, uint256 amountRequested) external returns (uint256 reward)` 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 | The amount of reward tokens claimed |

### getRewardInfo

`function getRewardInfo(struct IncentiveKey key, uint256 tokenId) external view returns (uint256 reward, uint256 bonusReward)` view external

reward amounts can be outdated, actual amounts could be obtained via static call of \`collectRewards\` in FarmingCenter

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

**Returns:**

| Name        | Type    | Description                                                          |
| ----------- | ------- | -------------------------------------------------------------------- |
| reward      | uint256 | The reward accrued to the NFT for the given incentive thus far       |
| bonusReward | uint256 | The bonus reward accrued to the NFT for the given incentive thus far |

### collectRewards

`function collectRewards(struct IncentiveKey key, uint256 tokenId, address _owner) external returns (uint256 reward, uint256 bonusReward)` external

reward amounts should be updated before calling this method

| Name    | Type                | Description |
| ------- | ------------------- | ----------- |
| key     | struct IncentiveKey |             |
| tokenId | uint256             |             |
| \_owner | address             |             |

**Returns:**

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


---

# Agent Instructions: 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:

```
GET https://docs.algebra.finance/algebra-integral-documentation/algebra-v1-technical-reference/contracts/api-reference-v2.0/v2.0-tokenomics/algebraeternalfarming.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
