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

Commit 8cbbe41

Browse files
committed
chore: map list submissions in subgraph
1 parent 360d007 commit 8cbbe41

File tree

4 files changed

+99
-13
lines changed

4 files changed

+99
-13
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
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 governance functions in subgraph ([360d007](https://github.com/kleros/governor-web/commit/360d007))
56
- chore: set up project and architecture ([d28fb74](https://github.com/kleros/governor-web/commit/d28fb74))

subgraph/schema.graphql

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,14 @@ type Contract @entity {
8989
The current meta evidence.
9090
"""
9191
metaEvidence: MetaEvidence!
92+
"""
93+
Number of sessions.
94+
"""
95+
sessionsLength: BigInt!
96+
"""
97+
Number of submissions.
98+
"""
99+
submissionsLength: BigInt!
92100
}
93101

94102
type Session @entity {

subgraph/src/mapping.ts

Lines changed: 88 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Address, ByteArray } from "@graphprotocol/graph-ts";
1+
import { Address, BigInt, ByteArray, crypto } from "@graphprotocol/graph-ts";
22

33
import {
44
ChangeArbitratorCall,
@@ -12,8 +12,15 @@ import {
1212
ChangeWithdrawTimeoutCall,
1313
Governor,
1414
SetMetaEvidenceCall,
15+
SubmitListCall,
1516
} 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";
1724

1825
function getStatus(status: number): string {
1926
if (status == 0) return "NoDispute";
@@ -29,7 +36,11 @@ function concatByteArrays(a: ByteArray, b: ByteArray): ByteArray {
2936
return out as ByteArray;
3037
}
3138

32-
function initializeContract(address: Address, deployer: Address): Contract {
39+
function initializeContract(
40+
address: Address,
41+
deployer: Address,
42+
creationTime: BigInt
43+
): Contract {
3344
let contract = Contract.load("0");
3445
if (contract != null) return contract as Contract;
3546
let governor = Governor.bind(address);
@@ -49,13 +60,24 @@ function initializeContract(address: Address, deployer: Address): Contract {
4960
contract.lastApprovalTime = governor.lastApprovalTime();
5061
contract.metaEvidenceUpdates = governor.metaEvidenceUpdates();
5162
contract.metaEvidence = contract.metaEvidenceUpdates.toHexString();
63+
contract.sessionsLength = BigInt.fromI32(1);
64+
contract.submissionsLength = BigInt.fromI32(0);
5265
contract.save();
5366

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+
5476
return contract as Contract;
5577
}
5678

5779
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);
5981

6082
let metaEvidence = new MetaEvidence(
6183
contract.metaEvidenceUpdates.toHexString()
@@ -70,58 +92,58 @@ export function setMetaEvidence(call: SetMetaEvidenceCall): void {
7092
export function changeSubmissionDeposit(
7193
call: ChangeSubmissionDepositCall
7294
): void {
73-
let contract = initializeContract(call.to, call.from);
95+
let contract = initializeContract(call.to, call.from, call.block.timestamp);
7496
contract.submissionBaseDeposit = call.inputs._submissionBaseDeposit;
7597
contract.save();
7698
}
7799

78100
export function changeSubmissionTimeout(
79101
call: ChangeSubmissionTimeoutCall
80102
): void {
81-
let contract = initializeContract(call.to, call.from);
103+
let contract = initializeContract(call.to, call.from, call.block.timestamp);
82104
contract.submissionTimeout = call.inputs._submissionTimeout;
83105
contract.save();
84106
}
85107

86108
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);
88110
contract.executionTimeout = call.inputs._executionTimeout;
89111
contract.save();
90112
}
91113

92114
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);
94116
contract.withdrawTimeout = call.inputs._withdrawTimeout;
95117
contract.save();
96118
}
97119

98120
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);
100122
contract.sharedMultiplier = call.inputs._sharedMultiplier;
101123
contract.save();
102124
}
103125

104126
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);
106128
contract.winnerMultiplier = call.inputs._winnerMultiplier;
107129
contract.save();
108130
}
109131

110132
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);
112134
contract.loserMultiplier = call.inputs._loserMultiplier;
113135
contract.save();
114136
}
115137

116138
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);
118140
contract.arbitrator = call.inputs._arbitrator;
119141
contract.arbitratorExtraData = call.inputs._arbitratorExtraData;
120142
contract.save();
121143
}
122144

123145
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);
125147

126148
let metaEvidence = new MetaEvidence(
127149
contract.metaEvidenceUpdates.toHexString()
@@ -132,3 +154,56 @@ export function changeMetaEvidence(call: ChangeMetaEvidenceCall): void {
132154
contract.metaEvidence = metaEvidence.id;
133155
contract.save();
134156
}
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+
}

subgraph/subgraph.template.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,6 @@ dataSources:
3939
handler: changeArbitrator
4040
- function: changeMetaEvidence(string)
4141
handler: changeMetaEvidence
42+
- function: submitList(address[],uint256[],bytes,uint256[],string)
43+
handler: submitList
4244
file: ./src/mapping.ts

0 commit comments

Comments
 (0)