Смарт-контракт NFT
Смарт-контракт NFT — разновидность смарт-контракта, используемого для выпуска NFT. Смарт-контракты играют ключевую роль в создании, управлении и торговле NFT, обеспечивая автоматизацию, безопасность и прозрачность всех процессов.
Функционал смарт-контракта NFT
1. Создание и выпуск NFT. При создании уникального токена в смарт-контракте прописываются атрибуты и переменные NFT: название, имя владельца, метаданные и т.д.
2. Покупка и продажа NFT. Смарт-контракты автоматизируют процесс покупки и продажи NFT. Когда покупатель хочет приобрести NFT, смарт-контракт обеспечит выполнение всех условий сделки, включая перевод токенов и средств, без необходимости стороннего посредника.
3. Авторские отчисления. Смарт-контракт можно настроить так, чтобы создателю NFT автоматически выплачивать авторские отчисления при каждой последующей продаже токена. Это позволяет художникам и создателям контента продолжать зарабатывать на своих работах с каждым новым владельцем.
4. Публичная продажа. Автор может расширить функционал контракта, добавив возможность публичной продажи NFT через аукцион или по фиксированной цене.
5. Проверка подлинности и права собственности. Смарт-контракты обеспечивают неизменность и прозрачность данных об NFT, что позволяет легко подтвердить подлинность и право собственности на цифровой актив.
На блокчейне Decimal реализован конструктор NFT стандартов DRC-721 и DRC-1155, который автоматизирует создание смарт-контракта и делает его доступным даже для пользователей, не владеющих навыками программирования.
Основные компоненты смарт-контракта ERC-721 / DRC-721
- URI метаданных: ссылка на файл, который содержит метаданные (описание, изображение, атрибуты и т.д.) вашего цифрового произведения искусства.
- Адрес владельца: адрес кошелька создателя или текущего владельца NFT.
- Название и символ: название коллекции и символ токена.
Как работает смарт-контракт NFT
Рассмотрим в общих чертах работу смарт-контракта NFT на примере Васи. Вася — цифровой художник. С помощью нейросети он создал Cyber Mona Lisa — версию известной картины Леонардо в стиле «киберпанк» — и решил выпустить это изображение в виде NFT стандарта ERC-721.
Вася загружает изображение на свой сервер: https://vasya.com/images/cybermonalisa.png. На блокчейне Ethereum Вася развертывает смарт-контракт, указав название коллекции ArtNFTCollection и символ ART.
- Код смарт-контракта на языке Solidity с использованием библиотеки OpenZeppelin
solidity // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/Counters.sol"; contract ArtNFT is ERC721, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; constructor() ERC721("ArtNFTCollection", "ART") {} // Функция для создания нового NFT function mintNFT(address to, string memory tokenURI) public onlyOwner { uint256 tokenId = _tokenIdCounter.current(); _mint(to, tokenId); _setTokenURI(tokenId, tokenURI); _tokenIdCounter.increment(); } // Функция для установки URI метаданных (опция OpenZeppelin) function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal { require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token"); _setTokenURI(tokenId, _tokenURI); } }
Для добавления нового токена в коллекцию используется функция mintNFT
, которая передаёт адрес покупателя и ссылку на файл метаданных (например, https://vasya.com/token-metadata.json
). В результате, функция создает NFT с уникальным идентификатором tokenId
, который привязан к переданному адресу и URI метаданных.
Затем Вася создает JSON-файл, содержащий метаданные произведения, и загружает его на сервер https://vasya.com/.
- Код JSON-файла
json { "name": "Cyber Mona Lisa", "description": "Цифровая версия известного произведения искусства в стиле CyberPunk.", "image": "https://vasya.com/images/cybermonalisa.png", "attributes": [ { "trait_type": "Year", "value": "2024" } ] }
И наконец, Вася вызывает функцию mintNFT
, чтобы создать новый NFT:
solidity contract.mintNFT(0x1234567890abcdef1234567890abcdef12345678, "https://vasya.com/token-metadata.json");
NFT создан. Теперь Вася зафиксировал свои авторские права на Кибер Мону Лизу и может продать это изображение на открытых торговых площадках.
Так выглядит базовый смарт-контракт ERC-721 для создания и управления цифровыми произведениями искусства в виде NFT.