Search Apps Documentation Source Content File Folder Download Copy Actions Download State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

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}