My team and I have created an improved NFT standard and would like to bring it to your attention so you may add support for it in your application. Below you will find descriptions of our new standard as well as resources on how to get started on developing NFTs. Please email me at firstname.lastname@example.org for support. Special thanks to the team who made this happen!
NRC-721 we decided to develop this standard to allow developers to add external data to mnfts and be able to mint mnfts at will.
NRC-721 | An extensible & modular NFT implementation for the Nervos Network. - GitHub - rather-labs/nrc-721: NRC-721 | An extensible & modular NFT implementation for the Nervos Network.
An extensible & modular NFT implementation for the Nervos Network. - GitHub - rather-labs/nrc-721-sdk: An extensible & modular NFT implementation for the Nervos Network.
An extensible & modular NFT implementation for the Nervos Network. - GitHub - rather-labs/nrc-721-template: An extensible & modular NFT implementation for the Nervos Network.
Nervina’s approach was to deploy a full featured NFT token and turn on and off feature flags in the deployment runtime.
This approach is bulky and its use cases are opinionated.This makes it hard to keep consistency across applications that use this standard since as more features are added people need to grow the smart contract vertically making it more bulky and usually changing the base contract. This makes it prone to introducing bugs into the code.
The NRC-721 approach is leaner, to build it we took a barebones version of the mNFT as base and introduced our logic on top of that, leaving the core functionalities untouched as we added our logic.
Scalability issues (on demand minting):
mNFT cell class has a field that counts the minted NFTs from it, so with each minting process the cell must be updated, this cell class can only be updated once per block, so you must wait for the confirmation of the transaction to be able to mint another nft, this wait is approx 1 min. This standard is designed to mint very limited NFTs in a centralized way and transfer them later; it does not work if you want to mint the NFT on-demand. The NRC-721 does not carry this counter but implements instead another method to define the TYPE_ID of the NFTs.
Anyone can pay system:
When using the mNFT, the fact that this class cell has to be updated also implies that only the owner of the class can mint NFTs and must do so in a centralized way so the owner must provide the necessary CKBs for this.
NRC-721 abstracts this logic and allows anyone to issue tokens when the conditions are met.
By abstracting the minting logic the owner can inject a pro-payment condition to turn the NRC-721 into an anyone-can-pay manner contract where the owner defines the cost that must be paid for the NFT to be issued.
Usage of variety of wallets:
As the NRC-721 standard abstracts the minting conditions, the cell validation checks can be easily changed to allow the use of different wallets such as metamask, unipass, amongst others.
NRC-721 in use for our use cases
NFTs with frozen stage
We introduced an extra stage in our minting process using the NRC-721 We came up with a two fold process in which 2 transactions are required in order to have a fully functioning NFT. .
In the transaction a “frozen” NFT is issued. This means validations are added in order to prevent any operation over this NFT unit.
This is where it gets interesting, in the second transaction we switch the state of the NFT to a “released” state but we make use of the source of pseudorandomness that was generated in the previous transaction, to change properties of the final NFT. This source of pseudorandomness is useful for games and a wide range of applications for adding a surprise component into the narrative being developed.
The NRC-721 is a flexible and composable standard that will allow developers to easily build up their use cases with tested components.
Articles on getting started
Pouring extensibility on Nervos Network
Reading time: 4 min read
Deploying your NFTs in Nervos, without the hassle