Skip to content

Commit 85bce88

Browse files
authored
Merge branch 'dev' into feat(web)/update-graphql-codegen
2 parents ecd49cd + 078e5b6 commit 85bce88

File tree

11 files changed

+235
-221
lines changed

11 files changed

+235
-221
lines changed

contracts/src/arbitration/KlerosCore.sol

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -828,7 +828,6 @@ contract KlerosCore is IArbitratorV2 {
828828
}
829829

830830
address account = round.drawnJurors[_params.repartition % _params.numberOfVotesInRound];
831-
// TODO Change me
832831
uint256 pnkLocked = (round.pnkAtStakePerJuror * degreeOfCoherence) / ALPHA_DIVISOR;
833832

834833
// Release the rest of the PNKs of the juror for this round.

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()}`)}>

web/src/context/Web3Provider.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,12 @@ import { arbitrumGoerli, gnosisChiado } from "wagmi/chains";
77
import { publicProvider } from "wagmi/providers/public";
88

99
const chains = [arbitrumGoerli, gnosisChiado];
10-
const projectId = "6efaa26765fa742153baf9281e218217";
10+
const projectId = process.env.WALLETCONNECT_PROJECT_ID ?? "6efaa26765fa742153baf9281e218217";
1111

12-
const { publicClient } = configureChains(chains, [alchemyProvider({ apiKey: "" }), publicProvider()]);
12+
const { publicClient } = configureChains(chains, [
13+
alchemyProvider({ apiKey: process.env.ALCHEMY_API_KEY ?? "" }),
14+
publicProvider(),
15+
]);
1316

1417
const wagmiConfig = createConfig({
1518
autoConnect: false,
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: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
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";
4+
import { isUndefined } from "utils/index";
45

5-
export const useEvidenceGroup = (disputeID?: string, arbitrableAddress?: string) => {
6-
// const formattedAddress = arbitrableAddress
7-
// ? utils.getAddress(arbitrableAddress)
8-
// : undefined;
6+
export const useEvidenceGroup = (disputeID?: string, arbitrableAddress?: `0x${string}`) => {
97
const publicClient = usePublicClient();
10-
11-
const arbitrable = getIMetaEvidence({
12-
address: "0xc0fcc96BFd78e36550FCaB434A9EE1210B57225b",
13-
});
14-
158
return useSWRImmutable(
16-
() => (arbitrable ? `EvidenceGroup${disputeID}${arbitrableAddress}` : false),
9+
() => (arbitrableAddress ? `EvidenceGroup${disputeID}${arbitrableAddress}` : false),
1710
async () => {
18-
if (arbitrable) {
19-
const disputeFilter = await arbitrable.createEventFilter.Dispute({
20-
_disputeID: BigInt(parseInt(disputeID!) + 1),
11+
if (arbitrableAddress && !isUndefined(disputeID)) {
12+
const arbitrable = getIArbitrableV2({
13+
address: arbitrableAddress,
2114
});
15+
const disputeFilter = await arbitrable.createEventFilter.DisputeTemplate(
16+
{
17+
_templateId: BigInt(disputeID),
18+
},
19+
{
20+
fromBlock: 27808516n,
21+
toBlock: "latest",
22+
}
23+
);
2224

2325
const disputeEvents = await publicClient.getFilterLogs({
2426
filter: disputeFilter,

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: 63 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,66 @@ 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>
85+
{disputeTemplate
86+
? disputeTemplate?.title
87+
: "The dispute's template is not correct please vote refuse to arbitrate"}
88+
</h1>
89+
<QuestionAndDescription>
90+
<h3>{disputeTemplate?.question}</h3>
91+
<p>{disputeTemplate?.description}</p>
92+
</QuestionAndDescription>
93+
<a
94+
href="https://app.proofofhumanity.id/profile/0x00de4b13153673bcae2616b67bf822500d325fc3"
95+
target="_blank"
96+
rel="noreferrer"
97+
>
98+
View profile on Proof of Humanity
99+
</a>
100+
<VotingOptions>
101+
{disputeTemplate && <h3>Voting Options</h3>}
102+
{disputeTemplate?.answers?.map((answer: { title: string; description: string }, i: number) => (
103+
<span key={i}>
104+
<small>Option {i + 1}:</small>
105+
<label>{answer.title}</label>
106+
</span>
107+
))}
108+
</VotingOptions>
109+
<hr />
110+
<DisputeInfo courtId={court?.id} court={courtName} {...{ rewards, category }} />
111+
</Container>
112+
<ShadeArea>
113+
<p>Make sure you understand the Policies</p>
114+
<LinkContainer>
115+
{disputeTemplate?.policyURI && (
116+
<StyledA href={`https://cloudflare-ipfs.com${disputeTemplate.policyURI}`} target="_blank" rel="noreferrer">
117+
<PolicyIcon />
118+
Dispute Policy
119+
</StyledA>
120+
)}
121+
{courtPolicy && (
122+
<StyledA href={`https://cloudflare-ipfs.com${courtPolicyURI}`} target="_blank" rel="noreferrer">
123+
<PolicyIcon />
124+
Court Policy
125+
</StyledA>
126+
)}
127+
</LinkContainer>
128+
</ShadeArea>
129+
</>
130+
);
131+
};
132+
129133
export default Overview;

0 commit comments

Comments
 (0)