Skip to main content

PriceExtremes

Git Source

Tracks intra-observation price extremes to mitigate TWAP lag attacks.

Records max/min ticks per observation interval so arb-driven price signals are captured even if the attacker resets the price afterward.

Functions

record

Record a priceQ128 observation as inclusive min and exclusive max ticks.

function record(State storage state, uint256 priceQ128, uint32 interval) internal;

Parameters

NameTypeDescription
stateStateThe per-pair extreme tracking state
priceQ128uint256The current price as reserveX * Q128 / reserveY
intervaluint32The observation interval (DEFAULT_MID_TERM_INTERVAL)

widen

Widen a [minTick, maxTick) range using fresh price extremes. Never narrows.

function widen(
State storage state,
int16 minTick,
int16 maxTick,
uint32 interval
) internal view returns (int16 widenedMin, int16 widenedMax);

Parameters

NameTypeDescription
stateStateThe per-pair extreme tracking state
minTickint16Current minimum tick (from getTickRange)
maxTickint16Current exclusive maximum tick (from getTickRange)
intervaluint32The observation interval (DEFAULT_MID_TERM_INTERVAL)

Returns

NameTypeDescription
widenedMinint16The potentially widened minimum tick
widenedMaxint16The potentially widened maximum tick

_widen

function _widen(
uint32 stateTimestamp,
int16 slotMinTick,
int16 slotMaxTick,
bool initialized,
uint32 currentTimestamp,
uint32 maxAge,
int16 widenMin,
int16 widenMax
) private pure returns (int16, int16);

Structs

State

State for tracking price extremes within an observation interval.

struct State {
uint32 currentTimestamp;
uint32 previousTimestamp;
int16 currentMaxTick;
int16 currentMinTick;
int16 previousMaxTick;
int16 previousMinTick;
bool currentInitialized;
bool previousInitialized;
}