Smart contract users can mistakenly send ETH directly to a contract address instead of invoking a specific function like claimThrone()
. Since the contract does not implement a receive()
or fallback()
function, and no recovery function exists, these funds become permanently stuck inside the contract.
This behavior results in:
Unclaimable ETH held indefinitely in the contract.
User confusion or frustration due to loss of funds.
A misleading on-chain balance that does not reflect actual game logic or available pot size.
Likelihood: Medium
Many users (especially non-technical or mobile wallet users) may interact directly with the contract address by mistake.
It is not unusual for users to send ETH directly without calling a specific function.
Impact: Low
ETH becomes inaccessible, but not vulnerable to theft.
Affects transparency and user experience more than core protocol functionality.
PoC Explanation:
A user mistakenly sends ETH to the contract address directly.
The contract accepts the ETH (because receive/fallback is not defined to revert), but doesn’t track it.
No function handles it; ETH stays locked forever unless explicitly recovered.
Option 1: Reject unintended ETH transfers with receive()
that reverts.
Option 2: Implement an onlyOwner
recovery function that safely transfers excess funds not used by the protocol logic.
Option 3: Auto-forward funds to game logic if appropriate (e.g., count them toward the pot).
There is no reason for a user to directly send ETH or anything to this contract. Basic user mistake, info, invalid according to CH Docs.
There is no reason for a user to directly send ETH or anything to this contract. Basic user mistake, info, invalid according to CH Docs.
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.