As we are quickly approaching the release of our MintedVodka Marketplace, I wanted to give a set of rules for my fellow smart contract developers as how to make their NFTs more open and accessible beyond their own DApps.
I have been collecting the most popular NFT collections and projects on the Binance Smart Chain and, to my surprise, many of them made it quite difficult to access and use the token’s information. This is awful, considering the open nature of the network. And it makes their tokens very limited for use in external applications.
In the end, we have added following collections to Minted Vodka as trusted NFTs contracts — those who at least to some extent follow the following principles.
So what should a project consider when creating a new non-fungible token? What should it be like? So far I have identified 5 principles:
1. Be identifiable
- The NFT contract should use, as a bare minimum, a common interface. Such as ERC721.
- The contract address should be publicly known.
2. Be ownable
- The owner of the NFT should be publicly known by calling
ownerOf
method on the contract. - The owner should be able to freely transfer the NFT to another address by calling the
transferFrom
method.
3. Be discoverable
- The contract should allow enumeration of the tokens with, at least,
tokenByIndex
with a way to get a total of existing token usingtotalSupply
. - At the very minimum, enumeration for a given address should be provided with
tokenOfOwnerByIndex
andbalanceOf
!
4. Be accessible
- The contract should provide additional token information (metadata), that should be accessible at the URL returned by calling the contract’s
tokenUrl
method with the given token ID. - The metadata can be hosted on the project’s servers, IFPS or wherever. Most importantly, the service hosting the metadata should return a valid JSON response and disable CORS.
- The metadata should, at least, contain a
name
and, if possible,description
of the token. The more information, the better. It would allow easier indexing and usage of the tokens elsewhere. You can follow the OpenSea metadata standard to make the life easier for all of us! - An additional nice-to-have: make sure that your metadata and images load fast!
5. Be visualisable
Consider an external project that does not know anything about your implementation, but wants to show one of your tokens to its users. Having a visual representation of your token helps the user to identify it much faster than with a boring name and /or token id. Here is how such NFT tokens without an image look like on Minted.Vodka:
This example above is as extreme as it can get, the contract belongs to Battle Pets and enumerates the tokens correctly. However, it does not return any metadata, making integrations with external projects much harder.
Wouldn’t it be easier for the user, if he had additional visual feedback about what token he is currently looking at? Here is a positive example from AirNFTs:
And the corresponding token details view:
AirNFTs provide everything correctly: collection name + symbol, token name, description and an image. It would be even better if the metadata included a URL, linking to the token creator homepage or similar.
Binance NFT marketplace
Another, somehow disappointing example, is the newly launched Binance NFT Marketplace, which
- neither provides correct owner information (all tokens seems to have the same owner — maybe because all tokens “belong” to the marketplace smart contract while in auction?)
- nor allows enumeration, so that no owner could possibly see all his purchased NFTs outside of the DApp provided by Binance.
The enumeration for Binance Regular NFT always returns only one (first?) NFT, regardless what owner address I use or how many NFTs really exist:
Maybe the reason is that the NFTs that are currently being auctioned are not included into the enumerated dataset? I do not know. Time will tell as the first users buy their first tokens. We will see.
On their Featured Community Collection Binance did a far better job:
Dear developers
Unless it is your own strange choice to make your token less open, let us follow at least a minimal set of rules to make our lives easier and the crypto-space more open.
Thanks for reading!
Roman
P.S.: https://minted.vodka launching next Monday. Stay tuned!