In the current implementation, once a user lists an NFT for sale, they remain recorded as the seller in the AssetListing data structure, even if they transfer the NFT to another address. This prevents the new NFT owner from relisting or selling the asset, effectively locking the asset in an unsellable state.
The relist() function requires the caller to be the recorded seller, blocking the current owner from initiating a new sale.
When a seller (e.g., Alice) lists an NFT for sale, the contract creates an entry in listings that stores Alice as the seller:
However, if Alice transfers the NFT to another address (e.g., Bob), Bob cannot relist the asset because the relist() function checks that the caller matches the recorded seller:
Since the seller remains set to Alice, Bob fails the authorization check, preventing any further sale of the asset unless Alice reacquires the NFT.
This vulnerability locks the asset, preventing new NFT owners from listing or selling it. As a result, marketplace functionality is disrupted for transferred assets.
Manual Review
Modify the relist() function to check the current owner of the NFT rather than relying on the initial seller recorded in AssetListing.
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.