Outcome resolution is the protocol's settlement point. When an outcome is flagged or mechanically resolved, the pool snapshots stake, bonus, k=2 accumulator state, corrupted reserve, bounty entitlement, and the timestamp used for payout math.
OutcomeFlagged only emits the moderator, outcome, good-faith flag, and attacker address. It omits the settlement snapshot fields and the caller that triggered auto-resolution through claimExpired(). Log consumers cannot reconstruct the finalized payout state from events alone and must rely on historical state reads at the exact block.
Likelihood:
Every pool resolution emits OutcomeFlagged without the snapshot fields used by settlement, but the practical issue materializes for consumers that reconstruct settlement state from logs instead of historical state reads.
Indexers, monitoring systems, and dispute tooling commonly consume events rather than historical state diffs.
Impact:
Off-chain consumers cannot reliably reconstruct finalized principal, bonus, reserve, bounty, and payout-bound values from logs.
Incident monitoring can miss or misreport the economic size of a resolution, especially for auto-resolutions where the event uses address(0) as the moderator and omits the actual caller.
Under the CodeHawks matrix, medium likelihood and low impact classify this issue as Low severity.
Emit the snapshot data at resolution. A separate event avoids changing the existing event ABI.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.