Skip to main content
Launch an NFT collection with a paid mint and artwork stored fully on chain, and show each wallet’s NFTs in a web gallery.
Ready. This template is published in uzolabs/templates and has been deployed and verified on testnet. It’s a learning template and hasn’t been audited. Use test funds only.

What it does

  • UzoNFT, an ERC-721 built from OpenZeppelin’s ERC721, ERC721Enumerable, Ownable and ReentrancyGuard.
  • A paid mint() with a price and a maximum supply. The owner can change the price and withdraw the proceeds.
  • tokenURI builds each token’s JSON and SVG image inside the contract, so there’s no IPFS or server to keep online.
  • 28 tests that run under both forge test and hardhat test.
  • npm run mint, to mint from the command line and decode the new token.
  • A web app with a mint button and a gallery of your NFTs that works without event logs.

Quick start

You need Node.js 20.19+, Foundry, a browser wallet and some tBOT. See Prerequisites.
Terminal
Paste your test wallet’s private key after PRIVATE_KEY= in .env. The collection settings are below it:
.env
NFT_MINT_PRICE is in BOT. Then deploy, start the web app and click “Mint for 0.01 tBOT”:
Terminal
Wait about a minute, then run npm run verify. To mint from the terminal instead, run npm run mint.

How it works

mint() reverts with WrongPayment unless you send exactly the price, and with SoldOut once the maximum supply exists. Token IDs start at 1. To list a wallet’s NFTs, the usual approach scans Transfer events. BOT Chain’s public RPCs don’t serve eth_getLogs, so the web app uses ERC721Enumerable instead: balanceOf, then tokenOfOwnerByIndex for each index, then tokenURI for each token, all batched through Multicall3. The gallery shows the first 48. The walkthrough covers each file.

Tested on testnet

The template was deployed and verified with both toolchains on BOT Chain Testnet on 1 October 2026, with the default settings. Each deploy used 2,061,513 gas at 20 gwei (0.04123026 tBOT). Each mint used 146,530 gas plus the 0.01 tBOT price. A mint from the web app was also tested. These are example addresses from one run. Your deploy gets its own.

Walkthrough

The contract, the on-chain art and the gallery.

Customize

Artwork, royalties, free mints and limits.

Source on GitHub

The template folder and its README.

Events without getLogs

The pattern the gallery uses.

NFT template walkthrough

A file-by-file tour of the contracts and scripts in the NFT template.

Customize the NFT template

Ideas and steps for turning the NFT template into your own project.
Last modified on October 2, 2026