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