1
- import { Address , ByteArray } from "@graphprotocol/graph-ts" ;
1
+ import { Address , BigInt , ByteArray , crypto } from "@graphprotocol/graph-ts" ;
2
2
3
3
import {
4
4
ChangeArbitratorCall ,
@@ -12,8 +12,15 @@ import {
12
12
ChangeWithdrawTimeoutCall ,
13
13
Governor ,
14
14
SetMetaEvidenceCall ,
15
+ SubmitListCall ,
15
16
} from "../generated/Governor/Governor" ;
16
- import { Contract , MetaEvidence } from "../generated/schema" ;
17
+ import {
18
+ Contract ,
19
+ MetaEvidence ,
20
+ Session ,
21
+ Submission ,
22
+ Transaction ,
23
+ } from "../generated/schema" ;
17
24
18
25
function getStatus ( status : number ) : string {
19
26
if ( status == 0 ) return "NoDispute" ;
@@ -29,7 +36,11 @@ function concatByteArrays(a: ByteArray, b: ByteArray): ByteArray {
29
36
return out as ByteArray ;
30
37
}
31
38
32
- function initializeContract ( address : Address , deployer : Address ) : Contract {
39
+ function initializeContract (
40
+ address : Address ,
41
+ deployer : Address ,
42
+ creationTime : BigInt
43
+ ) : Contract {
33
44
let contract = Contract . load ( "0" ) ;
34
45
if ( contract != null ) return contract as Contract ;
35
46
let governor = Governor . bind ( address ) ;
@@ -49,13 +60,24 @@ function initializeContract(address: Address, deployer: Address): Contract {
49
60
contract . lastApprovalTime = governor . lastApprovalTime ( ) ;
50
61
contract . metaEvidenceUpdates = governor . metaEvidenceUpdates ( ) ;
51
62
contract . metaEvidence = contract . metaEvidenceUpdates . toHexString ( ) ;
63
+ contract . sessionsLength = BigInt . fromI32 ( 1 ) ;
64
+ contract . submissionsLength = BigInt . fromI32 ( 0 ) ;
52
65
contract . save ( ) ;
53
66
67
+ let session = new Session ( "0" ) ;
68
+ session . creationTime = creationTime ;
69
+ session . sumDeposit = BigInt . fromI32 ( 0 ) ;
70
+ session . status = getStatus ( 0 ) ;
71
+ session . durationOffset = BigInt . fromI32 ( 0 ) ;
72
+ session . submissionsLength = BigInt . fromI32 ( 0 ) ;
73
+ session . roundsLength = BigInt . fromI32 ( 0 ) ;
74
+ session . save ( ) ;
75
+
54
76
return contract as Contract ;
55
77
}
56
78
57
79
export function setMetaEvidence ( call : SetMetaEvidenceCall ) : void {
58
- let contract = initializeContract ( call . to , call . from ) ;
80
+ let contract = initializeContract ( call . to , call . from , call . block . timestamp ) ;
59
81
60
82
let metaEvidence = new MetaEvidence (
61
83
contract . metaEvidenceUpdates . toHexString ( )
@@ -70,58 +92,58 @@ export function setMetaEvidence(call: SetMetaEvidenceCall): void {
70
92
export function changeSubmissionDeposit (
71
93
call : ChangeSubmissionDepositCall
72
94
) : void {
73
- let contract = initializeContract ( call . to , call . from ) ;
95
+ let contract = initializeContract ( call . to , call . from , call . block . timestamp ) ;
74
96
contract . submissionBaseDeposit = call . inputs . _submissionBaseDeposit ;
75
97
contract . save ( ) ;
76
98
}
77
99
78
100
export function changeSubmissionTimeout (
79
101
call : ChangeSubmissionTimeoutCall
80
102
) : void {
81
- let contract = initializeContract ( call . to , call . from ) ;
103
+ let contract = initializeContract ( call . to , call . from , call . block . timestamp ) ;
82
104
contract . submissionTimeout = call . inputs . _submissionTimeout ;
83
105
contract . save ( ) ;
84
106
}
85
107
86
108
export function changeExecutionTimeout ( call : ChangeExecutionTimeoutCall ) : void {
87
- let contract = initializeContract ( call . to , call . from ) ;
109
+ let contract = initializeContract ( call . to , call . from , call . block . timestamp ) ;
88
110
contract . executionTimeout = call . inputs . _executionTimeout ;
89
111
contract . save ( ) ;
90
112
}
91
113
92
114
export function changeWithdrawTimeout ( call : ChangeWithdrawTimeoutCall ) : void {
93
- let contract = initializeContract ( call . to , call . from ) ;
115
+ let contract = initializeContract ( call . to , call . from , call . block . timestamp ) ;
94
116
contract . withdrawTimeout = call . inputs . _withdrawTimeout ;
95
117
contract . save ( ) ;
96
118
}
97
119
98
120
export function changeSharedMultiplier ( call : ChangeSharedMultiplierCall ) : void {
99
- let contract = initializeContract ( call . to , call . from ) ;
121
+ let contract = initializeContract ( call . to , call . from , call . block . timestamp ) ;
100
122
contract . sharedMultiplier = call . inputs . _sharedMultiplier ;
101
123
contract . save ( ) ;
102
124
}
103
125
104
126
export function changeWinnerMultiplier ( call : ChangeWinnerMultiplierCall ) : void {
105
- let contract = initializeContract ( call . to , call . from ) ;
127
+ let contract = initializeContract ( call . to , call . from , call . block . timestamp ) ;
106
128
contract . winnerMultiplier = call . inputs . _winnerMultiplier ;
107
129
contract . save ( ) ;
108
130
}
109
131
110
132
export function changeLoserMultiplier ( call : ChangeLoserMultiplierCall ) : void {
111
- let contract = initializeContract ( call . to , call . from ) ;
133
+ let contract = initializeContract ( call . to , call . from , call . block . timestamp ) ;
112
134
contract . loserMultiplier = call . inputs . _loserMultiplier ;
113
135
contract . save ( ) ;
114
136
}
115
137
116
138
export function changeArbitrator ( call : ChangeArbitratorCall ) : void {
117
- let contract = initializeContract ( call . to , call . from ) ;
139
+ let contract = initializeContract ( call . to , call . from , call . block . timestamp ) ;
118
140
contract . arbitrator = call . inputs . _arbitrator ;
119
141
contract . arbitratorExtraData = call . inputs . _arbitratorExtraData ;
120
142
contract . save ( ) ;
121
143
}
122
144
123
145
export function changeMetaEvidence ( call : ChangeMetaEvidenceCall ) : void {
124
- let contract = initializeContract ( call . to , call . from ) ;
146
+ let contract = initializeContract ( call . to , call . from , call . block . timestamp ) ;
125
147
126
148
let metaEvidence = new MetaEvidence (
127
149
contract . metaEvidenceUpdates . toHexString ( )
@@ -132,3 +154,56 @@ export function changeMetaEvidence(call: ChangeMetaEvidenceCall): void {
132
154
contract . metaEvidence = metaEvidence . id ;
133
155
contract . save ( ) ;
134
156
}
157
+
158
+ export function submitList ( call : SubmitListCall ) : void {
159
+ let contract = initializeContract ( call . to , call . from , call . block . timestamp ) ;
160
+ let governor = Governor . bind ( call . to ) ;
161
+
162
+ let submission = new Submission ( contract . submissionsLength . toHexString ( ) ) ;
163
+ let _submission = governor . submissions ( contract . submissionsLength ) ;
164
+ submission . creationTime = call . block . timestamp ;
165
+ submission . session = contract . sessionsLength
166
+ . minus ( BigInt . fromI32 ( 1 ) )
167
+ . toHexString ( ) ;
168
+ submission . submitter = _submission . value0 ;
169
+ submission . deposit = _submission . value1 ;
170
+ submission . listHash = _submission . value2 ;
171
+ submission . approved = _submission . value4 ;
172
+ submission . transactionsLength = BigInt . fromI32 ( call . inputs . _target . length ) ;
173
+ submission . save ( ) ;
174
+
175
+ for ( let i = 0 ; i < call . inputs . _target . length ; i ++ ) {
176
+ let transaction = new Transaction (
177
+ concatByteArrays (
178
+ crypto . keccak256 ( ByteArray . fromUTF8 ( submission . id ) ) ,
179
+ ByteArray . fromUTF8 ( i . toString ( ) )
180
+ ) . toHexString ( )
181
+ ) ;
182
+ let _transaction = governor . getTransactionInfo (
183
+ contract . submissionsLength ,
184
+ BigInt . fromI32 ( i )
185
+ ) ;
186
+ transaction . creationTime = call . block . timestamp ;
187
+ transaction . submission = submission . id ;
188
+ transaction . target = _transaction . value0 ;
189
+ transaction . value = _transaction . value1 ;
190
+ transaction . data = _transaction . value2 ;
191
+ transaction . executed = _transaction . value3 ;
192
+ transaction . save ( ) ;
193
+ }
194
+
195
+ contract . reservedETH = governor . reservedETH ( ) ;
196
+ contract . submissionsLength = contract . submissionsLength . plus (
197
+ BigInt . fromI32 ( 1 )
198
+ ) ;
199
+ contract . save ( ) ;
200
+
201
+ let session = Session . load ( submission . session ) ;
202
+ session . sumDeposit = session . sumDeposit . plus ( submission . deposit ) ;
203
+ session . submissionsLength = session . submissionsLength . plus ( BigInt . fromI32 ( 1 ) ) ;
204
+ if ( session . submissionsLength . equals ( BigInt . fromI32 ( 1 ) ) )
205
+ session . durationOffset = call . block . timestamp . minus (
206
+ contract . lastApprovalTime
207
+ ) ;
208
+ session . save ( ) ;
209
+ }
0 commit comments