Как написать NFT-контракт ERC-721 с нуля

Объясняем крипту простыми словами: как купить первый раз, безопасно хранить, переводить и не нарушать закон в РФ. Делаем пошаговые гайды, чек‑листы и разборы метрик CoinMarketCap/Gecko без шума и хайпа. Наша цель — ваша безопасность, понимание рисков и уверенные действия в мире цифровых активов.

erc-721nftsolidity

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 считает следующий NFT
  • mint() создаёт новый токен и привязывает к нему metadata URI

Что хранить в metadata

Обычно это JSON-файл со структурой:

{
  "name": "My NFT #1",
  "description": "Первый токен коллекции",
  "image": "ipfs://..."
}

Лучше хранить изображения и metadata в IPFS, а не на обычном сервере 🌐

Как задеплоить

  1. Открыть Remix
  2. Вставить контракт
  3. Подключить OpenZeppelin
  4. Скомпилировать на Solidity 0.8.20
  5. Задеплоить через MetaMask в тестовую сеть
  6. Вызвать mint() и проверить токен в обозревателе блоков

Частые ошибки

  • хранение картинок на централизованном хостинге
  • отсутствие ограничений на mint
  • ручная реализация ERC-721 без аудита
  • отсутствие проверки прав доступа
  • запуск сразу в mainnet без тестов ⚠️

Что можно добавить дальше

  • whitelist
  • публичный mint за плату
  • лимит на количество NFT
  • роялти через ERC-2981
  • reveal-механику
  • soulbound-логику без передачи 🎨

Итог: если нужен NFT-контракт с нуля, на практике лучший подход — собрать его на базе OpenZeppelin, протестировать в тестнете и только потом запускать в сеть. Это быстрее, безопаснее и ближе к реальным стандартам рынка.

📌 Сохраните пост, если изучаете смарт-контракты, и загляните в подборку каналов про Криптовалюты — там больше практики, новостей и разборов рынка.

🫵 Подборка каналов
🐋 Каталог ботов и приложений
🛩 Навигация

Читайте так же