# FarmingCenter

Algebra main farming contract

*Developer note: Manages farmings and performs entry, exit and other actions.*

## Modifiers

### isOwner

`modifier isOwner(uint256 tokenId)` internal

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

## Variables

### contract IAlgebraEternalFarming eternalFarming immutable

The eternal farming contract

### contract INonfungiblePositionManager nonfungiblePositionManager immutable

The nonfungible position manager with which this farming contract is compatible

### address algebraPoolDeployer immutable

The Algebra poolDeployer contract

### mapping(address => address) virtualPoolAddresses

*Developer note: saves addresses of virtual pools for pool*

### mapping(uint256 => bytes32) deposits

*Developer note: deposits\[tokenId] => incentiveId*

### mapping(bytes32 => struct IncentiveKey) incentiveKeys

## Functions

### constructor

`constructor(contract IAlgebraEternalFarming _eternalFarming, contract INonfungiblePositionManager _nonfungiblePositionManager) public` public

| Name                         | Type                                 | Description |
| ---------------------------- | ------------------------------------ | ----------- |
| \_eternalFarming             | contract IAlgebraEternalFarming      |             |
| \_nonfungiblePositionManager | contract INonfungiblePositionManager |             |

### 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  |

### applyLiquidityDelta

`function applyLiquidityDelta(uint256 tokenId, int256 liquidityDelta) external` external

Report a change of liquidity in position

| Name           | Type    | Description                                            |
| -------------- | ------- | ------------------------------------------------------ |
| tokenId        | uint256 | The ID of the token for which liquidity is being added |
| liquidityDelta | int256  | The amount of added liquidity                          |

### increaseLiquidity

`function increaseLiquidity(uint256 tokenId, uint256 liquidityDelta) external` external

| Name           | Type    | Description |
| -------------- | ------- | ----------- |
| tokenId        | uint256 |             |
| liquidityDelta | uint256 |             |

### decreaseLiquidity

`function decreaseLiquidity(uint256 tokenId, uint256 liquidityDelta) external returns (bool success)` external

| Name           | Type    | Description |
| -------------- | ------- | ----------- |
| tokenId        | uint256 |             |
| liquidityDelta | uint256 |             |

**Returns:**

| Name    | Type | Description |
| ------- | ---- | ----------- |
| success | bool |             |

### burnPosition

`function burnPosition(uint256 tokenId) external returns (bool success)` external

Report a burn of position token

| Name    | Type    | Description                               |
| ------- | ------- | ----------------------------------------- |
| tokenId | uint256 | The ID of the token which is being burned |

**Returns:**

| Name    | Type | Description |
| ------- | ---- | ----------- |
| success | bool |             |

### 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 |

### connectVirtualPool

`function connectVirtualPool(contract IAlgebraPool pool, address newVirtualPool) 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 |
| newVirtualPool | address               |                                               |


---

# 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-directional-fees/v2.0-directional-fees-tokenomics/farmingcenter.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.
