Search Apps Documentation Source Content File Folder Download Copy Actions Download

oracle.gno

4.19 Kb · 129 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	liquidityCumulative               string // cumulative liquidity up to this timestamp
 42	secondsPerLiquidityCumulativeX128 string // cumulative seconds per liquidity
 43	initialized                       bool   // whether this observation has been initialized
 44}
 45
 46// Observation Getters methods
 47func (o *Observation) BlockTimestamp() int64       { return o.blockTimestamp }
 48func (o *Observation) TickCumulative() int64       { return o.tickCumulative }
 49func (o *Observation) LiquidityCumulative() string { return o.liquidityCumulative }
 50func (o *Observation) SecondsPerLiquidityCumulativeX128() string {
 51	return o.secondsPerLiquidityCumulativeX128
 52}
 53func (o *Observation) Initialized() bool { return o.initialized }
 54
 55// Observation Setters methods
 56func (o *Observation) SetBlockTimestamp(blockTimestamp int64) {
 57	o.blockTimestamp = blockTimestamp
 58}
 59
 60func (o *Observation) SetTickCumulative(tickCumulative int64) {
 61	o.tickCumulative = tickCumulative
 62}
 63
 64func (o *Observation) SetLiquidityCumulative(liquidityCumulative string) {
 65	o.liquidityCumulative = liquidityCumulative
 66}
 67
 68func (o *Observation) SetSecondsPerLiquidityCumulativeX128(secondsPerLiquidityCumulativeX128 string) {
 69	o.secondsPerLiquidityCumulativeX128 = secondsPerLiquidityCumulativeX128
 70}
 71
 72func (o *Observation) SetInitialized(initialized bool) {
 73	o.initialized = initialized
 74}
 75
 76func (o *Observation) Clone() *Observation {
 77	return &Observation{
 78		blockTimestamp:                    o.blockTimestamp,
 79		tickCumulative:                    o.tickCumulative,
 80		liquidityCumulative:               o.liquidityCumulative,
 81		secondsPerLiquidityCumulativeX128: o.secondsPerLiquidityCumulativeX128,
 82		initialized:                       o.initialized,
 83	}
 84}
 85
 86func NewObservationState(currentTime int64) *ObservationState {
 87	state := &ObservationState{
 88		index:           0,
 89		cardinality:     1,
 90		cardinalityNext: 1,
 91		observations:    make(map[uint16]*Observation),
 92	}
 93
 94	state.observations[0] = NewObservation(
 95		currentTime,
 96		0,
 97		"0",
 98		"0",
 99		true,
100	)
101
102	return state
103}
104
105func NewObservation(
106	blockTimestamp int64,
107	tickCumulative int64,
108	liquidityCumulative string,
109	secondsPerLiquidityCumulativeX128 string,
110	initialized bool,
111) *Observation {
112	return &Observation{
113		blockTimestamp:                    blockTimestamp,
114		tickCumulative:                    tickCumulative,
115		liquidityCumulative:               liquidityCumulative,
116		secondsPerLiquidityCumulativeX128: secondsPerLiquidityCumulativeX128,
117		initialized:                       initialized,
118	}
119}
120
121func NewDefaultObservation() *Observation {
122	return NewObservation(
123		0,
124		0,
125		"0",
126		"0",
127		false,
128	)
129}