Location: contracts/src/TreasureHunt.sol:86
The claim function explicitly rejects recipient == msg.sender:
The protocol already binds the proof to the recipient as a public input, which prevents front-running. Blocking recipient == msg.sender does not add any security property: a finder who wants to pay themselves can simply create a second EOA, use that as the submitter, and sidestep the check. The net effect is worse UX.
Likelihood: High. Every legitimate single-wallet user hits this restriction on their first attempt.
Impact: Low. No fund loss; the friction pushes users toward relayers or second wallets.
Proof of Concept
Run:
The test passes, confirming the revert.
Remove the recipient == msg.sender
The issue is that `claim()` rejects any case where `recipient == msg.sender`, even though the proof system already binds the claim to the recipient address and the contract ultimately transfers the reward to that same recipient, so prohibiting self-receipt does not protect any obvious security property of the payout flow. It is a low-severity logic or UX restriction, which unnecessarily forces honest claimants to control and provide a second wallet address in order to receive funds.
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.