mTC – NFT Marketplace
This is an open decentralized NFT Marketplace built with smart contracts powered by Ethereum. It basically consists in an open platform where each user can mint his own NFT and expose it on a marketplace.
Table of Contents
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
First, you will need to
fork the repository into your Github account:
First, you will need to install the dependencies with:
Run the following command in your terminal after cloning the main repo:
$ npm install
Then, you will need to install Truffle globally by running the following command int your terminal:
$ npm install -g truffle
Running the Tests
First, you will have to compile the smart contracts by running the following command in your terminal:
$ truffle compile
Then you will have to install and run Ganache to run your blockchain locally:
Then, the tests that validate your solution can be executed by runing the following
$ truffle test
Deployment on Local Blockchain
Deploy the contracts on your Ganache local blockchain by running the following command:
$ truffle migrate
Opening the User Interface
First of all, it is required to install Metamask wallet as a browser extension: https://metamask.io/
Then you should configure Metamask to connect to your local blockchain run by Ganache. This requires the following:
- Open Metamask
- Open the Network Configuration panel
- Open Custom RPC
- Configure your private network by adding
http://localhost:7545on the URL and
1337as a chain ID.
- Import the first Ganache Account to Metamask by copying the Account Private Key from Ganache and pasting it on Metamask
Finally you just need to run the following command in your terminal to open the User Interface:
$ npm start
Deployment on Public Network
In order to deploy your smart contract, you must create your .env file and specify:
PRIVATE_KEYS–> Private Key of the account you are using to deploy (typically the first one in the list of Ganache)
INFURA_API_KEY–> API key provided by Infura: https://infura.io
Then, you will need to run the following command (let’s use the testnet Ropsten in this example, remember to request some Ether for your account using a faucet):
$ truffle migrate --network ropsten
Finally you can run the following command to generate the build artifacts of your User Interface and then deploy to your favourite host:
npm run build
This project consists in an open platform where each user can mint his own NFT and expose it on a marketplace by making an offer or buying NFT from others. It includes:
- A smart contract which represents a collection of NFTs by following the ERC-721 standard
- A smart contract which represents the NFT Marketplace and contains all the logic to make offers, fill offers…
- A React.js front-end application as a user interface
The user can access the application via web-browser, and he must have the Metamask wallet installed. This interface, built with React.js, relies on the web3.js library to communicate with the smart contracts through Metamask. This means that the data reflected on the front-end application is fetched from the Ethereum blockchain. Each action performed by the user (mint a NFT, offer NFT, buy NFT…) creates a transaction on Ethereum, which will require Metamask confirmation and pay a small fee, and this transaction will permanently modify the state of the NFTCollection and NFTMarketplace smart contracts. On top of it, the user will upload the NFT Metadata to the IPFS, creating a permanent hash which will be permanently recorded on the blockchain itself to prove ownership.
NFT Marketplace features
The user can perform the following actions on this NFT Marketplace:
The user must input a name, description and upload a file (image) to mint his own NFT. Once minted, a representation of this NFT will be displayed in the marketplace and initially it will be owned by its creator. This is open for everyone, meaning everyone can participate in this NFT creation within this collection.
The user can offer his NFT by specifying its price (in Ether). If someone fulfills this offer, then the ownership is transferred to a new owner.
The user can cancel an offer he did in the past if in the end he does not want to sell his NFT or wants to adjust the price.
A user can buy those NFT which someone else offered. This will require paying the requested price (the Ether will be transferred to the smart contract to be claimed later on).
If a user sold an NFT, he can claim his funds by clicking the button in the top-right.