This is a fullstack DApp NFT Marketplace built as a study project to learn more about blockchain and smart contract development.
Made with NodeJS, Hardhat, Solidity, ReactJS, NextJS and Vercel.
Checkout the live demo: https://nft-marketplace-markkop.vercel.app/
You can create (mint) new tokens, uploading their image and metadata on IPFS using Pinata.
If you've created or bought an NFT, you may also sell it by setting a price and paying a listing fee.
When buying an NFT, the price will be transferred to the seller and the listing fee to the NFT Marketplace owner.
It's also possible to cancel a market item, transferring it back to the owner.
There are only two pages to view market's NFTs:
Shows all NFTs that are available to be bought.
This page will show NFTs even if the user doesn't have the Metamask extension or isn't connected to the dapp.
NFTs available
Show all account's created, owned and on sale NFTs.
Here you keep track of NFT's you've created and check for how much they've been last sold and their current owner.
You can also list your current owned NFTs or cancel existing ones.
To view this page, you must have Metamask installed and have it connected to Polygon's Testnet network.
Created and owned NFTs
If the Metamask extension is not detected on "My NFTs" page, a message with a download button will be prompted to the user.
Download metamask message and buttons
If the user has the extension, but is not connected, a message and a connect button will be shown.
Connect wallet message and button
If the Polygon's Testnet network is not detected, a message and an ADD/CHANGE network button will be available.
Add/Change Network message and button
If the connected account is low on balance of Matic tokens, a message with a faucet link is provided.
A low on balance message with a faucet link
When changing account or network, the page will refresh updating only the affected components.
Components update on account change
When performing an action, a loading feedback is shown and the card updates to its new state automatically.
Buying an NFT and its feedbacks
Frontend is automatically deployed using Vercel's Github integration, but contracts have to be manually deployed to keep a better control on them.
However, new deployed contract addresses can be updated on the frontend simply by running a script that modifies Vercel's project environment variables and triggers a new frontend deployment.
.env.local.example
to .env.local
and fill it with environment variablesnpm run node
to start a local EVM blockchain testnetnpm run setup
to deploy NFT and Marketplace contracts and perform some initial actions to the local blockchainnpm run dev
to start frontend applicationLocalhost 8545
as the Metamask's networkmain
branch using Vercel's github integration.env.local
and send it some Polygon's Testnet Matic tokensnpm run deploy:mumbai
to deploy contracts to Polygon`s Testnet (Mumbai)npm run setup-marketplace:mumbai
to setup the marketplace with existing tokens and sales.npm run env
to update Vercel's environment variables with the new deployed contract addresses.*Polygon Testnet Mumbai
as Metamask's network* You'll need to create the envs on Vercel first
* They're usually caused by incorrect contract addresses and wrong default gas values
Try changing hardhat.config.js
mumbai gas values.
I'm using the ones I've found here:
https://forum.moralis.io/t/deploy-to-polygon-matic-mumbai-fails/700
Reset your Metamask account transaction history.
Find out more on:
https://medium.com/@thelasthash/solved-nonce-too-high-error-with-metamask-and-hardhat-adc66f092cd