UserOperation (UserOp) в Ethereum: транзакция нового типа для Account Abstraction

UserOperation (UserOp) — это структура данных, которая описывает «транзакцию нового типа» в модели Account Abstraction (AA) по стандарту ERC-4337. Вместо того чтобы пользователь отправлял обычную L1-транзакцию от EOA-адреса, он формирует и подписывает UserOperation, а специальные узлы-бандлеры собирают такие операции в пакет и отправляют в EntryPoint-контракт в сети Ethereum.

По сути, UserOperation — это «абстрактная транзакция пользователя», которая:

  • не привязана жёстко к формату EOA-подписи;
  • может оплачиваться через paymaster (в токенах, сабсидиях и т.д.);
  • исполняется внутри логики аккаунта-контракта, а не EOA-адреса.

UserOperation (UserOp) в Ethereum: транзакция нового типа для Account Abstraction

Зачем нужен формат UserOperation

Классическая модель Ethereum:

  • у пользователя есть EOA (Externally Owned Account) с приватным ключом;
  • транзакции L1 содержат ограниченный набор полей (nonce, gas, to, value, data, signature);
  • логика подписи и оплаты газа «вшита» в протокол.

В Account Abstraction:

  • аккаунт пользователя — смарт-контракт, который сам определяет:
    • как проверять подпись/авторизацию;
    • как и в чём оплачивать газ;
    • какие дополнительные проверки и правила применять;
  • поэтому нужно более гибкое представление «запроса пользователя», чем стандартная L1-транзакция.

UserOperation решает эту задачу:

  • задаёт универсальный формат для запросов от аккаунтов-контрактов;
  • позволяет бандлерам и EntryPoint-контракту стандартизованно обрабатывать эти запросы;
  • отделяет «транспорт» (L1-транзакция бандлера) от «намерения пользователя» (UserOp).

Структура UserOperation на высоком уровне

Конкретные поля стандарта могут обновляться, но на концептуальном уровне UserOperation включает:

  • данные о том, какой аккаунт-контракт нужно дернуть (адрес, initCode при создании);
  • подпись/авторизацию в формате, который понимает сам аккаунт;
  • параметры, связанные с газом и оплатой:
    • лимиты газа на проверку и выполнение;
    • лимиты на взаимодействие с paymaster;
    • максимальные цены газа, которые пользователь готов платить;
  • произвольные данные вызова (callData), описывающие действие (перевод, вызов функции, батч операций).

Важно: интерпретация полей зависит от логики аккаунта-контракта и EntryPoint-контракта, а не от встроенных правил протокола, как в обычной L1-транзакции.

Как UserOperation проходит через сеть ERC-4337

Упрощённый жизненный цикл:

  • Пользовательский кошелёк AA формирует UserOperation:
    • заполняет поля (адрес аккаунта, callData, лимиты газа, указание paymaster и др.);
    • получает подпись (не обязательно ECDSA, это может быть MPC, WebAuthn-подпись и т.п., главное — чтобы аккаунт умел её проверить).
  • UserOperation отправляется не напрямую в mempool Ethereum, а в специализированный mempool UserOp:
    • его поддерживают бандлеры (узлы, которые участвуют в ERC-4337-экосистеме);
    • кошелёк может отправлять UserOp на несколько эндпоинтов (RPC, бандлер-провайдеров).
  • Бандлер:
    • набирает пакет (bundle) из множества UserOperation;
    • формирует обычную L1-транзакцию, которая вызывает EntryPoint-контракт с этим пакетом;
    • указывает свои ожидания по оплате газа.
  • EntryPoint-контракт:
    • последовательно проверяет операции (через validateUserOp);
    • вызывает аккаунты-контракты (через execute/callData);
    • взаимодействует с paymaster’ами, если они заданы;
    • обеспечивает атомарность или корректную обработку ошибок в пакете.

Для пользователя это выглядит как «обычная отправка транзакции» из кошелька, но под капотом работает отдельная инфраструктура UserOperation и бандлеров.

Главное отличие UserOperation от обычной транзакции

Ключевые различия:

  • Источник и формат подписи.

Подпись в UserOperation интерпретируется аккаунтом-контрактом. Это может быть:

  • мультиподпись;
  • социальное восстановление;
  • аппаратные устройства;
  • кастомные схемы (например, лимиты/guard-логика).
  • Оплата газа.

Газ может оплачивать:

  • сам аккаунт-контракт (как EOA-аналог);
  • или внешний paymaster, в том числе:
    • токенами (stablecoins и др.);
    • субсидируемыми схемами (рекламные кампании, «gasless» UX);
    • комбинированными моделями.
  • Создание и выполнение аккаунта.

UserOperation может одновременно:

  • создавать аккаунт-контракт (через initCode);
  • и выполнять действие от его имени (перевод, взаимодействие с dApp).
  • Гибкость логики.

Верификация подписи и авторизация не жёстко привязаны к secp256k1, chainId и стандартному формату транзакции — всё решает логика аккаунта.

Это делает UserOperation центральным элементом AA-кошельков: любое действие пользователя формализуется как UserOp.

UserOperation, paymaster и бандлеры

Вокруг формата UserOperation строится инфраструктура:

  • Бандлеры (bundlers).

Сервисы, которые мониторят UserOp-мемпул, собирают операции в bundle и отправляют их в сеть Ethereum через EntryPoint:

  • конкурируют за доход от комиссий;
  • могут «специализироваться» по типам UserOp (определённые dApp, paymaster’ы и т.п.).
  • Paymaster’ы.

Контракты, которые берут на себя оплату газа за UserOperation:

  • проверяют условия (баланс пользователя в токене, whitelists, лимиты);
  • возмещают бандлеру затраты на L1-газ;
  • могут реализовывать сложные бизнес-схемы (подписки, спонсируемые транзакции).

UserOperation содержит ссылки и данные для обоих: бандлер по полям UserOp решает, насколько ему выгодно включить операцию в пакет, а paymaster — оплачивать ли её газ.

Какие сценарии открывает UserOperation

Формат UserOperation и AA-кошельки позволяют:

  • Абстрагировать ключи и подписи.

Пользователь может менять «механизм авторизации» без смены адреса:

  • классический private key → аппаратный ключ → социальное восстановление и т.п.
  • Оплачивать газ токенами.

Gas in, USDT out — кошельки могут прятать ETH из UX, а пользователи — платить комиссиями в понятных стейблкоинах.

  • Батчировать и сценаризировать действия.

Несколько действий dApp можно упаковать в одну UserOperation и реализовать «однокнопочный» UX.

  • Делать «умные аккаунты» дефолтными.

Нет жёсткого деления на EOA и контракт-аккаунт: новые пользователи с самого начала могут жить в модели AA и UserOp.

Для разработчиков важно учитывать это при проектировании UX и контрактов, чтобы использовать преимущества UserOperation, а не только «поддерживать стандарт галочкой».

Связанные термины и стандарты

UserOperation тесно связан с несколькими понятиями:

  • Account Abstraction — общая идея абстракции аккаунтов и отделения логики подписи/оплаты от протокола.
  • ERC-4337 — стандарт, описывающий архитектуру AA на базе EntryPoint-контракта, UserOperation, бандлеров и paymaster’ов.
  • EntryPoint-контракт — «хаб» обработки UserOperation в сети; именно он получает bundles от бандлеров и вызывает аккаунты-контракты.
  • Paymaster — сущность, оплачивающая газ за UserOp по определённым правилам.
  • Бандлеры — участники сети ERC-4337, превращающие множество UserOp в одну L1-транзакцию.

UserOperation — «язык общения» между клиентами AA-кошельков и этой инфраструктурой.

См. также

Task Runner