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

self

mapping(int24 => uint256)

the packed mapping of tick to seconds outside

tick

int24

the tick to be initialized

tickCurrent

int24

the current tick

tickSpacing

int24

the spacing between usable ticks

time

uint32

the 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

self

mapping(int24 => uint256)

the packed mapping of tick to seconds outside

tick

int24

the tick to be cleared

tickSpacing

int24

the 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

self

mapping(int24 => uint256)

the packed mapping of tick to seconds outside

tick

int24

the tick to be crossed

tickSpacing

int24

the spacing between usable ticks

time

uint32

the 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

self

mapping(int24 => uint256)

the packed mapping of tick to seconds outside

tick

int24

the tick to get the seconds outside value for

tickSpacing

int24

the spacing between usable ticks

Return Values:

TypeDescription

uint32

seconds 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

self

mapping(int24 => uint256)

the packed mapping of tick to seconds outside

tickLower

int24

the lower tick for which to get seconds inside

tickUpper

int24

the upper tick for which to get seconds inside

tickCurrent

int24

the current tick

tickSpacing

int24

the spacing between usable ticks

Return Values:

NameTypeDescription

a

uint32

relative 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.

Last updated