LiquidityPoolUtils
Library to abstract liquidity pool operations such as fetching observations, calculating TWAP, etc. Currently supports Uniswap V3 and Algebra V1.9 liquidity pools
getLiquidityPoolInfo
function getLiquidityPoolInfo(struct IPriceAggregator.LiquidityPoolInput _input) internal view returns (struct IPriceAggregator.LiquidityPoolInfo)
Returns a LiquidityPoolInfo
struct for LiquidityPoolInput _input
Parameters
getTimeWeightedAveragePrice
function getTimeWeightedAveragePrice(struct IPriceAggregator.LiquidityPoolInfo _poolInfo, uint32 _twapInterval, uint256 _precisionDelta) internal view returns (uint256)
Calculates the time-weighted average price of a liquidity pool over a given interval
Parameters
_twapInterval
uint32
TWAP interval in seconds
_precisionDelta
uint256
precision delta of collateral
_getPoolTickCumulatives
function _getPoolTickCumulatives(struct IPriceAggregator.LiquidityPoolInfo _poolInfo, uint32 _twapInterval) internal view returns (int56[])
Fetches tickCumulatives data from the pool. Calls the appropriate oracle function based on the pool type
Parameters
_twapInterval
uint32
TWAP interval
_tickCumulativesToTokenPrice
function _tickCumulativesToTokenPrice(int56[] _tickCumulatives, uint32 _twapInterval, uint256 _precisionDelta, bool _isGnsToken0InLp) internal pure returns (uint256)
Returns TWAP price (1e10 precision) from tickCumulatives data
Parameters
_tickCumulatives
int56[]
array of tickCumulatives
_twapInterval
uint32
TWAP interval
_precisionDelta
uint256
precision delta of collateral
_isGnsToken0InLp
bool
true if GNS is token0 in LP Inspired from https://github.com/Uniswap/v3-periphery/blob/main/contracts/libraries/OracleLibrary.sol
Last updated
Was this helpful?