Skip to content

Cтандарт ERC-721 стал известен на волне популярности игры CryptoKitties, которая на некоторое время стала самым ресурсоемким приложением сети Ethereum.

Криптокотики построены на стандарте токенов ERC-721, позволяющем использовать уникальные, то есть не взаимозаменяемые токены (non-fungible token) в смарт-контрактах. ERC-721 сделал криптокотиков уникальными – пользователи игры выращивают и торгуют виртуальными питомцами, каждый их которых не похож на другого.

Токены ERC-721 используются в любом обмене, но их значение является результатом уникальности и редкости – каждый токен данного формата получает свои атрибуты, что делает его невзаимозаменяемым. При этом токены могут иметь разную стоимость относительно друг друга.

В отличие от ERC-20, токены ERC-721 отчуждаются целиком: нельзя передать или продать 1/2 части цифрового актива (например, нельзя передать половину цифрового котика).

В этом стандарте токен принадлежит только физическому адресу — учетной записи, представленной в виде кошелька пользователя или другого смарт-контракта.

Еще одно отличие от ERC-20 – наличие новых функций для смарт-контрактов. Так как каждый токен является уникальным, появляется необходимость фиксировать в блокчейне права владения тем или иным конкретным токеном, а также отслеживать его перемещения. Для этого в стандарте появилось несколько новых функций (подробности изложены в разделе «Функции»).

ERC-721 наилучшим образом подходит для цифровизации различных неповторимых активов с разной стоимостью и атрибутами – недвижимости, интеллектуальной собственности, произведений искусства, предметов для коллекционирования и т.д.

Данные для создания смарт-контракта

Зайдите в ваш кошелек MetaMask. Затем залогиньтесь на платформе Smartz.io и перейдите в раздел ERC721 token, где вам будет предложено указать следующие параметры смарт-контракта:

  • Contract instance name: название смарт-контракта, которое будет использоваться в интерфейсе Smartz;
  • Name of a token: название токена;
  • Token Symbol: короткий символ токена;
  • Is mintable: выбор варианта (поставить галочку) – может ли владелец токена печатать новые токены или нет;
  • Max tokens count: максимальное количество создаваемых токенов в контракте;
  • Is token burnable?: выбор варианта (поставить галочку) – может ли владелец сжечь свои токены;
  • Is token pausable?: выбор варианта (поставить галочку) – может ли владелец приостанавливать функции токена.

Указав необходимые данные, вы получите код контракта.

Деплой контракта происходит через кошелек MetaMask.

Вы также можете ограничить публичный доступ к интерфейсу контракта, поставив галочку на пункте Restrict public access to the contract UI.

После деплоя, вы сможете просмотреть развернутый контракт на Etherscan либо перейти к управлению контрактом в разделе «Dashboard».

Функции просмотра

Эти функции предоставляют информацию о состояниях и значениях контракта.

  • Minting finished: если значение указано как true, то не может быть создано больше токенов.
  • Token name: обозначает название токена.
  • Total supply: текущее общее количество всех токенов.
  • Paused: если указано значение true, то любые передачи токенов отключены.
  • Owner: адрес владельца токена в Etherscan.
  • Token ticker: сокращенное название токена.

Функции опроса

Воспользуйтесь опрашивающими функциями для получения информации о состоянии контракта. Они обеспечивают поиск по учетной книге. Наличие этих функций зависит от выбранных полей при деплое – можно искать по каждому из выбранных полей, а также по ID записи. Эти функции не выполняют никаких изменений в блокчейне.

  • Get Approved (getApproved): функция показывает утвержденный адрес для идентификатора (ID) токена или ноль, если адрес не задан.
  • Token Of Owner By Index (tokenOfOwnerByIndex): показывает токен ID по указанному индексу списка токенов запрашиваемого владельца.
  • Exists (exists): проверяет, существует ли определенный токен.
  • Token By Index (tokenByIndex): получает токен ID по индексу всех токенов в этом контракте.
  • Get owner (ownerOf): показывает владельца определенного токена.
  • Get balance (balanceOf): показывает количество токенов, принадлежащее указанному адресу.
  • Token URI (tokenURI): показывает универсальный код ресурса (URI) для заданного идентификатора токена.
  • Is Approved For All (isApprovedForAll): сообщает, одобрен ли оператор данным владельцем.

Функции записи

Для изменения состояний и значений смарт-контракта нужно воспользоваться функциями записи, вносящими новую информацию в блокчейн. Все эти функции потребляют некоторое количество газа.

  • Approve spending (approve): разрешает использование определенного токена по указанному адресу.
  • Set Token URI (setTokenURI): устанавливает строковое URI/имя для данного токена.
  • Transfer from (transferFrom): переводит токены с одного аккаунта на другой.
  • Enable circulation (unpause): включает передачу токенов (в случае, если ранее оборот токенов был приостановлен).
  • Mint new tokens (mint): создает новые токены «из воздуха» и назначает им адрес.
  • Save Transfer from (safeTransferFrom): безопасно передает право собственности на данный токен ID другому адресу. Если целевой адрес является контрактом, он должен использовать метод onERC721Received.
  • Burn tokens (burn): сжигает определенное количество токенов, принадлежащее текущему счету.
  • Finish minting (finishMinting): отключает создание новых токенов.
  • Pause circulation (pause): отключает любые операции по передаче и сжиганию токенов.
  • Set Approval For All (setApprovalForAll): устанавливает или отменяет одобрение данного оператора. Необходимо указать оператора, которому будет разрешено передавать все токены отправителя от его имени.
  • Save Transfer from (safeTransferFrom): безопасно передает право собственности на токен другому адресу. Здесь можно установить байты данных для отправки вместе с безопасной проверкой перевода.
  • Transfer ownership (transferOwnership): передает на другой адрес право собственности на токен. Это право необходимо для выполнения некоторых административных операций.