Что такое абстракция аккаунта (ERC-4337)?

·7 мин. чтения·Автор: SSP Editorial Team
Схема смарт-контрактного кошелька с UserOperation, проходящей через bundler

Если вы хоть немного следили за Ethereum в последние годы, вы наверняка слышали выражение «account abstraction» — обычно в паре с кодовым именем ERC-4337. Звучит академично, но идея за этим — вполне практичная: ваш кошелёк Ethereum должен вести себя как небольшая программа, которую можно настраивать, а не как один приватный ключ с интерфейсом «бери или уходи».

В этой статье мы объясним, что на самом деле меняет ERC-4337, четыре новых жаргонных понятия, которые он вводит (UserOperation, EntryPoint, bundler, paymaster), что он даёт на практике и как он соотносится с собственным подходом мультиподписи у SSP. Никаких предварительных знаний о смарт-контрактах не требуется — нужно лишь любопытство по поводу того, как криптокошельки устроены изнутри.

Проблема, которую ERC-4337 призван решить

До абстракции аккаунта каждый кошелёк Ethereum был так называемой externally-owned account — EOA. EOA устроен предельно просто: один приватный ключ контролирует один адрес, и любое действие, выполняемое этим адресом, должно быть подписано именно этим ключом.

У такой простоты — острые углы:

  • Никакого восстановления. Потеряли ключ — потеряли средства. Нет ссылки «забыл пароль», нет доверенного контакта, который мог бы за вас поручиться, нет разблокировки по таймеру. Ключ — это и есть аккаунт.
  • Никакого батчинга. Хотите одобрить токен и сразу его обменять? Это две отдельные транзакции, две отдельные подписи, две отдельные оплаты gas. Нет способа сказать «сделай их вместе или не делай вовсе».
  • Никакой нативной мультиподписи. Если вы хотели нескольких подписантов, нужно было развернуть контракт (например, Safe, ранее Gnosis Safe), а затем заставить EOA отправлять транзакции в этот контракт. Контракт был мультиподписным, но аккаунт, взаимодействующий с миром, всё равно оставался EOA с одним ключом под капотом. Пользовательский опыт всегда был второсортным по сравнению с обычным кошельком.
  • Gas всегда оплачивается в ETH и всегда отправителем. Никакой dApp не мог оплатить ваш gas. Никакой оплаты gas в USDC. Без исключений.

Разработчики годами обходили эти ограничения с помощью замысловатых контрактных паттернов. ERC-4337 наконец дал им стандартизированный выход — не требуя при этом никаких изменений в базовом протоколе Ethereum.

Что вводит ERC-4337

ERC-4337 не меняет то, как сам Ethereum работает на уровне протокола — в этом и заключается его остроумный приём. Вместо этого он определяет четыре новые роли, которые вместе симулируют «смарт-контрактные кошельки как полноправные граждане» целиком в пользовательском пространстве. Стоит вам узнать эти четыре слова — и весь стандарт становится понятен.

UserOperation. Это новый объект «подписанного намерения», который для AA-кошелька заменяет необработанную транзакцию. Там, где EOA создаёт транзакцию, подписанную своим единственным ключом, AA-кошелёк создаёт UserOperation — структурированный запрос, который говорит: «этот аккаунт хочет сделать X, вот авторизация, вот как за это платить». UserOperation может говорить: «перевести 100 USDC Алисе, авторизовано подписями с этих двух устройств, а gas покроет dApp».

Контракт EntryPoint. Единый, канонический, проаудированный смарт-контракт, развёрнутый в Ethereum, который умеет принимать UserOperations, проверять их по правилам того AA-кошелька, из которого они пришли, и выполнять результирующие действия. Каждый AA-кошелёк общается с одним и тем же EntryPoint — именно это и делает стандарт стандартом.

Bundler. Внешний (off-chain) участник (можно представить его как специализированный вид ретранслятора), который слушает UserOperations в публичной mempool, объединяет несколько из них в пакет и отправляет этот пакет в EntryPoint одной транзакцией Ethereum. Bundler платит реальный gas сети и получает возмещение от UserOperations, которые он объединил.

Paymaster. Опциональный контракт, который может взять на себя оплату gas от имени пользователя. Paymaster — это то, что делает возможным «dApp платит за ваш gas» или «оплата gas в USDC вместо ETH». Без paymaster AA-кошелёк пользователя платит свой gas сам; с paymaster — за дело берётся он.

Это и есть весь словарь. Всё остальное — лишь украшения.

Что абстракция аккаунта даёт на практике

Четыре части выше звучат абстрактно, пока вы не увидите, что они открывают:

  • Спонсирование gas. dApp может оплачивать gas новым пользователям, чтобы им не приходилось обзаводиться ETH до того, как что-то сделать. Это огромная помощь для онбординга — новые пользователи могут зарегистрироваться, заминтить NFT или совершить первую сделку, не проходя сначала через шлюз fiat→ETH. Argent, Safe и ZeroDev сегодня поддерживают сценарии спонсирования.
  • Социальное восстановление. Вы можете настроить свой кошелёк так, чтобы при потере основного ключа кворум «опекунов» (друзья, семья, аппаратное устройство в сейфе) мог поменять ключ от вашего имени. Логика восстановления живёт в вашем контракте кошелька — никакой централизованный кастодиан не держит ваши деньги, но и не теряете вы их безвозвратно при отказе одного устройства.
  • Session keys. dApp может попросить у вашего кошелька ключ с ограниченными правами, привязанный к одному приложению и одному набору действий, действительный несколько часов. Вы один раз подписываете основным ключом, чтобы выдать сессию, и затем dApp может действовать внутри своей песочницы, не запрашивая подтверждение на каждом клике. Игровые студии обожают этот паттерн.
  • Батчинг действий. «Одобри этот токен И обменяй его» превращается в одну подпись, одну UserOperation, одно исполнение. Если любой шаг падает — весь пакет откатывается; больше никаких полу-выполненных транзакций, застрявших в несогласованном состоянии.
  • Кастомные схемы подписи. Хотите кошелёк, использующий passkeys, аппаратный анклав или пороговую схему 2-of-3? Логика проверки живёт в контракте кошелька, поэтому вы можете использовать любую криптографию, какую захотите, а не только стандартную для EOA ECDSA на secp256k1.

Как это соотносится с моделью мультиподписи SSP

SSP Wallet идёт другим путём к во многом тем же целям. SSP использует мультиподпись 2-of-2 BIP48 — два независимых ключа, на двух независимых устройствах, и оба необходимы, чтобы подписать любую транзакцию. ERC-4337 и BIP48-мультиподпись — это разные механизмы, атакующие общую проблему: ни одно отдельное устройство не должно быть единой точкой отказа.

Несколько честных сравнений:

  • Что у них общего. Оба устраняют режим отказа «один ключ — один шанс» классического кошелька с одной подписью. Потеряли один фактор — можете восстановиться с помощью другого. Скомпрометировали один фактор (вредоносное ПО на ноутбуке, потерянный телефон) — атакующий всё равно не сможет двигать средства в одиночку.
  • В чём они различаются. BIP48 — это стандарт мультиподписи с корнями в Bitcoin, работающий на тех блокчейнах, которые поддерживает SSP — Bitcoin, Ethereum, Litecoin и нескольких других — используя нативные мультиподписные примитивы каждой цепи. ERC-4337 существует только в Ethereum и живёт на уровне смарт-контрактов, поэтому он приносит возможности, которых нативно нет у BIP48 (спонсирование gas, session keys), но ценой охвата только Ethereum и накладных расходов на исполнение контракта.
  • Где SSP сейчас. SSP построен вокруг модели BIP48. Кошельки ERC-4337 и мультиподпись в стиле SSP — не враги, а взаимодополняющие инструменты — и в принципе ключ BIP48-мультиподписи можно было бы использовать как подписанта внутри AA-кошелька. Сейчас это не основной путь SSP, и мы предпочитаем быть честными в отношении сегодняшнего продукта, а не обещать интеграции, которые мы ещё не выпустили.

Если вы взвешивали «использовать ли мне AA-кошелёк или аппаратную мультиподпись?», честный ответ таков: они решают пересекающиеся задачи с разными компромиссами — и правильный ответ зависит от того, какие блокчейны для вас важны.

Честные компромиссы

Абстракция аккаунта — это настоящий шаг вперёд, но он не бесплатный, и кто говорит вам обратное — что-то вам продаёт.

  • Стоимость gas выше. Каждая UserOperation выполняет контрактный код в EntryPoint и в вашем контракте кошелька. Это строго больше вычислений, чем при транзакции с подписью EOA, а значит — больше gas. Бандлинг частично это амортизирует, но в расчёте на одно действие вы, как правило, заплатите больше, чем EOA.
  • Восстановление надёжно ровно настолько, насколько надёжен контракт восстановления. Социальное восстановление и схемы опекунов — это мощные функции, и в то же время — новая поверхность атаки. Баг в логике восстановления или слишком маленький набор опекунов может оказаться столь же катастрофичным, как потеря ключа EOA. Используйте проаудированные реализации кошельков.
  • Paymaster создаёт доверительные отношения. «dApp платит за gas» звучит замечательно, но это означает, что paymaster видит ваши UserOperations и в принципе может отказаться спонсировать конкретные транзакции. Это иная модель доверия, чем «ты платишь свой gas сам, никто не может тебя заблокировать».
  • Меньше боевого опыта в масштабе. EOA защищают триллионы долларов уже более десяти лет. ERC-4337 заработал в марте 2023 года и всё ещё взрослеет. Для дорогого холодного хранения консервативный ответ (аппаратный кошелёк, мультиподпись, проаудированные контракты) по-прежнему имеет более длинную проверенную историю.

Углубиться

Чтобы взглянуть со стороны SSP на то, как работает безопасность с несколькими ключами без смарт-контрактов, прочитайте Что такое мультиподпись 2-of-2?.

Для канонической технической спецификации — включая точную структуру UserOperation, интерфейс EntryPoint и обоснование каждого проектного решения — первоисточником является сам EIP: https://eips.ethereum.org/EIPS/eip-4337.

Поделиться статьёй