require statements in withdraw() can never both be true simultaneously in normal flow.The withdraw() function is intended to allow the owner to recover leftover ETH after the hunt ends. In normal flow, the contract is funded with exactly 100 ETH and each of the 10 treasures pays out 10 ETH. When all 10 treasures are claimed, the balance reaches exactly 0 ETH.
The two conditions contradict each other — claimsCount >= MAX_TREASURES only becomes true when all rewards are paid out and balance is 0, making the balance > 0 check always fail.
Likelihood:
Hunt ends with fewer than 10 treasures claimed, leaving ETH stuck forever
Owner funded contract with exactly 100 ETH as intended by deployment script
Impact:
Owner permanently loses unclaimed ETH with no recovery path
withdraw() is completely unusable in normal flow
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.