Projects like jpg store or cnft tools collect information from blockchain about minted NFTs (collectables to be exact) and present that information for users to filter, buy, sell and similar.
Most of projects use cip25 which defines a standard way how to represent NFT metadata. With this standard, services like jpg.store and cnft.tools can find NFTs on blockchain (via 721 label) and render NFT metadata as described in cip25 (there are required and optional fields like description
or name
that can be expected in metadata).
Collectables like The Ape Society or SpaceBudz usually have set of traits and sites like jpg.store or cnft.tools render them, filter them, or they calculate rarity score or rank as shown:
What I noticed on pool.pm is that there is no unique format or specification how trait data should look. For example this nft defines traits as body of attribues
field:
"attributes": {
"Creature": "Jambo",
"Skin": "Silver",
"Special": "None",
"Type 1": "Beast",
"Type 2": "Normal"
},
and jpg.store correctly renders traits:
Note that in the example above jpg.store didn't take other fields like:
"Twitter": "https://twitter.com/summoners_guild",
"Website": "https://summonersguild.io",
and use them as traits.
So far I would think there is a rule: All fields within attributes
will be used as traits.
But then these two examples don't use any attributes
field as a set of traits but instead it looks like they collect every field within metadata and their traits are still rendered correctly :
As there is no specification on how trait data should be represented in NFT metadata (at least not within cip25) I wonder how sites like the ones mentioned above (jpg.store, cnft.tools, cnftjungle.io) decide what is a trait and what isn't? It seems they have reached some sort of consensus because they render NFT traits correctly but the rules are not obvious to me.