NFT на стандарте ERC-721 — это смарт-контракт, где каждый токен уникален. Такой формат используют для коллекций, игровых предметов, прав доступа и цифровых сертификатов. Ниже — понятная база, с которой можно стартовать без лишней теории.
Что нужно до начала
- Solidity
- Среда разработки: Remix или Hardhat
- Кошелёк MetaMask
- Тестовая сеть Ethereum или совместимой EVM-сети
Базовая логика ERC-721
Контракт должен уметь:
- хранить имя и символ коллекции
- выпускать NFT
- назначать владельца токена
- передавать токены
- отдавать
tokenURIс метаданными
Самый безопасный путь — не писать стандарт вручную, а взять готовую реализацию из OpenZeppelin. Это экономит время и снижает риск ошибок 🔐
Пример минимального ERC-721 контракта
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract MyNFT is ERC721URIStorage, Ownable {
uint256 public nextTokenId;
constructor() ERC721("MyNFT", "MNFT") Ownable(msg.sender) {}
function mint(address to, string memory uri) public onlyOwner {
uint256 tokenId = nextTokenId;
_safeMint(to, tokenId);
_setTokenURI(tokenId, uri);
nextTokenId++;
}
}
Как это работает
ERC721URIStorageдобавляет хранение ссылок на метаданныеOwnableограничивает выпуск токенов владельцем контрактаnextTokenIdсчитает следующий NFTmint()создаёт новый токен и привязывает к немуmetadata URI
Что хранить в metadata
Обычно это JSON-файл со структурой:
{
"name": "My NFT #1",
"description": "Первый токен коллекции",
"image": "ipfs://..."
}
Лучше хранить изображения и metadata в IPFS, а не на обычном сервере 🌐
Как задеплоить
- Открыть Remix
- Вставить контракт
- Подключить OpenZeppelin
- Скомпилировать на Solidity 0.8.20
- Задеплоить через MetaMask в тестовую сеть
- Вызвать
mint()и проверить токен в обозревателе блоков
Частые ошибки
- хранение картинок на централизованном хостинге
- отсутствие ограничений на mint
- ручная реализация ERC-721 без аудита
- отсутствие проверки прав доступа
- запуск сразу в mainnet без тестов ⚠️
Что можно добавить дальше
- whitelist
- публичный mint за плату
- лимит на количество NFT
- роялти через ERC-2981
- reveal-механику
- soulbound-логику без передачи 🎨
Итог: если нужен NFT-контракт с нуля, на практике лучший подход — собрать его на базе OpenZeppelin, протестировать в тестнете и только потом запускать в сеть. Это быстрее, безопаснее и ближе к реальным стандартам рынка.
📌 Сохраните пост, если изучаете смарт-контракты, и загляните в подборку каналов про Криптовалюты — там больше практики, новостей и разборов рынка.