Normally, ETH should only enter the contract through the claimThrone()
function where it's properly distributed to the pot, previous king, and platform fees.
The current implementation allows direct ETH transfers via an unprotected receive()
function, causing funds to become permanently stuck with no allocation mechanism.
Likelihood: High
Occurs in three common scenarios:
Users accidentally sending ETH via wallet interfaces
Other contracts forwarding ETH without using claimThrone()
Misconfigured multisig transactions
Any contract interaction using .transfer()
or .send()
will trigger this vulnerability
Impact: Critical
Fund Loss: ETH becomes irrecoverable.
Accounting Corruption: Creates imbalance between:
Contract Immutability: Requires redeployment to fix if funds get stuck
Pros:
Prevents all accidental transfers
Clear error messaging
Gas-efficient revert
Pros:
Recovers value from mistakes
Maintains accounting integrity
Cons:
Slightly higher gas cost
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.