1
0
forked from mico/idle_moloch
idle_moloch/lib/v3-periphery/contracts/test/MockObservations.sol
2024-11-01 11:55:27 +01:00

83 lines
2.4 KiB
Solidity

// SPDX-License-Identifier: UNLICENSED
pragma solidity =0.7.6;
import '@uniswap/v3-core/contracts/libraries/Oracle.sol';
contract MockObservations {
Oracle.Observation[4] internal oracleObservations;
int24 slot0Tick;
uint16 internal slot0ObservationCardinality;
uint16 internal slot0ObservationIndex;
uint128 public liquidity;
bool internal lastObservationCurrentTimestamp;
constructor(
uint32[4] memory _blockTimestamps,
int56[4] memory _tickCumulatives,
uint128[4] memory _secondsPerLiquidityCumulativeX128s,
bool[4] memory _initializeds,
int24 _tick,
uint16 _observationCardinality,
uint16 _observationIndex,
bool _lastObservationCurrentTimestamp,
uint128 _liquidity
) {
for (uint256 i = 0; i < _blockTimestamps.length; i++) {
oracleObservations[i] = Oracle.Observation({
blockTimestamp: _blockTimestamps[i],
tickCumulative: _tickCumulatives[i],
secondsPerLiquidityCumulativeX128: _secondsPerLiquidityCumulativeX128s[i],
initialized: _initializeds[i]
});
}
slot0Tick = _tick;
slot0ObservationCardinality = _observationCardinality;
slot0ObservationIndex = _observationIndex;
lastObservationCurrentTimestamp = _lastObservationCurrentTimestamp;
liquidity = _liquidity;
}
function slot0()
external
view
returns (
uint160,
int24,
uint16,
uint16,
uint16,
uint8,
bool
)
{
return (0, slot0Tick, slot0ObservationIndex, slot0ObservationCardinality, 0, 0, false);
}
function observations(uint256 index)
external
view
returns (
uint32,
int56,
uint160,
bool
)
{
Oracle.Observation memory observation = oracleObservations[index];
if (lastObservationCurrentTimestamp) {
observation.blockTimestamp =
uint32(block.timestamp) -
(oracleObservations[slot0ObservationIndex].blockTimestamp - observation.blockTimestamp);
}
return (
observation.blockTimestamp,
observation.tickCumulative,
observation.secondsPerLiquidityCumulativeX128,
observation.initialized
);
}
}