Skip to content
This repository was archived by the owner on Nov 9, 2022. It is now read-only.

Commit fddd9b7

Browse files
committed
chore: map withdrawals and rulings in subgraph
1 parent 990a87d commit fddd9b7

File tree

4 files changed

+75
-5
lines changed

4 files changed

+75
-5
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
- chore: build subgraph schema ([9810923](https://github.com/kleros/governor-web/commit/9810923))
44
- chore: generate first changelog ([2e41de7](https://github.com/kleros/governor-web/commit/2e41de7))
5+
- chore: map appeal funding in subgraph ([990a87d](https://github.com/kleros/governor-web/commit/990a87d))
56
- chore: map governance functions in subgraph ([360d007](https://github.com/kleros/governor-web/commit/360d007))
67
- chore: map list submissions in subgraph ([8cbbe41](https://github.com/kleros/governor-web/commit/8cbbe41))
78
- chore: map the withdrawal and execution of submissions in subgraph ([f74acb7](https://github.com/kleros/governor-web/commit/f74acb7))

subgraph/schema.graphql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,10 @@ type Session @entity {
117117
"""
118118
disputeID: BigInt
119119
"""
120+
IDs of submissions.
121+
"""
122+
submittedLists: [BigInt!]!
123+
"""
120124
Total deposits balance. This is used to calculate rewards.
121125
"""
122126
sumDeposit: BigInt!

subgraph/src/mapping.ts

Lines changed: 65 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@ import {
1313
ExecuteSubmissionsCall,
1414
FundAppealCall,
1515
Governor,
16+
Ruling,
1617
SetMetaEvidenceCall,
1718
SubmitListCall,
19+
WithdrawFeesAndRewardsCall,
1820
WithdrawTransactionListCall,
1921
} from "../generated/Governor/Governor";
2022
import {
@@ -77,6 +79,7 @@ function initializeContract(
7779
function newSession(contract: Contract, creationTime: BigInt): Session {
7880
let session = new Session(contract.sessionsLength.toHexString());
7981
session.creationTime = creationTime;
82+
session.submittedLists = [];
8083
session.sumDeposit = BigInt.fromI32(0);
8184
session.status = getStatus(0);
8285
session.durationOffset = BigInt.fromI32(0);
@@ -243,12 +246,11 @@ export function submitList(call: SubmitListCall): void {
243246
let governor = Governor.bind(call.to);
244247
let contract = initializeContract(call.to, call.from, call.block.timestamp);
245248

249+
let sessionID = contract.sessionsLength.minus(BigInt.fromI32(1));
246250
let submission = new Submission(contract.submissionsLength.toHexString());
247251
let _submission = governor.submissions(contract.submissionsLength);
248252
submission.creationTime = call.block.timestamp;
249-
submission.session = contract.sessionsLength
250-
.minus(BigInt.fromI32(1))
251-
.toHexString();
253+
submission.session = sessionID.toHexString();
252254
submission.submitter = _submission.value0;
253255
submission.deposit = _submission.value1;
254256
submission.listHash = _submission.value2;
@@ -284,6 +286,7 @@ export function submitList(call: SubmitListCall): void {
284286
contract.save();
285287

286288
let session = Session.load(submission.session);
289+
session.submittedLists = governor.getSubmittedLists(sessionID);
287290
session.sumDeposit = session.sumDeposit.plus(submission.deposit);
288291
session.submissionsLength = session.submissionsLength.plus(BigInt.fromI32(1));
289292
if (session.submissionsLength.equals(BigInt.fromI32(1)))
@@ -301,11 +304,17 @@ export function withdrawTransactionList(
301304
contract.reservedETH = governor.reservedETH();
302305
contract.save();
303306

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+
);
305314
submission.withdrawn = true;
306315
submission.save();
307316

308-
let session = Session.load(submission.session);
317+
session.submittedLists = governor.getSubmittedLists(sessionID);
309318
session.sumDeposit = session.sumDeposit.minus(submission.deposit);
310319
session.save();
311320
}
@@ -377,3 +386,54 @@ export function fundAppeal(call: FundAppealCall): void {
377386
if (sessionRoundsNumber.gt(session.roundsLength))
378387
newRound(session as Session, call.block.timestamp);
379388
}
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+
}

subgraph/subgraph.template.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,9 @@ dataSources:
4747
handler: executeSubmissions
4848
- function: fundAppeal(uint256)
4949
handler: fundAppeal
50+
- function: withdrawFeesAndRewards(address,uint256,uint256,uint256)
51+
handler: withdrawFeesAndRewards
52+
eventHandlers:
53+
- event: Ruling(indexed address,indexed uint256,uint256)
54+
handler: ruling
5055
file: ./src/mapping.ts

0 commit comments

Comments
 (0)