PoolStates defines a helper for checking whether an Outcome is terminal:
isTerminal is never called anywhere in the codebase. Every terminality check in
ConfidencePool.sol is instead written as a direct comparison against PoolStates.Outcome
members, e.g.:
Confirmed via repo-wide search — isTerminal has zero call sites in src/:
None functionally — it's internal pure and costs nothing at runtime if unused (the compiler
strips unreferenced internal functions from deployed bytecode). It is purely a maintainability /
code-hygiene issue: an unused helper that duplicates logic already inlined everywhere else is a
latent inconsistency risk. If a future change ever introduces a fifth Outcome value, or if a
future call site starts using isTerminal instead of the inline pattern, the two representations
of "terminal" could silently drift apart from the direct-comparison sites that would need the same
update.
Either:
Remove isTerminal if it's not intended to be used, or
Replace the repeated outcome != PoolStates.Outcome.UNRESOLVED checks throughout
ConfidencePool.sol with PoolStates.isTerminal(outcome) so there is a single source of truth
for terminality.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
View preliminary resultsAppeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.