# IFarmingCenter

## Functions

### virtualPoolAddresses

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

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

**Returns:**

| Name | Type    | Description |
| ---- | ------- | ----------- |
| \[0] | 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 |             |

### eternalFarming

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

The eternal farming contract

**Returns:**

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

### algebraPoolDeployer

`function algebraPoolDeployer() external view returns (address)` view external

The Algebra poolDeployer contract

**Returns:**

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

### deposits

`function deposits(uint256 tokenId) external view returns (bytes32 eternalIncentiveId)` 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                                             |
| ------------------ | ------- | ------------------------------------------------------- |
| eternalIncentiveId | bytes32 | The id of eternal incentive that is active for this NFT |

### 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 IncentiveKey key, uint256 tokenId) 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 IncentiveKey | The incentive event key |
| tokenId | uint256             | The id of position NFT  |

### exitFarming

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

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

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

### collectRewards

`function collectRewards(struct 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 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 amountRequested) 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         |
| amountRequested | uint256                | Amount to claim in eternal farming |

**Returns:**

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