Смарт-контракт NFT

Материал из Decimal Wiki
Перейти к навигации Перейти к поиску

Основная статья: NFT

Использование смарт-контракта ERC-721 с библиотекой OpenZeppelin для создания 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

Cyber Mona Lisa

Рассмотрим в общих чертах работу смарт-контракта 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.

См. также