Что такое 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 и стейблкоинов, но она также приводит к тому, что распространенные рабочие процессы разбиваются на две транзакции:
approve— одобрить получателя (spender).- Вызвать контракт протокола (который затем использует
transferFrom).
Этот двухэтапный шаблон:
- Увеличивает количество транзакций и расход "газа".
- Создает трение в пользовательском интерфейсе и путаницу.
- Может приводить к условиям гонки при одобрении и сохранению избыточных разрешений. См. рекомендации OpenZeppelin по корректировке разрешений для смягчения проблем с семантикой
approve. Рекомендации OpenZeppelin по разрешениям ERC-20
Для получения базовой информации о самом ERC-20 см. документацию Ethereum.org. Обзор стандарта ERC-20
Что добавляет ERC-677
ERC-677 расширяет ERC-20 одной ключевой функцией: transferAndCall (перевести и вызвать). В одной транзакции токен переводится на контракт-получатель и немедленно вызывает предопределенный обратный вызов (обычно onTokenTransfer) в этом получателе с произвольными данными.
Высокоуровневый поток:
- Пользователь подписывает транзакцию
transferAndCallдля токена ERC-677. - Контракт токена переводит токены получателю.
- Контракт токена вызывает
recipient.onTokenTransfer(sender, amount, data). - Контракт-получатель выполняет логику — например, депозит, стейкинг, обмен или вызов оракула.
Этот шаблон устраняет необходимость отдельного шага 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 и используя кошелек, который четко отображает детали транзакции, вы можете безопасно пользоваться преимуществами более простых взаимодействий со смарт-контрактами в одной транзакции.






