> 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.9-directional-fees/v1.9-directional-fees-tokenomics/ifarmingcenter.md).

# IFarmingCenter

## Events

### DepositTransferred

`event DepositTransferred(uint256 tokenId, address oldOwner, address newOwner)`

Emitted when ownership of a deposit changes

| Name     | Type    | Description                                                 |
| -------- | ------- | ----------------------------------------------------------- |
| tokenId  | uint256 | The ID of the deposit (and token) that is being transferred |
| oldOwner | address | The owner before the deposit was transferred                |
| newOwner | address | The owner after the deposit was transferred                 |

## Functions

### virtualPoolAddresses

`function virtualPoolAddresses(address) external view returns (address, address)` view external

| Name | Type    | Description |
| ---- | ------- | ----------- |
|      | address |             |

**Returns:**

| Name | Type    | Description |
| ---- | ------- | ----------- |
| \[0] | address |             |
| \[1] | address |             |

### nonfungiblePositionManager

`function nonfungiblePositionManager() external view returns (contract INonfungiblePositionManager)` view external

The nonfungible position manager with which this farming contract is compatible

**Returns:**

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

### limitFarming

`function limitFarming() external view returns (contract IAlgebraLimitFarming)` view external

**Returns:**

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

### eternalFarming

`function eternalFarming() external view returns (contract IAlgebraEternalFarming)` view external

**Returns:**

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

### farmingCenterVault

`function farmingCenterVault() external view returns (contract IFarmingCenterVault)` view external

**Returns:**

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

### l2Nfts

`function l2Nfts(uint256) external view returns (uint96 nonce, address operator, uint256 tokenId)` view external

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

**Returns:**

| Name     | Type    | Description |
| -------- | ------- | ----------- |
| nonce    | uint96  |             |
| operator | address |             |
| tokenId  | uint256 |             |

### deposits

`function deposits(uint256 tokenId) external view returns (uint256 L2TokenId, uint32 numberOfFarms, bool inLimitFarming, address owner)` view external

Returns information about a deposited NFT

| Name    | Type    | Description                                                 |
| ------- | ------- | ----------------------------------------------------------- |
| tokenId | uint256 | The ID of the deposit (and token) that is being transferred |

**Returns:**

| Name                                                                    | Type    | Description        |
| ----------------------------------------------------------------------- | ------- | ------------------ |
| L2TokenId                                                               | uint256 | The nft layer2 id, |
| numberOfFarms The number of farms,                                      |         |                    |
| inLimitFarming The parameter showing if the token is in the limit farm, |         |                    |
| owner The owner of deposit                                              |         |                    |
| numberOfFarms                                                           | uint32  |                    |
| inLimitFarming                                                          | bool    |                    |
| owner                                                                   | address |                    |

### connectVirtualPool

`function connectVirtualPool(contract IAlgebraPool pool, address virtualPool) external` external

Updates activeIncentive in AlgebraPool *Developer note: only farming can do it*

| Name        | Type                  | Description                                   |
| ----------- | --------------------- | --------------------------------------------- |
| pool        | contract IAlgebraPool | The AlgebraPool for which farming was created |
| virtualPool | address               | The virtual pool to be connected              |

### enterFarming

`function enterFarming(struct IIncentiveKey.IncentiveKey key, uint256 tokenId, uint256 tokensLocked, bool isLimit) external` external

Enters in incentive (time-limited or eternal farming) with NFT-position token *Developer note: token must be deposited in FarmingCenter*

| Name         | Type                              | Description                                                           |
| ------------ | --------------------------------- | --------------------------------------------------------------------- |
| key          | struct IIncentiveKey.IncentiveKey | The incentive event key                                               |
| tokenId      | uint256                           | The id of position NFT                                                |
| tokensLocked | uint256                           | Amount of tokens to lock for liquidity multiplier (if tiers are used) |
| isLimit      | bool                              | Is incentive time-limited or eternal                                  |

### exitFarming

`function exitFarming(struct IIncentiveKey.IncentiveKey key, uint256 tokenId, bool isLimit) external` external

Exits from incentive (time-limited or eternal farming) with NFT-position token

| Name    | Type                              | Description                          |
| ------- | --------------------------------- | ------------------------------------ |
| key     | struct IIncentiveKey.IncentiveKey | The incentive event key              |
| tokenId | uint256                           | The id of position NFT               |
| isLimit | bool                              | Is incentive time-limited or eternal |

### collect

`function collect(struct INonfungiblePositionManager.CollectParams params) external returns (uint256 amount0, uint256 amount1)` external

Collects up to a maximum amount of fees owed to a specific position to the recipient *Developer note: "proxies" to NonfungiblePositionManager*

| Name                                                  | Type                                             | Description                                                     |
| ----------------------------------------------------- | ------------------------------------------------ | --------------------------------------------------------------- |
| params                                                | struct INonfungiblePositionManager.CollectParams | tokenId The ID of the NFT for which tokens are being collected, |
| recipient The account that should receive the tokens, |                                                  |                                                                 |
| amount0Max The maximum amount of token0 to collect,   |                                                  |                                                                 |
| amount1Max The maximum amount of token1 to collect    |                                                  |                                                                 |

**Returns:**

| Name    | Type    | Description                            |
| ------- | ------- | -------------------------------------- |
| amount0 | uint256 | The amount of fees collected in token0 |
| amount1 | uint256 | The amount of fees collected in token1 |

### collectRewards

`function collectRewards(struct IIncentiveKey.IncentiveKey key, uint256 tokenId) external returns (uint256 reward, uint256 bonusReward)` external

Used to collect reward from eternal farming. Then reward can be claimed.

| Name    | Type                              | Description             |
| ------- | --------------------------------- | ----------------------- |
| key     | struct IIncentiveKey.IncentiveKey | The incentive event key |
| tokenId | uint256                           | The id of position NFT  |

**Returns:**

| Name        | Type    | Description                          |
| ----------- | ------- | ------------------------------------ |
| reward      | uint256 | The amount of collected reward       |
| bonusReward | uint256 | The amount of collected bonus reward |

### claimReward

`function claimReward(contract IERC20Minimal rewardToken, address to, uint256 amountRequestedIncentive, uint256 amountRequestedEternal) external returns (uint256 reward)` external

Used to claim and send rewards from farming(s) *Developer note: can be used via static call to get current rewards for user*

| Name                     | Type                   | Description                                  |
| ------------------------ | ---------------------- | -------------------------------------------- |
| rewardToken              | contract IERC20Minimal | The token that is a reward                   |
| to                       | address                | The address to be rewarded                   |
| amountRequestedIncentive | uint256                | Amount to claim in incentive (limit) farming |
| amountRequestedEternal   | uint256                | Amount to claim in eternal farming           |

**Returns:**

| Name   | Type    | Description                           |
| ------ | ------- | ------------------------------------- |
| reward | uint256 | The summary amount of claimed rewards |

### withdrawToken

`function withdrawToken(uint256 tokenId, address to, bytes data) external` external

Withdraw Algebra NFT-position token *Developer note: can be used via static call to get current rewards for user*

| Name    | Type    | Description                                        |
| ------- | ------- | -------------------------------------------------- |
| tokenId | uint256 | The id of position NFT                             |
| to      | address | New owner of position NFT                          |
| data    | bytes   | The additional data for NonfungiblePositionManager |
