Skip to content

Commit b738406

Browse files
committed
fix: correctly calculate effectivenumberstakedjurors
1 parent 2382582 commit b738406

File tree

2 files changed

+18
-23
lines changed

2 files changed

+18
-23
lines changed

subgraph/core/src/entities/Court.ts

+2-12
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,12 @@ import { ZERO } from "../utils";
88
export function updateEffectiveStake(courtID: string, delta: BigInt): void {
99
let court = Court.load(courtID);
1010
if (!court) return;
11+
1112
court.effectiveStake = court.effectiveStake.plus(delta);
1213
court.save();
13-
if (court.parent) {
14-
updateEffectiveStake(court.parent as string, delta);
15-
}
16-
}
1714

18-
// This function calculates the "effective" numberStakedJurors, which is the specific numberStakedJurors
19-
// of the current court + the specific numberStakedJurors of all of its children courts
20-
export function updateEffectiveNumberStakedJurors(courtID: string, delta: BigInt): void {
21-
let court = Court.load(courtID);
22-
if (!court) return;
23-
court.effectiveNumberStakedJurors = court.effectiveNumberStakedJurors.plus(delta);
24-
court.save();
2515
if (court.parent) {
26-
updateEffectiveNumberStakedJurors(court.parent as string, delta);
16+
updateEffectiveStake(court.parent as string, delta);
2717
}
2818
}
2919

subgraph/core/src/entities/JurorTokensPerCourt.ts

+16-11
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { updateActiveJurors, getDelta, updateStakedPNK, updateCourtStateVariable
44
import { ensureUser } from "./User";
55
import { ONE, ZERO } from "../utils";
66
import { SortitionModule } from "../../generated/SortitionModule/SortitionModule";
7-
import { updateEffectiveNumberStakedJurors, updateEffectiveStake } from "./Court";
7+
import { updateEffectiveStake } from "./Court";
88

99
export function ensureJurorTokensPerCourt(jurorAddress: string, courtID: string): JurorTokensPerCourt {
1010
const id = `${jurorAddress}-${courtID}`;
@@ -36,16 +36,22 @@ export function updateJurorEffectiveStake(jurorAddress: string, courtID: string,
3636
let court = Court.load(courtID);
3737
if (!court) return;
3838

39-
while (court) {
40-
const jurorTokensPerCourt = ensureJurorTokensPerCourt(jurorAddress, court.id);
41-
jurorTokensPerCourt.effectiveStake = jurorTokensPerCourt.effectiveStake.plus(delta);
42-
jurorTokensPerCourt.save();
39+
const jurorTokensPerCourt = ensureJurorTokensPerCourt(jurorAddress, court.id);
40+
const previousEffectiveStake = jurorTokensPerCourt.effectiveStake;
41+
const newEffectiveStake = previousEffectiveStake.plus(delta);
4342

44-
if (court.parent) {
45-
court = Court.load(court.parent as string);
46-
} else {
47-
break;
48-
}
43+
if (previousEffectiveStake.equals(ZERO) && newEffectiveStake.gt(ZERO)) {
44+
court.effectiveNumberStakedJurors = court.effectiveNumberStakedJurors.plus(ONE);
45+
} else if (previousEffectiveStake.gt(ZERO) && newEffectiveStake.equals(ZERO)) {
46+
court.effectiveNumberStakedJurors = court.effectiveNumberStakedJurors.minus(ONE);
47+
}
48+
49+
jurorTokensPerCourt.effectiveStake = newEffectiveStake;
50+
jurorTokensPerCourt.save();
51+
court.save();
52+
53+
if (court.parent) {
54+
updateJurorEffectiveStake(jurorAddress, court.parent as string, delta);
4955
}
5056
}
5157

@@ -80,7 +86,6 @@ export function updateJurorStake(
8086
court.save();
8187
updateEffectiveStake(courtID, stakeDelta);
8288
updateJurorEffectiveStake(jurorAddress, courtID, stakeDelta);
83-
updateEffectiveNumberStakedJurors(courtID, stakedJurorsDelta);
8489
updateCourtStateVariable(courtID, court.effectiveStake, timestamp, "effectiveStake");
8590
}
8691

0 commit comments

Comments
 (0)