Понимание стандартов токенов 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);
Стандарт также вводит Правила безопасной передачи, которые включают:
- В ERC-1155 у нас есть только TransferFrom, без передачи. Чтобы использовать его как обычный перевод, просто установите адрес отправителя на адрес, который вызывает функцию.
- Вызывающий должен быть одобрен для расходования токенов на адрес _from или вызывающий должен равняться _from.
- Переадресация вызова должна быть отменена, если:
- _to адрес равен 0.
- длина _ids не совпадает с длиной _values.
- любой баланс(ы) держателя(ей) токена(ов) в _ids меньше, чем соответствующая сумма(ы) в _values, отправленная получателю.
- возникает любая другая ошибка.
Это накрутка, ребята
До свидания👋👋 и счастливого кодирования😃😃
Эта статья была впервые опубликована [здесь] (https://ndungudedan.hashnode.dev/demystifying-erc-token-standards-in-ethereum)
Оригинал