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’sERC721,ERC721Enumerable,OwnableandReentrancyGuard.- A paid
mint()with a price and a maximum supply. The owner can change the price and withdraw the proceeds. tokenURIbuilds 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 testandhardhat 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
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
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.
Links
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.