Skip to content

Commit 16bcb19

Browse files
committed
refactor: metaevidence to disputeTemplate migrate
1 parent 2fead6a commit 16bcb19

File tree

9 files changed

+214
-208
lines changed

9 files changed

+214
-208
lines changed

web/src/components/DisputeCard/index.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { Card } from "@kleros/ui-components-library";
77
import { Periods } from "consts/periods";
88
import { CasesPageQuery } from "queries/useCasesQuery";
99
import { useCourtPolicy } from "queries/useCourtPolicy";
10-
import { useGetMetaEvidence } from "queries/useGetMetaEvidence";
10+
import { useDisputeTemplate } from "queries/useDisputeTemplate";
1111
import DisputeInfo from "./DisputeInfo";
1212
import PeriodBanner from "./PeriodBanner";
1313

@@ -51,11 +51,11 @@ const DisputeCard: React.FC<CasesPageQuery["disputes"][number]> = ({
5151
currentPeriodIndex === 4
5252
? lastPeriodChange
5353
: getPeriodEndTimestamp(lastPeriodChange, currentPeriodIndex, court.timesPerPeriod);
54-
const { data: metaEvidence } = useGetMetaEvidence(id, arbitrated.id);
55-
const title = metaEvidence ? metaEvidence.title : <Skeleton />;
54+
const { data: disputeTemplate } = useDisputeTemplate(id, arbitrated.id);
55+
const title = disputeTemplate ? disputeTemplate.title : <Skeleton />;
5656
const { data: courtPolicy } = useCourtPolicy(court.id);
5757
const courtName = courtPolicy?.name;
58-
const category = metaEvidence ? metaEvidence.category : undefined;
58+
const category = disputeTemplate ? disputeTemplate.category : undefined;
5959
const navigate = useNavigate();
6060
return (
6161
<StyledCard hover onClick={() => navigate(`/cases/${id.toString()}`)}>
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import useSWRImmutable from "swr/immutable";
2+
import { usePublicClient } from "wagmi";
3+
import { getIArbitrableV2 } from "hooks/contracts/generated";
4+
5+
export const useDisputeTemplate = (disputeID?: string, arbitrableAddress?: `0x{string}`) => {
6+
const publicClient = usePublicClient();
7+
return useSWRImmutable(
8+
() => (arbitrableAddress ? `DisputeTemplate${disputeID}${arbitrableAddress}` : false),
9+
async () => {
10+
if (arbitrableAddress && typeof disputeID !== "undefined") {
11+
const arbitrable = getIArbitrableV2({
12+
address: arbitrableAddress,
13+
});
14+
const disputeFilter = await arbitrable.createEventFilter.DisputeRequest(
15+
{
16+
_arbitrableDisputeID: BigInt(disputeID),
17+
},
18+
{
19+
fromBlock: 27808516n,
20+
toBlock: "latest",
21+
}
22+
);
23+
const disputeEvents = await publicClient.getFilterLogs({
24+
filter: disputeFilter,
25+
});
26+
const disputeTemplateFilter = await arbitrable.createEventFilter.DisputeTemplate(
27+
{
28+
_templateId: disputeEvents[0].args._templateId,
29+
},
30+
{
31+
fromBlock: 27808516n,
32+
toBlock: "latest",
33+
}
34+
);
35+
const disputeTemplateEvents = await publicClient.getFilterLogs({
36+
filter: disputeTemplateFilter,
37+
});
38+
39+
if (disputeTemplateEvents) {
40+
const parsedTemplate = JSON.parse(disputeTemplateEvents[0].args._templateData ?? "");
41+
return parsedTemplate;
42+
}
43+
} else throw Error;
44+
}
45+
);
46+
};

web/src/hooks/queries/useEvidenceGroup.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import useSWRImmutable from "swr/immutable";
2-
import { getIMetaEvidence } from "hooks/contracts/generated";
2+
import { getIArbitrableV2 } from "hooks/contracts/generated";
33
import { usePublicClient } from "wagmi";
44

55
export const useEvidenceGroup = (disputeID?: string, arbitrableAddress?: string) => {
@@ -8,16 +8,16 @@ export const useEvidenceGroup = (disputeID?: string, arbitrableAddress?: string)
88
// : undefined;
99
const publicClient = usePublicClient();
1010

11-
const arbitrable = getIMetaEvidence({
11+
const arbitrable = getIArbitrableV2({
1212
address: "0xc0fcc96BFd78e36550FCaB434A9EE1210B57225b",
1313
});
1414

1515
return useSWRImmutable(
1616
() => (arbitrable ? `EvidenceGroup${disputeID}${arbitrableAddress}` : false),
1717
async () => {
1818
if (arbitrable) {
19-
const disputeFilter = await arbitrable.createEventFilter.Dispute({
20-
_disputeID: BigInt(parseInt(disputeID!) + 1),
19+
const disputeFilter = await arbitrable.createEventFilter.DisputeTemplate({
20+
_templateId: BigInt(parseInt(disputeID!) + 1),
2121
});
2222

2323
const disputeEvents = await publicClient.getFilterLogs({

web/src/hooks/queries/useGetMetaEvidence.ts

Lines changed: 0 additions & 33 deletions
This file was deleted.

web/src/hooks/useClassicAppealContext.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { useParams } from "react-router-dom";
33
import { ONE_BASIS_POINT } from "consts/index";
44
import { Periods } from "consts/periods";
55
import { isUndefined } from "utils/index";
6-
import { useGetMetaEvidence } from "queries/useGetMetaEvidence";
6+
import { useDisputeTemplate } from "queries/useDisputeTemplate";
77
import { useAppealCost } from "queries/useAppealCost";
88
import { useDisputeKitClassicMultipliers } from "queries/useDisputeKitClassicMultipliers";
99
import { useClassicAppealQuery, ClassicAppealQuery } from "queries/useClassicAppealQuery";
@@ -48,9 +48,13 @@ export const ClassicAppealProvider: React.FC<{
4848
const winningChoice = getWinningChoice(data?.dispute);
4949
const { data: appealCost } = useAppealCost(id);
5050
const arbitrable = data?.dispute?.arbitrated.id;
51-
const { data: metaEvidence } = useGetMetaEvidence(id, arbitrable);
51+
const { data: disputeTemplate } = useDisputeTemplate(id, arbitrable);
5252
const { data: multipliers } = useDisputeKitClassicMultipliers();
53-
const options = ["Refuse to Arbitrate"].concat(metaEvidence?.rulingOptions?.titles);
53+
const options = ["Refuse to Arbitrate"].concat(
54+
disputeTemplate?.answers?.map((answer: { title: string; description: string }) => {
55+
return answer.title;
56+
})
57+
);
5458
const loserSideCountdown = useLoserSideCountdown(
5559
dispute?.lastPeriodChange,
5660
dispute?.court.timesPerPeriod[Periods.appeal],

web/src/pages/Cases/CaseDetails/Overview.tsx

Lines changed: 59 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -3,70 +3,12 @@ import styled from "styled-components";
33
import { Link, useParams } from "react-router-dom";
44
import { formatEther } from "viem";
55
import { useDisputeDetailsQuery } from "queries/useDisputeDetailsQuery";
6-
import { useGetMetaEvidence } from "queries/useGetMetaEvidence";
6+
import { useDisputeTemplate } from "queries/useDisputeTemplate";
77
import { useCourtPolicy } from "queries/useCourtPolicy";
88
import { useCourtPolicyURI } from "queries/useCourtPolicyURI";
99
import PolicyIcon from "svgs/icons/policy.svg";
1010
import DisputeInfo from "components/DisputeCard/DisputeInfo";
1111

12-
const Overview: React.FC<{ arbitrable?: string; courtID?: string }> = ({ arbitrable, courtID }) => {
13-
const { id } = useParams();
14-
const { data: metaEvidence } = useGetMetaEvidence(id, arbitrable);
15-
const { data: disputeDetails } = useDisputeDetailsQuery(id);
16-
const { data: courtPolicyURI } = useCourtPolicyURI(courtID);
17-
const { data: courtPolicy } = useCourtPolicy(courtID);
18-
const courtName = courtPolicy?.name;
19-
const court = disputeDetails?.dispute?.court;
20-
const rewards = court ? `≥ ${formatEther(court.feeForJuror)} ETH` : undefined;
21-
const category = metaEvidence ? metaEvidence.category : undefined;
22-
return (
23-
<>
24-
<Container>
25-
<h1>{metaEvidence?.title}</h1>
26-
<QuestionAndDescription>
27-
<h3>{metaEvidence?.question}</h3>
28-
<p>{metaEvidence?.description}</p>
29-
</QuestionAndDescription>
30-
<a
31-
href="https://app.proofofhumanity.id/profile/0x00de4b13153673bcae2616b67bf822500d325fc3"
32-
target="_blank"
33-
rel="noreferrer"
34-
>
35-
View profile on Proof of Humanity
36-
</a>
37-
<VotingOptions>
38-
{metaEvidence && <h3>Voting Options</h3>}
39-
{metaEvidence?.rulingOptions?.titles?.map((answer: string, i: number) => (
40-
<span key={i}>
41-
<small>Option {i + 1}:</small>
42-
<label>{answer}</label>
43-
</span>
44-
))}
45-
</VotingOptions>
46-
<hr />
47-
<DisputeInfo courtId={court?.id} court={courtName} {...{ rewards, category }} />
48-
</Container>
49-
<ShadeArea>
50-
<p>Make sure you understand the Policies</p>
51-
<LinkContainer>
52-
{metaEvidence?.fileURI && (
53-
<StyledA href={`https://cloudflare-ipfs.com${metaEvidence.fileURI}`} target="_blank" rel="noreferrer">
54-
<PolicyIcon />
55-
Dispute Policy
56-
</StyledA>
57-
)}
58-
{courtPolicy && (
59-
<StyledA href={`https://cloudflare-ipfs.com${courtPolicyURI}`} target="_blank" rel="noreferrer">
60-
<PolicyIcon />
61-
Court Policy
62-
</StyledA>
63-
)}
64-
</LinkContainer>
65-
</ShadeArea>
66-
</>
67-
);
68-
};
69-
7012
const Container = styled.div`
7113
width: 100%;
7214
height: auto;
@@ -126,4 +68,62 @@ const LinkContainer = styled.div`
12668
justify-content: space-between;
12769
`;
12870

71+
const Overview: React.FC<{ arbitrable?: string; courtID?: string }> = ({ arbitrable, courtID }) => {
72+
const { id } = useParams();
73+
const { data: disputeTemplate } = useDisputeTemplate(id, arbitrable);
74+
const { data: disputeDetails } = useDisputeDetailsQuery(id);
75+
const { data: courtPolicyURI } = useCourtPolicyURI(courtID);
76+
const { data: courtPolicy } = useCourtPolicy(courtID);
77+
const courtName = courtPolicy?.name;
78+
const court = disputeDetails?.dispute?.court;
79+
const rewards = court ? `≥ ${formatEther(court.feeForJuror)} ETH` : undefined;
80+
const category = disputeTemplate ? disputeTemplate.category : undefined;
81+
return (
82+
<>
83+
<Container>
84+
<h1>{disputeTemplate?.title}</h1>
85+
<QuestionAndDescription>
86+
<h3>{disputeTemplate?.question}</h3>
87+
<p>{disputeTemplate?.description}</p>
88+
</QuestionAndDescription>
89+
<a
90+
href="https://app.proofofhumanity.id/profile/0x00de4b13153673bcae2616b67bf822500d325fc3"
91+
target="_blank"
92+
rel="noreferrer"
93+
>
94+
View profile on Proof of Humanity
95+
</a>
96+
<VotingOptions>
97+
{disputeTemplate && <h3>Voting Options</h3>}
98+
{disputeTemplate?.answers?.map((answer: { title: string; description: string }, i: number) => (
99+
<span key={i}>
100+
<small>Option {i + 1}:</small>
101+
<label>{answer.title}</label>
102+
</span>
103+
))}
104+
</VotingOptions>
105+
<hr />
106+
<DisputeInfo courtId={court?.id} court={courtName} {...{ rewards, category }} />
107+
</Container>
108+
<ShadeArea>
109+
<p>Make sure you understand the Policies</p>
110+
<LinkContainer>
111+
{disputeTemplate?.policyURI && (
112+
<StyledA href={`https://cloudflare-ipfs.com${disputeTemplate.policyURI}`} target="_blank" rel="noreferrer">
113+
<PolicyIcon />
114+
Dispute Policy
115+
</StyledA>
116+
)}
117+
{courtPolicy && (
118+
<StyledA href={`https://cloudflare-ipfs.com${courtPolicyURI}`} target="_blank" rel="noreferrer">
119+
<PolicyIcon />
120+
Court Policy
121+
</StyledA>
122+
)}
123+
</LinkContainer>
124+
</ShadeArea>
125+
</>
126+
);
127+
};
128+
129129
export default Overview;

0 commit comments

Comments
 (0)