How to Set a Price on an NFT
Guide for how to set a price on your NFT
Plus, be sure to check out the rest of our NFT tutorial series:
You've just created an NFT and you want to sell it to your fellow NFT enthusiasts. To do this, we have to put a price on the NFT, and there are two primary ways to attach a price:
Within the smart contract (this guide)
Listing the NFT on an NFT marketplace or platform (more popular approach)
Setting an NFT Price In-Contract
Require a Fee Upon Minting
NOTE: The following section is not a turnkey solution. In Step 10 of the NFT Creation Tutorial, we would need to alter the Solidity to accept payments for minting which means that any frontendweb3 / ethers.jslogic dictating minting would need to include themsg.valueparameter to allow for the transfer of ETH.
This fee pattern is completely decentralized since it takes place in-contract and bakes the fee mechanism into the minting process itself. To implement a price on minting, you need to alter your smart contract to include this behavior. As a high-level summary, a NFT minting price can be enacted by making the mint function payable and requiring the user to pay a particular amount of ETH before triggering the transfer of the NFT to the buyer.
Here's a sample piece of code for this type of minting process:
function mintToken(address to, uint256 tokenId, string uri) public virtual payable {
require(msg.value >= 10, "Not enough ETH sent; check price!");
mint(to, tokenId);
_setTokenURI(tokenId, uri);
}
function mintToken(address to, uint256 tokenId, string uri) public virtual payable
To allow users to pay ETH to mint an NFT, we need to make this function both public and payable. public functions can be called internally or via messages to allow anyone to interact with the function. (We don't want this function to be only callable by the contract's owner since this would lock out prospective buyers!)
require(msg.value >= 10, "Not enough ETH sent; check price!");
This require statement requires that the payable function receive at least 10 wei, else the function will fail and revert. The
msg.value
parameter is the ETH value of amount sent in alongside the mint function.
mint(to, tokenId);
This calls the mint function included in OpenZepplin's ERC721 contract file and instantiates/transfers the selected NFT to the buyer.
_setTokenURI(tokenId, uri);
This calls the
_setTokenURIfunction
included in OpenZepplin's ERC721 contract file and sets the NFT URI to a particular endpoint.
There are many different variants for implementing fees into minting contracts. The one listed above is one of the most simple but many protocols also use fee patterns that are significantly more complex.
Setting an NFT Price via Auction Platforms
List the NFT on OpenSea or Another NFT Auction Platform
A non-coding alternative would be to simply list your newly minted NFT on OpenSea or another NFT auction website which would allow you to place a price on it. OpenSea's UI layer running on top of the NFT allows you to place prices, accept bids, or have other more complex auction methods and handles all the logic for you.
For Ethereum mainnet, use: https://opensea.io/
For a testnet, use: https://testnets.opensea.io/
Related articles
Spearmint, the Free and Automated Allowlist Platform
Elevate your NFT game with Spearmint, the free automated allowlist platform. Manage NFT minting, foster community engagement, and avoid costly gas wars.
TheFungiNFT Partners with Alchemy to Leverage NFT Drops for Social Good
TheFungiNFT collaborates with Alchemy for impactful NFT drops, and help raise awareness for mental health.
Your Guide to ERC-1155: Comparing ERC-721 to ERC-1155
Learn about the ERC-1155 token standard and compare ERC-721 vs. ERC-1155, so you can understand the differences and when to employ each.