The protocol should enable users to store secrets at their own address and retrieve them later as the legitimate owner of that secret. However, there exists a critical address mismatch between storage and retrieval operations: set_secret
correctly stores secrets at the caller's address using move_to(caller, secret_vault)
, but get_secret
attempts to retrieve from a hardcoded @owner
address using borrow_global<Vault>(@owner)
, making all stored secrets permanently unretrievable by their legitimate owners.
Likelihood:
Address mismatch affects every single user interaction since storage and retrieval operations use fundamentally different address resolution logic
The inconsistency is hardcoded into the contract logic and will occur on every function call pair
Users will naturally expect to retrieve secrets they have stored, making this a guaranteed failure scenario
Impact:
Users successfully store secrets at their address but retrieval operations look at an entirely different hardcoded location
Stored secrets become permanently unretrievable by their legitimate owners, creating data loss scenarios
Core protocol functionality of secret ownership and access control is completely broken
User funds may be lost if they paid transaction fees to store secrets they can never retrieve
Protocol reputation severely damaged due to fundamental data access failures
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.