forked from mico/idle_moloch
78 lines
2.3 KiB
Solidity
78 lines
2.3 KiB
Solidity
// SPDX-License-Identifier: UNLICENSED
|
|
pragma solidity =0.7.6;
|
|
|
|
import '@uniswap/v3-core/contracts/libraries/Oracle.sol';
|
|
|
|
contract MockObservations {
|
|
using Oracle for Oracle.Observation[65535];
|
|
|
|
// slot0
|
|
int24 private slot0Tick;
|
|
uint16 private slot0ObservationCardinality;
|
|
uint16 private slot0ObservationIndex;
|
|
|
|
// observations
|
|
Oracle.Observation[65535] public observations;
|
|
|
|
// block timestamps always monotonic increasing from 0, cumulative ticks are calculated automatically
|
|
constructor(
|
|
uint32[3] memory blockTimestamps,
|
|
int24[3] memory ticks,
|
|
bool mockLowObservationCardinality
|
|
) {
|
|
require(blockTimestamps[0] == 0, '0');
|
|
require(blockTimestamps[1] > 0, '1');
|
|
require(blockTimestamps[2] > blockTimestamps[1], '2');
|
|
|
|
int56 tickCumulative = 0;
|
|
for (uint256 i = 0; i < blockTimestamps.length; i++) {
|
|
if (i != 0) {
|
|
int24 tick = ticks[i - 1];
|
|
uint32 delta = blockTimestamps[i] - blockTimestamps[i - 1];
|
|
tickCumulative += int56(tick) * delta;
|
|
}
|
|
observations[i] = Oracle.Observation({
|
|
blockTimestamp: blockTimestamps[i],
|
|
tickCumulative: tickCumulative,
|
|
secondsPerLiquidityCumulativeX128: uint160(i),
|
|
initialized: true
|
|
});
|
|
}
|
|
slot0Tick = ticks[2];
|
|
slot0ObservationCardinality = mockLowObservationCardinality ? 1 : 3;
|
|
slot0ObservationIndex = 2;
|
|
}
|
|
|
|
function slot0()
|
|
external
|
|
view
|
|
returns (
|
|
uint160,
|
|
int24,
|
|
uint16,
|
|
uint16,
|
|
uint16,
|
|
uint8,
|
|
bool
|
|
)
|
|
{
|
|
return (0, slot0Tick, slot0ObservationIndex, slot0ObservationCardinality, 0, 0, false);
|
|
}
|
|
|
|
function observe(uint32[] calldata secondsAgos)
|
|
external
|
|
view
|
|
returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s)
|
|
{
|
|
return
|
|
observations.observe(
|
|
observations[2].blockTimestamp,
|
|
secondsAgos,
|
|
slot0Tick,
|
|
slot0ObservationIndex,
|
|
0,
|
|
slot0ObservationCardinality
|
|
);
|
|
}
|
|
}
|