oracle.gno
3.75 Kb · 118 lines
1package pool
2
3// ObservationState manages the oracle's historical data
4type ObservationState struct {
5 observations map[uint16]*Observation // circular buffer of observations
6 index uint16 // the most-recently updated index of the observations array
7 cardinality uint16 // the current maximum number of observations that are being stored
8 cardinalityNext uint16 // the next maximum number of observations to store, triggered in observations.write
9}
10
11// ObservationState Getters methods
12func (os *ObservationState) Index() uint16 { return os.index }
13func (os *ObservationState) Cardinality() uint16 { return os.cardinality }
14func (os *ObservationState) CardinalityNext() uint16 { return os.cardinalityNext }
15func (os *ObservationState) Observations() map[uint16]*Observation { return os.observations }
16
17// ObservationState Setters methods
18func (os *ObservationState) SetIndex(index uint16) {
19 os.index = index
20}
21
22func (os *ObservationState) SetCardinality(cardinality uint16) {
23 os.cardinality = cardinality
24}
25
26func (os *ObservationState) SetCardinalityNext(cardinalityNext uint16) {
27 os.cardinalityNext = cardinalityNext
28}
29
30func (os *ObservationState) SetObservation(index uint16, observation *Observation) {
31 os.observations[index] = observation
32}
33
34func (os *ObservationState) SetObservations(observations map[uint16]*Observation) {
35 os.observations = observations
36}
37
38type Observation struct {
39 blockTimestamp int64 // timestamp of the observation
40 tickCumulative int64 // cumulative tick up to this timestamp
41 secondsPerLiquidityCumulativeX128 string // cumulative seconds per liquidity
42 initialized bool // whether this observation has been initialized
43}
44
45// Observation Getters methods
46func (o *Observation) BlockTimestamp() int64 { return o.blockTimestamp }
47func (o *Observation) TickCumulative() int64 { return o.tickCumulative }
48func (o *Observation) SecondsPerLiquidityCumulativeX128() string {
49 return o.secondsPerLiquidityCumulativeX128
50}
51func (o *Observation) Initialized() bool { return o.initialized }
52
53// Observation Setters methods
54func (o *Observation) SetBlockTimestamp(blockTimestamp int64) {
55 o.blockTimestamp = blockTimestamp
56}
57
58func (o *Observation) SetTickCumulative(tickCumulative int64) {
59 o.tickCumulative = tickCumulative
60}
61
62func (o *Observation) SetSecondsPerLiquidityCumulativeX128(secondsPerLiquidityCumulativeX128 string) {
63 o.secondsPerLiquidityCumulativeX128 = secondsPerLiquidityCumulativeX128
64}
65
66func (o *Observation) SetInitialized(initialized bool) {
67 o.initialized = initialized
68}
69
70func (o *Observation) Clone() *Observation {
71 return &Observation{
72 blockTimestamp: o.blockTimestamp,
73 tickCumulative: o.tickCumulative,
74 secondsPerLiquidityCumulativeX128: o.secondsPerLiquidityCumulativeX128,
75 initialized: o.initialized,
76 }
77}
78
79func NewObservationState(currentTime int64) *ObservationState {
80 state := &ObservationState{
81 index: 0,
82 cardinality: 1,
83 cardinalityNext: 1,
84 observations: make(map[uint16]*Observation),
85 }
86
87 state.observations[0] = NewObservation(
88 currentTime,
89 0,
90 "0",
91 true,
92 )
93
94 return state
95}
96
97func NewObservation(
98 blockTimestamp int64,
99 tickCumulative int64,
100 secondsPerLiquidityCumulativeX128 string,
101 initialized bool,
102) *Observation {
103 return &Observation{
104 blockTimestamp: blockTimestamp,
105 tickCumulative: tickCumulative,
106 secondsPerLiquidityCumulativeX128: secondsPerLiquidityCumulativeX128,
107 initialized: initialized,
108 }
109}
110
111func NewDefaultObservation() *Observation {
112 return NewObservation(
113 0,
114 0,
115 "0",
116 false,
117 )
118}