Skip to content

Commit 8d3d192

Browse files
committed
refactor(web): use subgraph instead of calling contract for overridden disputes
1 parent 08b4914 commit 8d3d192

File tree

5 files changed

+82
-14
lines changed

5 files changed

+82
-14
lines changed

web/src/components/Verdict/DisputeTimeline.tsx

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { useParams } from "react-router-dom";
33
import styled, { useTheme } from "styled-components";
44
import { _TimelineItem1, CustomTimeline } from "@kleros/ui-components-library";
55
import { Periods } from "consts/periods";
6-
import { useKlerosCoreCurrentRuling } from "hooks/contracts/generated";
76
import { ClassicRound } from "src/graphql/graphql";
87
import { DisputeDetailsQuery, useDisputeDetailsQuery } from "queries/useDisputeDetailsQuery";
98
import { useDisputeTemplate } from "queries/useDisputeTemplate";
@@ -65,44 +64,52 @@ const useItems = (disputeDetails?: DisputeDetailsQuery, arbitrable?: `0x${string
6564
const { id } = useParams();
6665
const { data: votingHistory } = useVotingHistory(id);
6766
const { data: disputeTemplate } = useDisputeTemplate(id, arbitrable);
68-
const { data: currentRulingArray } = useKlerosCoreCurrentRuling({ args: [BigInt(id ?? 0)], watch: true });
69-
const rulingOverride = currentRulingArray?.[2];
7067
const localRounds: ClassicRound[] = votingHistory?.dispute?.disputeKitDispute?.localRounds;
7168
const theme = useTheme();
7269

7370
return useMemo<TimelineItems | undefined>(() => {
7471
const dispute = disputeDetails?.dispute;
7572
if (dispute) {
73+
const rulingOverride = dispute.overridden;
74+
const parsedDisputeFinalRuling = parseInt(dispute.currentRuling);
7675
const currentPeriodIndex = Periods[dispute.period];
7776
const lastPeriodChange = dispute.lastPeriodChange;
7877
const courtTimePeriods = dispute.court.timesPerPeriod;
7978
return localRounds?.reduce<TimelineItems>(
8079
(acc, { winningChoice }, index) => {
81-
const parsedWinningChoice = parseInt(winningChoice);
80+
const parsedRoundChoice = parseInt(winningChoice);
8281
const eventDate = getCaseEventTimes(lastPeriodChange, currentPeriodIndex, courtTimePeriods, false);
83-
const icon =
84-
disputeDetails?.dispute?.ruled && !rulingOverride && index === localRounds.length - 1 ? ClosedCaseIcon : "";
82+
const icon = dispute.ruled && !rulingOverride && index === localRounds.length - 1 ? ClosedCaseIcon : "";
8583

8684
acc.push({
8785
title: `Jury Decision - Round ${index + 1}`,
8886
party:
89-
parsedWinningChoice !== 0
90-
? disputeTemplate?.answers?.[parsedWinningChoice - 1].title
91-
: "Refuse to Arbitrate",
87+
parsedRoundChoice !== 0 ? disputeTemplate?.answers?.[parsedRoundChoice - 1].title : "Refuse to Arbitrate",
9288
subtitle: eventDate,
9389
rightSided: true,
9490
variant: theme.secondaryPurple,
9591
Icon: icon !== "" ? icon : undefined,
9692
});
9793

98-
if (index < localRounds.length - 1 || rulingOverride) {
94+
if (index < localRounds.length - 1) {
9995
acc.push({
10096
title: "Appealed",
10197
party: "",
10298
subtitle: eventDate,
10399
rightSided: true,
104100
Icon: AppealedCaseIcon,
105101
});
102+
} else if (rulingOverride && parsedDisputeFinalRuling !== parsedRoundChoice) {
103+
acc.push({
104+
title: "Won by Appeal",
105+
party:
106+
parsedDisputeFinalRuling !== 0
107+
? disputeTemplate?.answers?.[parsedDisputeFinalRuling - 1].title
108+
: "Refuse to Arbitrate",
109+
subtitle: eventDate,
110+
rightSided: true,
111+
Icon: ClosedCaseIcon,
112+
});
106113
}
107114

108115
return acc;

web/src/context/Web3Provider.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const chains = [arbitrumGoerli, gnosisChiado];
1212
const projectId = process.env.WALLETCONNECT_PROJECT_ID ?? "6efaa26765fa742153baf9281e218217";
1313

1414
const { publicClient, webSocketPublicClient } = configureChains(chains, [
15-
alchemyProvider({ apiKey: process.env.ALCHEMY_API_KEY ?? "" }),
15+
alchemyProvider({ apiKey: process.env.ALCHEMY_API_KEY ?? "HAAmSjN1RzxG1LNsGh9Je72bYVPsyFfQ" }),
1616
jsonRpcProvider({
1717
rpc: () => ({
1818
http: `https://rpc.chiadochain.net`,

web/src/graphql/gql.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const documents = {
2323
types.CourtPolicyUriDocument,
2424
'\n query CourtTree {\n court(id: "1") {\n name\n id\n children(orderBy: name) {\n name\n id\n children {\n name\n id\n children {\n name\n id\n children {\n name\n id\n children {\n name\n id\n }\n }\n }\n }\n }\n }\n }\n':
2525
types.CourtTreeDocument,
26-
"\n query DisputeDetails($disputeID: ID!) {\n dispute(id: $disputeID) {\n court {\n id\n timesPerPeriod\n hiddenVotes\n feeForJuror\n }\n arbitrated {\n id\n }\n period\n ruled\n lastPeriodChange\n currentRound {\n id\n }\n currentRoundIndex\n }\n }\n":
26+
"\n query DisputeDetails($disputeID: ID!) {\n dispute(id: $disputeID) {\n court {\n id\n timesPerPeriod\n hiddenVotes\n feeForJuror\n }\n arbitrated {\n id\n }\n period\n ruled\n lastPeriodChange\n currentRuling\n overridden\n tied\n currentRound {\n id\n }\n currentRoundIndex\n }\n }\n":
2727
types.DisputeDetailsDocument,
2828
"\n query Draw($address: String, $disputeID: String, $roundID: String) {\n draws(where: { dispute: $disputeID, juror: $address, round: $roundID }) {\n voteID\n }\n }\n":
2929
types.DrawDocument,
@@ -85,8 +85,8 @@ export function graphql(
8585
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
8686
*/
8787
export function graphql(
88-
source: "\n query DisputeDetails($disputeID: ID!) {\n dispute(id: $disputeID) {\n court {\n id\n timesPerPeriod\n hiddenVotes\n feeForJuror\n }\n arbitrated {\n id\n }\n period\n ruled\n lastPeriodChange\n currentRound {\n id\n }\n currentRoundIndex\n }\n }\n"
89-
): (typeof documents)["\n query DisputeDetails($disputeID: ID!) {\n dispute(id: $disputeID) {\n court {\n id\n timesPerPeriod\n hiddenVotes\n feeForJuror\n }\n arbitrated {\n id\n }\n period\n ruled\n lastPeriodChange\n currentRound {\n id\n }\n currentRoundIndex\n }\n }\n"];
88+
source: "\n query DisputeDetails($disputeID: ID!) {\n dispute(id: $disputeID) {\n court {\n id\n timesPerPeriod\n hiddenVotes\n feeForJuror\n }\n arbitrated {\n id\n }\n period\n ruled\n lastPeriodChange\n currentRuling\n overridden\n tied\n currentRound {\n id\n }\n currentRoundIndex\n }\n }\n"
89+
): (typeof documents)["\n query DisputeDetails($disputeID: ID!) {\n dispute(id: $disputeID) {\n court {\n id\n timesPerPeriod\n hiddenVotes\n feeForJuror\n }\n arbitrated {\n id\n }\n period\n ruled\n lastPeriodChange\n currentRuling\n overridden\n tied\n currentRound {\n id\n }\n currentRoundIndex\n }\n }\n"];
9090
/**
9191
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
9292
*/

web/src/graphql/graphql.ts

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,13 @@ export enum ClassicContribution_OrderBy {
201201
ContributorTotalStake = "contributor__totalStake",
202202
CoreDispute = "coreDispute",
203203
CoreDisputeCurrentRoundIndex = "coreDispute__currentRoundIndex",
204+
CoreDisputeCurrentRuling = "coreDispute__currentRuling",
204205
CoreDisputeId = "coreDispute__id",
205206
CoreDisputeLastPeriodChange = "coreDispute__lastPeriodChange",
207+
CoreDisputeOverridden = "coreDispute__overridden",
206208
CoreDisputePeriod = "coreDispute__period",
207209
CoreDisputeRuled = "coreDispute__ruled",
210+
CoreDisputeTied = "coreDispute__tied",
208211
Id = "id",
209212
LocalRound = "localRound",
210213
LocalRoundFeeRewards = "localRound__feeRewards",
@@ -305,10 +308,13 @@ export type ClassicDispute_Filter = {
305308
export enum ClassicDispute_OrderBy {
306309
CoreDispute = "coreDispute",
307310
CoreDisputeCurrentRoundIndex = "coreDispute__currentRoundIndex",
311+
CoreDisputeCurrentRuling = "coreDispute__currentRuling",
308312
CoreDisputeId = "coreDispute__id",
309313
CoreDisputeLastPeriodChange = "coreDispute__lastPeriodChange",
314+
CoreDisputeOverridden = "coreDispute__overridden",
310315
CoreDisputePeriod = "coreDispute__period",
311316
CoreDisputeRuled = "coreDispute__ruled",
317+
CoreDisputeTied = "coreDispute__tied",
312318
CurrentLocalRoundIndex = "currentLocalRoundIndex",
313319
ExtraData = "extraData",
314320
Id = "id",
@@ -724,10 +730,13 @@ export enum ClassicVote_OrderBy {
724730
Choice = "choice",
725731
CoreDispute = "coreDispute",
726732
CoreDisputeCurrentRoundIndex = "coreDispute__currentRoundIndex",
733+
CoreDisputeCurrentRuling = "coreDispute__currentRuling",
727734
CoreDisputeId = "coreDispute__id",
728735
CoreDisputeLastPeriodChange = "coreDispute__lastPeriodChange",
736+
CoreDisputeOverridden = "coreDispute__overridden",
729737
CoreDisputePeriod = "coreDispute__period",
730738
CoreDisputeRuled = "coreDispute__ruled",
739+
CoreDisputeTied = "coreDispute__tied",
731740
Id = "id",
732741
Juror = "juror",
733742
JurorActiveDisputes = "juror__activeDisputes",
@@ -816,10 +825,13 @@ export enum Contribution_OrderBy {
816825
ContributorTotalStake = "contributor__totalStake",
817826
CoreDispute = "coreDispute",
818827
CoreDisputeCurrentRoundIndex = "coreDispute__currentRoundIndex",
828+
CoreDisputeCurrentRuling = "coreDispute__currentRuling",
819829
CoreDisputeId = "coreDispute__id",
820830
CoreDisputeLastPeriodChange = "coreDispute__lastPeriodChange",
831+
CoreDisputeOverridden = "coreDispute__overridden",
821832
CoreDisputePeriod = "coreDispute__period",
822833
CoreDisputeRuled = "coreDispute__ruled",
834+
CoreDisputeTied = "coreDispute__tied",
823835
Id = "id",
824836
}
825837

@@ -1192,13 +1204,16 @@ export type Dispute = {
11921204
court: Court;
11931205
currentRound: Round;
11941206
currentRoundIndex: Scalars["BigInt"]["output"];
1207+
currentRuling: Scalars["BigInt"]["output"];
11951208
disputeKitDispute?: Maybe<DisputeKitDispute>;
11961209
id: Scalars["ID"]["output"];
11971210
lastPeriodChange: Scalars["BigInt"]["output"];
1211+
overridden: Scalars["Boolean"]["output"];
11981212
period: Period;
11991213
rounds: Array<Round>;
12001214
ruled: Scalars["Boolean"]["output"];
12011215
shifts: Array<TokenAndEthShift>;
1216+
tied: Scalars["Boolean"]["output"];
12021217
};
12031218

12041219
export type DisputeRoundsArgs = {
@@ -1316,10 +1331,13 @@ export type DisputeKitDispute_Filter = {
13161331
export enum DisputeKitDispute_OrderBy {
13171332
CoreDispute = "coreDispute",
13181333
CoreDisputeCurrentRoundIndex = "coreDispute__currentRoundIndex",
1334+
CoreDisputeCurrentRuling = "coreDispute__currentRuling",
13191335
CoreDisputeId = "coreDispute__id",
13201336
CoreDisputeLastPeriodChange = "coreDispute__lastPeriodChange",
1337+
CoreDisputeOverridden = "coreDispute__overridden",
13211338
CoreDisputePeriod = "coreDispute__period",
13221339
CoreDisputeRuled = "coreDispute__ruled",
1340+
CoreDisputeTied = "coreDispute__tied",
13231341
CurrentLocalRoundIndex = "currentLocalRoundIndex",
13241342
Id = "id",
13251343
LocalRounds = "localRounds",
@@ -1535,6 +1553,14 @@ export type Dispute_Filter = {
15351553
currentRound_not_starts_with_nocase?: InputMaybe<Scalars["String"]["input"]>;
15361554
currentRound_starts_with?: InputMaybe<Scalars["String"]["input"]>;
15371555
currentRound_starts_with_nocase?: InputMaybe<Scalars["String"]["input"]>;
1556+
currentRuling?: InputMaybe<Scalars["BigInt"]["input"]>;
1557+
currentRuling_gt?: InputMaybe<Scalars["BigInt"]["input"]>;
1558+
currentRuling_gte?: InputMaybe<Scalars["BigInt"]["input"]>;
1559+
currentRuling_in?: InputMaybe<Array<Scalars["BigInt"]["input"]>>;
1560+
currentRuling_lt?: InputMaybe<Scalars["BigInt"]["input"]>;
1561+
currentRuling_lte?: InputMaybe<Scalars["BigInt"]["input"]>;
1562+
currentRuling_not?: InputMaybe<Scalars["BigInt"]["input"]>;
1563+
currentRuling_not_in?: InputMaybe<Array<Scalars["BigInt"]["input"]>>;
15381564
disputeKitDispute_?: InputMaybe<DisputeKitDispute_Filter>;
15391565
id?: InputMaybe<Scalars["ID"]["input"]>;
15401566
id_gt?: InputMaybe<Scalars["ID"]["input"]>;
@@ -1553,6 +1579,10 @@ export type Dispute_Filter = {
15531579
lastPeriodChange_not?: InputMaybe<Scalars["BigInt"]["input"]>;
15541580
lastPeriodChange_not_in?: InputMaybe<Array<Scalars["BigInt"]["input"]>>;
15551581
or?: InputMaybe<Array<InputMaybe<Dispute_Filter>>>;
1582+
overridden?: InputMaybe<Scalars["Boolean"]["input"]>;
1583+
overridden_in?: InputMaybe<Array<Scalars["Boolean"]["input"]>>;
1584+
overridden_not?: InputMaybe<Scalars["Boolean"]["input"]>;
1585+
overridden_not_in?: InputMaybe<Array<Scalars["Boolean"]["input"]>>;
15561586
period?: InputMaybe<Period>;
15571587
period_in?: InputMaybe<Array<Period>>;
15581588
period_not?: InputMaybe<Period>;
@@ -1563,6 +1593,10 @@ export type Dispute_Filter = {
15631593
ruled_not?: InputMaybe<Scalars["Boolean"]["input"]>;
15641594
ruled_not_in?: InputMaybe<Array<Scalars["Boolean"]["input"]>>;
15651595
shifts_?: InputMaybe<TokenAndEthShift_Filter>;
1596+
tied?: InputMaybe<Scalars["Boolean"]["input"]>;
1597+
tied_in?: InputMaybe<Array<Scalars["Boolean"]["input"]>>;
1598+
tied_not?: InputMaybe<Scalars["Boolean"]["input"]>;
1599+
tied_not_in?: InputMaybe<Array<Scalars["Boolean"]["input"]>>;
15661600
};
15671601

15681602
export enum Dispute_OrderBy {
@@ -1592,15 +1626,18 @@ export enum Dispute_OrderBy {
15921626
CurrentRoundRepartitions = "currentRound__repartitions",
15931627
CurrentRoundTokensAtStakePerJuror = "currentRound__tokensAtStakePerJuror",
15941628
CurrentRoundTotalFeesForJurors = "currentRound__totalFeesForJurors",
1629+
CurrentRuling = "currentRuling",
15951630
DisputeKitDispute = "disputeKitDispute",
15961631
DisputeKitDisputeCurrentLocalRoundIndex = "disputeKitDispute__currentLocalRoundIndex",
15971632
DisputeKitDisputeId = "disputeKitDispute__id",
15981633
Id = "id",
15991634
LastPeriodChange = "lastPeriodChange",
1635+
Overridden = "overridden",
16001636
Period = "period",
16011637
Rounds = "rounds",
16021638
Ruled = "ruled",
16031639
Shifts = "shifts",
1640+
Tied = "tied",
16041641
}
16051642

16061643
export type Draw = {
@@ -1701,10 +1738,13 @@ export type Draw_Filter = {
17011738
export enum Draw_OrderBy {
17021739
Dispute = "dispute",
17031740
DisputeCurrentRoundIndex = "dispute__currentRoundIndex",
1741+
DisputeCurrentRuling = "dispute__currentRuling",
17041742
DisputeId = "dispute__id",
17051743
DisputeLastPeriodChange = "dispute__lastPeriodChange",
1744+
DisputeOverridden = "dispute__overridden",
17061745
DisputePeriod = "dispute__period",
17071746
DisputeRuled = "dispute__ruled",
1747+
DisputeTied = "dispute__tied",
17081748
Id = "id",
17091749
Juror = "juror",
17101750
JurorActiveDisputes = "juror__activeDisputes",
@@ -2113,10 +2153,13 @@ export enum Penalty_OrderBy {
21132153
DegreeOfCoherency = "degreeOfCoherency",
21142154
Dispute = "dispute",
21152155
DisputeCurrentRoundIndex = "dispute__currentRoundIndex",
2156+
DisputeCurrentRuling = "dispute__currentRuling",
21162157
DisputeId = "dispute__id",
21172158
DisputeLastPeriodChange = "dispute__lastPeriodChange",
2159+
DisputeOverridden = "dispute__overridden",
21182160
DisputePeriod = "dispute__period",
21192161
DisputeRuled = "dispute__ruled",
2162+
DisputeTied = "dispute__tied",
21202163
Id = "id",
21212164
Juror = "juror",
21222165
JurorActiveDisputes = "juror__activeDisputes",
@@ -2695,10 +2738,13 @@ export enum Round_OrderBy {
26952738
DisputeKitId = "disputeKit__id",
26962739
DisputeKitNeedsFreezing = "disputeKit__needsFreezing",
26972740
DisputeCurrentRoundIndex = "dispute__currentRoundIndex",
2741+
DisputeCurrentRuling = "dispute__currentRuling",
26982742
DisputeId = "dispute__id",
26992743
DisputeLastPeriodChange = "dispute__lastPeriodChange",
2744+
DisputeOverridden = "dispute__overridden",
27002745
DisputePeriod = "dispute__period",
27012746
DisputeRuled = "dispute__ruled",
2747+
DisputeTied = "dispute__tied",
27022748
DrawnJurors = "drawnJurors",
27032749
Id = "id",
27042750
NbVotes = "nbVotes",
@@ -3217,10 +3263,13 @@ export type TokenAndEthShift_Filter = {
32173263
export enum TokenAndEthShift_OrderBy {
32183264
Dispute = "dispute",
32193265
DisputeCurrentRoundIndex = "dispute__currentRoundIndex",
3266+
DisputeCurrentRuling = "dispute__currentRuling",
32203267
DisputeId = "dispute__id",
32213268
DisputeLastPeriodChange = "dispute__lastPeriodChange",
3269+
DisputeOverridden = "dispute__overridden",
32223270
DisputePeriod = "dispute__period",
32233271
DisputeRuled = "dispute__ruled",
3272+
DisputeTied = "dispute__tied",
32243273
EthAmount = "ethAmount",
32253274
Id = "id",
32263275
Juror = "juror",
@@ -3517,10 +3566,13 @@ export type Vote_Filter = {
35173566
export enum Vote_OrderBy {
35183567
CoreDispute = "coreDispute",
35193568
CoreDisputeCurrentRoundIndex = "coreDispute__currentRoundIndex",
3569+
CoreDisputeCurrentRuling = "coreDispute__currentRuling",
35203570
CoreDisputeId = "coreDispute__id",
35213571
CoreDisputeLastPeriodChange = "coreDispute__lastPeriodChange",
3572+
CoreDisputeOverridden = "coreDispute__overridden",
35223573
CoreDisputePeriod = "coreDispute__period",
35233574
CoreDisputeRuled = "coreDispute__ruled",
3575+
CoreDisputeTied = "coreDispute__tied",
35243576
Id = "id",
35253577
Juror = "juror",
35263578
JurorActiveDisputes = "juror__activeDisputes",
@@ -3681,6 +3733,9 @@ export type DisputeDetailsQuery = {
36813733
period: Period;
36823734
ruled: boolean;
36833735
lastPeriodChange: any;
3736+
currentRuling: any;
3737+
overridden: boolean;
3738+
tied: boolean;
36843739
currentRoundIndex: any;
36853740
court: { __typename?: "Court"; id: string; timesPerPeriod: Array<any>; hiddenVotes: boolean; feeForJuror: any };
36863741
arbitrated: { __typename?: "Arbitrable"; id: string };
@@ -4185,6 +4240,9 @@ export const DisputeDetailsDocument = {
41854240
{ kind: "Field", name: { kind: "Name", value: "period" } },
41864241
{ kind: "Field", name: { kind: "Name", value: "ruled" } },
41874242
{ kind: "Field", name: { kind: "Name", value: "lastPeriodChange" } },
4243+
{ kind: "Field", name: { kind: "Name", value: "currentRuling" } },
4244+
{ kind: "Field", name: { kind: "Name", value: "overridden" } },
4245+
{ kind: "Field", name: { kind: "Name", value: "tied" } },
41884246
{
41894247
kind: "Field",
41904248
name: { kind: "Name", value: "currentRound" },

web/src/hooks/queries/useDisputeDetailsQuery.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ const disputeDetailsQuery = graphql(`
1919
period
2020
ruled
2121
lastPeriodChange
22+
currentRuling
23+
overridden
24+
tied
2225
currentRound {
2326
id
2427
}

0 commit comments

Comments
 (0)