@@ -13,8 +13,10 @@ import {
13
13
ExecuteSubmissionsCall ,
14
14
FundAppealCall ,
15
15
Governor ,
16
+ Ruling ,
16
17
SetMetaEvidenceCall ,
17
18
SubmitListCall ,
19
+ WithdrawFeesAndRewardsCall ,
18
20
WithdrawTransactionListCall ,
19
21
} from "../generated/Governor/Governor" ;
20
22
import {
@@ -77,6 +79,7 @@ function initializeContract(
77
79
function newSession ( contract : Contract , creationTime : BigInt ) : Session {
78
80
let session = new Session ( contract . sessionsLength . toHexString ( ) ) ;
79
81
session . creationTime = creationTime ;
82
+ session . submittedLists = [ ] ;
80
83
session . sumDeposit = BigInt . fromI32 ( 0 ) ;
81
84
session . status = getStatus ( 0 ) ;
82
85
session . durationOffset = BigInt . fromI32 ( 0 ) ;
@@ -243,12 +246,11 @@ export function submitList(call: SubmitListCall): void {
243
246
let governor = Governor . bind ( call . to ) ;
244
247
let contract = initializeContract ( call . to , call . from , call . block . timestamp ) ;
245
248
249
+ let sessionID = contract . sessionsLength . minus ( BigInt . fromI32 ( 1 ) ) ;
246
250
let submission = new Submission ( contract . submissionsLength . toHexString ( ) ) ;
247
251
let _submission = governor . submissions ( contract . submissionsLength ) ;
248
252
submission . creationTime = call . block . timestamp ;
249
- submission . session = contract . sessionsLength
250
- . minus ( BigInt . fromI32 ( 1 ) )
251
- . toHexString ( ) ;
253
+ submission . session = sessionID . toHexString ( ) ;
252
254
submission . submitter = _submission . value0 ;
253
255
submission . deposit = _submission . value1 ;
254
256
submission . listHash = _submission . value2 ;
@@ -284,6 +286,7 @@ export function submitList(call: SubmitListCall): void {
284
286
contract . save ( ) ;
285
287
286
288
let session = Session . load ( submission . session ) ;
289
+ session . submittedLists = governor . getSubmittedLists ( sessionID ) ;
287
290
session . sumDeposit = session . sumDeposit . plus ( submission . deposit ) ;
288
291
session . submissionsLength = session . submissionsLength . plus ( BigInt . fromI32 ( 1 ) ) ;
289
292
if ( session . submissionsLength . equals ( BigInt . fromI32 ( 1 ) ) )
@@ -301,11 +304,17 @@ export function withdrawTransactionList(
301
304
contract . reservedETH = governor . reservedETH ( ) ;
302
305
contract . save ( ) ;
303
306
304
- let submission = Submission . load ( call . inputs . _submissionID . toHexString ( ) ) ;
307
+ let sessionID = contract . sessionsLength . minus ( BigInt . fromI32 ( 1 ) ) ;
308
+ let session = Session . load ( sessionID . toHexString ( ) ) ;
309
+
310
+ let submittedLists = session . submittedLists ;
311
+ let submission = Submission . load (
312
+ submittedLists [ call . inputs . _submissionID . toI32 ( ) ] . toHexString ( )
313
+ ) ;
305
314
submission . withdrawn = true ;
306
315
submission . save ( ) ;
307
316
308
- let session = Session . load ( submission . session ) ;
317
+ session . submittedLists = governor . getSubmittedLists ( sessionID ) ;
309
318
session . sumDeposit = session . sumDeposit . minus ( submission . deposit ) ;
310
319
session . save ( ) ;
311
320
}
@@ -377,3 +386,54 @@ export function fundAppeal(call: FundAppealCall): void {
377
386
if ( sessionRoundsNumber . gt ( session . roundsLength ) )
378
387
newRound ( session as Session , call . block . timestamp ) ;
379
388
}
389
+
390
+ export function withdrawFeesAndRewards ( call : WithdrawFeesAndRewardsCall ) : void {
391
+ let governor = Governor . bind ( call . to ) ;
392
+ let contract = initializeContract ( call . to , call . from , call . block . timestamp ) ;
393
+
394
+ updateContribution (
395
+ governor ,
396
+ call . inputs . _session ,
397
+ call . inputs . _round ,
398
+ call . inputs . _beneficiary ,
399
+ call . block . timestamp
400
+ ) ;
401
+
402
+ contract . reservedETH = governor . reservedETH ( ) ;
403
+ contract . save ( ) ;
404
+ }
405
+
406
+ export function ruling ( event : Ruling ) : void {
407
+ let governor = Governor . bind ( event . transaction . to as Address ) ;
408
+ let contract = initializeContract (
409
+ event . transaction . to as Address ,
410
+ event . transaction . from ,
411
+ event . block . timestamp
412
+ ) ;
413
+
414
+ let session = Session . load (
415
+ contract . sessionsLength . minus ( BigInt . fromI32 ( 1 ) ) . toHexString ( )
416
+ ) ;
417
+
418
+ if ( event . params . _ruling . notEqual ( BigInt . fromI32 ( 0 ) ) ) {
419
+ let submittedLists = session . submittedLists ;
420
+ let submission = Submission . load (
421
+ submittedLists [ event . params . _ruling . toI32 ( ) ] . toHexString ( )
422
+ ) ;
423
+ submission . approved = true ;
424
+ submission . approvalTime = event . block . timestamp ;
425
+ submission . save ( ) ;
426
+ }
427
+
428
+ contract . reservedETH = governor . reservedETH ( ) ;
429
+ contract . lastApprovalTime = event . block . timestamp ;
430
+ contract . shadowWinner = governor . shadowWinner ( ) . toHexString ( ) ;
431
+ contract . save ( ) ;
432
+
433
+ session . ruling = event . params . _ruling ;
434
+ session . sumDeposit = BigInt . fromI32 ( 0 ) ;
435
+ session . status = getStatus ( 2 ) ;
436
+ session . save ( ) ;
437
+
438
+ newSession ( contract , event . block . timestamp ) ;
439
+ }
0 commit comments