Normal behavior: When players battle, both NFTs are transferred to the protocol for custody. After battle resolution, the winner should receive both NFTs back along with the prize pool, allowing them to use these NFTs for future staking or battles.
The specific issue: Battle resolution only updates internal ownership records via transfer_record_only()
but never executes the actual object::transfer()
calls to return NFTs to winners. This occurs because the function lacks the module owner's signer required to transfer NFTs out of the protocol address.
Likelihood:
Every battle will trigger this bug since the resolution path always executes and lacks the necessary module owner signer
Players will immediately notice they cannot use their "won" NFTs for subsequent protocol interactions
The protocol becomes completely unusable after the first battle occurs
Impact:
All battled NFTs become permanently inaccessible to players while internal records incorrectly show winner ownership
Winners cannot stake, transfer, or battle with their NFTs again due to object ownership mismatch
Complete protocol functionality breakdown after first battle with no recovery mechanism
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.