Module orca_whirlpool.internal.utils.tick_array_util

Expand source code
from ..accounts.types import TickArray
from ..anchor.types import Tick
from ..constants import TICK_ARRAY_SIZE
from ..invariant import invariant
from .tick_util import TickUtil


class TickArrayUtil:
    # https://orca-so.github.io/whirlpools/classes/TickArrayUtil.html#getTickFromArray
    # https://github.com/orca-so/whirlpools/blob/7b9ec35/sdk/src/utils/public/tick-utils.ts#L155
    @staticmethod
    def get_tick_from_array(tick_array: TickArray, tick_index: int, tick_spacing) -> Tick:
        ticks_in_array = TICK_ARRAY_SIZE * tick_spacing
        invariant(
            tick_array.start_tick_index <= tick_index <= tick_array.start_tick_index + ticks_in_array,
            "tick_index must be in tick_array"
        )
        invariant(
            TickUtil.is_initializable_tick_index(tick_index, tick_spacing),
            "tick_index must be initializable"
        )
        offset = tick_index - tick_array.start_tick_index
        return tick_array.ticks[offset // tick_spacing]

Classes

class TickArrayUtil
Expand source code
class TickArrayUtil:
    # https://orca-so.github.io/whirlpools/classes/TickArrayUtil.html#getTickFromArray
    # https://github.com/orca-so/whirlpools/blob/7b9ec35/sdk/src/utils/public/tick-utils.ts#L155
    @staticmethod
    def get_tick_from_array(tick_array: TickArray, tick_index: int, tick_spacing) -> Tick:
        ticks_in_array = TICK_ARRAY_SIZE * tick_spacing
        invariant(
            tick_array.start_tick_index <= tick_index <= tick_array.start_tick_index + ticks_in_array,
            "tick_index must be in tick_array"
        )
        invariant(
            TickUtil.is_initializable_tick_index(tick_index, tick_spacing),
            "tick_index must be initializable"
        )
        offset = tick_index - tick_array.start_tick_index
        return tick_array.ticks[offset // tick_spacing]

Static methods

def get_tick_from_array(tick_array: TickArray, tick_index: int, tick_spacing) ‑> Tick
Expand source code
@staticmethod
def get_tick_from_array(tick_array: TickArray, tick_index: int, tick_spacing) -> Tick:
    ticks_in_array = TICK_ARRAY_SIZE * tick_spacing
    invariant(
        tick_array.start_tick_index <= tick_index <= tick_array.start_tick_index + ticks_in_array,
        "tick_index must be in tick_array"
    )
    invariant(
        TickUtil.is_initializable_tick_index(tick_index, tick_spacing),
        "tick_index must be initializable"
    )
    offset = tick_index - tick_array.start_tick_index
    return tick_array.ticks[offset // tick_spacing]