Смарт-контракт NFT
Основная статья: 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.