diff --git a/subgraph/schema.graphql b/subgraph/schema.graphql index 6942961a4..b6d89b846 100644 --- a/subgraph/schema.graphql +++ b/subgraph/schema.graphql @@ -67,7 +67,7 @@ type User @entity { evidences: [Evidence!]! @derivedFrom(field: "sender") } -type Arbitrated @entity { +type Arbitrable @entity { id: ID! # address disputes: [Dispute!]! @derivedFrom(field: "arbitrated") totalDisputes: BigInt! @@ -114,7 +114,7 @@ type Court @entity { type Dispute @entity { id: ID! court: Court! - arbitrated: Arbitrated! + arbitrated: Arbitrable! period: Period! ruled: Boolean! lastPeriodChange: BigInt! diff --git a/subgraph/src/KlerosCore.ts b/subgraph/src/KlerosCore.ts index f3656b9a4..f681f6cdf 100644 --- a/subgraph/src/KlerosCore.ts +++ b/subgraph/src/KlerosCore.ts @@ -40,6 +40,7 @@ import { } from "./entities/JurorTokensPerCourt"; import { createDrawFromEvent } from "./entities/Draw"; import { createTokenAndEthShiftFromEvent } from "./entities/TokenAndEthShift"; +import { updateArbitrableCases } from "./entities/Arbitrable"; function getPeriodName(index: i32): string { const periodArray = ["evidence", "commit", "vote", "appeal", "execution"]; @@ -91,6 +92,8 @@ export function handleDisputeCreation(event: DisputeCreation): void { createDisputeFromEvent(event); const roundInfo = contract.getRoundInfo(disputeID, ZERO); createRoundFromRoundInfo(disputeID, ZERO, court.feeForJuror, roundInfo); + const arbitrable = event.params._arbitrable.toHexString(); + updateArbitrableCases(arbitrable, ONE); updateCases(ONE, event.block.timestamp); } diff --git a/subgraph/src/entities/Arbitrable.ts b/subgraph/src/entities/Arbitrable.ts new file mode 100644 index 000000000..15ff1f231 --- /dev/null +++ b/subgraph/src/entities/Arbitrable.ts @@ -0,0 +1,20 @@ +import { BigInt } from "@graphprotocol/graph-ts"; +import { Arbitrable } from "../../generated/schema"; +import { ZERO } from "../utils"; + +export function ensureArbitrable(id: string): Arbitrable { + let arbitrable = Arbitrable.load(id); + + if (arbitrable) return arbitrable; + + arbitrable = new Arbitrable(id); + arbitrable.totalDisputes = ZERO; + + return arbitrable; +} + +export function updateArbitrableCases(id: string, delta: BigInt): void { + const arbitrable = ensureArbitrable(id); + arbitrable.totalDisputes = arbitrable.totalDisputes.plus(delta); + arbitrable.save(); +}