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.
Appeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.