The k=2 bonus interval is artificially widened by the owner before any staker commits, inflating future depositors' bonus shares at the expense of bonus contributors. Self-limiting: the first stake permanently locks the expiry.
expiry is owner-mutable until the first stake, after which expiryLocked engages and the deadline is permanently frozen. This protects stakers who committed to a specific term. The k=2 bonus interval is (T - riskWindowStart)².
Between _markRiskWindowStart (which caps at expiry) and the first stake, the owner can extend expiry. This widens the k=2 bonus interval for future depositors, since T (the terminal observation) is also capped at expiry. A staker depositing after the extension earns a larger bonus share than the original pool parameters specified. Self-limiting: the first stake() call locks expiry.
Likelihood:
Impact:
Runnable Proof of Concept
Forge output:
Lock expiry when the risk window opens, not just on the first stake. This prevents the owner from extending the deadline after riskWindowStart has been sealed, keeping the k=2 bonus interval consistent with the pool parameters that were visible when the risk window was first observed.
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.