forked from Uniswap/v3-periphery
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMockObservations.sol
82 lines (74 loc) · 2.41 KB
/
MockObservations.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// 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
);
}
}