-
Notifications
You must be signed in to change notification settings - Fork 6
/
schema.graphql
453 lines (317 loc) · 7.51 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
enum ActionType {
LOCK
FREE
LIFT
VOTE
VOTER
ETCH
CAST
POLL_CREATED
}
type VoterRegistry @entity {
id: ID!
coldAddress: Bytes!
hotAddress: Bytes!
voteProxies: [VoteProxy!]! @derivedFrom(field: "owner")
" Block number "
block: BigInt!
" Transaction hash (tx) "
transactionHash: Bytes!
" Timestamp as seconds (time) "
timestamp: BigInt!
}
type VoteProxy @entity {
" VoteProxy address"
id: ID!
" Amount of loked MKR"
locked: BigDecimal!
owner: VoterRegistry!
" Its currents voted slate"
votedSlate: Slate
}
type AddressVoter @entity {
" Address"
id: ID!
" Amount of loked MKR"
locked: BigDecimal!
" Its currents voted slate"
votedSlate: Slate
" Action timestamp as seconds (time) "
timestamp: BigInt!
}
type Slate @entity {
# TODO: Document
id: ID!
# TODO: Document
yays: [Bytes!]
" Timestamp when the slate was created as seconds"
timestamp: BigInt!
# TODO: Document
votedByProxies: [VoteProxy!] @derivedFrom(field: "votedSlate")
# TODO: Document
votedByAddresses: [AddressVoter!] @derivedFrom(field: "votedSlate")
}
type Spell @entity {
" ID represent the contract address "
id: ID!
" Timestamp when the spell was voted by the first time"
timestamp: BigInt!
" Spell's data "
data: Bytes
" Timestamp when the spell is casted"
casted: BigInt
" How much MKR it has when the spell is casted"
castedWith: BigDecimal
" Timestamp when the spell is casted"
lifted: BigInt
" How much MKR it has when the spell is lifted to hat"
liftedWith: BigDecimal
" Total MKR supporting this spell"
approvals: BigDecimal!
" Total voters supporting this spell"
totalVotes: BigInt
# TODO: Document
timeLineCount: BigInt!
# TODO: Document
timeLine: [VotingAction!] @derivedFrom(field: "spell")
}
#
# Voting Action
#
interface VotingAction {
" Equals to: <actionType>-<transactionHash>-<logIndex> "
id: ID!
" Voter's Address "
sender: Bytes!
" Spell related to this action"
spell: Spell
" Block number "
block: BigInt!
" Transaction hash (tx) "
transactionHash: Bytes!
" Timestamp as seconds (time) "
timestamp: BigInt!
}
type AddAction implements VotingAction @entity {
" Equals to: <ADD | ADD-ARRAY>-<transactionHash>-<logIndex> "
id: ID!
" Voter's Address "
sender: Bytes!
" Spell related to this action"
spell: Spell
" Amount of loked MKR the sender had at the moment this action is performed"
locked: BigDecimal!
" Block number "
block: BigInt!
" Transaction hash (tx) "
transactionHash: Bytes!
" Action timestamp as seconds (time) "
timestamp: BigInt!
}
type RemoveAction implements VotingAction @entity {
" Equals to: <REMOVE | REMOVE-ARRAY>-<transactionHash>-<logIndex> "
id: ID!
" Voter's Address "
sender: Bytes!
" Spell related to this action"
spell: Spell
" Amount of loked MKR the sender had at the moment this action is performed"
locked: BigDecimal!
" Block number "
block: BigInt!
" Transaction hash (tx) "
transactionHash: Bytes!
" Action timestamp as seconds (time) "
timestamp: BigInt!
}
type LockAction implements VotingAction @entity {
" Equals to: <LOCK>-<transactionHash>-<logIndex> "
id: ID!
" Voter's Address "
sender: Bytes!
" Spell related to this action"
spell: Spell
" Amount of MKR locked or withdrawn"
wad: BigDecimal!
" Block number "
block: BigInt!
" Transaction hash (tx) "
transactionHash: Bytes!
" Action timestamp as seconds (time) "
timestamp: BigInt!
}
type FreeAction implements VotingAction @entity {
" Equals to: <FREE>-<transactionHash>-<logIndex> "
id: ID!
" Voter's Address "
sender: Bytes!
" Spell related to this action"
spell: Spell
" Amount of MKR locked or withdrawn"
wad: BigDecimal!
" Block number "
block: BigInt!
" Transaction hash (tx) "
transactionHash: Bytes!
" Action timestamp as seconds (time) "
timestamp: BigInt!
}
type Poll @entity {
" Equals to: <Poll ID> "
id: ID!
# TODO: Document
creator: Bytes
# TODO: Document
blockCreated: BigInt!
# TODO: Document
pollId: BigInt!
# TODO: Document
startDate: BigInt!
# TODO: Document
endDate: BigInt!
# TODO: Document
multiHash: String
# TODO: Document
url: String
" Withdrawal timestamp "
withdrawn: BigInt
" Number votes"
votesCount: BigInt!
# TODO: Document
votes: [PollVote!] @derivedFrom(field: "poll")
" Number of record in timeLine "
timeLineCount: BigInt!
" Poll historical data "
timeLine: [PollAction!] @derivedFrom(field: "poll")
}
type PollVote @entity {
" Equals to: <Poll ID>-<Voter's Address> "
id: ID!
" Voters's Address "
voter: Bytes!
" Poll related to this action"
poll: Poll
" Selected option "
option: BigInt!
" Block number "
block: BigInt!
" Transaction hash (tx) "
transactionHash: Bytes!
" Vote timestamp as seconds (time) "
timestamp: BigInt!
}
#
# Poll Action
#
interface PollAction {
" Equals to: <actionType>-<transactionHash>-<voter> "
id: ID!
" Poll related to this action"
poll: Poll
" Block number "
block: BigInt!
" Transaction hash (tx) "
transactionHash: Bytes!
" Timestamp as seconds (time) "
timestamp: BigInt!
}
type CreatePollAction implements PollAction @entity {
" Equals to: <CREATE>-<transactionHash>-<creator> "
id: ID!
" Spell related to this action"
poll: Poll
" Block number "
block: BigInt!
" Transaction hash (tx) "
transactionHash: Bytes!
" Action timestamp as seconds (time) "
timestamp: BigInt!
}
type VotePollAction implements PollAction @entity {
" Equals to: <VOTE>-<transactionHash>-<voter> "
id: ID!
" Voter's Address "
sender: Bytes!
" Spell related to this action"
poll: Poll
" Selected option "
option: BigInt!
" Block number "
block: BigInt!
" Transaction hash (tx) "
transactionHash: Bytes!
" Action timestamp as seconds (time) "
timestamp: BigInt!
}
type WithdrawPollAction implements PollAction @entity {
" Equals to: <WITHDRAW>-<transactionHash>-<voter> "
id: ID!
" Voter's Address "
sender: Bytes!
" Spell related to this action"
poll: Poll
" Block number "
block: BigInt!
" Transaction hash (tx) "
transactionHash: Bytes!
" Action timestamp as seconds (time) "
timestamp: BigInt!
}
type Action @entity {
# TODO: Document
id: ID!
# TODO: Document
sender: Bytes
" Action name (act) "
type: ActionType!
" Action value (arg) "
wad: BigDecimal
" New Hat"
hat: Bytes
" Spell casted"
spell: Bytes
" Votes"
yays: [Bytes!]
" Slate voted"
slate: Bytes
" New voter address"
voterAddress: Bytes
" Is the new voter a VoteProxy"
isVoteProxy: Boolean
" Block number "
block: BigInt!
" Transaction hash (tx) "
transactionHash: Bytes!
" Action timestamp as seconds (time) "
timestamp: BigInt!
}
type GovernanceInfo @entity {
# TODO: Document
id: ID!
# Number of VoteProxy contracts created
countProxies: BigInt!
# Number of unique address that ever locked some MKR in the Chief
countAddresses: BigInt!
# Number of Slates
countSlates: BigInt!
# Number of Spells
countSpells: BigInt!
# Number of lock actions
countLock: BigInt!
# Number of free actions
countFree: BigInt!
# Number of Polls
countPolls: BigInt!
# Number of casted spells
countCasted: BigInt!
# MKR currently locked in Chief
locked: BigDecimal!
# Last block number processed
lastBlock: BigInt!
# Timestamp as seconds of last block processed
lastSynced: BigInt!
# Current hat
hat: Bytes
# Last casted spell
active: Bytes
}