D

Dynamic NFTs

Chain Reality empowers users to seamlessly create and sell Dynamic NFTs. By expanding the scope of NFT applications we aim to aid the Decentral Revolution.

The problem Dynamic NFTs solves

The Problem: Immutable NFTs

  • Barrier to Mass Adoption :
    The current tranche of NFTs are related to digital art, being promoted by influencers and celebrities

  • Restricted Scope and Applications :
    NFTs are capable of much more than simple certificates of ownership

Q) What do we mean by dynamic?
A) Any verifiable or schedulable event can have a fundamental effect on the NFT, changing its state, properties or value

The Solution:

Ability to create dynamic NFTs opens up avenues to unleash their full potential

Implementation alpha: An elegant solution

  • Users can create an NFT of a piece of Code (HTML/Javascript)
  • This is stored on an external decentralized server (Arweave) and linked to the NFT’s metadata
  • The scripts are rendered every time the NFT is viewed

Implementation beta: An intricate solution

  • User can specify update instructions while creating an NFT
  • These instructions are stored on-chain in Token Update Instruction PDA which has update authority over Metadata PDA
  • NFT update occurs when all the instructions are satisfied

Our Goals:

Current State:

As of now, we are able to create Dynamic NFTs which change:

  • Overtime
  • Based on API
  • Based on a set of conditions and parameters

We are able to achieve this via both alpha (UI ready) and beta (UI WIP) implementations

Short Term:

  • Launch NFT Marketplace (Imp. alpha) - support users to create and sell script NFTs
  • Adding the on-chain solution (Impl. beta) to the existing alpha enabling the creation of truly Dynamic NFTs
  • UX enhancements to facilitate a no-code GUI-based Dynamic NFT creation experience

Long Term:

Build a unified set of APIs and SDKs to enable a seamless NFT creation & integration for all stakeholders ranging from individuals like artists to non-individual groups like gaming companies & businesses across various domains of:

  • Ticketing, Discounting & Access control
  • Interaction with Real-World Events
  • Gamification & evolution, etc

Challenges we ran into

  • First ever experience developing on a blockchain platform

This fact alone came in with a lot of challenges starting from learning how any blockchain works, to how solana works, to why solana is fast, better and ideal for our use case. We were already familiar with NFTs and the idea of creating dynamic NFTs because we wanted to integrate them in one of our other VR/AR RPG game projects. Getting through these challenges involved us reading a lot of blogs, skimming through websites, and watching youtube videos.

  • Unfamiliarity with Rust/React/Javascript/HTML

Both of us moved into business orientated roles after graduating from IIT and it has been more than a couple of years since we last did any software development. To top it off, we were not familiar with any of the lauguages which we have used in this project. So learning them and parallely building the project was a real challenge. Rust has a pretty good online documentation and a really helpful community. For React/JS, we initially got help from some of our work buddies and took the rest ourselves.

  • Insufficient documentation

Rust side of code and how things work on Solana is well documented. We extensively referred to the Solana docs and the Metaplex developer guide to understand these functions. However, JS/React side of metaplex code has no documentation whatsoever. One specfic hurdle we faced was following. We wrote a new instruction in the rust code and wanted to test it from the JS client. Each time we tried to send the instruction to the on chain program, we got a program error with an unclear description. We were pretty sure that we have coded things correctly and should not get an error. After a lot of debugging, we understood that the intruction sent from the JS client are being matched with the incorrect instruction in the on chain program. Each instruction in the client side has a number associated with it which corresponds to the order in which the instructions are written in processor file.

Discussion