Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ghost Listing #21

Open
bjartek opened this issue Oct 6, 2021 · 5 comments
Open

Ghost Listing #21

bjartek opened this issue Oct 6, 2021 · 5 comments

Comments

@bjartek
Copy link

bjartek commented Oct 6, 2021

I see a huge problem with the pattern suggested in this nft-storefront. And that is GhostListings.

There is nothing stopping a user from listing a NFT in two nft-storefronts. And when it is sold in one there is nothing that cleans up the other. Likewise a user can also manually withdraw an item from the collection they own without cleanup logic beeing called.

Are we sure using pointerns to a resource is a good idea here?

@jacob-tucker
Copy link

I do see a big problem with the current storefront as well. Ghost listings is not ideal at all. I'd like to play devils advocate just for the sake of discussion.

If we were to solve this problem by actually moving the NFT into a sale collection (like Versus marketplace does at the moment), then you wouldn't have your NFT in your standard collection anymore, it would exist somewhere else. If we expand this problem even further, let's say there's 10 different marketplaces to sell all your NFTs, you would have to look inside 11 different collections to see all your NFTs if you wanted to display your collection properly.

In addition this would also imply that you cannot sell your NFTs on multiple marketplaces, which might limit what the user wants to do with their NFTs.

@ph0ph0
Copy link

ph0ph0 commented Oct 6, 2021

For those interested, Issue #10 has some interesting info relating to this current Issue.

@bm-nJoi
Copy link

bm-nJoi commented Oct 6, 2021

In addition this would also imply that you cannot sell your NFTs on multiple marketplaces, which might limit what the user wants to do with their NFTs.

I really think there is a lot of merit to considering the NFT itself managing its own stateful data regarding buying and selling states. It empowers models that enforce Royalties and enables Current-Owner-enforced and Creator-enforced mechanisms, where public marketplaces and storefronts generally empower malicious third parties to do very rude things, if there were means of managing who can engage with your NFT and how, that is a very powerful model of "this is my asset and I can do what I want with it"

You can also then delegate Creator and Owner resources to an administrative party so as a user you're not actually worried about these details you just know they exist and that you're following the same rules as the dapps you've delegated that to and supposedly trust.

This enables somewhat custodial management but still private ownership, which I think is going to be a very relevant pattern for creating seamless UX and minimizing user friction with Flow's NFTs.

@rheaplex
Copy link
Contributor

rheaplex commented Oct 7, 2021

Multiple listings were an explicit design goal for nft-storefront. They allow the same token to be listed for sale for different tokens, or with cuts to different marketplaces that can list and sell the item and receive payment for doing so. All without having to give up custody of the token to a third party.

You are however correct that clean-up is not automatic, and that this can leave dangling or ghost(ed) listings.

I don't think this is ultimately a problem. Off-chain, it is easy to see which listings are ghosts, and even if someone misses that fact then the transaction they send to buy the NFT will fail and revert. Storage space cost pressure and avoiding confusion will encourage storefront owners to clean up ghost listings.

There are two things we could do to improve this state of affairs:

  1. Add the ability to delete sale offers whose capability points to a collection that no longer holds the specified token in cleanup() - https://github.com/onflow/nft-storefront/blob/main/contracts/NFTStorefront.cdc#L453
  2. Group Listings by Type/NFT.id and delete every listing in a group when deleting one.

The former is easy, the latter would require modifying the contract in ways that are not upgrade-friendly.

@bjartek
Copy link
Author

bjartek commented Feb 17, 2022

I just mentioned this in #33 but i can mention it here again.

In practise with blocto bay and rarible I cannot list the same item twice. If i list it in rarible it shows up in blocto and the other way around.

How is a tenant in this contract supposed to know that a listing is made by them?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants