In the current game logic, when a new player claims the throne, the previous king is owed their ETH reward via a pull-payment mechanism (withdrawWinnings
). This requires the former king to manually call a function to retrieve their ETH.
However, if the previous player never claims their funds (e.g., lost keys, inactive user, malicious address), the winnings remain indefinitely locked within the contract. Over time, this results in accumulation of idle ETH, which cannot be redistributed or recycled into gameplay.
Likelihood Medium
Over time, it's realistic that some users will lose access to wallets or never return to claim rewards.
Especially in a long-running game, stale balances will accumulate from inactive addresses.
Impact Medium
Locked ETH permanently reduces circulating funds in the protocol.
Creates misleading balance states and may reduce future reward fairness.
No way to recycle abandoned winnings unless governance or upgrade is introduced later.
This can be tested in Foundry by simulating an address claiming the throne, getting dethroned, and never calling withdrawWinnings()
.
Introduce a timestamp tracking system for pending winnings, and allow the contract owner (or DAO/governance) to reclaim abandoned funds after a long delay (e.g., 365 days):
Emit events like ReclaimedWinnings(address user, uint256 amount)
for full transparency.
This mechanism should be used sparingly and only after long delays.
In trustless systems, this logic could instead be governed by a DAO vote or community multisig to avoid centralization 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.