Normal behavior: a confidence pool should settle according to the live BattleChain state of the contracts in its committed scope. When a scoped contract's current Binding Agreement is corrupted, the pool should not treat that contract as having safely survived merely because an older agreement remains healthy.
Specific issue: the pool snapshots agreement during initialization and later calls the attack registry with that address only. BattleChain exposes getAgreementForContract(contractAddress) as the current binding source, but the pool does not consult it after creation. As a result, a post-creation re-link from agreement A to agreement B leaves the pool reading stale state from A.
Root cause in the codebase:
The stored agreement is treated as permanently authoritative, while the scoped contract's live getAgreementForContract(scopeAccount) binding is ignored.
Likelihood:
Reason 1: This occurs when a pool is created while the scoped contract is correctly bound to agreement A, and BattleChain later legally re-links that same scoped contract to agreement B.
Reason 2: This occurs when agreement B enters an attack or terminal corrupted state while agreement A remains in a state that permits the pool to continue staking, withdrawing, expiring, or being flagged as survived.
Impact:
Impact 1: A moderator can incorrectly flag SURVIVED using stale agreement A even though the scoped contract's current Binding Agreement B is CORRUPTED.
Impact 2: Stakers can claim principal through claimSurvived(), causing funds that should be reserved for corrupted/recovery handling to leave the pool.
Do not treat the creation-time agreement as the permanent state source. When observing registry state, resolve the current direct Binding Agreement for each scoped contract first:
Only fall back to the stored agreement when there is no direct binding and that fallback is explicitly intended. For multi-account scopes, use a conservative aggregation rule, such as treating any directly bound CORRUPTED account as corrupted and any active-risk account as active risk.
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.