The entire security model rests on participants physically finding a treasure and learning its secret. The ZK circuit exists precisely to prove knowledge of this secret without revealing it.
The deployment script hardcodes all 10 treasure secrets in a plaintext comment block that will be committed to version control and compiled into bytecode metadata.
Likelihood:
Deployment scripts are routinely pushed to public GitHub repositories.
Even in a private repo, compiled contract bytecode embeds the IPFS/Swarm hash of the full source metadata, from which comments are recoverable.
Secrets 1 through 10 are trivially guessable by brute force regardless of whether the file is public.
Impact:
Any party who reads the script (or brute-forces the small secret space) can generate valid ZK proofs for all 10 treasures without ever visiting the hunt locations, claiming all 100 ETH before any legitimate finder can act.
The physical treasure hunt is rendered meaningless; the protocol's core value proposition is destroyed.
Off-chain attacker reads Deploy_s.sol and iterates over secrets 1-10
Never store secrets in source code, comments, or version-controlled files. Generate secrets from a secure off-chain key management system (HSM, encrypted vault, etc.) and destroy them after their Pedersen hashes are committed to the circuit.
Use cryptographically random 32-byte secrets (e.g., cast keccak "$(openssl rand -hex 32)") rather than sequential integers.
Add a .gitignore rule that excludes any file containing raw secrets from version control.
Audit all metadata compilation outputs to ensure secret material is not embedded in bytecode CBOR/IPFS metadata.
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.