From b713ed8a5af146c64a18095aa70a749bb9c87b64 Mon Sep 17 00:00:00 2001 From: gnarlycow Date: Tue, 20 Aug 2024 16:14:07 -0700 Subject: [PATCH] Add observe and snapshotCumulativesInside to SlipStream CLPool interface for TWAP. --- contracts/interfaces/ISlipStreamCLPool.sol | 31 +++++++++++++++++++++- package.json | 2 +- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/contracts/interfaces/ISlipStreamCLPool.sol b/contracts/interfaces/ISlipStreamCLPool.sol index 87e92c6..7a9005c 100644 --- a/contracts/interfaces/ISlipStreamCLPool.sol +++ b/contracts/interfaces/ISlipStreamCLPool.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; // Partial interface of the SlipStream CL pool contract. -// @dev Copied from https://github.com/velodrome-finance/slipstream/blob/main/contracts/core/interfaces/pool/ICLPoolState.sol. +// @dev Copied from https://github.com/velodrome-finance/slipstream/blob/main/contracts/core/interfaces/pool/ICLPoolState.sol and https://github.com/velodrome-finance/slipstream/blob/main/contracts/core/interfaces/pool/ICLPoolDerivedState.sol. interface ISlipStreamCLPool { /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas /// when accessed externally. @@ -167,4 +167,33 @@ interface ISlipStreamCLPool { int24 tickUpper, uint256 _rewardGrowthGlobalX128 ) external view returns (uint256 rewardGrowthInsideX128); + + /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp + /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing + /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick, + /// you must call it with secondsAgos = [3600, 0]. + /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in + /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio. + /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned + /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp + /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block + /// timestamp + function observe( + uint32[] calldata secondsAgos + ) external view returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s); + + /// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range + /// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed. + /// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first + /// snapshot is taken and the second snapshot is taken. + /// @param tickLower The lower tick of the range + /// @param tickUpper The upper tick of the range + /// @return tickCumulativeInside The snapshot of the tick accumulator for the range + /// @return secondsPerLiquidityInsideX128 The snapshot of seconds per liquidity for the range + /// @return secondsInside The snapshot of seconds per liquidity for the range + + function snapshotCumulativesInside( + int24 tickLower, + int24 tickUpper + ) external view returns (int56 tickCumulativeInside, uint160 secondsPerLiquidityInsideX128, uint32 secondsInside); } diff --git a/package.json b/package.json index 63b11f1..89c3f94 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aperture-lens", - "version": "2.0.1", + "version": "2.0.2", "description": "Contains ephemeral lens contracts that can be called without deployment and their interfaces in various Web3 libraries.", "author": "Aperture Finance ", "license": "Apache-2.0",