Skip to main content

ink!redible NFT architecture

This guide will give a brief overview of the !inkredible NFT on Astar.

What are ink!redible NFTs?

Astar brings you ink!redible NFTs - a new way for users and builders to engage with, and create, NFTs. Originally derived from the RMRK standard, ink!redible NFTs brings the latest in NFT technology to the Astar Network, and in the dedicated, more efficient, domain-specific language that is ink! This document wil provide a brief overview of the system architecture, while details can be found by looking into source code

This document will cover the following:

  • NFT collection creation and deployment to a node.
  • NFT token indexing used to track tokens ownership
  • UI
    • A token minting
    • Adding to a parent's token inventory
    • Token equipping and unequipping

Architecture

inkredible_architecture01

Collection creation

The ink!redible NFT repository also contains set of scripts that can be used to create a NFT collection and deploy it to a node. More details on how prepare a collection for deployment and use scripts can be found in readme file.

The scripts deployed the following contracts:

  • RMRK contract v0.6.0. The main contract that hold tokens, enables token nesting and equipping
  • RMRK catalog contract v0.6.0 The catalog contract contains all parts (graphics) that can be used as tokens assets.
  • RMRK minting proxy contract used to enable RMRK lazy minting. The contract's mint function mints token, adds random asset to the token and transfers the token ownership to a caller.

A collection indexing

The indexer was implemented using subsquid and uset to track token ownership. Compared to other indexing services, the development environment is faster, simpler, and works well without major bugs. Indexer source code is available here

To modify the indexer or create a new on you need to meet pre-requisites Node.js, Subsquid CLI, Docker and follow subsquid document.

In short do the following:

  • Write down typeorm model like this
  • Write down indexing script like this
  • Migrating db : $ yarn db:migrate
  • Run building script : $ yarn build

To run the subsquid in local machine

  • Open the docker container.
  • by using subsquid-cli, it can run simply as command line $ sqd down $ sqd codegen $ sqd build $ sqd up $ sqd process

Finally, you can see the graphql query $ sqd serve

inkredible_architecture02

To deploy the indexing script to aquarium, which is hosted by subsquid team, just following to this document.

$ sqd deploy .

Once deploy has successful, browse to aquarium console.

After status is available, we can query it where the endpoint is opened (like this)

Troubleshooting

QueryFailedError: relation "owner" does not exist

Sometimes, when trying to update during deployment on aquarium console, do not reflect the update well.

  • Remove the existing squad and creates a new one. it works perfectly

UI

Assets Displays all tokens owner by a connected user. The information about token ownership comes from the indexer above. List of all mintable collections is fetched from Polkaverse. inkredible_architecture03

Parent page Shows inventory (children) for a selected token. The page also enables adding a new tokens to the inventory. inkredible_architecture04

Child page Shows details of selected inventory item with options to: equip, un-equip or bond (accept child) to a parent. All earlier mentioned operations are executed on a parent NFT RMRK contract. inkredible_architecture05

Minting page Minting page enables users to mint their tokens. Mint page is generic and works for any RMRK proxy contract address. Information about collection are fetched from a Polkaverse post. inkredible_architecture06