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.