-
Notifications
You must be signed in to change notification settings - Fork 523
/
Copy pathintervalUpdates.ts
250 lines (226 loc) · 8.22 KB
/
intervalUpdates.ts
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
import { ZERO_BD, ZERO_BI, ONE_BI } from './constants'
/* eslint-disable prefer-const */
import {
UniswapDayData,
Factory,
Pool,
PoolDayData,
Token,
TokenDayData,
TokenHourData,
Bundle,
PoolHourData,
TickDayData,
Tick
} from './../types/schema'
import { FACTORY_ADDRESS } from './constants'
import { ethereum } from '@graphprotocol/graph-ts'
/**
* Tracks global aggregate data over daily windows
* @param event
*/
export function updateUniswapDayData(event: ethereum.Event): UniswapDayData {
let uniswap = Factory.load(FACTORY_ADDRESS)
let timestamp = event.block.timestamp.toI32()
let dayID = timestamp / 86400 // rounded
let dayStartTimestamp = dayID * 86400
let uniswapDayData = UniswapDayData.load(dayID.toString())
if (uniswapDayData === null) {
uniswapDayData = new UniswapDayData(dayID.toString())
uniswapDayData.date = dayStartTimestamp
uniswapDayData.volumeETH = ZERO_BD
uniswapDayData.volumeUSD = ZERO_BD
uniswapDayData.volumeUSDUntracked = ZERO_BD
uniswapDayData.feesUSD = ZERO_BD
}
uniswapDayData.tvlUSD = uniswap.totalValueLockedUSD
uniswapDayData.txCount = uniswap.txCount
uniswapDayData.save()
return uniswapDayData as UniswapDayData
}
export function updatePoolDayData(event: ethereum.Event): PoolDayData {
let timestamp = event.block.timestamp.toI32()
let dayID = timestamp / 86400
let dayStartTimestamp = dayID * 86400
let dayPoolID = event.address
.toHexString()
.concat('-')
.concat(dayID.toString())
let pool = Pool.load(event.address.toHexString())
let poolDayData = PoolDayData.load(dayPoolID)
if (poolDayData === null) {
poolDayData = new PoolDayData(dayPoolID)
poolDayData.date = dayStartTimestamp
poolDayData.pool = pool.id
// things that dont get initialized always
poolDayData.volumeToken0 = ZERO_BD
poolDayData.volumeToken1 = ZERO_BD
poolDayData.volumeUSD = ZERO_BD
poolDayData.feesUSD = ZERO_BD
poolDayData.txCount = ZERO_BI
poolDayData.feeGrowthGlobal0X128 = ZERO_BI
poolDayData.feeGrowthGlobal1X128 = ZERO_BI
poolDayData.open = pool.token0Price
poolDayData.high = pool.token0Price
poolDayData.low = pool.token0Price
}
if (pool.token0Price.gt(poolDayData.high)) {
poolDayData.high = pool.token0Price
}
if (pool.token0Price.lt(poolDayData.low)) {
poolDayData.low = pool.token0Price
}
poolDayData.liquidity = pool.liquidity
poolDayData.sqrtPrice = pool.sqrtPrice
poolDayData.feeGrowthGlobal0X128 = pool.feeGrowthGlobal0X128
poolDayData.feeGrowthGlobal1X128 = pool.feeGrowthGlobal1X128
poolDayData.token0Price = pool.token0Price
poolDayData.token1Price = pool.token1Price
poolDayData.close = pool.token0Price
poolDayData.tick = pool.tick
poolDayData.tvlUSD = pool.totalValueLockedUSD
poolDayData.txCount = poolDayData.txCount.plus(ONE_BI)
poolDayData.save()
return poolDayData as PoolDayData
}
export function updatePoolHourData(event: ethereum.Event): PoolHourData {
let timestamp = event.block.timestamp.toI32()
let hourIndex = timestamp / 3600 // get unique hour within unix history
let hourStartUnix = hourIndex * 3600 // want the rounded effect
let hourPoolID = event.address
.toHexString()
.concat('-')
.concat(hourIndex.toString())
let pool = Pool.load(event.address.toHexString())
let poolHourData = PoolHourData.load(hourPoolID)
if (poolHourData === null) {
poolHourData = new PoolHourData(hourPoolID)
poolHourData.periodStartUnix = hourStartUnix
poolHourData.pool = pool.id
// things that dont get initialized always
poolHourData.volumeToken0 = ZERO_BD
poolHourData.volumeToken1 = ZERO_BD
poolHourData.volumeUSD = ZERO_BD
poolHourData.txCount = ZERO_BI
poolHourData.feesUSD = ZERO_BD
poolHourData.feeGrowthGlobal0X128 = ZERO_BI
poolHourData.feeGrowthGlobal1X128 = ZERO_BI
poolHourData.open = pool.token0Price
poolHourData.high = pool.token0Price
poolHourData.low = pool.token0Price
}
if (pool.token0Price.gt(poolHourData.high)) {
poolHourData.high = pool.token0Price
}
if (pool.token0Price.lt(poolHourData.low)) {
poolHourData.low = pool.token0Price
}
poolHourData.liquidity = pool.liquidity
poolHourData.sqrtPrice = pool.sqrtPrice
poolHourData.token0Price = pool.token0Price
poolHourData.token1Price = pool.token1Price
poolHourData.feeGrowthGlobal0X128 = pool.feeGrowthGlobal0X128
poolHourData.feeGrowthGlobal1X128 = pool.feeGrowthGlobal1X128
poolHourData.close = pool.token0Price
poolHourData.tick = pool.tick
poolHourData.tvlUSD = pool.totalValueLockedUSD
poolHourData.txCount = poolHourData.txCount.plus(ONE_BI)
poolHourData.save()
// test
return poolHourData as PoolHourData
}
export function updateTokenDayData(token: Token, event: ethereum.Event): TokenDayData {
let bundle = Bundle.load('1')
let timestamp = event.block.timestamp.toI32()
let dayID = timestamp / 86400
let dayStartTimestamp = dayID * 86400
let tokenDayID = token.id
.toString()
.concat('-')
.concat(dayID.toString())
let tokenPrice = token.derivedETH.times(bundle.ethPriceUSD)
let tokenDayData = TokenDayData.load(tokenDayID)
if (tokenDayData === null) {
tokenDayData = new TokenDayData(tokenDayID)
tokenDayData.date = dayStartTimestamp
tokenDayData.token = token.id
tokenDayData.volume = ZERO_BD
tokenDayData.volumeUSD = ZERO_BD
tokenDayData.feesUSD = ZERO_BD
tokenDayData.untrackedVolumeUSD = ZERO_BD
tokenDayData.open = tokenPrice
tokenDayData.high = tokenPrice
tokenDayData.low = tokenPrice
}
if (tokenPrice.gt(tokenDayData.high)) {
tokenDayData.high = tokenPrice
}
if (tokenPrice.lt(tokenDayData.low)) {
tokenDayData.low = tokenPrice
}
tokenDayData.close = tokenPrice
tokenDayData.priceUSD = token.derivedETH.times(bundle.ethPriceUSD)
tokenDayData.totalValueLocked = token.totalValueLocked
tokenDayData.totalValueLockedUSD = token.totalValueLockedUSD
tokenDayData.save()
return tokenDayData as TokenDayData
}
export function updateTokenHourData(token: Token, event: ethereum.Event): TokenHourData {
let bundle = Bundle.load('1')
let timestamp = event.block.timestamp.toI32()
let hourIndex = timestamp / 3600 // get unique hour within unix history
let hourStartUnix = hourIndex * 3600 // want the rounded effect
let tokenHourID = token.id
.toString()
.concat('-')
.concat(hourIndex.toString())
let tokenHourData = TokenHourData.load(tokenHourID)
let tokenPrice = token.derivedETH.times(bundle.ethPriceUSD)
if (tokenHourData === null) {
tokenHourData = new TokenHourData(tokenHourID)
tokenHourData.periodStartUnix = hourStartUnix
tokenHourData.token = token.id
tokenHourData.volume = ZERO_BD
tokenHourData.volumeUSD = ZERO_BD
tokenHourData.untrackedVolumeUSD = ZERO_BD
tokenHourData.feesUSD = ZERO_BD
tokenHourData.open = tokenPrice
tokenHourData.high = tokenPrice
tokenHourData.low = tokenPrice
}
if (tokenPrice.gt(tokenHourData.high)) {
tokenHourData.high = tokenPrice
}
if (tokenPrice.lt(tokenHourData.low)) {
tokenHourData.low = tokenPrice
}
tokenHourData.close = tokenPrice
tokenHourData.priceUSD = tokenPrice
tokenHourData.totalValueLocked = token.totalValueLocked
tokenHourData.totalValueLockedUSD = token.totalValueLockedUSD
tokenHourData.save()
return tokenHourData as TokenHourData
}
export function updateTickDayData(tick: Tick, event: ethereum.Event): TickDayData {
let timestamp = event.block.timestamp.toI32()
let dayID = timestamp / 86400
let dayStartTimestamp = dayID * 86400
let tickDayDataID = tick.id.concat('-').concat(dayID.toString())
let tickDayData = TickDayData.load(tickDayDataID)
if (tickDayData === null) {
tickDayData = new TickDayData(tickDayDataID)
tickDayData.date = dayStartTimestamp
tickDayData.pool = tick.pool
tickDayData.tick = tick.id
}
tickDayData.liquidityGross = tick.liquidityGross
tickDayData.liquidityNet = tick.liquidityNet
tickDayData.volumeToken0 = tick.volumeToken0
tickDayData.volumeToken1 = tick.volumeToken0
tickDayData.volumeUSD = tick.volumeUSD
tickDayData.feesUSD = tick.feesUSD
tickDayData.feeGrowthOutside0X128 = tick.feeGrowthOutside0X128
tickDayData.feeGrowthOutside1X128 = tick.feeGrowthOutside1X128
tickDayData.save()
return tickDayData as TickDayData
}