The Noir circuit defines the validity of the treasure hunt. It contains a hardcoded array ALLOWED_TREASURE_HASHES representing the 10 valid
physical treasures. For a claim to be valid, the prover must show they know a secret whose hash is present in this list
The issue is a manual entry error in the circuit's global array. Indices 8 and 9 contain the exact same hash value (which corresponds to secret
"10"). Consequently, the unique hash for secret "9" is missing from the circuit
Likelihood:
This error is static and exists in the compiled circuit artifacts. It will always trigger if a participant tries to prove knowledge of secret
"9".
Impact:
Unclaimable Treasure: The participant who physically finds treasure "9" will be unable to generate a valid proof, as the circuit will fail the
is_allowed check
Protocol Integrity: The game is advertised as having 10 treasures, but mathematically only 9 exist in the ZK logic
This Noir test case (added to tests.nr) proves the vulnerability by:
Comparing the values at index 8 and 9 to confirm they are identical.
Generating the hash for secret "9" and asserting that the is_allowed helper function returns false, meaning the circuit would reject a claim
for this valid physical treasure
Update the ALLOWED_TREASURE_HASHES array in main.nr to include the correct hash for the 9th treasure. This ensures that all 10 treasures found in
the real world can be successfully verified by the ZK circuit
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.