Tick

Contains functions for managing tick processes and relevant calculations

Info

struct Info {
  uint128 liquidityGross;
  int128 liquidityNet;
  uint256 feeGrowthOutside0X128;
  uint256 feeGrowthOutside1X128;
  int56 tickCumulativeOutside;
  uint160 secondsPerLiquidityOutsideX128;
  uint32 secondsOutside;
  bool initialized;
}

tickSpacingToMaxLiquidityPerTick

function tickSpacingToMaxLiquidityPerTick(int24 tickSpacing) internal pure returns (uint128)

Derives max liquidity per tick from given tick spacing

Executed within the pool constructor

Name Type Description
tickSpacing int24 The amount of required tick separation, realized in multiples of tickSpacing e.g., a tickSpacing of 3 requires ticks to be initialized every 3rd tick i.e., ..., -6, -3, 0, 3, 6, ...
Name Type Description
[0] uint128 The max liquidity per tick

getFeeGrowthInside

function getFeeGrowthInside(mapping(int24 => struct Tick.Info) self, int24 tickLower, int24 tickUpper, int24 tickCurrent, uint256 feeGrowthGlobal0X128, uint256 feeGrowthGlobal1X128) internal view returns (uint256 feeGrowthInside0X128, uint256 feeGrowthInside1X128)

Retrieves fee growth data

Name Type Description
self mapping(int24 => struct Tick.Info) The mapping containing all tick information for initialized ticks
tickLower int24 The lower tick boundary of the position
tickUpper int24 The upper tick boundary of the position
tickCurrent int24 The current tick
feeGrowthGlobal0X128 uint256 The all-time global fee growth, per unit of liquidity, in token0
feeGrowthGlobal1X128 uint256 The all-time global fee growth, per unit of liquidity, in token1
Name Type Description
feeGrowthInside0X128 uint256 The all-time fee growth in token0, per unit of liquidity, inside the position's tick boundaries
feeGrowthInside1X128 uint256 The all-time fee growth in token1, per unit of liquidity, inside the position's tick boundaries

update

function update(mapping(int24 => struct Tick.Info) self, int24 tick, int24 tickCurrent, int128 liquidityDelta, uint256 feeGrowthGlobal0X128, uint256 feeGrowthGlobal1X128, uint160 secondsPerLiquidityCumulativeX128, int56 tickCumulative, uint32 time, bool upper, uint128 maxLiquidity) internal returns (bool flipped)

Updates a tick and returns true if the tick was flipped from initialized to uninitialized, or vice versa

Name Type Description
self mapping(int24 => struct Tick.Info) The mapping containing all tick information for initialized ticks
tick int24 The tick that will be updated
tickCurrent int24 The current tick
liquidityDelta int128 A new amount of liquidity to be added (subtracted) when tick is crossed from left to right (right to left)
feeGrowthGlobal0X128 uint256 The all-time global fee growth, per unit of liquidity, in token0
feeGrowthGlobal1X128 uint256 The all-time global fee growth, per unit of liquidity, in token1
secondsPerLiquidityCumulativeX128 uint160 The all-time seconds per max(1, liquidity) of the pool
tickCumulative int56 The tick * time elapsed since the pool was first initialized
time uint32 The current block timestamp cast to a uint32
upper bool true for updating a position's upper tick, or false for updating a position's lower tick
maxLiquidity uint128 The maximum liquidity allocation for a single tick
Name Type Description
flipped bool Whether the tick was flipped from initialized to uninitialized, or vice versa

clear

function clear(mapping(int24 => struct Tick.Info) self, int24 tick) internal

Clears tick data

Name Type Description
self mapping(int24 => struct Tick.Info) The mapping containing all initialized tick information for initialized ticks
tick int24 The tick that will be cleared

cross

function cross(mapping(int24 => struct Tick.Info) self, int24 tick, uint256 feeGrowthGlobal0X128, uint256 feeGrowthGlobal1X128, uint160 secondsPerLiquidityCumulativeX128, int56 tickCumulative, uint32 time) internal returns (int128 liquidityNet)

Transitions to next tick as needed by price movement

Name Type Description
self mapping(int24 => struct Tick.Info) The mapping containing all tick information for initialized ticks
tick int24 The destination tick of the transition
feeGrowthGlobal0X128 uint256 The all-time global fee growth, per unit of liquidity, in token0
feeGrowthGlobal1X128 uint256 The all-time global fee growth, per unit of liquidity, in token1
secondsPerLiquidityCumulativeX128 uint160 The current seconds per liquidity
tickCumulative int56 The tick * time elapsed since the pool was first initialized
time uint32 The current block.timestamp
Name Type Description
liquidityNet int128 The amount of liquidity added (subtracted) when tick is crossed from left to right (right to left)