Here is your detailed guide of how to mint your own NFT and test it out in public testnet Eg. Goerli.
- Clone this repository using
git clone https://github.com/ishinu/Mint-a-Valuable-NFT
- Run
npm install
- Add
.env
file and fill it up with your API Keys. Ah, ahh.... what's that? What's an API? Where ..how?
Ok! If you are wondering what to write in .env
file. Simple check out this guide and make free accounts as noted and easily get this step done in ~3min.
How it shall look like for this project :
ALCHEMY_API_URL=00000xxx1234
PRIVATE_KEY=00000xxx1234
ETHERSCAN_API_KEY=00000xxx1234
( Alchemy or Infura, anyone you like. Both are free and both works pretty awesome! This project, we are using Alchemy.)
Step 1 :Here we have MyNFT.sol
which is a smart contract which imports few more contracts from OpenZeppelin
named ERC721URIStorage, Counters and Ownable
.
OpenZeppelin libraries provides world class help in security when it comes to smart contract development.
First we deploy MyNFT.sol
by running this command in terminal env $(cat .env) npx hardhat run --network goerli scripts/1_deploy_nft.js
( make sure you have some test Goerli ETH in your wallet ) if not, get it from goerliFaucet
Once it is delpoyed, you may verify it to see the code in Goerli Etherscan. ( without verification, etherscan won't show you the code.)
To verify, Run this command in terminal with your deployed contract address :
env $(cat .env) npx hardhat verify --network goerli 0x4131d593457b8d4Cf0D8f29fb4F1f04e816Df66A
Again if you are wondering, why these commands and where it coming from, i am just taking them from previous repo where i detailed about this process here
Once your code is verified, you can check your code in Goerli etherscan testnet.
( Here is mine if you may wonder : https://goerli.etherscan.io/address/0x7a08b09371adb3d04305f629b7d083584c7ee34f
)
Step 2 : Now we have to Mint an NFT. ( What we did in step 1 was deployed a smart contract which is having a mintNFT()
which takes a tokenURI
as argument )
Now we have to get the tokenURI
and how to do that. Very simple process. ~3min.
Make an account in pinata
pinata.cloud
It will take you to dashboard, for test purpose try to upload a 1mb or less
picture to gain momentum since bigger the image, more time it will take to ultimately load in metamask.
After you upload this picture, in this folder you may find a nft-metadata.json
.
Yes, you might have seen Opensea or other nft marketplace where nft's have a certain characteristics. Here in nft-metadata.json
, we specify the characteristics and also the image
url which we will get from pinata. ( For example, i have left mine in this project so you don't get confused but do remember to replace with yours )
Then, you have to upload this nft-metadata.json
file to pinata and get it's url that's tokenURI
for you.
How it looks like, you shall move to 2_mint_nft.js
file in this project and everything will looks pretty easy now.
If this line const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json");
seems confusing to you :
i) once you have made your .env file, you can run npx hardhat compile
in your terminal and you may see artifacts
and cache
folder popup in your project root directory. Above line is specifying the path to MyNFT.json
file.
You shall replace the contract address in 2_mint_nft.js
from mine to yours.
That's pretty much it! You may run this command in terminal : env $(cat .env) npx hardhat run --network goerli scripts/2_mint_nft.js
That's your first NFT! Congratulations!
Step 4 : To view in your metamask wallet, go to Import NFT
which will be available just on right tab of assets.
First : Enter your contract address, the one we delpoyed in the beginning.
Second : Enter ID which if you deployed first time, it must be 1
and Enter.
It may take ~minutes depending on your image size which you uploaded in pinata.cloud
but it will appear very soon!
Now it's yours, play with it and make valuable NFT's which brings the change for good!