Any seller who's NFT is selected can brick the rest of the sellers from receiving their profits, by just transferring the NFT away. This can be done also by the buyer (if one of his contracts gets to be the seller) in order to avoid paying anything.
Sellers list NFTs and buyers buy them. However buyer cannot chose which NFT to be, but they get recommended 1 or more from the highest scoring generator. The process is:
sellers lists -> buyer makes a request -> generators respond to it -> verifiers validate it -> responses get scored -> highest gets returned from getBestResponse -> that response is returned by oracleResult , which is finally used by purchase
With that out of the way we can see that when the buyer chooses to buy he gets offered an array of items (which all need to be bought, he cannot chose which or how many) and the buyer buys them all.
However an issue occurs here, as the items bought still belong to the seller. More precisely on list
the seller creates a new ERC721 and gets minted ID 1:
However as that asset remains in the seller he has 100% control over it, and if an asset belonging to this seller gets to be one of the suggested assets then right before the buy our seller can call transferFrom
on the asset and transfer it to another address. Later when purchase
is called from the buyer it will loop and try to purchase all of the assets at once
And when it reaches our faulty asset purchase
, this time inside Swan
will revert as it tries to transfer the asset from our seller, but the asset is inside another contract.
Sellers grief other sellers from their profits for minimal cost
Buyer has a high likelihood of blocking a round from completion, getting all of the royalties, while paying 0 to any seller.
The whole game experience is ruined
Manual review
Either change _update
inside SwanAsset
, or transfer the NFTs inside Swan
when the seller lists them. The simpler solution is to mint the NFT directly to Swan
:
If you plan for the seller to move his NFTs between marketplaces, then considered transferring the NFT to Swan
when the seller lists and transferring it back to him when he unlists (currently not implemented).
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.