Что такое ERC-677: Упрощение взаимодействия со смарт-контрактами

16 окт. 2025 г.
Что такое ERC-677: Упрощение взаимодействия со смарт-контрактами

Ключевые выводы

• ERC-677 объединяет перевод токенов и вызов контракта в одну транзакцию.

• Это снижает количество транзакций и расход газа.

• Стандарт полезен для стейкинга, DEX и оракулов.

• Разработчики должны учитывать безопасность и риски повторного входа.

• В 2025 году ожидается рост поддержки ERC-677 в протоколах и кошельках.

Смарт-контракты лежат в основе практически всех значимых взаимодействий в сетях EVM — от обмена токенами и стейкинга до мостов между сетями и обновления данных оракулов. Однако стандартный токен ERC-20 часто требует многоступенчатых пользовательских сценариев, таких как «approve» (одобрить), а затем «call» (вызвать), что создает трение, увеличивает расход "газа" и повышает вероятность ошибки пользователя. ERC-677 — это прагматичное расширение ERC-20, которое упрощает эти процессы, объединяя перевод токена с немедленным вызовом контракта.

В этой статье мы объясним, что такое ERC-677, как он работает, где он полезен, и на что разработчикам и пользователям следует обратить внимание в 2025 году.

Проблема только с ERC-20

ERC-20 определяет простой интерфейс для взаимозаменяемых токенов: transfer (перевести), approve (одобрить) и transferFrom (перевести от). Эта простота помогла ERC-20 стать основой DeFi и стейблкоинов, но она также приводит к тому, что распространенные рабочие процессы разбиваются на две транзакции:

  1. approve — одобрить получателя (spender).
  2. Вызвать контракт протокола (который затем использует transferFrom).

Этот двухэтапный шаблон:

  • Увеличивает количество транзакций и расход "газа".
  • Создает трение в пользовательском интерфейсе и путаницу.
  • Может приводить к условиям гонки при одобрении и сохранению избыточных разрешений. См. рекомендации OpenZeppelin по корректировке разрешений для смягчения проблем с семантикой approve. Рекомендации OpenZeppelin по разрешениям ERC-20

Для получения базовой информации о самом ERC-20 см. документацию Ethereum.org. Обзор стандарта ERC-20

Что добавляет ERC-677

ERC-677 расширяет ERC-20 одной ключевой функцией: transferAndCall (перевести и вызвать). В одной транзакции токен переводится на контракт-получатель и немедленно вызывает предопределенный обратный вызов (обычно onTokenTransfer) в этом получателе с произвольными данными.

Высокоуровневый поток:

  1. Пользователь подписывает транзакцию transferAndCall для токена ERC-677.
  2. Контракт токена переводит токены получателю.
  3. Контракт токена вызывает recipient.onTokenTransfer(sender, amount, data).
  4. Контракт-получатель выполняет логику — например, депозит, стейкинг, обмен или вызов оракула.

Этот шаблон устраняет необходимость отдельного шага approve и позволяет контрактам немедленно реагировать на получение токенов.

Токен LINK от Chainlink — известная реализация ERC-677, разработанная таким образом, чтобы контракты могли немедленно реагировать на переводы LINK для оплаты услуг оракулов и связанных с ними взаимодействий. Токен LINK Chainlink и ERC-677

Типичные случаи использования

  • Стейкинг и депозиты в хранилищах: Пользователи делают депозит в одной транзакции, а хранилище учитывает его в обратном вызове.
  • DEX и потоки ликвидности: Протоколы могут получать токены и непосредственно выполнять логику обмена или добавления ликвидности.
  • Оракулы и оплата услуг: Перевод токенов в контракт сервиса и вызов использования или оплаты в том же вызове. Именно так ERC-677 токена LINK обеспечивает бесперебойную оплату оракулов. Токен LINK Chainlink и ERC-677
  • Мосты и кросс-чейн протоколы: Объединение доставки токенов с пакетом инструкций для моста или обмена сообщениями.
  • Кросс-чейн интероперабельность: По мере роста использования кросс-чейн решений объединение передачи стоимости с выполнением становится полезным. Дизайн Chainlink CCIP иллюстрирует растущий спрос на программируемые потоки токенов между сетями. Что такое CCIP

Сравнение ERC-677 с альтернативами

  • ERC-1363 (похожие на transferAndCall «payable tokens»): Схожая цель — позволить контрактам реагировать при получении токенов — со стандартизированными обратными вызовами для потоков расходов и одобрений. Хорошо подходит для сценариев, похожих на оплату. Спецификация ERC-1363
  • ERC-777 (токены на основе хуков): Предоставляет более богатую семантику токенов и хуки для получателей. Мощный, но исторически связан с большей сложностью и риском повторного входа (reentrancy), если получатели спроектированы неосторожно. Спецификация ERC-777
  • EIP-2612 (permit) и Permit2: Фокусируются на одобрениях без "газа" с помощью подписанных сообщений, уменьшая потребность в транзакциях approve. Отлично подходит для DEX и кошельков, но часто все равно требует последующего вызова контракта. ERC-677 уменьшает количество шагов для пользователя, объединяя перевод и выполнение. EIP-2612 permit, Uniswap Permit2
  • Абстракция учетных записей (EIP-4337): Позволяет кошелькам и спонсорам (paymasters) объединять несколько операций и спонсировать "газ", улучшая пользовательский опыт. ERC-677 дополняет AA, еще больше сокращая шаги на стороне протокола. EIP-4337 Account Abstraction

Короче говоря: permit и AA снижают трение со стороны кошелька; ERC-677 снижает трение, позволяя самому переводу токена запускать логику смарт-контракта.

Соображения для разработчиков и безопасность

При использовании обратных вызовов при получении токенов крайне важна осторожность:

  • Повторный вход (Reentrancy): Контракт токена вызывает логику получателя. Если получатель затем снова вызывает токен или другие внешние контракты, это может привести к уязвимостям повторного входа. Используйте паттерны checks-effects-interactions (проверки-эффекты-взаимодействия) или guard (защитные механизмы) там, где это уместно. SWC-107 Reentrancy, OpenZeppelin ReentrancyGuard
  • Проверка отправителя и токена: Убедитесь, что контракты-получатели проверяют, совпадает ли msg.sender с доверенным контрактом токена, и проверяйте адрес токена, если поддерживается несколько токенов.
  • Белый список (Whitelisting): Рассмотрите возможность добавления разрешенных контрактов-получателей в белый список (или проверки интерфейсов) для токенов, где обратный вызов может выполнять конфиденциальные операции.
  • Дизайн событий: Выпуск подробных событий помогает индексации и аналитике. Сохраняйте события Transfer, совместимые с ERC-20, наряду с данными, специфичными для ERC-677, где это возможно для совместимости с инструментами.
  • Безопасность отката (Fallback safety): Если получатель не реализует ожидаемый обратный вызов, перевод должен откатиться или следовать безопасному, явному пути отказа, чтобы избежать "тихой" потери функциональности.
  • "Газ" и режимы сбоя: Обратный вызов может откатиться; обрабатывайте сбои с четкими сообщениями об ошибках и убедитесь, что пользователи понимают, успешно ли прошел перевод или вся транзакция откатилась.

Для общей безопасности смарт-контрактов документация Solidity по соображениям безопасности остается обязательным чтением. Соображения безопасности Solidity

Пользовательский интерфейс кошелька: почему это важно для пользователей

Устраняя последовательность «approve, затем call», ERC-677 может сделать сложные взаимодействия похожими на одно целенаправленное действие. Это уменьшает усталость от подписания, снижает когнитивную нагрузку и часто экономит "газ". Однако одна транзакция становится более насыщенной: вы одновременно переводите токены и выполняете логику контракта. Это требует четких предварительных просмотров, симуляции и читаемых данных вызова от кошельков.

Если вы — пользователь, заботящийся о безопасности, взаимодействующий с протоколами, использующими ERC-677, использование аппаратного кошелька, отображающего названия функций, параметры и оценку изменений стоимости в удобочитаемом формате, может помочь вам подписывать транзакции с уверенностью.

Контекст 2025 года: внедрение и композируемость

В 2025 году тенденция к объединению передачи стоимости и выполнения намерений продолжится:

  • Все больше протоколов предпочитают депозиты, обмены или оплату услуг "в один клик", которые ощущаются как естественные и уменьшают беспорядок от разрешений.
  • Кросс-чейн фреймворки делают упор на программируемые перемещения токенов и пакеты сообщений — семантика, подобная ERC-677, хорошо соответствует этим архитектурам. Посмотрите, как CCIP формализует программируемые сообщения наряду с передачей токенов для кросс-чейн сценариев. Что такое CCIP

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

Минимальный набросок интерфейса

Концептуально ERC-677 выглядит так (реализации могут незначительно отличаться):

interface IERC677 {
    function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);
    event Transfer([address](https://onekey.so/blog/ru/ecosystem/what-is-a-crypto-wallet-address/) indexed from, [address](https://onekey.so/blog/ru/ecosystem/what-is-a-crypto-wallet-address/) indexed to, uint256 value, bytes data);
}

interface IERC677Receiver {
    function onTokenTransfer([address](https://onekey.so/blog/ru/ecosystem/what-is-a-crypto-wallet-address/) sender, uint256 value, bytes calldata data) external;
}

Контракт токена вызывает onTokenTransfer у получателя сразу после перевода средств, позволяя получателю отреагировать в одной транзакции.

Практические советы

  • Для разработчиков протоколов: Четко документируйте ожидаемые интерфейсы обратных вызовов и причины отказа. Где применимо, публикуйте белые списки или проверки интерфейсов, чтобы интеграторы могли проверить поведение.
  • Для интеграторов: Симулируйте transferAndCall, чтобы предвидеть изменения состояния после обратного вызова. Предупреждайте пользователей о рискованных получателях или неизвестных обратных вызовах.
  • Для пользователей: Отдавайте предпочтение доверенным протоколам и проверяйте предварительные просмотры транзакций. Если ваш кошелек поддерживает читаемое декодирование, уделите время проверке параметров, передаваемых в обратный вызов.

Следует ли использовать ERC-677?

Используйте ERC-677, когда:

  • Вы хотите устранить шаблон «approve + call» для основных пользовательских потоков.
  • Протокол получает выгоду от немедленной, атомарной реакции на получение токенов.
  • Вы можете укрепить обратные вызовы получателей против повторного входа и тщательно проверять источники токенов.

Если ваш сценарий использования чисто связан с одобрением (например, позволить DEX потратить токены позже), EIP-2612 или Permit2 может быть достаточно. Если вам нужна более богатая семантика хуков для множества получателей, оцените ERC-777, но помните о его сложности.

Примечание для пользователей OneKey

Транзакции ERC-677 объединяют перевод токена с вызовом контракта. При подписании полезно видеть, какая функция будет выполнена и с какими параметрами. Подход с открытым исходным кодом OneKey и поддержка EVM направлены на предоставление прозрачных предварительных просмотров вызовов и надежного подписания для продвинутых взаимодействий, таких как transferAndCall, чтобы опытные пользователи могли поддерживать высокий уровень безопасности, наслаждаясь упрощенным пользовательским интерфейсом.

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

Защитите свое криптопутешествие с OneKey

View details for Магазин OneKeyМагазин OneKey

Магазин OneKey

Самый продвинутый аппаратный кошелек в мире.

View details for Загрузить приложениеЗагрузить приложение

Загрузить приложение

Предупреждения о мошенничестве. Поддержка всех монет.

View details for OneKey SifuOneKey Sifu

OneKey Sifu

Ясность в криптовалюте — на расстоянии одного звонка.

Читать дальше