-
Notifications
You must be signed in to change notification settings - Fork 3
/
schema.graphql
475 lines (452 loc) · 19 KB
/
schema.graphql
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
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
type Protocol @entity {
"only one of these (id=1)"
id: ID!
"address of price oracle the comptroller uses"
priceOracle: Bytes!
"block number when the price oracle was last updated"
lastNewOracleBlockNumber: BigInt!
"most recent block number where the protocol summary data was updated"
latestBlockNumber: BigInt!
"all the markets that the comptroller controls"
markets: [Market!]! # this can't be a derived field as we need access to it in the historicalWeekData mapping
"total supply of the entire protocol in USD"
totalSupplyUsd: BigDecimal!
"total borrow of the entire protocol in USD"
totalBorrowUsd: BigDecimal!
"total reserves of the entire protocol in USD"
totalReservesUsd: BigDecimal!
"utilization of the entire protocol"
utilization: BigDecimal!
"historical data in weekly intervals of the entire protocol"
historicalWeekData: [ProtocolWeekData!]! @derivedFrom(field: "protocol")
}
type Market @entity {
"cToken address"
id: ID!
"block number when the market was created"
creationBlockNumber: BigInt!
"most recent block number where the market was updated"
latestBlockNumber: BigInt!
"cToken symbol"
cTokenSymbol: String!
"number of decimals of the cToken"
cTokenDecimals: BigInt!
"underlying token name"
underlyingName: String!
"underlying token symbol"
underlyingSymbol: String!
"underlying token address"
underlyingAddress: Bytes!
"number of decimals of the underlying token"
underlyingDecimals: BigInt!
"comptroller address"
comptrollerAddress: Bytes!
# "total number of unique suppliers to the market"
# numberOfSuppliers: BigInt!
# "total number of unique borrowers to the market"
# numberOfBorrowers: BigInt!
"list of all UserMarket positions that belong to this market"
userMarkets: [UserMarket!]! @derivedFrom(field: "market")
"collator factor in decimal form"
collateralFactor: BigDecimal!
"reserve factor in decimal form"
reserveFactor: BigDecimal!
"borrow cap in underlying tokens"
borrowCap: BigDecimal!
"amount of underlying owned by the contract"
cash: BigDecimal!
"number of underlying one cToken is worth (exchange_rate)"
underlyingPerCToken: BigDecimal!
"supply rate per block, this is the value from the contract with the 10^18 scaling removed"
supplyRatePerBlock: BigDecimal!
"borrow rate per block, this is the value from the contract with the 10^18 scaling removed"
borrowRatePerBlock: BigDecimal!
"supply apy not including the COMP distribution in decimal form"
supplyApy: BigDecimal!
"borrow apy not including the COMP distribution in decimal form"
borrowApy: BigDecimal!
"total supply apy including the COMP distribution in decimal form"
totalSupplyApy: BigDecimal!
"total borrow apy including the COMP distribution in decimal form"
totalBorrowApy: BigDecimal!
"total amount of underlying tokens supplied"
totalSupply: BigDecimal!
"total amount supplied in USD"
totalSupplyUsd: BigDecimal!
"total amount of underlying tokens borrowed"
totalBorrow: BigDecimal!
"total amount borrowed in USD"
totalBorrowUsd: BigDecimal!
"total amount of underlying token in reserves"
totalReserves: BigDecimal!
"total amount in reserves in USD"
totalReservesUsd: BigDecimal!
"total available to be borrowed in the underlying asset"
availableLiquidity: BigDecimal!
"total available to be borrowed in USD"
availableLiquidityUsd: BigDecimal!
"utilization"
utilization: BigDecimal!
"COMP distribution per block for suppliers, this is the value from the contract with the 10^18 scaling removed"
compSpeedSupply: BigDecimal!
"COMP distribution per block for borrowers, this is the value from the contract with the 10^18 scaling removed"
compSpeedBorrow: BigDecimal!
"number of usdc one underlying token is worth"
usdcPerUnderlying: BigDecimal!
"number of usdc one eth is worth"
usdcPerEth: BigDecimal!
"number of usdc one comp is worth"
usdcPerComp: BigDecimal!
"historical data in hourly intervals"
historicalHourData: [MarketHourData!]! @derivedFrom(field: "market")
"historical data in daily intervals"
historicalDayData: [MarketDayData!]! @derivedFrom(field: "market")
"historical data in weekly intervals"
historicalWeekData: [MarketWeekData!]! @derivedFrom(field: "market")
}
type MarketHourData @entity {
"token address concatendated with date"
id: ID!
"market that this data belongs to"
market: Market!
"unix timestamp in seconds rounded to the start of the hour"
date: BigInt!
"collator factor in decimal form"
collateralFactor: BigDecimal!
"reserve factor in decimal form"
reserveFactor: BigDecimal!
"borrow cap in underlying tokens"
borrowCap: BigDecimal!
"amount of underlying owned by the contract"
cash: BigDecimal!
"number of underlying one cToken is worth (exchange_rate)"
underlyingPerCToken: BigDecimal!
"supply rate per block, this is the value from the contract with the 10^18 scaling removed"
supplyRatePerBlock: BigDecimal!
"borrow rate per block, this is the value from the contract with the 10^18 scaling removed"
borrowRatePerBlock: BigDecimal!
"supply apy not including the COMP distribution in decimal form"
supplyApy: BigDecimal!
"borrow apy not including the COMP distribution in decimal form"
borrowApy: BigDecimal!
"total supply apy including the COMP distribution in decimal form"
totalSupplyApy: BigDecimal!
"total borrow apy including the COMP distribution in decimal form"
totalBorrowApy: BigDecimal!
"total amount of underlying tokens supplied"
totalSupply: BigDecimal!
"total amount supplied in USD"
totalSupplyUsd: BigDecimal!
"total amount of underlying tokens borrowed"
totalBorrow: BigDecimal!
"total amount borrowed in USD"
totalBorrowUsd: BigDecimal!
"total amount of underlying token in reserves"
totalReserves: BigDecimal!
"total amount in reserves in USD"
totalReservesUsd: BigDecimal!
"total available to be borrowed in the underlying asset"
availableLiquidity: BigDecimal!
"total available to be borrowed in USD"
availableLiquidityUsd: BigDecimal!
"utilization"
utilization: BigDecimal!
"COMP distribution per block for suppliers, this is the value from the contract with the 10^18 scaling removed"
compSpeedSupply: BigDecimal!
"COMP distribution per block for borrowers, this is the value from the contract with the 10^18 scaling removed"
compSpeedBorrow: BigDecimal!
"number of usdc one underlying token is worth"
usdcPerUnderlying: BigDecimal!
"number of usdc one eth is worth"
usdcPerEth: BigDecimal!
"number of usdc one comp is worth"
usdcPerComp: BigDecimal!
"number of transactions that went into deriving this data entry"
txCount: BigInt!
}
type MarketDayData @entity {
"token address concatendated with date"
id: ID!
"market that this data belongs to"
market: Market!
"unix timestamp in seconds rounded to the start of the day"
date: BigInt!
"collator factor in decimal form"
collateralFactor: BigDecimal!
"reserve factor in decimal form"
reserveFactor: BigDecimal!
"borrow cap in underlying tokens"
borrowCap: BigDecimal!
"amount of underlying owned by the contract"
cash: BigDecimal!
"number of underlying one cToken is worth (exchange_rate)"
underlyingPerCToken: BigDecimal!
"supply rate per block, this is the value from the contract with the 10^18 scaling removed"
supplyRatePerBlock: BigDecimal!
"borrow rate per block, this is the value from the contract with the 10^18 scaling removed"
borrowRatePerBlock: BigDecimal!
"supply apy not including the COMP distribution in decimal form"
supplyApy: BigDecimal!
"borrow apy not including the COMP distribution in decimal form"
borrowApy: BigDecimal!
"total supply apy including the COMP distribution in decimal form"
totalSupplyApy: BigDecimal!
"total borrow apy including the COMP distribution in decimal form"
totalBorrowApy: BigDecimal!
"total amount of underlying tokens supplied"
totalSupply: BigDecimal!
"total amount supplied in USD"
totalSupplyUsd: BigDecimal!
"total amount of underlying tokens borrowed"
totalBorrow: BigDecimal!
"total amount borrowed in USD"
totalBorrowUsd: BigDecimal!
"total amount of underlying token in reserves"
totalReserves: BigDecimal!
"total amount in reserves in USD"
totalReservesUsd: BigDecimal!
"total available to be borrowed in the underlying asset"
availableLiquidity: BigDecimal!
"total available to be borrowed in USD"
availableLiquidityUsd: BigDecimal!
"utilization"
utilization: BigDecimal!
"COMP distribution per block for suppliers, this is the value from the contract with the 10^18 scaling removed"
compSpeedSupply: BigDecimal!
"COMP distribution per block for borrowers, this is the value from the contract with the 10^18 scaling removed"
compSpeedBorrow: BigDecimal!
"number of usdc one underlying token is worth"
usdcPerUnderlying: BigDecimal!
"number of usdc one eth is worth"
usdcPerEth: BigDecimal!
"number of usdc one comp is worth"
usdcPerComp: BigDecimal!
"number of transactions that went into deriving this data entry"
txCount: BigInt!
}
type MarketWeekData @entity {
"token address concatendated with date"
id: ID!
"market that this data belongs to"
market: Market!
"unix timestamp in seconds rounded to the start of the week"
date: BigInt!
"collator factor in decimal form"
collateralFactor: BigDecimal!
"reserve factor in decimal form"
reserveFactor: BigDecimal!
"borrow cap in underlying tokens"
borrowCap: BigDecimal!
"amount of underlying owned by the contract"
cash: BigDecimal!
"number of underlying one cToken is worth (exchange_rate)"
underlyingPerCToken: BigDecimal!
"supply rate per block, this is the value from the contract with the 10^18 scaling removed"
supplyRatePerBlock: BigDecimal!
"borrow rate per block, this is the value from the contract with the 10^18 scaling removed"
borrowRatePerBlock: BigDecimal!
"supply apy not including the COMP distribution in decimal form"
supplyApy: BigDecimal!
"borrow apy not including the COMP distribution in decimal form"
borrowApy: BigDecimal!
"total supply apy including the COMP distribution in decimal form"
totalSupplyApy: BigDecimal!
"total borrow apy including the COMP distribution in decimal form"
totalBorrowApy: BigDecimal!
"total amount of underlying tokens supplied"
totalSupply: BigDecimal!
"total amount supplied in USD"
totalSupplyUsd: BigDecimal!
"total amount of underlying tokens borrowed"
totalBorrow: BigDecimal!
"total amount borrowed in USD"
totalBorrowUsd: BigDecimal!
"total amount of underlying token in reserves"
totalReserves: BigDecimal!
"total amount in reserves in USD"
totalReservesUsd: BigDecimal!
"total available to be borrowed in the underlying asset"
availableLiquidity: BigDecimal!
"total available to be borrowed in USD"
availableLiquidityUsd: BigDecimal!
"utilization"
utilization: BigDecimal!
"COMP distribution per block for suppliers, this is the value from the contract with the 10^18 scaling removed"
compSpeedSupply: BigDecimal!
"COMP distribution per block for borrowers, this is the value from the contract with the 10^18 scaling removed"
compSpeedBorrow: BigDecimal!
"number of usdc one underlying token is worth"
usdcPerUnderlying: BigDecimal!
"number of usdc one eth is worth"
usdcPerEth: BigDecimal!
"number of usdc one comp is worth"
usdcPerComp: BigDecimal!
"number of transactions that went into deriving this data entry"
txCount: BigInt!
}
type ProtocolWeekData @entity {
"token address concatendated with date"
id: ID!
"comptroller of the protocol"
protocol: Protocol!
"unix timestamp in seconds rounded to the start of the week"
date: BigInt!
"total amount of supplied in USD of the entire protocol"
totalSupplyUsd: BigDecimal!
"total amount of borrowed in USD of the entire protocol"
totalBorrowUsd: BigDecimal!
"total amount of reserves in USD of the entire protocol"
totalReservesUsd: BigDecimal!
"utilization"
utilization: BigDecimal!
"number of transactions that went into deriving this data entry"
txCount: BigInt!
}
type User @entity {
"users wallet address"
id: Bytes!
"block number the user was created"
creationBlockNumber: BigInt!
"most recent block number where the user was updated"
lastBlockNumber: BigInt!
"list of all UserMarket positions that belong to this user"
userMarkets: [UserMarket!]! # Can't be derived becuase the list of user markets is needed to computer total supply/borrow aggregates
"aggregate total of all supplied tokens by the user in all markets in USD"
totalSupplyUsd: BigDecimal!
"aggregate total of all borrowed tokens by the user in all markets in USD"
totalBorrowUsd: BigDecimal!
}
"Pairing for a single user to a single market, this repesents a users position in a market"
type UserMarket @entity {
"concatenation of market cToken address and user address"
id: ID!
"user in pairing"
user: User!
"market in pairing"
market: Market!
"block number the user market was created"
creationBlockNumber: BigInt!
"most recent block number where the AccountMarket was updated"
latestBlockNumber: BigInt!
"if the market is entered by the user"
enteredMarket: Boolean!
"total amount of underlying supplied by the user to the market, this increases with accrueInterest, this value is from the latestBlockNumber"
# a more accure value can be calculated by taking cTokenBalance * market.underlyingPerCToken
totalSupply: BigDecimal!
"total amount supplied in usd equivilent"
totalSupplyUsd: BigDecimal!
"total amount of underlying borrowed by the user from the market plus the interest, this increases with accrueInterest, this value is from the latestBlockNumber"
totalBorrow: BigDecimal!
"total amount borrowed in usd equivilent"
totalBorrowUsd: BigDecimal!
"number of cTokens of this market the user owns, this stays fixed with accrueInterest"
cTokenBalance: BigDecimal!
"mint events from this market made by the user"
mints: [Mint!]! @derivedFrom(field: "userMarket")
"redeem events to this market made by the user"
redeems: [Redeem!]! @derivedFrom(field: "userMarket")
"borrow events from this market made by the user"
borrows: [Borrow!]! @derivedFrom(field: "userMarket")
"repay events to this market made by the user"
repayBorrows: [RepayBorrow!]! @derivedFrom(field: "userMarket")
"transfer events of the market cToken from the user to another user"
fromTransfers: [Transfer!]! @derivedFrom(field: "fromUserMarket")
"transfer events of the market cToken to the user from another user"
toTransfers: [Transfer!]! @derivedFrom(field: "toUserMarket")
"list of all liquidations the user has recieved in this market (i.e user had their borrow repayed in the markets underlying asset)"
receivedLiquidations: [Liquidation!]! @derivedFrom(field: "borrowerUserLiquidationMarket")
"list of all seizes where the market cToken was seized from the user in a liquidation"
seizeLiquidations: [Liquidation!]! @derivedFrom(field: "borrowerUserSeizeMarket")
"list of all liquidations the user had performed where they seized cTokens of this market (i.e user repayed another users borrow)"
performedLiquidations: [Liquidation!]! @derivedFrom(field: "liquidatorUserMarket")
}
# mint: underlying <-> ctoken
type Mint @entity(immutable: true) {
"transaction hash"
id: Bytes!
"block number the transation occured"
blockNumber: BigInt!
"unix timestamp in seconds the transaction was made"
date: BigInt!
"UserMarket the transaction belongs to"
userMarket: UserMarket!
"underlying amount for the part of the transaction in the underlying token"
underlyingAmount: BigDecimal!
"cToken amount for the part of the transaction in cTokens"
cTokenAmount: BigDecimal!
}
# redeem: cToken <-> underlying
type Redeem @entity(immutable: true) {
"transaction hash"
id: Bytes!
"block number the transation occured"
blockNumber: BigInt!
"unix timestamp in seconds the transaction was made"
date: BigInt!
"UserMarket the transaction belongs to"
userMarket: UserMarket!
"underlying amount for the part of the transaction in the underlying token"
underlyingAmount: BigDecimal!
"cToken amount for the part of the transaction in cTokens"
cTokenAmount: BigDecimal!
}
# borrow: underlying
type Borrow @entity(immutable: true) {
"transaction hash"
id: Bytes!
"block number the transation occured"
blockNumber: BigInt!
"unix timestamp in seconds the transaction was made"
date: BigInt!
"UserMarket the transaction belongs to"
userMarket: UserMarket!
"underlying amount for the part of the transaction in the underlying token"
underlyingAmount: BigDecimal!
}
# repay: underlying
type RepayBorrow @entity(immutable: true) {
"transaction hash"
id: Bytes!
"block number the transation occured"
blockNumber: BigInt!
"unix timestamp in seconds the transaction was made"
date: BigInt!
"UserMarket the transaction belongs to"
userMarket: UserMarket!
"underlying amount for the part of the transaction in the underlying token"
underlyingAmount: BigDecimal!
}
# transfer: cToken
type Transfer @entity(immutable: true) {
"transaction hash"
id: Bytes!
"block number the transation occured"
blockNumber: BigInt!
"unix timestamp in seconds the transaction was made"
date: BigInt!
"UserMarket the transaction came from"
fromUserMarket: UserMarket!
"UserMarket the transaction is going to"
toUserMarket: UserMarket!
"cToken amount for the part of the transaction in cTokens"
cTokenAmount: BigDecimal!
}
# liquidation: underlying token from borrowerMarket's market <-> cTokens of liquidatorMarket's market
type Liquidation @entity(immutable: true) {
"transaction hash"
id: Bytes!
"block number of the liquidation"
blockNumber: BigInt!
"unix timestamp in seconds the liqudation was made"
date: BigInt!
"user being liquidated and the market they are being liquidated in"
borrowerUserLiquidationMarket: UserMarket!
"user being liquidated and the market they are having cTokens seized from"
borrowerUserSeizeMarket: UserMarket!
"user doing the liquidation and the market they are seizing cTokens in"
liquidatorUserMarket: UserMarket!
"amount of the underlying tokens of borrowerMarket's market which are being repayed by the liquidator"
repayAmount: BigDecimal!
"amount of the cTokens of liquidatorMarket's market which are being seized by the liquidator"
seizeAmount: BigDecimal!
}