NFTs and digital collectibles are growing in popularity as the web3 region continues to make great progress in the blockchain. Investors purchased ERC721-compatible digital collectibles due to the enormous popularity of NFTs like Cryptokitties and Bored APE Due to the surging popularity of these digital collectibles; it’s only a matter of time before they take over conventional art forms.
Therefore it’s a must to learn more about them if you want to cash in on the NFT craze. From veteran investors like Gary Vaynerchuk to popular stars like Snoop Dogg, everyone is jumping on the NFT bandwagon.
Are you confused about how to write your very own NFT contract? Are the information online overwhelming you? Brush your worries under the carpet because this is the only guide you’ll need to generate your first ERC-721 (NFT) contract on Solidity with Open Zeppelin. However, before we begin, let’s brush up on some basics regarding NFTs and the ERC-721 Standard.
Decrypting NFTs
Before we start writing a contract with Open Zeppelin, it is crucial to know about the basics of NFTs and how they operate. Simply put, NFTs are non-fungible tokens that are non-interchangeable and, therefore, completely unique.
They can be considered external data units kept on the blockchain and linked to almost any kind of digital or physical asset. These include images, videos, or real estate. These non-fungible tokens rely on digital ledgers to authenticate ownership therefore, they act as an effective deterrent against fraud and plagiarism.
Similar to Bitcoin, we often buy and trade NFTs online, keeping their individuality by creating digital scarcity. Reducing a given asset’s supply typically drives up demand and, consequently, price.
NFTs are akin to cryptocurrencies in terms of the underlying technology. Unlike cryptocurrencies, NFTs are inherently non-fungible in nature. Therefore every one of them is completely unique and possesses a digital signature that discerns it from other tokens on the market.
These NFTs allow anyone to make a profit from any digital or physical asset that can be sold online. These tokens can monetize any unique item or digital artwork, incentivizing digital artists and content creators.
Paving the Way for a Decentralized Future
Non-fungible tokens possess immense potential. By cutting out the middle person and boosting royalties through secondary sales of their work, they provide artists the ability to commercialize and retail digital collections. NFTs, however, have considerably more applications in the decentralized world than just one particular use case.
NFTs like wallet addresses and usernames are becoming the underlying technology powering assets in the metaverse. A popular example would be The Sandbox, an ambitious metaverse project that employs NFTs to depict virtual real estate, furniture, and much more. Players can own a piece of virtual land in the form of an NFT and utilize those LAND parcels to build custom locations and games, and it even allows them to monetize this.
NFTs have just lately started to modify the ownership and exchange of digital assets, laying the foundation for online communities, tradeable in-game items, and the metaverse economy. NFTs will surely open the door to a decentralized future slowly but surely.
What Makes ERC-721 Enticing?
ERC stands for Ethereum Request for Comment, and the proposal’s identifying number is 721. Simply defined, ERCs are the norms of the Ethereum ecosystem. The Ethereum community’s confidence and approval are prerequisites for an ERC proposal to become a standard.
ERC-721 makes it possible for smart contracts to monitor and move non-fungible tokens (NFTs). However, you can use any ERC type for NFTs, it’s not mandatory to use the ERC-721 standard. This ERC is only a collection of guidelines for dealing with non-fungible tokens.
Although it is sometimes mistaken with ERC 20, the former calls for the creation of a contract to include basic information, such as a name or symbol, a unique id, and, in most circumstances, a URI or Uniform Resource Locator.
ERC 721 is distinct from other ERCs because it has a one-of-a-kind identifier that makes it impossible to reproduce. On the other hand, due to their scarcity, age, or other characteristics, each token from a similar contract can have a special value.
Holding and exchanging non-fiduciary tokens within smart contracts became simpler because of the ERC-721 standard.
You might be asking what Open Zeppelin is now that the definitions of NFTs and the ERC-721 standard have been disclosed. Let’s go over some of the fundamentals.
Open Zepellin: A Trendsetter in the Blockchain Space
Open Zeppelin is a marvelous tool that is incredibly handy when it comes to designing decentralized applications. Nevertheless, these apps are kind of impervious. They have their share of shortcomings, such as security lapses, hence OpenZeppelin address these issues.
We can reasonably estimate that the banking industry has captured about 30% of the market share for blockchain technology. OpenZeppelin is an open-source framework for developing safe, decentralized applications. The framework includes the tools needed to build and automate Web3 applications.
Additionally, businesses of any size may utilize OpenZeppelin’s audit services to discover the industry standard operating procedures. The Ethereum Foundation and Coinbase are two more clients of OpenZeppelin. By offering security, reliability, and risk management for Ethereum applications, it aims to “protect the open economy.”
It implements security measures and conducts security assessments on your behalf to ensure the safety of your dApps. After finding possible bugs in the code, they offer a report with best practices and suggestions to close the system’s weakness.
How to Start Writing the ERC-721 Contract
On OpenZepppellin, creating a smart contract is comparatively simple. Allow us to assist you as you proceed. Visit our GitHub repository to skip the guide and get right to the entire project.
Although there are several IDEs available, Remix is the one we’ll be utilizing throughout this course. This involves using it to design, put together, and launch the smart contract. Now let’s begin the process of creating a smart contract.
- First, a new “omnixNft.sol” file will be created. At this point, we’ll draft our NFT contract.
- Now we will use pragma to define the Solidity compiler version for our contract pragma solidity ^0.8.0;
- We will now import the necessary Open Zeppelin libraries from their official source, specifically Ownable and ERC721. The Ownable library, as its name suggests, offers the basis for an owned contract in which the owner (deployer) of the smart contract has specific exclusive rights. The core definitions necessary for a contract to be regarded as ERC-721 compliant are included in the ERC721 library.
import “https://github.com/OpenZeppelin/openzeppelin-contracts/contracts/access/Ownable.sol”;
import “https://github.com/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol”;
- Now we are going to name our smart contract Omnixnft and then proceed to import the two Open Zeppelin libraries into our contract:
contract Omnixnft is Ownable, ERC721(){}
- The name and symbol of our contract will now be OmnixNft and ONFT, respectively, in the ERC 721 constructor:
contract Omnixnft is Ownable, ERC721(“OmnixNft”, “ONFT”){}
- Now we will initialize tokenId to 0
uint tokenId;
- Next, we initialize the mapping by designating the address as the key and tokenMetaData as the value.
mapping(address=>tokenMetaData[]) public ownershipRecord;
- Each token’s tokenId, timestamp, and tokenURI are available in the tokenMetaData struct so they may be connected to the ownershipRecord of addresses in the proper way:
struct tokenMetaData{
uint tokenId;
uint timeStamp;
string tokenURI;
}
- We can now begin writing the mintToken function. Minting is the process of tokenizing an asset in an NFT. In this example, we’ll make a sample image in the.png format. To help us learn, we’ll add the following restrictions to the contract:
- The mintToken function will only be available to the contract’s owner. The onlyOwner modification from the Ownable package can be imported into our function to achieve this.
function mintToken(address recipient) onlyOwner public {}
- We’ll ensure the token owner can’t mint it for himself right now. In order to make sure that the owner and recipient addresses are different, we utilize a required statement.
require(owner()!=recipient, “Recipient cannot be the owner of the contract”);
- We now use the _safeMint function to initiate the minting process imported from the ERC721 contract and push the tokenMetaData to the receiver to maintain our own ownershipRecords. We’ve hardcoded the same.png file as the URI for minting any token in our contract to simplify things.
_safeMint(recipient, tokenId);
ownershipRecord[recipient].push(tokenMetaData(tokenId, block.timestamp, “https://miro.medium.com/max/1120/1*k_EY7dcLYB5Z5k8zhMcv6g.png”));
tokenId = tokenId + 1;
- Deploy the contract without restriction on Remix VMs or other testnets. The full contract will now resemble something like this:
// SPDX-License-Identifier:UNLICENSED
pragma solidity ^0.8.0;
import “https://github.com/OpenZeppelin/openzeppelin-contracts/contracts/access/Ownable.sol”;
import “https://github.com/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol”;
contract Omnixnft is Ownable, ERC721(“OmnixNft”, “ONFT”){
uint tokenId;
mapping(address=>tokenMetaData[]) public ownershipRecord;
struct tokenMetaData{
uint tokenId;
uint timeStamp;
string tokenURI;
}
function mintToken(address recipient) onlyOwner public {
require(owner()!=recipient, “Recipient cannot be the owner of the contract”);
_safeMint(recipient, tokenId);
ownershipRecord[recipient].push(tokenMetaData(tokenId, block.timestamp, “https://miro.medium.com/max/1120/1*k_EY7dcLYB5Z5k8zhMcv6g.png”));
tokenId = tokenId + 1;
}
}
- Congrats, You’ll have tokenized your first NFT after executing the mintToken function.
Final Thoughts
This article covers the origin of NFTs. Additionally, we made an effort to provide an explanation for the factors contributing to their immense popularity. In this guide, you learned the basics of NFTs, OpenZeppelin, and how to create a simple ERC-721 smart contract.
We hope this article was vital to developing your initial smart contract. You’ve just finished your first Open Zeppelin NFT (ERC-721) Contract, which is an accomplishment.
We hope this post will help you on your way to becoming a Smart Contract developer, and as usual happy coding!
Personal Note From MEXC Team
Check out our MEXC trading page and find out what we have to offer! You can learn more about crypto industry news. There are also a ton of interesting articles to get you up to speed with the crypto world. Lastly, join our MEXC Creators project and share your opinion about everything crypto! Happy trading!
Join MEXC and Start Trading Today!