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