В мире блокчейна и криптовалют значительную популярность приобрели невзаимозаменяемые токены (NFT). ERC721 — это стандарт реализации NFT в блокчейне Ethereum, позволяющий создавать уникальные цифровые активы и управлять ими. OpenZeppelin — широко используемая библиотека для создания безопасных и проверяемых смарт-контрактов. В этой статье мы углубимся в разработку смарт-контрактов ERC721 NFT с использованием OpenZeppelin Solidity, изучим различные методы и предоставим примеры кода.
- Настройка проекта:
Для начала убедитесь, что у вас есть среда разработки с Solidity и установлены необходимые зависимости. Создайте новый проект Solidity и импортируйте контракты OpenZeppelin ERC721:
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
contract MyNFT is ERC721 {
// ...
}
- Метаданные токена.
Токены ERC721 часто включают метаданные, такие как имя, символ и URI токена. OpenZeppelin предоставляет контрактERC721Metadata
для реализации метаданных токена:
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Metadata.sol";
contract MyNFT is ERC721, ERC721Metadata {
constructor(string memory _name, string memory _symbol) ERC721Metadata(_name, _symbol) {
// ...
}
}
- Минтинг токенов:
Чтобы создавать новые NFT, нам необходимо реализовать функцию чеканки. Для управления идентификаторами токенов можно использовать библиотекуCounters
OpenZeppelin:
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
function mintNFT(address recipient, string memory tokenURI) public returns (uint256) {
_tokenIds.increment();
uint256 newTokenId = _tokenIds.current();
_mint(recipient, newTokenId);
_setTokenURI(newTokenId, tokenURI);
return newTokenId;
}
- Владение токеном:
КонтрактERC721
OpenZeppelin предоставляет функции для передачи и запроса владения токеном:
function transfer(address to, uint256 tokenId) public {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_transfer(_msgSender(), to, tokenId);
}
function ownerOf(uint256 tokenId) public view returns (address) {
return _ownerOf(tokenId);
}
- Метаданные и URI.
Токены ERC721 часто включают метаданные, хранящиеся в IPFS или аналогичной децентрализованной системе хранения. КонтрактERC721Metadata
OpenZeppelin предоставляет функции для установки и получения URI токена:
function setTokenURI(uint256 tokenId, string memory tokenURI) public {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Metadata: caller is not owner nor approved");
_setTokenURI(tokenId, tokenURI);
}
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
return _tokenURI(tokenId);
}
Внедрение смарт-контрактов ERC721 NFT с использованием OpenZeppelin Solidity обеспечивает безопасную и проверенную основу для создания уникальных цифровых активов и управления ими. В этой статье мы рассмотрели различные методы, включая настройку проекта, управление метаданными токенов, создание токенов, управление владением и работу с метаданными токенов и URI. Используя библиотеку OpenZeppelin, разработчики могут создавать надежные приложения NFT на блокчейне Ethereum.