# AlgebraVirtualPoolBase

Abstract base contract for Algebra virtual pools

## Modifiers

### onlyFromPool

`modifier onlyFromPool()` internal

only pool (or FarmingCenter as "proxy") can call

### onlyFarming

`modifier onlyFarming()` internal

## Variables

### address farmingCenterAddress immutable

### address farmingAddress immutable

### address pool immutable

### mapping(int24 => struct TickManager.Tick) ticks

### uint128 currentLiquidity

### int24 globalTick

### uint32 timeOutside

### uint160 globalSecondsPerLiquidityCumulative

### uint32 prevTimestamp

### bool deactivated

## Functions

### getInnerSecondsPerLiquidity

`function getInnerSecondsPerLiquidity(int24 bottomTick, int24 topTick) external view returns (uint160 innerSecondsSpentPerLiquidity)` view external

get seconds per liquidity inside range

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

**Returns:**

| Name                          | Type    | Description |
| ----------------------------- | ------- | ----------- |
| innerSecondsSpentPerLiquidity | uint160 |             |

### cross

`function cross(int24 nextTick, bool zeroToOne) external` external

*Developer note: This function is called by the main pool when an initialized tick is crossed there. If the tick is also initialized in a virtual pool it should be crossed too*

| Name      | Type  | Description      |
| --------- | ----- | ---------------- |
| nextTick  | int24 | The crossed tick |
| zeroToOne | bool  | The direction    |

### increaseCumulative

`function increaseCumulative(uint32 currentTimestamp) external returns (enum IAlgebraVirtualPool.Status res)` external

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

| Name             | Type   | Description                       |
| ---------------- | ------ | --------------------------------- |
| currentTimestamp | uint32 | The timestamp of the current swap |

**Returns:**

| Name | Type                            | Description                       |
| ---- | ------------------------------- | --------------------------------- |
| res  | enum IAlgebraVirtualPool.Status | Status The status of virtual pool |

### deactivate

`function deactivate() external` external

This function is used to deactivate virtual pool. Deactivated virtual pool will return Status.NOT\_EXIST in increaseCumulative function

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