-
Notifications
You must be signed in to change notification settings - Fork 1
/
schema.graphql
232 lines (214 loc) · 6.55 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
#############################################################################
# PoolTogether Subgraph Schema
# --------------------------------------------------------------------------
# Notes:
# - Entity IDs are keccak256 hashes of one or multiple fields represented in
# byte form and concatenated in the order specified next to the ID field in
# this document. This is to save storage and query costs since there will
# be less data in the ID field compared to if we did not hash the composite
# ID.
# - Composite Hash IDs are denoted by `generateHashId(...fields)`
#
#############################################################################
type PrizeVault @entity {
id: Bytes! # PrizeVault.address
address: Bytes!
prizePool: PrizePool
liquidationPair: LiquidationPair
yieldVault: Bytes # TODO: Look into making this it's own entity
name: String
symbol: String
balance: BigInt!
delegateBalance: BigInt!
balanceUpdates: [VaultBalanceUpdate!]! @derivedFrom(field: "prizeVault")
observations: [VaultObservation!]! @derivedFrom(field: "prizeVault")
accounts: [Account!]! @derivedFrom(field: "prizeVault")
prizeClaims: [PrizeClaim!]! @derivedFrom(field: "prizeVault") # prize claims for this prizeVault
}
type User @entity {
id: Bytes! # User.address
address: Bytes!
accounts: [Account!]! @derivedFrom(field: "user")
}
type Account @entity {
id: Bytes! # generateHashId(PrizeVault.address, User.address)
prizeVault: PrizeVault!
user: User!
delegate: Account # account to whom this account delegates their balances
balance: BigInt! # balance in account
delegateBalance: BigInt! # amount of balance delegated to this account
balanceUpdates: [AccountBalanceUpdate!]! @derivedFrom(field: "account")
observations: [AccountObservation!]! @derivedFrom(field: "account")
delegators: [Account!]! @derivedFrom(field: "delegate") # accounts who delegated to this account
#
# TODO: Figure out why these relational fields don't work with the Account type
# In PrizeClaim queries the winner, claimRewardRecipient and recipient get set to null if
# they are Account and not Bytes
#
# prizesWon: [PrizeClaim!]! @derivedFrom(field: "winner") # prize claims where this user is the winner
# prizesReceived: [PrizeClaim!]! @derivedFrom(field: "recipient") # prize claims where this user is the prize recipient
# claimRewards: [PrizeClaim!]! @derivedFrom(field: "claimRewardRecipient") # prize claim rewards earned by this user
}
type Draw @entity {
id: Bytes! # Draw.drawId as bytes
drawId: Int! # numerical draw ID for sorting
numTiers: Int!
lastNumTiers: Int!
prizeClaims: [PrizeClaim!]! @derivedFrom(field: "draw") # prize claims for this draw
winningRandomNumber: BigInt!
reserve: BigInt!
prizeTokensPerShare: BigInt!
drawOpenedAt: BigInt!
block: BigInt!
timestamp: BigInt!
txHash: Bytes!
}
type PrizeClaim @entity {
id: Bytes! # generateHashId(PrizeVault.address, Winner.address, Draw.drawId, PrizeClaim.tier, PrizeClaim.prizeIndex)
prizeVault: PrizeVault!
winner: Bytes! # address (who won the prize)
recipient: Bytes! # address (where the prize was sent)
draw: Draw!
tier: Int!
prizeIndex: BigInt!
payout: BigInt!
claimReward: BigInt!
claimRewardRecipient: Bytes! # address (who got the claim reward)
timestamp: BigInt!
block: BigInt!
txHash: Bytes!
gasUsed: BigInt!
}
type AccountBalanceUpdate implements BalanceUpdate @entity {
id: Bytes! # generateHashId(tx.hash, event.logIndex)
account: Account!
amount: BigInt!
delegateAmount: BigInt!
balance: BigInt!
delegateBalance: BigInt!
timestamp: BigInt!
txHash: Bytes!
}
type VaultBalanceUpdate implements BalanceUpdate @entity {
id: Bytes! # generateHashId(tx.hash, event.logIndex)
prizeVault: PrizeVault!
amount: BigInt!
delegateAmount: BigInt!
balance: BigInt!
delegateBalance: BigInt!
timestamp: BigInt!
txHash: Bytes!
}
type AccountObservation implements Observation @entity {
id: Bytes! # generateHashId(tx.hash, event.logIndex)
account: Account!
balance: BigInt!
delegateBalance: BigInt!
cumulativeBalance: BigInt!
timestamp: BigInt!
isNew: Boolean!
txHash: Bytes!
}
type VaultObservation implements Observation @entity {
id: Bytes! # generateHashId(tx.hash, event.logIndex)
prizeVault: PrizeVault!
balance: BigInt!
delegateBalance: BigInt!
cumulativeBalance: BigInt!
timestamp: BigInt!
isNew: Boolean!
txHash: Bytes!
}
interface BalanceUpdate {
amount: BigInt!
delegateAmount: BigInt!
balance: BigInt!
delegateBalance: BigInt!
timestamp: BigInt!
txHash: Bytes!
}
interface Observation {
balance: BigInt!
delegateBalance: BigInt!
cumulativeBalance: BigInt!
timestamp: BigInt!
txHash: Bytes!
}
type RngAuction @entity {
id: Bytes! # generateHashId(tx.hash, event.logIndex)
from: Bytes!
sender: Bytes!
recipient: Bytes!
sequenceId: BigInt!
rng: Bytes!
rngRequestId: BigInt!
elapsedTime: BigInt!
rewardFraction: BigInt!
timestamp: BigInt!
txHash: Bytes!
gasUsed: BigInt!
}
type RngRelay @entity {
id: Bytes! # generateHashId(tx.hash, event.logIndex)
from: Bytes!
messageDispatcher: Bytes!
remoteOwnerChainId: BigInt!
remoteOwner: Bytes!
remoteRngAuctionRelayListener: Bytes!
rewardRecipient: Bytes!
messageId: Bytes!
timestamp: BigInt!
txHash: Bytes!
gasUsed: BigInt!
}
type RngRelayReward @entity {
id: Bytes! # generateHashId(tx.hash, event.logIndex)
recipient: Bytes!
reward: BigInt!
timestamp: BigInt!
txHash: Bytes!
gasUsed: BigInt!
}
type LiquidationPair @entity {
id: Bytes! # address
liquidations: [Liquidation!]! @derivedFrom(field: "liquidationPair")
# prizeVault: PrizeVault @derivedFrom(field: "liquidationPair")
vaultBooster: VaultBooster @derivedFrom(field: "liquidationPair")
address: Bytes!
source: Bytes!
tokenIn: Bytes!
tokenOut: Bytes!
targetAuctionPeriod: BigInt!
minimumAuctionAmount: BigInt!
smoothingFactor: BigInt!
timestamp: BigInt!
txHash: Bytes!
gasUsed: BigInt!
}
type Liquidation @entity {
id: Bytes! # generateHashId(tx.hash, event.logIndex)
liquidationPair: LiquidationPair!
sender: Bytes!
receiver: Bytes!
amountOut: BigInt!
amountInMax: BigInt!
amountIn: BigInt!
deadline: BigInt!
timestamp: BigInt!
txHash: Bytes!
gasUsed: BigInt!
}
type VaultBooster @entity {
id: Bytes! # VaultBooster.address
liquidationPair: LiquidationPair
address: Bytes!
prizePool: Bytes
# TODO: # prizePool: PrizePool!
prizeVault: PrizeVault
owner: Bytes
}
type PrizePool @entity {
id: Bytes! # PrizePool.address
address: Bytes!
prizeVaults: [PrizeVault!]! @derivedFrom(field: "prizePool")
}