When creating a pool, initialize() only checks if the agreement is registered (isAgreementValid), but does not check the agreement's current state. A pool can be successfully deployed on an agreement already in CORRUPTED, PRODUCTION, or PROMOTION_REQUESTED state. Where staking is permanently blocked, resulting in a pool that is born dead.
While staking correctly blocks terminal states:
There is no matching guard at pool creation time.
Pool deploys successfully but no one can ever stake on it.
Add agreement state check inside initialize() after the isAgreementValid check:
This ensures pools are only created on agreements where staking is still possible.
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.