ERC-721 — это стандарт NFT в сети Ethereum и EVM-совместимых блокчейнах. Он нужен, когда каждому токену требуется уникальный идентификатор: коллекционные изображения, игровые предметы, пропуски, сертификаты, права доступа.
Что должно быть в ERC-721 контракте
nameиsymbol— имя и тикер коллекцииownerOf(tokenId)— кто владеет токеномbalanceOf(address)— сколько NFT у адресаtransferFrom/safeTransferFrom— передача токенаapproveиsetApprovalForAll— разрешения на управлениеtokenURI(tokenId)— ссылка на метаданные NFT
На практике чаще не пишут контракт с нуля, а используют OpenZeppelin — проверенные реализации стандартов. Это снижает риск багов и уязвимостей. 🔐
Базовый стек для создания
- Solidity
- Remix или Hardhat
- OpenZeppelin Contracts
- MetaMask
- Testnet: Sepolia, Polygon Amoy и др.
Минимальная логика контракта
Обычно контракт наследуется от ERC721 и Ownable, а для выпуска токенов добавляется функция mint. Часто используют:
ERC721URIStorage— если каждому NFT нужна своя metadata URICountersили инкрементtokenIdonlyOwner— если минтить может только владелец контракта
Как выглядит процесс
- Установить зависимости OpenZeppelin
- Создать контракт на Solidity
- Реализовать конструктор с
nameиsymbol - Добавить функцию
mint(address to, string memory uri) - Скомпилировать контракт
- Задеплоить в тестовую сеть
- Проверить mint и отображение NFT в обозревателе/маркетплейсе
Пример структуры контракта
- наследование от
ERC721URIStorage, Ownable - переменная
nextTokenId - функция
safeMint(to, uri) _setTokenURI(tokenId, uri)
На что обратить внимание перед деплоем ⚠️
- Метаданные: JSON-файл должен содержать
name,description,image - Хранение файлов: лучше IPFS/Arweave, а не централизованный URL
- Комиссии: деплой в Ethereum mainnet дорогой, для старта часто выбирают Polygon
- Безопасность: ограничьте mint, если не нужен публичный выпуск
- Совместимость: используйте
safeMint, чтобы токен не “завис” на контракте без поддержки ERC-721 - Верификация: после деплоя подтвердите исходный код в Etherscan/Polygonscan 🛠️
Типичные ошибки
- хранение картинок на сервере, который может отключиться
- отсутствие контроля доступа к mint
- путаница между
ERC-721иERC-1155 - деплой сразу в mainnet без тестов
- неверный
tokenURI, из-за чего NFT не отображается
Когда выбирать ERC-721
• каждый токен уникален
• важна индивидуальная metadata
• нужна совместимость с NFT-маркетплейсами
Если токены массовые и полу-взаимозаменяемые, иногда выгоднее ERC-1155 📦
Итог: для создания ERC-721 NFT-контракта сегодня оптимально брать OpenZeppelin, тестировать в testnet, хранить metadata в децентрализованном хранилище и только потом деплоить в продакшн. Это быстрее, безопаснее и дешевле на старте. ✅
👀 Загляните в подборку каналов про IT — там полезные материалы по блокчейну, разработке и инфраструктуре.