Выпуск NFT
Уникальные идентификаторы токенов
«Выпуск NFT» — бесплатный урок Web3 & DApp Development Fundamentals на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Web3 & DApp Development Fundamentals, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Web3 & DApp Development Fundamentals содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Creating Unique Tokens
Minting an NFT creates a brand new token with a unique tokenId and assigns it an owner. Unlike ERC-20 minting (which adds to a balance), each NFT mint produces a distinct, identifiable asset.
Ownership Mapping
The core NFT state is a mapping from tokenId to owner address, plus a balance count per owner.
<code>mapping(uint256 => address) private _owners;
mapping(address => uint256) private _balances;</code>A Basic Mint Function
Minting assigns the token to a recipient, increments their balance, and emits a Transfer from the zero address - just like ERC-20 mint conventions.
<code>function _mint(address to, uint256 tokenId) internal {
require(to != address(0), 'mint to zero');
require(_owners[tokenId] == address(0), 'already minted');
_owners[tokenId] = to;
_balances[to] += 1;
emit Transfer(address(0), to, tokenId);
}</code>Preventing Duplicate IDs
A token id can only be minted once. The check _owners[tokenId] == address(0) ensures you never overwrite an existing token.
<code>require(_owners[tokenId] == address(0), 'token already exists');</code>Auto-Incrementing IDs
To avoid id collisions, many contracts use a counter that increases with each mint, guaranteeing unique sequential ids.
<code>uint256 private _nextId;
function mint(address to) public {
uint256 id = _nextId;
_nextId += 1;
_mint(to, id);
}</code>Safe Minting
_safeMint behaves like _mint but, if the recipient is a contract, verifies it implements onERC721Received. This prevents NFTs from being locked in contracts that cannot handle them.
<code>function _safeMint(address to, uint256 tokenId) internal {
_mint(to, tokenId);
require(_checkOnERC721Received(to, tokenId), 'unsafe recipient');
}</code>Access Control
Like ERC-20, an unrestricted mint is dangerous. Gate minting behind ownership or a minter role so only authorized accounts can create tokens.
<code>function mint(address to, uint256 id) public onlyOwner {
_safeMint(to, id);
}</code>Public Mint with Payment
Many NFT drops let the public mint by paying a fee. The function is payable and checks the sent value.
<code>uint256 public price = 0.05 ether;
function publicMint() public payable {
require(msg.value >= price, 'insufficient payment');
_safeMint(msg.sender, _nextId);
_nextId += 1;
}</code>Setting Metadata at Mint
When minting you often record a per-token metadata URI so each NFT can have its own image and attributes.
<code>mapping(uint256 => string) private _tokenURIs;
function mintWithURI(address to, uint256 id, string memory uri) public onlyOwner {
_safeMint(to, id);
_tokenURIs[id] = uri;
}</code>Supply Limits
Collections usually cap the total number of NFTs. Enforce it with a max-supply check during minting.
<code>uint256 public constant MAX_SUPPLY = 10000;
function mint(address to) public onlyOwner {
require(_nextId < MAX_SUPPLY, 'sold out');
_safeMint(to, _nextId);
_nextId += 1;
}</code>Batch Minting
To mint several NFTs in one transaction, loop the mint logic. Be mindful of the block gas limit for large batches.
<code>function batchMint(address to, uint256 count) public onlyOwner {
for (uint256 i = 0; i < count; i++) {
_safeMint(to, _nextId);
_nextId += 1;
}
}</code>Quick Check
Test your understanding of minting NFTs.
Recap
You learned how to mint NFTs:
- Each mint assigns a unique tokenId to an owner and emits Transfer from address(0)
- Prevent duplicate ids; auto-increment counters keep ids unique
_safeMintprotects against locking NFTs in incompatible contracts- Add access control, optional payment, metadata, supply caps, and batch minting
Часто задаваемые вопросы
Урок «Выпуск NFT» бесплатный?
Да — полный текст урока «Выпуск NFT» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Web3 & DApp Development Fundamentals, подпишись на CoddyKit PRO. Курс Web3 & DApp Development Fundamentals содержит 4 уроков всего.
Чему я научусь в уроке «Выпуск NFT»?
Уникальные идентификаторы токенов Ты практикуешь Web3 & DApp Development Fundamentals с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Web3 & DApp Development Fundamentals?
Предыдущий опыт не требуется. Web3 & DApp Development Fundamentals на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Выпуск NFT»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Web3 & DApp Development Fundamentals?
Да. Каждый урок Web3 & DApp Development Fundamentals включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.