# EternalVirtualPool

Algebra eternal virtual pool

used to track active liquidity in farming and distribute rewards

## Modifiers

### onlyFromFarming

`modifier onlyFromFarming()` internal

## Variables

### address farmingAddress immutable

### address pool immutable

### uint128 currentLiquidity

### int24 globalTick

### uint32 prevTimestamp

### uint256 totalRewardGrowth0

### uint256 totalRewardGrowth1

## Functions

### constructor

`constructor(address _farmingAddress, address _pool) public` public

| Name             | Type    | Description |
| ---------------- | ------- | ----------- |
| \_farmingAddress | address |             |
| \_pool           | address |             |

### rewardReserves

`function rewardReserves() external view returns (uint128 reserve0, uint128 reserve1)` view external

Get reserves of rewards in one call

**Returns:**

| Name     | Type    | Description           |
| -------- | ------- | --------------------- |
| reserve0 | uint128 | The reserve of token0 |
| reserve1 | uint128 | The reserve of token1 |

### rewardRates

`function rewardRates() external view returns (uint128 rate0, uint128 rate1)` view external

Get rates of rewards in one call

**Returns:**

| Name  | Type    | Description                       |
| ----- | ------- | --------------------------------- |
| rate0 | uint128 | The rate of token0, rewards / sec |
| rate1 | uint128 | The rate of token1, rewards / sec |

### getInnerRewardsGrowth

`function getInnerRewardsGrowth(int24 bottomTick, int24 topTick) external view returns (uint256 rewardGrowthInside0, uint256 rewardGrowthInside1)` view external

| Name       | Type  | Description |
| ---------- | ----- | ----------- |
| bottomTick | int24 |             |
| topTick    | int24 |             |

**Returns:**

| Name                | Type    | Description |
| ------------------- | ------- | ----------- |
| rewardGrowthInside0 | uint256 |             |
| rewardGrowthInside1 | uint256 |             |

### addRewards

`function addRewards(uint128 token0Amount, uint128 token1Amount) external` external

Top up rewards reserves

| Name         | Type    | Description          |
| ------------ | ------- | -------------------- |
| token0Amount | uint128 | The amount of token0 |
| token1Amount | uint128 | The amount of token1 |

### decreaseRewards

`function decreaseRewards(uint128 token0Amount, uint128 token1Amount) external` external

Withdraw rewards from reserves directly

| Name         | Type    | Description          |
| ------------ | ------- | -------------------- |
| token0Amount | uint128 | The amount of token0 |
| token1Amount | uint128 | The amount of token1 |

### crossTo

`function crossTo(int24 targetTick, bool zeroToOne) external returns (bool)` external

*Developer note: This function is called by the main pool if an initialized ticks are crossed by swap. If any one of crossed ticks is also initialized in a virtual pool it should be crossed too*

| Name       | Type  | Description                                                   |
| ---------- | ----- | ------------------------------------------------------------- |
| targetTick | int24 | The target tick up to which we need to cross all active ticks |
| zeroToOne  | bool  | The direction                                                 |

**Returns:**

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

### distributeRewards

`function distributeRewards() external` external

*Developer note: This function is called from the main pool before every swap To increase rewards per liquidity cumulative considering previous liquidity. The liquidity is stored in a virtual pool*

### applyLiquidityDeltaToPosition

`function applyLiquidityDeltaToPosition(uint32 currentTimestamp, int24 bottomTick, int24 topTick, int128 liquidityDelta, int24 currentTick) external` external

*Developer note: This function is called when anyone farms their liquidity. The position in a virtual pool should be changed accordingly*

| Name             | Type   | Description                           |
| ---------------- | ------ | ------------------------------------- |
| currentTimestamp | uint32 | The timestamp of current block        |
| bottomTick       | int24  | The bottom tick of a position         |
| topTick          | int24  | The top tick of a position            |
| liquidityDelta   | int128 | The amount of liquidity in a position |
| currentTick      | int24  | The current tick in the main pool     |

### setRates

`function setRates(uint128 rate0, uint128 rate1) external` external

Change reward rates

| Name  | Type    | Description                                      |
| ----- | ------- | ------------------------------------------------ |
| rate0 | uint128 | The new rate of main token distribution per sec  |
| rate1 | uint128 | The new rate of bonus token distribution per sec |


---

# 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/eternalvirtualpool.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.
