The initialize function sets an immutable minStake based on the deployer's input without enforcing any upper bound limits.
A malicious sponsor can set minStake to type(uint256).max, permanently blocking legitimate stakers while still accepting external donations via contributeBonus(). When the pool expires with zero stakers, the sponsor cleanly sweeps 100% of the trapped bonus.
Likelihood: Low
Sponsor deploys a pool with a functionally impossible minStake.
Contributors donate via contributeBonus() without verifying the pool's parameters.
Impact: High
Direct theft of funds from good-faith bonus contributors.
Sponsor permissionlessly sweeps 100% of the bonus pool via sweepUnclaimedBonus().
Sponsor initializes a pool with minStake_ = type(uint256).max.
Victim calls contributeBonus() to donate funds.
Legitimate stakers cannot enter; stake() reverts with BelowMinStake().
At expiration, totalEligibleStake == 0, allowing the sponsor to route the entire bonus balance to their recoveryAddress via sweepUnclaimedBonus().
Enforce a protocol-wide upper bound constraint for minStake during initialization to prevent the creation of un-stakeable honeypots.
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.