# Choosing the right NFT contract

Before a file can be minted into an NFT, you must deploy and verify a corresponding NFT smart contract on Chiliz Chain. This is a crucial step to ensure transparency and enable interaction with your contract on-chain.

## **Which smart contract to use?**

There are many smart contracts in the blockchain world, and it might not be obvious which one is suitable for NFT minting.

Which smart contract you need depends on what kind of NFT project you have in mind:

* One unique item: \
  Use an [ERC-721](https://eips.ethereum.org/EIPS/eip-721) NFT contract, and mint a single item with it.
* Many unique item: \
  Use an [ERC-721](https://eips.ethereum.org/EIPS/eip-721) NFT contract, and mint a collection of items with it.
* Several copies of the same item: \
  Use an [ERC-1155](https://eips.ethereum.org/EIPS/eip-1155) Multi Token contract (allows one item to have more than one instance).
* Several copies of several items: \
  Use an [ERC-1155](https://eips.ethereum.org/EIPS/eip-1155) Multi Token contract as well.

There are others smart contracts (known as contract extensions or variants) for different usages (such as [ERC-2981](https://eips.ethereum.org/EIPS/eip-2981) for Royalties, [ERC-4906](https://eips.ethereum.org/EIPS/eip-4906) for Metadata update event, ERC-721 Drop for lazy-minting, etc.), but for now, knowing about ERC-721/1155 is enough.

{% hint style="warning" %}
**Should I write my own smart contract?**

Even if you want to have full control on your code, we DO NOT recommend writing ERC‑721 contracts from scratch. You should use the battle‑tested and audited contracts from reputable contract libraries.
{% endhint %}

The most secure and common way to obtain a NFT-minting contract is by using the one from OpenZeppelin, for instance [their ERC-721 contract](https://docs.openzeppelin.com/contracts/5.x/erc721). This saves you from reinventing the wheel and helps prevent common security vulnerabilities.&#x20;

{% hint style="success" %}
[OpenZeppelin](https://www.openzeppelin.com/) is an open-source platform for building secure dApps.

In addition to several security and auditing services, they provide [a library of community-vetted smart contracts](https://docs.openzeppelin.com/contracts/), free for anyone to use in their projects.

As such, OpenZeppelin contracts are considered industry standards, and you can safely rely on them.
{% endhint %}

## Deploying and Verifying your NFT Smart Contract

You can deploy your smart contract to Chiliz Chain using reputable platforms, such as [Remix IDE](https://remix.ethereum.org/) or [thirdweb](https://thirdweb.com/), or directly using [Hardhat](https://hardhat.org/).

Once you have deployed it, you must verify the contract on an block explorer, so that developer tools and platforms can read its ABI (Application Binary Interface) and interact with it.

Follow these guides to deploy then verify your NFT contract:

{% content-ref url="../../../quick-start/developer-toolbox/deploy-and-verify-a-contract" %}
[deploy-and-verify-a-contract](https://docs.chiliz.com/quick-start/developer-toolbox/deploy-and-verify-a-contract)
{% endcontent-ref %}

{% hint style="warning" %}
Make sure to verify your contract on one of the Chiliz Chain block explorers!\
[verify-a-smart-contract](https://docs.chiliz.com/develop/basics/verify-a-smart-contract "mention")

Only verified contracts can mint NFTs that are compatible with Socios.com and the Socios.com Wallet.
{% endhint %}

Again, pay attention to use the correct network details for Chiliz Chain and Spicy Testnet:

{% content-ref url="../../../quick-start/developer-toolbox/connect-to-mainnet-and-testnet" %}
[connect-to-mainnet-and-testnet](https://docs.chiliz.com/quick-start/developer-toolbox/connect-to-mainnet-and-testnet)
{% endcontent-ref %}
