UserOperation (UserOp) — это структура данных, которая описывает «транзакцию нового типа» в модели Account Abstraction (AA) по стандарту ERC-4337. Вместо того чтобы пользователь отправлял обычную L1-транзакцию от EOA-адреса, он формирует и подписывает UserOperation, а специальные узлы-бандлеры собирают такие операции в пакет и отправляют в EntryPoint-контракт в сети Ethereum.
По сути, UserOperation — это «абстрактная транзакция пользователя», которая:
- не привязана жёстко к формату EOA-подписи;
- может оплачиваться через paymaster (в токенах, сабсидиях и т.д.);
- исполняется внутри логики аккаунта-контракта, а не EOA-адреса.
Зачем нужен формат 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-кошельков и этой инфраструктурой.
