๐Ÿ–‡๏ธNFT Smart Contracts

This page is here to help you guide you if you are a smart contract developer trying to make sure that your contract will be displayed properly on objkt.com and that your royalties can be respected on our marketplace.

Smart Contract Basics

The current NFT standard for tezos is called FA2 and is specified in TZIP-12. FA2 is a flexible multi-asset standard most similar to ERC1155 on EVM based chains.

There are many implementations of this standard. To get started we recommend looking into one of the following resources:

Metadata Standard

Metadata is what brings an NFT alive. objkt.com follows the TZIP-16 & TZIP-21 metadata standard for the display of tokens and contract metadata with a small extension related to royalties.

We developed a tool to help you check your metadata: https://objkt-com.github.io/metadata-validator/

We also provide JSON Schemas to validate your metadata:

Collection Metadata

Contract-level metadata 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:

{
    "name": "My Art Collection",
    "description": "My very personal art collection.",
    "imageUri": "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:

Note: the blue checkmark doesnโ€™t appear for automatically indexed collections. It will only appear for manually verified collections.

TZIP-21 extensions and objkt particularities

We developed a tool to help you check your metadata, we highly recommend using it: https://objkt-com.github.io/metadata-validator/ and checking that your tokens display properly on ghostnet.

Royalties

Royalties and royalty-splits defined in the token-metadata with the following format will automatically be supported by objkt:

{
    [...],
    "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 either 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.

Minting Tool

Knowing how a token was minted can be extremely useful. Specifying the key mintingTool with an address to the web UI or name+version of the desktop GUI that created this token tells others who to reach out to when the tool generates broken metadata for instance.

{
    [...],
    "mintingTool": "https://example.com/my-minting-ui",
    [...]
}

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.

{
    [...],
    "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. Instead, they show up in the "Collaboration" tab on the user's profile, where they can "accept" being shown as creator on those tokens.

Attributes

Following the TZIP-21 standard the token metadata can contain a list of attributes:

{
    [...],
    "attributes": [
      { "name": "Background", "value": "Mountains" },
      { "name": "Trees",      "value": "7" },
      { "name": "Size",       "value": "Medium" }
    ],
    [...]
}

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โ€.

By using attributes you will be able to benefit from our trait-offer mechanic.

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.

Last updated