Confidence pools are deployed through ConfidencePoolFactory, which stores a mutable defaultOutcomeModerator. When a pool is created, the factory passes the current defaultOutcomeModerator into ConfidencePool.initialize(...), and the pool stores it as its own outcomeModerator.
The issue is that later calls to setDefaultOutcomeModerator() only update the factory default for future pools. Existing pools remain permanently pinned to the old moderator, with no pool-level moderator transfer or migration path. As a result, if the protocol rotates from moderator X to moderator Y and retires or loses access to X, old pools cannot be intentionally resolved by Y.
Likelihood:
The protocol rotates the factory default moderator from X to Y after pools have already been deployed.
Operators or governance treat setDefaultOutcomeModerator() as a global moderator migration, while old pools remain pinned to X.
Impact:
Existing pools cannot be intentionally resolved when the old moderator is unavailable, because flagOutcome() reverts for the new moderator with NotModerator.
In corrupted-agreement cases, the pool must rely on the scope-blind expiry backstop. This can delay resolution for 180 days and can finalize as bad-faith CORRUPTED, sending the full pool to recoveryAddress with no good-faith attacker bounty path.
Attack Scenario
A pool is created while the factory defaultOutcomeModerator is oldModerator.
The pool snapshots oldModerator into its own outcomeModerator during initialize().
The factory owner calls setDefaultOutcomeModerator(newModerator).
The factory now reports newModerator as the default moderator, but the old pool still stores oldModerator.
When newModerator tries to call flagOutcome() on the old pool, the call reverts with NotModerator.
Only oldModerator can still resolve the old pool. If oldModerator is unavailable, the pool must wait for the expiry/backstop path instead of being intentionally moderated.
Either clearly document that factory moderator updates are forward-looking only, or add an explicit pool-level moderator migration path controlled by governance/current moderator.
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.