ERC1155 — это широко распространенный стандарт токенов Ethereum для создания и управления невзаимозаменяемыми токенами (NFT) и взаимозаменяемыми токенами. Одним из общих требований к NFT является возможность переопределить URL-адрес по умолчанию, связанный с метаданными токена. В этой статье мы рассмотрим различные методы переопределения URL-адреса для токенов ERC1155, а также примеры кода в Solidity.
Метод 1. Непосредственное указание URL-адреса в контракте токена
Метод 2. Использование IPFS для хранения метаданных токена
Метод 3. Реализация отдельного контракта метаданных
Метод 4. Использование решений для автономного хранения
Метод 5. Взаимодействие с протоколами децентрализованного хранения
Метод 1. Непосредственная установка URL-адреса в контракте токена
Один простой способ переопределить URL-адрес для токенов ERC1155 – включить поле URL-адреса в контракт токена и разрешить его установку владельцу контракта или создателю токена.. Вот пример того, как этого можно достичь:
contract MyToken is ERC1155 {
string private tokenUrl;
constructor(string memory _tokenUrl) {
tokenUrl = _tokenUrl;
}
function setTokenUrl(string memory _newUrl) public {
tokenUrl = _newUrl;
}
function uri(uint256 _tokenId) public view override returns (string memory) {
return string(abi.encodePacked(tokenUrl, uint2str(_tokenId)));
}
}
Метод 2: использование IPFS для хранения метаданных токена
IPFS (Межпланетная файловая система) — это децентрализованный протокол для хранения и извлечения файлов. Используя IPFS, вы можете хранить метаданные токена вне цепочки и переопределить URL-адрес, чтобы он указывал на хеш IPFS. Вот пример:
function uri(uint256 _tokenId) public view override returns (string memory) {
string memory baseUri = "ipfs://";
return string(abi.encodePacked(baseUri, tokenMetadataHash[_tokenId]));
}
Метод 3: реализация отдельного контракта метаданных.
Другой подход заключается в создании отдельного контракта метаданных, который содержит метаданные токена и предоставляет функцию для получения URL-адреса метаданных. Затем основной контракт ERC1155 может вызвать этот контракт метаданных для получения URL-адреса. Вот пример:
interface IMetadata {
function getTokenUrl(uint256 _tokenId) external view returns (string memory);
}
contract MyToken is ERC1155 {
IMetadata private metadataContract;
constructor(address _metadataContract) {
metadataContract = IMetadata(_metadataContract);
}
function uri(uint256 _tokenId) public view override returns (string memory) {
return metadataContract.getTokenUrl(_tokenId);
}
}
Метод 4: использование решений для автономного хранения
Вы также можете использовать решения для автономного хранения, такие как централизованные базы данных или облачное хранилище, для хранения метаданных токена. URL-адрес можно переопределить, чтобы он указывал на расположение метаданных в автономном хранилище. Вот упрощенный пример:
function uri(uint256 _tokenId) public view override returns (string memory) {
return string(abi.encodePacked("https://example.com/metadata/", uint2str(_tokenId)));
}
Метод 5: Взаимодействие с протоколами децентрализованного хранения.
Для хранения метаданных токена можно использовать протоколы децентрализованного хранения, такие как Filecoin или Swarm. URL-адрес можно переопределить, чтобы он указывал на децентрализованную сеть хранения. Вот пример:
function uri(uint256 _tokenId) public view override returns (string memory) {
string memory baseUri = "filecoin://";
return string(abi.encodePacked(baseUri, tokenCID[_tokenId]));
}
В этой статье мы рассмотрели различные способы переопределения URL-адреса для токенов ERC1155. Эти методы позволяют гибко настраивать URL-адрес метаданных токена, позволяя разработчикам использовать различные решения или протоколы хранения. Реализуя эти методы, создатели токенов могут улучшить взаимодействие с пользователем и предоставить динамические и настраиваемые URL-адреса метаданных токенов для своих NFT ERC1155.