Skip to main content
Helpful?

SecondsOutside

Contains methods for working with a mapping from tick to 32 bit timestamp values, specifically seconds spent outside the tick.

The mapping uses int24 for keys since ticks are represented as int24 and there are 8 (2^3) values per word. Note "seconds outside" is always a relative measurement, only consistent for as long as a the lower tick and upper tick have gross liquidity greater than 0.

Functions

initialize

  function initialize(
mapping(int24 => uint256) self,
int24 tick,
int24 tickCurrent,
int24 tickSpacing,
uint32 time
) internal

Called the first time a tick is used to set the seconds outside value. Assumes the tick is not initialized.

Parameters:

NameTypeDescription
selfmapping(int24 => uint256)the packed mapping of tick to seconds outside
tickint24the tick to be initialized
tickCurrentint24the current tick
tickSpacingint24the spacing between usable ticks
timeuint32the current timestamp

clear

  function clear(
mapping(int24 => uint256) self,
int24 tick,
int24 tickSpacing
) internal

Called when a tick is no longer used, to clear the seconds outside value of the tick

Parameters:

NameTypeDescription
selfmapping(int24 => uint256)the packed mapping of tick to seconds outside
tickint24the tick to be cleared
tickSpacingint24the spacing between usable ticks

cross

  function cross(
mapping(int24 => uint256) self,
int24 tick,
int24 tickSpacing,
uint32 time
) internal

Called when an initialized tick is crossed to update the seconds outside for that tick. Must be called every time an initialized tick is crossed

Parameters:

NameTypeDescription
selfmapping(int24 => uint256)the packed mapping of tick to seconds outside
tickint24the tick to be crossed
tickSpacingint24the spacing between usable ticks
timeuint32the current block timestamp truncated to 32 bits

get

  function get(
mapping(int24 => uint256) self,
int24 tick,
int24 tickSpacing
) internal view returns (uint32)

Get the seconds outside for an initialized tick. Should be called only on initialized ticks.

Parameters:

NameTypeDescription
selfmapping(int24 => uint256)the packed mapping of tick to seconds outside
tickint24the tick to get the seconds outside value for
tickSpacingint24the spacing between usable ticks

Return Values:

TypeDescription
uint32seconds outside value for that tick

secondsInside

  function secondsInside(
mapping(int24 => uint256) self,
int24 tickLower,
int24 tickUpper,
int24 tickCurrent,
int24 tickSpacing
) internal view returns (uint32)

Get the seconds inside a tick range, assuming both tickLower and tickUpper are initialized

Parameters:

NameTypeDescription
selfmapping(int24 => uint256)the packed mapping of tick to seconds outside
tickLowerint24the lower tick for which to get seconds inside
tickUpperint24the upper tick for which to get seconds inside
tickCurrentint24the current tick
tickSpacingint24the spacing between usable ticks

Return Values:

NameTypeDescription
auint32relative seconds inside value that can be snapshotted and compared to a later snapshot to compute

time spent between tickLower and tickUpper, i.e. time that a position's liquidity was in use.

Helpful?