In normal gameplay, ETH is meant to be sent through the claimThrone()
function, where it is distributed between the pot, the platform fees, and potential payouts. The game logic ensures ETH is properly attributed and accounted for.
However, the contract includes a receive()
function that accepts ETH transfers with no data, but does not assign the received ETH to the pot
, pendingWinnings
, or any other internal state. As a result, any ETH sent directly to the contract outside of intended functions is accepted but becomes permanently inaccessible — it cannot be claimed by the winner, withdrawn by the owner, or recovered by the sender.
Likelihood: Low
This will occur any time a user mistakenly or intentionally sends ETH to the contract directly (e.g., from a wallet or exchange).
There is no UI or function-level enforcement that prevents such transfers.
Impact: MEDIUM to HIGH
Users may lose funds that are never incorporated into game logic.
Locked ETH bloats the contract balance and causes accounting inconsistencies between getContractBalance()
and the sum of tracked balances (pot + pendingWinnings + platformFeesBalance
).
Choose one of the following solutions based on desired behavior:
This ensures all ETH is useful and contributes to the game.
This prevents accidental or malicious ETH from becoming trapped.
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.