Понимание стандартов токенов Ethereum

Понимание стандартов токенов Ethereum

27 мая 2022 г.

Токены являются наиболее важными и наиболее часто используемыми интерфейсами на платформе Ethereum и в среде web3. Именно по этой причине они стандартизированы, чтобы смарт-контракты оставались составными (что означает, что когда новый проект выпускает токен, он остается совместимым с существующими децентрализованными биржами).


Типы стандартов токенов Ethereum


ЭРК-20


Это стандартный интерфейс для взаимозаменяемых токенов, таких как виртуальные валюты.


Этот стандарт позволяет разработчикам создавать приложения для токенов, совместимые с другими продуктами и услугами.


ERC-721


Это стандартный интерфейс для невзаимозаменяемых токенов (NFT), который может включать в себя иллюстрации или песни.


Используется для однозначной идентификации чего-либо или кого-либо.


ERC-777


Позволяет разработчикам создавать дополнительные функции поверх токенов для повышения конфиденциальности транзакций или вариантов аварийного восстановления.


ЭРК-115


Позволяет более эффективно торговать и объединять транзакции, тем самым снижая затраты.


Глубокое погружение в стандарты


Теперь, после краткого ознакомления с типами токенов в протоколе Ethereum, давайте углубимся в каждый из них и рассмотрим их мельчайшие детали.


:::Информация


Примечание. Это не фактические сведения о том, как создать токен, а объяснение технологии, используемой для создания токена. Дальше все становится интереснее😀.


Стандарт токена ERC-20


Этот стандарт определяет методы и события, которые должны быть реализованы в смарт-контракте. Контракт, реализующий эти стандарты, называется контрактом токена ERC-20. Он будет создавать, отслеживать и выполнять операции над токеном по протоколу Ethereum.


Этот стандарт определяет следующие методы:


```javascript


///возвращает имя токена, который может присутствовать или отсутствовать.


имя функции () возвращает публичное представление (строка)


///возвращает символ токена, который также может присутствовать или отсутствовать.


функция symbol() возвращает публичное представление (строка)


///возвращает число знаков после запятой, определяющее наименьшую возможную единицу измерения, которую может принять токен.


///[Wei(18 знаков после запятой) - Eth(1 знак после запятой)]


функция decimals() возвращает публичное представление (uint8)


///возвращает общее количество токенов, определенное во время создания.


функция totalSupply() возвращает публичное представление (uint256)


///возвращает количество токенов по данному адресу.


функция balanceOf(address _owner) public view возвращает (баланс uint256)


///переводит количество токенов _value на адрес _to и запускает событие Transfer.


передача функции (адрес _to, uint256 _value) public возвращает (логический успех)


///переводит количество токенов _value с адреса на другой адрес и запускает событие Transfer.


функция transferFrom(address _from, address _to, uint256 _value) public возвращает (логический успех)


///одобряет адрес для вывода средств из вашей учетной записи несколько раз, до максимальной суммы _value, ///указанной.


функция одобряет (адрес _spender, uint256 _value) общедоступные результаты (логический успех)


///возвращает оставшуюся сумму, которую адрес еще может снять с вашего счета.


Функция разрешения (адрес _owner, адрес _spender) возвращает публичное представление (осталось uint256)


Стандарт также определяет события, которые запускаются при выполнении определенных операций.


```javascript


///инициируется при передаче токенов, включая передачу с нулевой стоимостью.


передача события (адрес с индексом _from, адрес с индексом _to, uint256 _value)


///запускается при любом успешном вызове метода утверждения.


Утверждение события (адрес, индексированный _owner, адрес, индексированный _spender, uint256 _value)


Стандарт токена ERC-721


Этот стандарт определяет методы и события, которые должны быть реализованы в смарт-контракте. Контракт, реализующий эти стандарты, называется контрактом невзаимозаменяемого токена ERC-721. Он будет создавать, отслеживать и выполнять операции над токеном по протоколу Ethereum.


Все NFT имеют переменную uint256 с именем tokenId, которая должна быть глобально уникальной. Этот стандарт определяет следующие методы:


```javascript


///Посчитайте все NFT, назначенные на адрес владельца.


функция balanceOf(address _owner) возвращает внешнее представление (uint256);


///возвращает адрес владельца NFT.


функция ownerOf(uint256 _tokenId) возвращает внешний вид (адрес);


///переносит право собственности на NFT с одного адреса на другой адрес


функция safeTransferFrom(адрес _от, адрес _к, uint256 _tokenId, байты данных) внешний платеж;


///переносит право собственности на NFT с одного адреса на другой адрес


///Это работает идентично другой функции с дополнительным параметром данных,


/// за исключением того, что эта функция просто устанавливает данные в "".


функция safeTransferFrom(адрес _от, адрес _к, uint256 _tokenId) внешний платеж;


///Передача права собственности на NFT


функция transferFrom(address_from, address_to, uint256 _tokenId) внешний платеж;


///Изменить или подтвердить утвержденный адрес для NFT


функция одобряет(адрес _approved, uint256 _tokenId) внешний платеж;


///Включить или отключить одобрение стороннего адреса («оператора») для управления NFT.


функция setApprovalForAll (адрес _оператор, логическое значение _approved) внешняя;


///Получить утвержденный адрес для указанного NFT.


функция getApproved(uint256 _tokenId) возвращает внешний вид (адрес);


///Запрос, является ли адрес авторизованным оператором для другого адреса.


///Истина, если _operator является утвержденным оператором для _owner, иначе ложь.


функция isApprovedForAll(адрес_владелец, адрес_оператор) возвращает внешний вид (bool);


Стандарт также определяет события, которые запускаются при выполнении определенных операций.


```javascript


///Инициируется, когда право собственности на NFT изменяется любым механизмом.


передача события (адрес проиндексирован _from, адрес проиндексирован _to, uint256 проиндексирован _tokenId);


///Инициируется, когда утвержденный адрес для любого NFT изменяется или подтверждается.


Утверждение события (адрес, индексированный _owner, адрес, индексированный _approved, индексированный uint256 _tokenId);


///Инициируется, когда адрес оператора включен или отключен для владельца.


событие ApprovalForAll (адрес с индексом _owner, адрес с индексом _operator, bool _approved);


Стандарт токена ERC-777


Это стандарт взаимозаменяемых токенов, который улучшает существующий стандарт токенов ERC-20.


ERC-777 обеспечивает следующие улучшения по сравнению с ERC-20:


1. Крючки


Это функция, описанная в смарт-контракте, которая вызывается при отправке или получении токенов по контракту. Это позволяет смарт-контрактам реагировать на входящие или исходящие токены. Хук может выполнять следующие операции:


  • Крючки могут отклонять транзакции.

  • Хуки позволяют отправлять токены в контракт и уведомлять контракт за одну транзакцию, в отличие от ERC-20, который требует для этого двойного вызова (approve & transferFrom).

2. Десятичные дроби


Это устраняет путаницу с десятичными знаками, возникающую в стандартах токенов ERC-20.


Стандарт ERC-777 **добавляет ** следующие методы к контракту ERC-20:


```javascript


/// возвращает степень детализации (наименьшее количество токенов), которые могут быть созданы, отправлены или сожжены в любое время.


Функция granularity() возвращает внешний вид (uint256)


///возвращает список операторов по умолчанию, как определено контрактом токена.


функция defaultOperators() возвращает внешнее представление (адрес [] память)


///устанавливает сторонний адрес в качестве оператора (msg.sender) для отправки и сжигания токенов от его имени.


функция authorizeOperator(оператор адреса) внешняя


///удаляет право адреса оператора на отправку и сжигание токенов.


функция revokeOperator(оператор адреса) внешняя


///Указывает, является ли адрес оператора оператором адреса держателя.


Функция isOperatorFor (оператор адреса, владелец адреса) возвращает внешний вид (bool)


///Отправить количество токенов с адреса msg.sender на адрес to.


функция отправки (адрес, количество uint256, байт данных данных вызова) внешняя


///Отправляет количество токенов от имени адреса.


оператор функцииОтправить(адрес от,адрес до,сумма uint256,байты данных вызова,


байты calldata operatorData) внешний


///Сжечь количество токенов с адреса (msg.sender).


функция записи (количество uint256, байт данных calldata) внешняя


///Сжечь количество токенов от имени адреса from.


функция operatorBurn(адрес от, количество uint256, байт данных calldata,


байты calldata operatorData) внешний


Стандарт также определяет события, которые запускаются при выполнении определенных операций.


```javascript


///Указывает на авторизацию оператора как оператора для держателя.


событие AuthorizedOperator (оператор с индексом адреса, держатель с индексом адреса)


///Указывает на отзыв оператора как оператора для держателя.


событие RevokedOperator (оператор с индексом адреса, держатель с индексом адреса)


///Указывает на отправку количества токенов по адресу оператора.


событие отправлено (оператор с индексом адреса, адрес с индексом, адрес с индексом,


uint256 количество, байты данных, байты operatorData)


///Указать чеканку количества токенов на адрес по адресу оператора.


событие Minted (индексированный оператор адреса, индексированный адрес, сумма uint256,


байты данных, байты данных оператора)


///Указать сжигание количества токенов с адреса по адресу оператора.


событие Сожжено (оператор индексации адреса, индексация адреса, сумма uint256,


байты данных, байты данных оператора)


Реализованы следующие функции хуков:


```javascript


///Уведомить запрос на отправку или сжигание токенов суммы с адреса на другой адрес по ///адресу оператора.


функция tokensToSend(оператор адреса,адрес от, адрес до,сумма uint256,


bytes calldata userData,bytes calldata operatorData) external


///Сообщаем о получении токенов с адреса по адресу оператора.


функция tokensReceived (оператор адреса, адрес от, адрес до, сумма uint256,


байты calldata data, байты calldata operatorData) внешние


Стандарт токена ERC-1155


Это стандартный интерфейс для контрактов, управляющих несколькими типами токенов. Может включать комбинации взаимозаменяемых токенов, невзаимозаменяемых токенов или другие конфигурации. (например, полувзаимозаменяемые токены).


Токен ERC-1155 может выполнять те же функции, что и токен ERC-20 и ERC-721, и даже обе функции одновременно, повышая при этом эффективность.


Стандарт вводит следующие функции:


```javascript


///аналогично обычному ERC-20 transferFrom, но передает массивы для


///_значения и _id


функция safeBatchTransferFrom(адрес _от,адрес _к,uint256[] calldata _ids,


uint256[] calldata _values,bytes calldata _data) external;


///мы можем получить несколько балансов за один вызов, передав массивы в


///_владельцы и _ids


функция balanceOfBatch (адрес [] calldata _owners, uint256 [] calldata _ids)


возвращается внешний вид (память uint256[]);


///Явно подтверждаем адрес для работы с любым количеством токенов


функция setApprovalForAll(адрес _operator,bool _approved) внешняя;


///Проверить, одобрен ли адрес для работы с любым количеством токенов


функция isApprovedForAll (адрес _владелец, адрес _оператор) возвращает внешнее представление (bool);


Стандарт также реализует получение **ловушек ** для смарт-контрактов, которые должны возвращать магическое предопределенное значение bytes4. Когда принимающий контракт возвращает это значение, предполагается, что контракт принимает передачу и знает, как обращаться с токенами ERC-1155, поэтому в контракте больше нет застрявших токенов.


```javascript


функция onERC1155BatchReceived (адрес _operator, адрес _from, uint256 [] calldata _ids,


uint256[] calldata _values,bytes calldata _data) внешние возвраты(bytes4);


Стандарт также вводит Правила безопасной передачи, которые включают:


  1. В ERC-1155 у нас есть только TransferFrom, без передачи. Чтобы использовать его как обычный перевод, просто установите адрес отправителя на адрес, который вызывает функцию.

  1. Вызывающий должен быть одобрен для расходования токенов на адрес _from или вызывающий должен равняться _from.

  1. Переадресация вызова должна быть отменена, если:

  • _to адрес равен 0.

  • длина _ids не совпадает с длиной _values.

  • любой баланс(ы) держателя(ей) токена(ов) в _ids меньше, чем соответствующая сумма(ы) в _values, отправленная получателю.

  • возникает любая другая ошибка.

Это накрутка, ребята


До свидания👋👋 и счастливого кодирования😃😃


Эта статья была впервые опубликована [здесь] (https://ndungudedan.hashnode.dev/demystifying-erc-token-standards-in-ethereum)



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE