forked from mico/idle_moloch
83 lines
2.4 KiB
Solidity
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
|
|
);
|
|
}
|
|
}
|