owned this note
owned this note
Published
Linked with GitHub
# Making sure your custom NFT contract is displayed properly on objkt
## Smart Contract Basics
The current NFT standard for tezos is called FA2 and is specified in [TZIP-12](https://gitlab.com/tezos/tzip/-/blob/master/proposals/tzip-12/tzip-12.md). FA2 is a flexible multi-asset standard most similar to [ERC1155](https://eips.ethereum.org/EIPS/eip-1155) on EVM based chains.
There are many implementations of this standard. To get starded we recommend looking into one of the following resources:
* [SmartPy FA2_lib](https://smartpy.io/docs/guides/FA/FA2_lib/)
* a [LIGO implementation](https://github.com/oxheadalpha/smart-contracts)
* a [simplified implementation of a FA2 contract](https://github.com/jagracar/tezos-smart-contracts/blob/main/python/contracts/fa2Contract.py) by [@jagracar](https://twitter.com/jagracar)
## Metadata Standard
Metadata is what brings an NFT alive. objkt.com follows the [TZIP-16](https://gitlab.com/tezos/tzip/-/blob/master/proposals/tzip-16/tzip-16.md) & [TZIP-21](https://tzip.tezosagora.org/proposal/tzip-21/) metadata standard for the display of tokens and contract metadata with a small extension related to royalties.
## Collection Metadata
[Contract-level metadata](https://gitlab.com/tezos/tzip/-/blob/master/proposals/tzip-16/tzip-16.md) can be used to specify global properties of your collection that can be accessed across marketplaces. Here's an example of contract-level metadata that is supported by objkt:
```json
{
"name": "My Art Collection",
"description": "My very personal art collection.",
"displayUri": "ipfs://QmUMBeEN2zczMKSVHnXwq3qN9KZoV2xBdcoVJq1tT1wnMC",
"banner": "ipfs://QmUMBeEN2zczMKSVHnXwq3qN9KZoV2xBdcoVJq1tT1wnMC", // not supported yet
"homepage": "https://my-very-personal-art-website.com",
"interfaces": ["TZIP-12"]
}
```
Would result in the following view:
![Example collection](https://i.imgur.com/RpC5w7r.png)
>Note: the blue checkmark doesn't appear for automatically indexed collections. It will appear once the collection is verified.
## TZIP-21 extensions and objkt particularities
### Royalties
Royalties and royalty-splits defined in the token-metadata with the following format will automatically be supported by objkt:
```json
{
[...],
"royalties": {
"decimals": 3,
"shares": {
"tz1h3rQ8wBxFd8L9B3d7Jhaawu6Z568XU3xY": 50,
"tz1eY5Aqa1kXDFoiebL28emyXFoneAoVg1zh": 25
}
},
[...]
}
```
> This example defines two royalty recipients with `tz1h3rQ8wBxFd8L9B3d7Jhaawu6Z568XU3xY` @ **5%** and `tz1eY5Aqa1kXDFoiebL28emyXFoneAoVg1zh` @ **2.5%**.
> The `"decimals"` field defines the position of the decimal point: `305` with `4` decimals would mean `305 * 10^-4 = 0.0305 = 3.05%`.
If your contract stores royalties on-chain outside of the token-metadata please get in touch with us.
#### Receiving royalties on a contract address
Share recipients can be both implicit addresses or contract addresses. Keep in mind that contract addresses need to have a way of dealing with FA1.2 and FA2 tokens since those tokens can be used in general to pay out royalties. Royalty payments made to a contract address without that functionality will be stuck and thus lost.
### Token Creators
The creators array can contain the names of the creators of the assets. Make sure `"creators"` also contains the Tezos address of the creators, the token will show up as having been created by these addresses on objkt.com.
```json
{
[...],
"creators": [
"Acme Corporation",
"tz1h3rQ8wBxFd8L9B3d7Jhaawu6Z568XU3xY",
"tz1eY5Aqa1kXDFoiebL28emyXFoneAoVg1zh"
],
[...]
}
```
> Note: Token creators are not trusted by default for automatically indexed collections, since this would allow for easy impersonation of artists.
## Attributes
Following the TZIP-21 standard the token metadata can contain a list of attributes:
```json
{
[...],
"attributes": [
{ "name": "Background", "value": "Mountains" },
{ "name": "Trees", "value": "7" },
{ "name": "Size", "value": "Medium" }
],
[...]
}
```
![sample attributes](https://user-images.githubusercontent.com/2022803/154050157-3a7f34ba-8aed-41da-ae47-f5b82fde55c4.png)
The percentage displayed on each attribute is automatically computed by objkt.com to reflect how many editions of a token from this FA2 contract have this attribute. Therefore the 35% shown in the above example could be because
If your contract contains 500 1/1 tokens out of which 175 have the attribute "Size / Medium", you would see 35%. Same if your contract contains 100 10/10 (=10 editions per token) out of which 35 tokens (therefore 350 editions) have the attribute "Size / Medium".
### Assets and thumbnails
objkt generates custom thumbnails for every token on Tezos to ensure that your tokens can be displayed quickly on collection pages and inside search. Thumnails are generated from the [`displayUri`](https://gitlab.com/tezos/tzip/-/blob/master/proposals/tzip-21/tzip-21.md#displayuri-string-format-uri-reference) that needs to be an **image** according to the TZIP-21 spec.
The asset behind the `artifactUri` is what is displayed directly on the token page.