/
updates.go
153 lines (124 loc) · 4.39 KB
/
updates.go
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
package exchange
import (
"fmt"
"strconv"
"github.com/streamingfast/sparkle/entity"
eth "github.com/streamingfast/eth-go"
)
func (s *Subgraph) UpdatePancakeDayData() (*PancakeDayData, error) {
pancake := NewPancakeFactory(FactoryAddress)
err := s.Load(pancake)
if err != nil {
return nil, fmt.Errorf("loading pancake factory: %w", err)
}
timestamp := s.Block().Timestamp().Unix()
dayId := timestamp / 86400
dayStartTimestamp := dayId * 86400
pancakeDayData := NewPancakeDayData(strconv.FormatInt(dayId, 10))
err = s.Load(pancakeDayData)
if err != nil {
return nil, err
}
if !pancakeDayData.Exists() {
// Already created above, not needed here again.
pancakeDayData = NewPancakeDayData(strconv.FormatInt(dayId, 10))
pancakeDayData.Date = dayStartTimestamp
}
pancakeDayData.TotalLiquidityUSD = pancake.TotalLiquidityUSD
pancakeDayData.TotalLiquidityBNB = pancake.TotalLiquidityBNB
pancakeDayData.TotalTransactions = pancake.TotalTransactions
err = s.Save(pancakeDayData)
if err != nil {
return nil, err
}
return pancakeDayData, nil
}
func (s *Subgraph) UpdatePairDayData(pairAddress eth.Address) (*PairDayData, error) {
timestamp := s.Block().Timestamp().Unix()
dayId := timestamp / 86400
dayStartTimestamp := dayId * 86400
dayPairId := fmt.Sprintf("%s-%d", pairAddress.Pretty(), dayId)
pair := NewPair(pairAddress.Pretty())
err := s.Load(pair)
if err != nil {
return nil, fmt.Errorf("loading pair %s: %w", pairAddress.Pretty(), err)
}
pairDayData := NewPairDayData(dayPairId)
err = s.Load(pairDayData)
if err != nil {
return nil, fmt.Errorf("loading pair_day_data %s: %w", dayPairId, err)
}
if !pairDayData.Exists() {
pairDayData = NewPairDayData(dayPairId)
pairDayData.Date = dayStartTimestamp
pairDayData.Token0 = pair.Token0
pairDayData.Token1 = pair.Token1
pairDayData.PairAddress = pairAddress.Pretty()
}
pairDayData.TotalSupply = pair.TotalSupply
pairDayData.Reserve0 = pair.Reserve0
pairDayData.Reserve1 = pair.Reserve1
pairDayData.ReserveUSD = pair.ReserveUSD
pairDayData.DailyTxns = entity.IntAdd(pairDayData.DailyTxns, IL(1))
err = s.Save(pairDayData)
if err != nil {
return nil, fmt.Errorf("saving pair_day_data: %w", err)
}
return pairDayData, nil
}
func (s *Subgraph) UpdatePairHourData(pairAddress eth.Address) (*PairHourData, error) {
timestamp := s.Block().Timestamp().Unix()
hourId := timestamp / 3600
hourStartUnix := hourId * 3600
hourPairId := fmt.Sprintf("%s-%d", pairAddress.Pretty(), hourId)
pair := NewPair(pairAddress.Pretty())
err := s.Load(pair)
if err != nil {
return nil, fmt.Errorf("loading pair %s: %w", pairAddress.Pretty(), err)
}
pairHourData := NewPairHourData(hourPairId)
err = s.Load(pairHourData)
if err != nil {
return nil, fmt.Errorf("loading pair_day_data %s: %w", hourPairId, err)
}
if !pairHourData.Exists() {
pairHourData = NewPairHourData(hourPairId)
pairHourData.HourStartUnix = hourStartUnix
pairHourData.Pair = pairAddress.Pretty()
}
pairHourData.Reserve0 = pair.Reserve0
pairHourData.Reserve1 = pair.Reserve1
pairHourData.ReserveUSD = pair.ReserveUSD
pairHourData.HourlyTxns = entity.IntAdd(pairHourData.HourlyTxns, IL(1))
err = s.Save(pairHourData)
if err != nil {
return nil, fmt.Errorf("saving pair_day_data: %w", err)
}
return pairHourData, nil
}
func (s *Subgraph) UpdateTokenDayData(pairAddress eth.Address, token *Token, bundle *Bundle) (*TokenDayData, error) {
timestamp := s.Block().Timestamp().Unix()
dayId := timestamp / 86400
dayStartTimestamp := dayId * 86400
tokenDayId := fmt.Sprintf("%s-%d", token.ID, dayId)
tokenDayData := NewTokenDayData(tokenDayId)
err := s.Load(tokenDayData)
if err != nil {
return nil, fmt.Errorf("loading token_day_data")
}
if !tokenDayData.Exists() {
tokenDayData = NewTokenDayData(tokenDayId)
tokenDayData.Date = dayStartTimestamp
tokenDayData.Token = token.ID
}
tokenDayData.PriceUSD = F(bf().Mul(token.DerivedBNB.Float(), bundle.BnbPrice.Float()))
tokenDayData.TotalLiquidityToken = token.TotalLiquidity
tokenDayData.TotalLiquidityBNB = F(bf().Mul(token.TotalLiquidity.Float(), token.DerivedBNB.Float()))
tokenDayData.TotalLiquidityUSD = F(bf().Mul(tokenDayData.TotalLiquidityBNB.Float(), bundle.BnbPrice.Float()))
tokenDayData.DailyTxns = entity.IntAdd(tokenDayData.DailyTxns, IL(1))
err = s.Save(tokenDayData)
if err != nil {
return nil, fmt.Errorf("saving token_day_data %s: %w", tokenDayData.ID, err)
}
return tokenDayData, nil
}