Что такое ERC-777?
ERC-777 — это стандарт токенов Ethereum для взаимозаменяемых криптоактивов. Он дополняет базовую модель токенов хуками при переводе, разрешениями операторов, данными транзакций и более надежной проверкой контрактов-получателей.Как и ERC-20, он представляет взаимозаменяемые единицы: единица одного токена имеет ту же стоимость и свойства, что и любая другая единица того же токена.В официальной спецификации ERC-777 описан стандарт Final Ethereum Request for Comments, созданный для улучшения взаимодействия взаимозаменяемых токенов с кошельками и смарт-контрактами.
К основным функциям стандарта относятся функция
Остается ли ERC-777 действующим стандартом?
ERC-777 по-прежнему указан как стандарт Final в официальном репозитории предложений по улучшению Ethereum.Статус Final означает, что спецификация прошла процесс стандартизации EIP, но не гарантирует широкого распространения, активной поддержки библиотеками или пригодности для любого нового токена.Крупная библиотека смарт-контрактов объявила реализацию ERC-777 устаревшей в версии 4.9 и удалила ее в версии 5.0.В актуальном списке изменений OpenZeppelin Contracts отмечено прекращение поддержки реализации, тогда как связанные интерфейсы стандарта остаются доступными.
Это решение библиотеки не отменило ERC-777 и не изменило его статус Final.Однако разработчикам не следует ожидать, что в актуальных версиях этой библиотеки будет поддерживаться готовая реализация токена ERC-777.Уже развернутые контракты ERC-777 могут продолжать работать согласно своему коду, но при новых интеграциях следует внимательно оценить поведение callback-функций, зависимости, аудиты и поддержку в экосистеме.Зачем был создан ERC-777?
ERC-777 был создан для решения ряда проблем удобства и безопасности, связанных с базовыми переводами ERC-20.Перевод ERC-20 на контракт не обязывает контракт-получатель подтверждать получение токенов или обрабатывать их.В результате токены могут оказаться заблокированы, если у контракта нет функции для их возврата или учета.В приложениях ERC-20 также часто используется двухэтапная схема: сначала пользователь разрешает расходование токенов, а затем получатель вызывает
В ERC-777 появилась функция
Как работает ERC-777
Контракт ERC-777 хранит балансы токенов и общее предложение, а также предоставляет стандартные функции для отправки и сжигания токенов и делегирования контроля над ними.При отправке токенов контракт проверяет через ERC-1820, зарегистрировал ли отправитель хук отправителя.Если такой хук существует, токен вызывает его до изменения балансов.Затем токен уменьшает баланс отправителя и увеличивает баланс получателя.После обновления балансов контракт проверяет, зарегистрировал ли получатель хук получателя, и при необходимости вызывает его.Хук может принять перевод, выполнить дополнительную логику или отменить всю транзакцию.Поскольку операция атомарна, отмена в обязательном хуке обычно прерывает перевод токена и все связанные изменения состояния в этой транзакции.Основные функции ERC-777
Интерфейс ERC-777 включает функции для получения метаданных токена, балансов, гранулярности, операторов, переводов и сжигания.Функции
Функция
Функция
Функция
Функции
Функции
Функция send
Функция
Если получателем является контракт, нативный перевод ERC-777 через
Функция operatorSend
Функция
Вместе с переводом могут передаваться как предоставленные владельцем данные
Адрес оператора, владелец, получатель, сумма и данные включаются в стандартное событие
Что такое оператор ERC-777?
Оператор — это адрес, которому разрешено отправлять или сжигать токены ERC-777 от имени владельца.Владелец токена всегда является оператором собственного баланса.Владелец может авторизовать другой аккаунт или смарт-контракт, а затем отозвать это разрешение.Операторы могут использоваться для автоматических платежей, управления аккаунтами на основе контрактов, запланированных операций, систем восстановления или других сценариев делегированного управления токенами.В отличие от числового лимита ERC-20, стандартное разрешение оператора обычно не ограничивается определенным количеством токенов.Такие расширенные полномочия повышают удобство, но увеличивают потенциальные потери в случае злонамеренных действий или взлома оператора.Кошелек должен четко объяснять, что авторизация оператора может предоставить постоянный контроль над балансом владельца.Операторы по умолчанию
В токене ERC-777 можно задать операторов по умолчанию, которые изначально авторизованы для каждого владельца.Список операторов по умолчанию фиксируется при создании контракта токена и не может быть расширен или сокращен позднее в соответствии со стандартом.Каждый владелец должен иметь возможность отозвать полномочия оператора по умолчанию в отношении собственных токенов.Владелец также должен иметь возможность повторно авторизовать ранее отозванного оператора по умолчанию.Операторы по умолчанию могут предоставлять общесистемные сервисы без необходимости каждой операции первоначально авторизовывать их.При этом они связаны с важным фактором доверия, поскольку изначально обладают широкими полномочиями в отношении токенов владельцев.Перед хранением значительного количества токенов ERC-777 пользователям следует проверить список операторов по умолчанию и понять, для чего нужны их полномочия.Хуки отправителя
Хук отправителя ERC-777 называется
Хуки получателя
Хук получателя ERC-777 называется
Что такое ERC-1820?
Для обнаружения хуков отправителя, хуков получателя и поддерживаемых интерфейсов ERC-777 использует ERC-1820.В спецификации ERC-1820 описан универсальный реестр, в котором адрес может указывать поддерживаемые им интерфейсы и контракты, реализующие эти интерфейсы.
В реестре можно указывать интерфейсы как для обычных аккаунтов, так и для смарт-контрактов.Аккаунт может зарегистрировать себя в качестве реализации или назначить отдельный контракт для обработки интерфейса от своего имени.Перед вызовом хука ERC-777 проверяет в реестре соответствующую реализацию для отправителя или получателя.Эта зависимость от реестра добавляет внешний вызов контракта к операциям ERC-777.Чтобы стандартная реализация работала корректно, в поддерживаемой сети должны быть развернуты ожидаемый контракт реестра ERC-1820 и соответствующая интеграция.События ERC-777
В ERC-777 определены события
В событии
Событие
Событие
Токен, который также поддерживает ERC-20, может помимо обязательных событий ERC-777 генерировать события
Гранулярность и отображение десятичных знаков
Гранулярность — это минимальное внутреннее количество токенов, которое контракт ERC-777 разрешает выпускать, отправлять или сжигать.Значение устанавливается при создании контракта и не может быть изменено в соответствии со стандартом.Каждый баланс и сумма перевода должны быть кратны гранулярности токена.В большинстве токенов гранулярность равна единице, что позволяет перемещать любую целую внутреннюю единицу.По стандарту ERC-777 для отображения используется 18 десятичных знаков относительно внутренней единицы.Если токен ERC-777 также предоставляет необязательную функцию ERC-20
Совместимость ERC-777 и ERC-20
ERC-777 разработан так, чтобы токен мог реализовывать функции ERC-20 наряду с интерфейсом ERC-777.В стандарте ERC-20 определены привычные функции
Нативный вызов ERC-777
ERC-777 и лимиты ERC-20
В ERC-20 отправителю часто предоставляется числовой лимит, который ограничивает количество токенов, разрешенное к переводу от имени владельца.В ERC-777 оператор получает полномочия в отношении баланса владельца до момента их отзыва.Модель операторов предусматривает более понятную именованную роль и стандартные операции отправки и сжигания.Модель лимитов может устанавливать более узкое ограничение по сумме, хотя пользователи иногда одобряют суммы, намного превышающие необходимые.Обе системы могут привести к потерям, если пользователи авторизуют вредоносные или взломанные контракты.Кошельки должны показывать, создает ли действие фиксированный лимит, неограниченный лимит или полномочия оператора ERC-777.Отзыв разрешения одного типа не обязательно отменяет разрешение другого типа, если токен поддерживает оба стандарта.Риск повторного входа в ERC-777
Основной риск интеграции ERC-777 связан с его хуками.Хук получателя выполняет внешний код контракта во время перевода токенов.Этот внешний код может повторно вызвать протокол отправителя до завершения исходной функции протокола.Такое поведение называется повторным входом.Уязвимый протокол может рассчитать баланс, отправить токены ERC-777, получить callback и позволить ему повторить действие, используя устаревшие внутренние данные учета.Проблема может возникнуть даже при вызове протоколом функции в стиле ERC-20, поскольку токен ERC-777 с совместимостью ERC-20 все равно может вызывать зарегистрированные хуки.Разработчикам не следует считать, что перевод взаимозаменяемого токена не вызывает callback-функции только потому, что название функции напоминает обычный перевод ERC-20.Как снизить риск повторного входа
Если логика протокола это допускает, до внешнего вызова токена следует обновить критические данные внутреннего учета.Для важных точек входа следует использовать подходящий механизм защиты от повторного входа.Связанные функции необходимо проверять совместно: блокировка повторного входа в одну функцию не исключает возможность эксплуатации другой.Протокол должен проверять контракт токена, а не принимать произвольные активы с неизвестным поведением callback-функций.В тесты следует включить вредоносный хук отправителя, вредоносный хук получателя, вложенный перевод токенов, отмененный callback и повторный вход между функциями.Разработчикам также следует проверять операции выпуска и сжигания, поскольку хуки ERC-777 используются не только при обычной отправке.Аудит может снизить риск, но не гарантирует безопасность всех взаимодействий с callback-функциями.Защита получателя и ее ограничения
Проверки получателя в ERC-777 предназначены для снижения риска безвозвратной блокировки токенов в контрактах, которые не могут их обрабатывать.Чтобы получить токены через
Преимущества ERC-777
ERC-777 позволяет уведомлять контракты о получении взаимозаменяемых токенов.Он позволяет объединить перевод токенов и обработку получателем в одной транзакции.Он позволяет отправителям и получателям отклонять переводы с помощью программируемых хуков.Стандарт поддерживает прикрепление данных, которые приложения могут использовать для обработки платежа или действия.Модель операторов предоставляет стандартный способ делегирования полномочий и их явного отзыва.Нативные переводы ERC-777 снижают риск случайной отправки токенов контрактам, не зарегистрировавшим поддержку их получения.Обратная совместимость позволяет одному токену работать с инфраструктурой ERC-20, предлагая расширенные функции приложениям с поддержкой ERC-777.Ограничения ERC-777
Из-за хуков смарт-контрактам сложнее безопасно обрабатывать переводы токенов.Проверка реестра ERC-1820 добавляет внешнюю зависимость и усложняет интеграцию.Полномочия оператора могут быть шире, чем ожидают пользователи.Операторы по умолчанию связаны с важными факторами доверия и разрешений.Совместимость с ERC-20 приводит к различиям в поведении в зависимости от того, какой интерфейс перевода используется.При некорректной обработке событий ERC-777 и ERC-20 приложения могут учитывать один перевод дважды.Многие актуальные инструменты разработки и приложения в основном ориентированы на ERC-20, что снижает практическую пользу реализации ERC-777.Удаление поддерживаемой реализации ERC-777 из широко используемой библиотеки контрактов увеличивает объем работ, необходимых для безопасного создания и сопровождения нового развертывания.Почему ERC-777 получил ограниченное распространение
К моменту появления ERC-777 стандарт ERC-20 уже широко поддерживался кошельками, приложениями, аналитическими инструментами и системами смарт-контрактов.Чтобы заменить эту сетевую инфраструктуру, преимущества нового стандарта должны были оправдать внедрение новой логики callback-функций и реестра.Многие протоколы были построены с учетом предсказуемого поведения переводов и разрешений ERC-20.Хуки ERC-777 добавили неожиданные внешние вызовы в операции, которые интеграторы иногда считали простым обновлением баланса.В разделе с обоснованием ERC-2612 отмечается, что ERC-777 добавил значительный объем функциональности, способной вызывать неожиданное поведение в широко используемых контрактах.
Разработчики все чаще решали отдельные проблемы удобства с помощью более узких расширений ERC-20, а не переходили на совершенно иной процесс перевода.Поэтому ERC-777 остается технически важным стандартом, но обычно не является стандартом по умолчанию для взаимозаменяемых токенов в новых проектах Ethereum.Стоит ли разработчикам создавать новый токен ERC-777?
Сначала разработчику следует определить, какая именно функция ERC-777 необходима для предполагаемого токена.Если основная цель — подписанные разрешения, более узкое расширение ERC-20 может предоставить такую функцию без универсальных хуков перевода.Если нужны callback-функции получателя, следует оценить, может ли специализированный контракт приложения обеспечить более безопасное и прозрачное поведение.При создании новой реализации ERC-777 необходимо тщательно проверить всю спецификацию, регистрацию ERC-1820, хуки, операторов, события, выпуск, сжигание и совместимость с ERC-20.Небезопасно повторно использовать старую неподдерживаемую реализацию, не проверив изменения компилятора и известные допущения безопасности.До использования контракта для управления ценными активами необходимо провести обширное модульное тестирование, фаззинг-тестирование, тестирование инвариантов и интеграционное тестирование, а также независимую проверку безопасности.Разработчикам также следует убедиться, что предполагаемые кошельки, кастодиальные системы, мосты и децентрализованные приложения поддерживают поведение callback-функций токена.Как пользователям оценить токен ERC-777
Сначала необходимо проверить адрес контракта токена по авторитетному источнику.Затем следует выяснить, поддерживает ли контракт только ERC-777 или также предоставляет функции ERC-20.На третьем этапе нужно изучить операторов по умолчанию и определить объем их полномочий.На четвертом этапе следует проверить разрешения на выпуск, сжигание, приостановку, блокировку, обновление и администрирование.На пятом этапе нужно выяснить, использует ли контракт прокси, логика которого может измениться после покупки токена.На шестом этапе следует проверить аудиты, верификацию исходного кода, покрытие тестами и историю инцидентов.На седьмом этапе нужно проверить разрешения операторов и отозвать ненужные.На восьмом этапе следует убедиться, что приложение-получатель явно поддерживает ERC-777 и его хуки.На девятом этапе рекомендуется сначала провести тестовую транзакцию на небольшую сумму.На десятом этапе важно помнить, что соответствие интерфейсу токена не доказывает его финансовую ценность, платежеспособность или инвестиционную безопасность.Пример платежа с помощью ERC-777
Предположим, пользователь хочет оплатить подписку в блокчейне токеном ERC-777.Контракт подписки регистрирует через реестр ERC-1820 реализацию
Пользователь вызывает
Затем он вызывает у контракта хук
Распространенные ошибки при работе с ERC-777
Одна из распространенных ошибок — считать ERC-777 просто более новой заменой ERC-20.Другая — рассматривать перевод токена как операцию без callback-функций.Третья — принимать вызовы
Шестая — обрабатывать события
FAQ
Что означает ERC-777?
ERC-777 — это стандарт Ethereum со статусом Final для взаимозаменяемых токенов. Он определяет хуки, операторов, поля данных, отправку и сжигание токенов.ERC-777 — это стандарт взаимозаменяемых или невзаимозаменяемых токенов?
ERC-777 — это стандарт взаимозаменяемых токенов: единицы одного и того же токена взаимозаменяемы.ERC-777 по-прежнему действителен?
Да, официальное предложение по-прежнему имеет статус Final, однако распространение стандарта ограничено, а крупная библиотека контрактов удалила его реализацию.ERC-777 — это то же самое, что ERC-20?
Нет, ERC-777 добавляет хуки, операторов, прикрепленные данные и проверки получателей, хотя один токен может поддерживать оба стандарта.В чем заключается главная особенность ERC-777?
Самая известная функция стандарта — возможность уведомлять зарегистрированные контракты отправителя и получателя при переводе токенов.Что такое tokensReceived?
Что такое tokensToSend?
Что такое оператор ERC-777?
Оператор — это адрес, которому разрешено отправлять или сжигать токены от имени владельца.Может ли оператор ERC-777 перемещать все токены пользователя?
Стандартные полномочия оператора не ограничиваются числовым лимитом, поэтому до отзыва разрешения оператор может получить широкие полномочия.Что такое оператор по умолчанию?
Оператор по умолчанию — это адрес, авторизованный для всех владельцев при создании токена, но каждый владелец должен иметь возможность отозвать его полномочия в отношении собственных токенов.Зачем ERC-777 использует ERC-1820?
ERC-1820 позволяет токену обнаруживать контракты, реализующие хуки отправителя, хуки получателя и интерфейсы токенов.Можно ли отправлять токены ERC-777 на смарт-контракт?
Да, но нативный перевод ERC-777 должен быть отменен, если контракт-получатель не зарегистрировал необходимый хук получателя.Могут ли токены ERC-777 застрять в контракте?
Проверки получателя снижают этот риск при нативных переводах, но совместимые с ERC-20 переводы и ошибки в логике получателя все еще могут привести к блокировке балансов.Есть ли у ERC-777 десятичные знаки?
Для отображения по стандарту используется 18 десятичных знаков, а необязательная функция
Что такое гранулярность ERC-777?
Гранулярность — это минимальное внутреннее количество токенов, которое можно выпустить, отправить или сжечь.Почему ERC-777 может привести к повторному входу?
Его хуки выполняют внешний код контракта во время операций с токенами. Поэтому реализация отправителя или получателя может вызвать другие функции до завершения исходного вызова.Любой ли токен ERC-777 небезопасен?
Нет, однако в каждой интеграции необходимо предусмотреть обработку callback-функций, разрешений операторов, запросов к ERC-1820 и логики конкретного токена.Почему реализацию ERC-777 удалили из OpenZeppelin Contracts?
Стандарт получил ограниченное распространение, а сложное поведение хуков было трудно безопасно поддерживать в качестве универсального компонента.Может ли существующий токен ERC-777 продолжать работать?
Да, развернутые контракты продолжают работать согласно своему коду, если только их собственный механизм обновления или администрирования не изменит его.Стоит ли использовать ERC-777 для нового токена?
Решение зависит от того, обеспечивают ли хуки и операторы необходимые преимущества, оправдывающие дополнительные сложности в области безопасности, интеграции и сопровождения.Заключение
ERC-777 — это стандарт Ethereum со статусом Final для взаимозаменяемых токенов, созданный для улучшения взаимодействия токенов с помощью хуков, операторов, данных транзакций и проверок контрактов-получателей.Функция
Хуки
Вам также может быть интересно
ZK-Rollup
ZK-Rollup-as-a-Service
zk-SNARK
В тренде
Трендовые криптовалюты, которые в настоящее время привлекают значительное внимание рынка
ТОП по объему
Криптовалюты с наибольшим объемом торгов
Недавно добавленные
Криптовалюты недавно внесенные в листинг и доступные для торговли

