EIP-3074 Authcall: Делегация транзакций Ethereum без смены адреса

Блокчейн Ethereum живёт в постоянном противоречии между безопасностью, удобством и инновациями. С одной стороны — привычные, проверенные внешние счета (EOA) с их приватными ключами, с другой — мощные, но сложные смарт-контрактные кошельки. Долгое время пользователь был вынужден выбирать: либо простота, но ограниченный функционал, либо возможности, но за счёт миграции на новый, более сложный адрес. EIP-3074, также известный как Authcall, предлагает элегантный мост между этими мирами. Это обновление протокола позволяет владельцу обычного кошелька временно делегировать контроль над своими активами логике смарт-контракта, не меняя при этом свой исходный адрес. Это открывает путь к спонсированию комиссий, пакетным транзакциям и сложным операциям, которые ранее были доступны лишь контрактным кошелькам.

Сущность проблемы: Ограниченность внешних счетов (EOA)

Чтобы понять революционность EIP-3074, необходимо осознать фундаментальные ограничения, заложенные в архитектуру Ethereum.

Внешний счёт (Externally Owned Account, EOA) — это тип аккаунта, которым управляет приватный ключ. Это ваш MetaMask, Trust Wallet или любой другой кошелёк, где вы храните seed-фразу. Все транзакции в сети инициируются именно EOA. Их логика предельно проста: для подписи транзакции используется криптография на эллиптических кривых (ECDSA). В этом и заключается главная сила и слабость EOA.

Ключевые ограничения EOA:

  • Одна подпись — одна транзакция. Невозможно отправить несколько действий (например, swap в DEX и поставку ликвидности) в одной транзакции без сложных обходных путей.

  • Обязательная оплата газа в нативном ETH. Чтобы совершить любую операцию, на балансе EOA должен быть ETH для комиссии. Это создаёт барьер для новых пользователей и усложняет модели, где проект хочет взять комиссию на себя (газ-спонсорство).

  • Отсутствие программируемой логики. Вы не можете настроить мультисиг, лимиты на вывод, автоматические выплаты или восстановление доступа — всё решает единственный приватный ключ.

  • Неустранимая уязвимость к потере ключа. Потеря приватного ключа или seed-фразы означает безвозвратную потерю всех активов на адресе.

Смарт-контрактные кошельки (например, на базе ERC-4337 или стандартов like Gnosis Safe) решают эти проблемы, но ценой смены адреса. Пользователь должен создать совершенно новый адрес-контракт, что означает необходимость миграции активов, обновления всех подписок, whitelist-листов и связей в DeFi-протоколах. EIP-3074 предлагает третий путь.

Что такое EIP-3074 (Authcall): Основной принцип

EIP-3074 — это предложение по улучшению Ethereum (Ethereum Improvement Proposal), которое вводит две новые опкоды для EVM: AUTH и AUTHCALL. Вместе они позволяют смарт-контракту выполнять операции от имени обычного EOA-кошелька, с его разрешения.

Проще говоря, это временная и контролируемая доверенность. Вы, как владелец кошелька, даёте разовое разрешение специальному смарт-контракту (называемому инвокером, invoker) совершить набор действий с вашими активами. После выполнения полномочия делегирования прекращают действие. Ваш адрес кошелька остаётся прежним, все активы на месте, но функциональность на время выполнения становится сравнима с контрактным кошельком.

Ключевые компоненты системы:

  1. Пользователь (EOA): Владелец обычного кошелька.

  2. Инвокер (Invoker): Доверенный смарт-контракт с логикой, которую хочет выполнить пользователь (например, спонсирование газа, пакетная транзакция).

  3. Подпись делегирования (authorization signature): Специальная подпись, которую пользователь создаёт off-chain. Она содержит детали: какому инвокеру делегируются полномочия, какие лимиты установлены, срок действия. Важно: Эта подпись сама по себе не даёт инвокеру доступа к средствам. Она лишь является билетом для инициации процесса.

  4. Вызывающий контракт (опционально): Контракт, с которым должен взаимодействовать инвокер от имени пользователя (например, адрес DEX или lending-протокола).

Как работает механизм Authcall: От подписи к выполнению

Процесс делегирования и выполнения транзакции через EIP-3074 можно разбить на последовательные шаги.

Шаг 1: Формирование намерения (Off-Chain)
Пользователь взаимодействует с интерфейсом (dApp), который предлагает воспользоваться функцией, требующей EIP-3074 (например, «совершить транзакцию без ETH на газ»). dApp показывает пользователю параметры будущей операции: что будет сделано, каким инвокером, какие лимиты. Пользователь подписывает специальное сообщение (не транзакцию!) своим EOA. Эта подпись — proof of intent, доказательство намерения.

Шаг 2: Передача подписи и данных в сеть
Подписанные данные вместе с деталями операции должны попасть в блокчейн. Для этого нужна хотя бы одна транзакция. Её может отправить:

  • Сам пользователь, если у него есть ETH на газ (стандартный сценарий).

  • Оператор (relayer), например, сам сервис dApp. Это и есть сценарий газ-спонсорства: кому-то другому выгодно, чтобы ваша транзакция произошла, и он оплачивает комиссию за включение вашей подписи и данных в блок.

Шаг 3: Выполнение внутри EVM (On-Chain)
Транзакция-оболочка попадает в инвокер-контракт. Далее внутри EVM происходят магические действия новых опкодов:

  1. AUTH: Этот опкод верифицирует присланную пользовательскую подпись. Он проверяет ECDSA-подпись, раскодирует переданные параметры (nonce, срок действия, адрес инвокера) и, если всё корректно, устанавливает в контексте выполнения EVM специальные переменные: msg.sender становится адресом пользовательского EOA, а tx.origin — адресом инвокера. Это критически важный момент: для всех последующих вызовов в рамках этой операции источником считается сам пользователь.

  2. AUTHCALL: После успешной аутентификации инвокер использует этот опкод для совершения целевого вызова. Он указывает адрес контракта, с которым нужно взаимодействовать (например, Uniswap Router), значение (value) и калдата (calldata — encoded вызов функции). EVM выполняет этот вызов, но от имени пользовательского EOA. Это значит, что контракт Uniswap будет уверен, что к нему обращается непосредственно владелец кошелька, и проверит его балансы и allowance соответственно.

Шаг 4: Завершение операции
После выполнения AUTHCALL контекст сбрасывается. Делегирование заканчивается. Инвокер больше не может совершать действия от имени пользователя без новой, отдельно подписанной авторизации.

Практические применения и сценарии использования EIP-3074

Техническая красота EIP-3074 раскрывается в конкретных кейсах, которые меняют пользовательский опыт в Web3.

1. Спонсирование комиссий (Gas Sponsorship)

Проблема: Новый пользователь пришёл в dApp, у него есть USDT, но нет ETH для газа. Он не может совершить свою первую транзакцию.
Решение с EIP-3074: dApp или проект выступает спонсором. Пользователь подписывает off-chain сообщение, в котором говорит: «Хочу свапнуть 100 USDT на ETH через инвокер X». Эту подпись и данные о свопе забирает спонсор (relayer), упаковывает в свою транзакцию, оплачивает газ и отправляет в сеть. Инвокер, получив подпись (AUTH), выполняет своп от имени пользователя (AUTHCALL). Пользователь получает ETH, а спонсор может быть компенсирован, например, небольшим бонусом из суммы свопа прямо в рамках той же операции.

2. Пакетные (Batch) транзакции и сложная логика

Проблема: Для участия в сложном DeFi-стратегии (например, обеспечить залог, взнуть кредит, купить токен и добавить в LP) нужно последовательно подписать и отправить 4-5 транзакций, платя за газ каждый раз и рискуя проскальзыванием между ними.
Решение с EIP-3074: Разработчик создаёт инвокер со сложной логикой, выполняющей все эти шаги атомарно (в одной транзакции). Пользователь подписывает одно off-chain сообщение, разрешающее инвокеру выполнить всю эту цепочку от его имени. Результат: один газ, одно подтверждение, атомарное выполнение (либо всё успешно, либо состояние откатывается).

3. Улучшенное управление доступом и безопасностью

Проблема: Ключ от EOA — это абсолютная власть. Его компрометация ведёт к мгновенной потере средств.
Решение с EIP-3074: Хотя EIP-3074 не заменяет полноценный социальный recovery, он позволяет создать инвокеры с ограничительной логикой. Например, можно создать «безопасный» инвокер, который разрешает тратить не более 1 ETH в день с вашего адреса, или который требует задержку в 24 часа перед выводом крупных сумм. Вы делегируете операции через этот инвокер для повседневных действий, сохраняя основной ключ в холодном хранилище для критически важных операций. Это добавляет уровень безопасности без смены адреса.

4. Подписка на сервисы и автоматические платежи

Проблема: Невозможно настроить автоматический ежемесячный платеж в ETH или ERC-20 токенах со своего EOA, как это делается с банковского счёта.
Решение с EIP-3074: Сервис может предоставить инвокер для подписки. Пользователь подписывает авторизацию, которая говорит: «Разрешаю инвокеру Y раз в 30 дней переводить 10 DAI с моего счёта на адрес Z, но не более 12 раз». Далее сервис может автоматически, без участия пользователя, инициировать эти выплаты, предоставляя свежую подпись (если она реализована с поддержкой какого-либо механизма обновления) или используя одноразовую подпись с многоразовым лимитом.

Технические детали и нюансы реализации

Роль Nonce в авторизации

Каждая авторизационная подпись в EIP-3074 включает уникальный nonce. Это не nonce аккаунта Ethereum, а отдельный nonce, управляемый контрактами инвокеров. Он предотвращает повторное использование (replay) подписи. Инвокер обязан проверять и инкрементировать этот nonce при каждом вызове AUTH. Это защищает пользователя от злоумышленников, которые могут перехватить подпись и попытаться выполнить операцию дважды.

Установка лимитов и контроль

Подпись делегирования может (и должна) включать в себя строгие лимиты:

  • Верхний предел газа (gasLimit): Пользователь может ограничить, сколько газа разрешает использовать инвокеру, защищая себя от неэффективных или злонамеренных контрактов.

  • Срок действия (expiry): Временная метка, после которой подпись становится недействительной.

  • Целевой контракт: Можно явно указать, с каким контрактом разрешено взаимодействие, запрещая вызовы других адресов.

  • Максимальное значение (value): Лимит на количество нативного ETH, которое можно передать в рамках вызова.

Разделение ответственности: Инвокер vs. Целевой контракт

Важно понимать разделение: инвокер — это посредник, который получает право на одно действие. Целевой контракт (например, Aave или Uniswap) — это конечный пункт, куда направляется вызов. Целевой контракт не знает о существовании EIP-3074. Для него вызов, инициированный через AUTHCALL, выглядит абсолютно идентичным прямому вызову от EOA. Это огромное преимущество для внедрения, так как не требует модификации тысяч существующих dApp.

Сравнение с ERC-4337 (Аккаунт-абстракция)

EIP-3074 часто сравнивают с другим ключевым предложением — ERC-4337 (Аккаунт-абстракция через смарт-контрактные кошельки). Это разные, но в чём-то дополняющие друг друга подходы.

Параметр EIP-3074 (Authcall) ERC-4337 (Смарт-контрактный кошелёк)
Тип аккаунта Внешний счёт (EOA). Адрес остаётся прежним. Смарт-контракт. Создаётся новый адрес.
Изменение протокола Требует хардфорка (новые опкоды). Не требует, работает на уровне приложения.
Безопасность Зависит от безопасности инвокера и подписанных лимитов. Ключ EOA остаётся единой точкой отказа. Программируемая безопасность: мультисиг, задержки, recovery. Ключ может быть заменён.
Главное преимущество Мгновенная функциональность для существующих EOA без миграции. Полная, постоянная и настраиваемая функциональность нового аккаунта.
Идеальный пользователь Владельцы существующих EOA, которые хотят получить возможности контрактных кошельков для конкретных операций. Новые пользователи или те, кто готов мигрировать на новый адрес ради долгосрочной безопасности и удобства.

По сути, EIP-3074 — это «on-ramp» к функциям аккаунт-абстракции для миллионов существующих кошельков, а ERC-4337 — это фундамент для новых, нативных смарт-аккаунтов будущего.

Риски, критика и проблемы безопасности

Несмотря на потенциал, EIP-3074 вызывает серьёзные дискуссии в сообществе, в основном вокруг вопросов безопасности.

1. Риск злонамеренных инвокеров (Malicious Invokers)

Это центральный риск. Если пользователь подпишет авторизацию для плохого инвокера, тот может, в рамках установленных лимитов, опустошить его счёт. Например, инвокер может иметь скрытую логику, которая вместо обещанного свопа отправляет все средства на адрес злоумышленника. Митагация: Потребуется экосистема проверенных, аудированных и, возможно, верифицированных (например, через репутационные системы) инвокеров. Браузерные кошельки (MetaMask) будут, вероятно, предупреждать пользователей о взаимодействии с неизвестными инвокерами и требовать явного согласия.

2. Усложнение пользовательского опыта

Процесс off-chain подписи, который не является транзакцией, может запутать пользователей. Они привыкли, что подпись в MetaMask — это отправка средств. В случае с EIP-3074, подпись — это лишь разрешение, которое кто-то другой может использовать. Это требует переосмысления UX и мощных образовательных материалов.

3. Централизация вокруг ретрансляторов (Relayers)

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

4. Временность решения

Некоторые критики рассматривают EIP-3074 как «костыль» на пути к полноценной аккаунт-абстракции (ERC-4337). Внедрение EIP-3074 требует хардфорка — дорогого и сложного мероприятия. Есть опасение, что это отвлечёт ресурсы и внимание от развития ERC-4337.

5. Проблема «tx.origin»

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

Будущее EIP-3074 и путь к внедрению

На момент написания статьи EIP-3074 находится в стадии обсуждения и, возможно, будет включён в один из будущих хардфорков Ethereum (например, в Pectra). Его судьба тесно связана с развитием ERC-4337.

Наиболее вероятный сценарий — симбиоз. EIP-3074 может стать мощным инструментом для массового вовлечения пользователей существующих EOA в мир спонсирования газа и пакетных транзакций, создав тем самым спрос на более продвинутые функции. Увидев преимущества, многие из этих пользователей в итоге могут перейти на полноценные смарт-контрактные кошельки ERC-4337 для постоянного использования.

Разработчики кошельков и dApp уже активно экспериментируют с прототипами. Ключевым этапом будет создание стандартов для инвокеров и библиотек для безопасной работы с off-chain подписями, чтобы минимизировать риски для конечных пользователей.

Заключение

EIP-3074 (Authcall) — это не просто техническое обновление, а стратегический мост между прошлым и будущим управления аккаунтами в Ethereum. Оно признаёт ценность и инерцию миллионов существующих EOA-адресов и предлагает им эволюционный путь, а не революционный разрыв. Давая возможность делегировать контроль над транзакциями смарт-контрактам без смены адреса, оно открывает двери для радикального улучшения пользовательского опыта: бесплатных транзакций, сложных финансовых операций в один клик и новых моделей безопасности.

Однако этот путь сопряжён с новыми рисками, главный из которых — ответственность за выбор доверенного инвокера. Успех EIP-3074 будет зависеть не только от его технической реализации в протоколе, но и от создания здоровой, прозрачной и безопасной экосистемы вокруг него. Если сообществу удастся решить эти задачи, Authcall станет важнейшим шагом к тому, чтобы блокчейн Ethereum стал по-настоящему доступным и удобным для следующего миллиарда пользователей.