The term “non-fungible token” refers to a token that is unlike any other. This is in sharp contrast to the fungible ERC20 tokens. The term “fungible” refers to something that may be replaced or swapped out. For instance, regardless of the dollar bill you use, your dollar bill will be worth $1. The dollar notes may have various serial numbers, but they are interchangeable since they are all worth $1.
ERC20s include MKR, AAVE, and SNX, among others. There aren’t many NFTs (or ERC721s). In reality, each item is one-of-a-kind, owing to its rarity. Like conventional smart contracts, they can be designed and programmed to perform whatever you want, but they come with cryptographically verified authenticity since their deployment history will always be guaranteed. This overcomes a lot of issues with determining the authenticity of a work of art, particularly for people in the art industry. This can also help with royalties, establish digital status signals, and make gaming apps more interoperable, among other things.
What Happened to Them?
They’re also really valuable. Axie Infinity just sold nine property plots for around $1.5 million.
These are generating a lot of excitement. NFTs are a new endeavor made possible by the introduction of blockchain and smart contracts, and they’re being used to create incredible things.
So, let’s go through all there is to know about NFTs.
As previously stated, NFTs begin with the ERC721 token standard, which has a syntax that is similar to that of ERC20s – with a few exceptions.
All your contract has to do to be called an NFT is follow this criterion. We make it simple by simply importing the standard into our contracts, which eliminates the need to reinvent the wheel every time we create a new one. To see what I’m talking about, look at the code below.
NFTs feature a tokenURI variable, which we’ll discuss in a moment, as well as a mapping of a token to its owner, with each token having its own “owner.” This distinguishes them from ERC20s, which merely have an address-to-balance mapping. People may still transfer tokens, establish permissions on them, and more with ERC721s. By convention, it’s a lightweight standard that allows us to construct whatever we want with it.
This is when things start to get interesting. Metadata. A collection of photos may be seen on OpenSea (a popular NFT store). Isn’t it true that because NFTs are on the blockchain, all of their data should also be on the blockchain? That’s not entirely true.
Data storage on the blockchain may be quite costly, and art isn’t known for its modest size. Developers of Ethereum and smart contracts recognized that uploading even a 1MB image may bankrupt them, so they set out to find a solution to show art without having to transmit the complete image.
Most NFTs feature what’s known as a tokenURI as a workaround. For all image features of an NFT, this is a globally unique identifier. This makes giving NFTs graphics a lot simpler. A Uniform Resource Identifier (URI) is a sort of unique identifier that can be an HTTPS API request, anything from IPFS, or something else.
They are JSON files with the following attributes:
In most cases, they are saved in an API or on IPFS.
ERC-1155 Standards Should Be Obeyed
It’s time to fine-tune your NFT development now that you’ve learned how to build a JSON NFT file and host it on Moralis.
The JSON ERC-1155 string has a specific format defined by the ERC-1155 standard, as mentioned in the actual EIP under metadata options. The ERC-1155 standard needs 64 hexadecimal characters with no 0x prefix, according to the specification listed under string format. As a result, you’ll need to change the name of your original file and pad it up to 64 digits as needed.
Metadata and Marketplaces for NFT
OpenSea and other marketplaces easily interface with hosted NFT information. By using proper formatting, such markets will be able to use the same on-chain text for a huge number of tokens while only establishing a URI once.
You’re essentially referring to the same area on the blockchain. The client can replace the “ID” with any token ID in hexadecimal form, and the URI is only supplied once.
To engage with our Smart Contract, we require an Ethereum address. Metamask will be our wallet. It’s a free online wallet that keeps track of your Ethereum addresses. It will be required to submit and receive transactions (read more on that here). A transaction is, for example, minting an NFT.
They have a Chrome extension and a mobile app that you may use. Because the Chrome addon does not show your NFTs, we’ll need both.
For development purposes, make sure the network is set to “Ropsten Test Network.” To pay for the costs of deploying and minting your NFT, you’ll need some Eth. Enter your address at the Ropsten Ethereum Faucet. Your Metamask account should shortly include some test Eth.
Metadata on-Chain vs. Metadata off-Chain
On-chain properties, in our opinion, are required if you want your NFT to accomplish anything meaningful. For example, if you wanted to give them battle stats, a rarity stat, or cryptographically assured scarcity, you could do so. On-chain properties are required.
Because NFT platforms currently lack good means to view on-chain properties, all you have to do is establish a tokenURI with your newly generated NFTs.
One of the most common methods for storing token URI data is to use IPFS. You’ll upload your data there and then utilize a pinning service to keep it there indefinitely. We are looking forward to when our smart contract platforms and storage systems will be more interoperable.
The Nyan cat’s inventor sells an NFT version for 300 ETH.
Authenticity has worth. Scarcity has value if you make something extraordinary. This is why I believe having Chainlink VRF NFTs is so incredible since you can design collectibles that are so uncommon that there’s a chance you’re the only one who has them. We are looking forward to a Pokemon-style game on these platforms. These NFTs aren’t going away anytime soon.
There is a slew of NFT platforms whose value is soaring, and we can do some very exciting things with them.
Consider the nft-mix by Patrick Collins, which was created using the Brownie platform. If you want to see an end-to-end demonstration of how to upload to IPFS, you can go to his Chainlink blog, where he deployed these lovely miniature dungeons and dragons figures you saw above.
Take a peek at the code for a basic NFT. The nft-mix project on GitHub has all of the code for this, as well as the Dungeons & Dragons code.
The NFT Contract in Its Basic Form
This is the most straightforward method for launching an NFT contract. This is the Truffle, Hardhat, and Brownie syntax, and it will not function with Remix.
OpenZepplin contracts are pleasant to work with and provide all of the tools we typically require to get started. Be sure you install them with:
install @openzeppelin/contracts with npm
Patrick Collins came up with the moniker Dogie for a token with the DOG emblem. With the createcollectible method, we may mint as many DOGs as we like, each time creating a new tokenId. We just need to give a tokenURI, which is any URL/URI that links to something in the metadata JSON format.
NFT Contract Advanced
Our NFTs were given random stats using the Chainlink VRF in this one. In this scenario, we’re relying on chance to assign a breed to our dog.
This time, when we use createCollectible, we are requesting a cryptographically verified random number from a Chainlink oracle. We won’t be able to mess with the game’s fairness this way. We must wait for the Chainlink oracle to send back a second transaction with the random number because the request is asynchronous.
When the Chainlink oracle is finished, it uses its random number to run the fulfillRandomness function, which mints the NFT. The mappings are used to ensure that the owner of the NFT is the person who first used the createCollectible function. This is how dynamic NFTs with tremendously powerful features and actual scarcity may be created.
What is the best way to look at the NFT on the blockchain?
Execute the deployment script using node:
SOME ADDRESS should show up in your terminal. This is the location on the ropsten test network where your Smart Contract will be deployed.
You should be able to view your newly deployed NFT if you go to:
https://ropsten.etherscan.io/address/SOME ADDRESS. Yes! It was a success!
How to Mint an NFT
It’s time to mint your NFT now that you’ve successfully distributed it. In your scripts/ folder, create a new file named mint.js. To assist us, we’ll use ethers.js.
To begin, add the ethers.js package to your project:
—save-ethers npm install
Fill the mint.js file with data.
How people engage with your contract is defined by your ABI. After that, we used Alchemy to make our provider (remember about node-as-a-service). Last but not least, we use our private key to establish our wallets.
The mint method of the Smart Contract we just deployed is called by the main() function. The mint method only requires one parameter, which specifies the token’s recipient. We put the public address of our Metamask account because we’re minting for ourselves.
If everything goes smoothly, the transaction should be registered in your terminal. Go to https://ropsten.etherscan.io/tx/YOUR HASH and get the hash property. There’s a minting transaction there that you should witness!
NFTs are fantastic. They can be programmed just like traditional smart contracts, but come with cryptographically confirmed validity since their deployment history will always be guaranteed. NFTs are still in their infancy, thus new ideas are encouraged.