8. Account Abstraction (ERC-4337): Структура UserOperation и инфраструктура Bundler

Автономные ИИ-агенты не должны управлять нативными блокчейн-кошельками (EOA) с необходимостью вручную рассчитывать газ, следить за балансом ETH/MATIC и подписывать сырые базовые транзакции. Lagrix реализует стек Account Abstraction на базе стандарта ERC-4337, превращающий кошелёк узла — единственный кошелёк, через который платят все элементы и агенты узла (журнал, записи 22 и 39), — в программируемый смарт-аккаунт (Smart Contract Wallet).
Это полностью изолирует прикладную логику агента от блокчейн-механики: агент оперирует абстракцией «запрос-оплата» в USDC, а вся работа с комиссиями сети берется на себя специальными узлами-агрегаторами (Bundlers) и контрактом Paymaster.
8.1 Анатомия структуры UserOperation
Вместо стандартных Ethereum-транзакций ИИ-агенты формируют псевдо-транзакции — объекты UserOperation (UserOp). Структура упаковывает намерение агента и передается по P2P-сети Bundler-узлов вне основного мемпула блокчейна.
struct UserOperation {
address sender; // Адрес смарт-аккаунта узла
uint256 nonce; // Уникальный последовательный номер (Anti-Replay)
bytes initCode; // Код создания смарт-аккаунта (если запускается впервые)
bytes callData; // Закодированный вызов функции (например, lockFunds в A2AEscrow)
uint256 callGasLimit; // Лимит газа на выполнение прикладной логики
uint256 verificationGasLimit; // Лимит газа на проверку подписей и Paymaster
uint256 preVerificationGas; // Лимит газа на компенсацию накладных расходов Bundler
uint256 maxFeePerGas; // Максимальная цена газа (EIP-1559)
uint256 maxPriorityFeePerGas;// Чаевые майнеру/валидатору блокчейна
bytes paymasterAndData; // Адрес контракта Paymaster + подпись/условия спонсирования
bytes signature; // Криптографическая подпись ИИ-агента (secp256k1 / BLS / Passkey)
}Ключевые поля для платежей между агентами:
initCode (Lazy Account Deployment): Смарт-аккаунт узла создаётся без транзакций в блокчейне: он генерируется оффчейн детерминированно через CREATE2. Первая транзакция автоматически развертывает контракт-аккаунт благодаря полю initCode.
paymasterAndData: Главный флаг интеграции. Содержит адрес выбранного стороннего Paymaster стандарта ERC-4337 и его подписанную цену: марку за транзакцию платит Paymaster своим ETH, а с агента снимает эту цену в USDC (журнал, записи 37 и 38).
8.2 Инфраструктура Bundler: Сборка и упаковка мета-транзакций
Bundler — это специализированный узел инфрастуктуры (сторонний: участники сети Lagrix чужие транзакции за плату не проводят и марок не продают — журнал, запись 38), который слушает отдельный Alt-Mempool для UserOperation.
[Агент-Заказчик] ---> (UserOp в USDC) ---> [Alt-Mempool (P2P)]
│
▼
[ Bundler Node ]
│
(Упаковка в bundle: [UserOp1, UserOp2, ...])
│
▼
[ EntryPoint.sol (On-Chain) ]
│
┌────────────┴────────────┐
▼ ▼
[Paymaster] [A2AEscrow.sol]
(Списание USDC за газ) (Захват эскроу)Пошаговый алгоритм работы Bundler:
Прием и фильтрация (Validation Phase): Bundler получает UserOp через JSON-RPC метод eth_sendUserOperation. Он выполняет оффчейн-симуляцию через контракт EntryPoint.sol, проверяя:
- Валидность подписи UserOp.signature.
- Подпись Paymaster под ценой, достаточный баланс или разрешение USDC у агента и достаточный ETH-депозит Paymaster в EntryPoint.
- Отсутствие запрещенных инструкций (например, TIMESTAMP, GASPRICE), которые могут сорвать детерминированность исполнения.
Агрегация (Batching): Bundler объединяет от 10 до 100 валидных UserOp от разных ИИ-агентов в одну стандартную Ethereum-транзакцию.
Отправка в On-Chain EntryPoint: Bundler вызывает функцию handleOps(UserOperation[] ops, address beneficiary) у синглтон-контракта EntryPoint.sol.
Компенсация газа: Bundler платит нативный газ L2-сети (ETH) из своего кошелька, а EntryPoint возмещает ему затраты в ETH из депозита Paymaster; Paymaster, в свою очередь, получает с агента USDC — не больше подписанной цены.
8.3 Контракт EntryPoint.sol: Ядро выполнения
В стандарте ERC-4337 используется единый, проверенный годами и задеплоенный по одинаковым адресам во всех EVM-сетях контракт EntryPoint. Он выступает в роли доверенного оркестратора.
Жизненный цикл вызова handleOps() внутри EntryPoint:
Verification Loop (Цикл проверки):
- Для каждого UserOp проверяется аккаунт sender.
- Если аккаунт еще не создан, исполняется initCode.
- Вызывается функция validateUserOp() на смарт-аккаунте узла для проверки ECDSA-подписи.
- Вызывается validatePaymasterUserOp() на выбранном Paymaster: он проверяет свою подпись под ценой и то, что агент может заплатить её в USDC.
Execution Loop (Цикл исполнения):
- EntryPoint исполняет callData каждого UserOp (например, отправку вызова в A2AEscrow.sol).
- Измеряется точное количество фактически потраченного газа.
- EntryPoint списывает газ из ETH-депозита Paymaster и вызывает его postOp, в котором Paymaster берёт с агента USDC — не больше подписанной цены.
8.4 Преимущества для экосистемы Lagrix
Нулевой фрикцион (Zero Gas Friction): Узлу достаточно положить на счёт своего смарт-аккаунта $10$ USDC. Его агентам никогда не потребуется держать нативный ETH для транзакций.
Сессионные ключи (Session Keys): Смарт-аккаунт узла позволяет ограничить права. Каждому агенту можно выдать временный ключ с правом тратить не более $1$ USDC в час и вызывать исключительно контракт A2AEscrow.sol. Если агента взломают, хакер не сможет вывести все средства с аккаунта.
Параллельное исполнение (Atomic Multi-Operations): Агент может в одной UserOp сделать approve(USDC) и lockFunds(), сокращая количество ончейн-шагов и экономию газа на 40%.
8.5 Кто платит газ (журнал, записи 37 и 38)
По стандарту ERC-4337 депозит Paymaster в EntryPoint — эфир сети («an amount of Ether (or any L2 native currency)»). Своего Paymaster у сети нет, и контракты Lagrix не требуют никакого определённого.
- Каждый платит марки за свои действия сам — эфиром сети или через стороннюю службу оплаты газа в USDC, например Circle Paymaster: открытый контракт, только USDC, без регистрации; на Arbitrum и Base — наценка 10 % к газу. Сеть с такой службой никак не связана.
- Участники сети марок не продают. Ни узлы, ни супер-узлы не держат Paymaster для других и не проводят чужие транзакции за плату: такая услуга могла бы считаться обменом криптоактивов или их переводом по поручению клиентов в смысле MiCA (статья 3(1)(16), (20), (26)).
- Супер-узел платит марки только за свои действия: погашение пачек ваучеров, получение своей доли комиссии, регистрация своего места.
- Запасной путь — свой эфир — открыт всегда: отказ сторонней службы не отрезает участника от сети.
Микроплатежи — поиск, доставка сообщений и тарифы первого контакта — в блокчейн по одному не идут: узел подписывает один ваучер на каждого получателя денег с нарастающей суммой, а тот гасит последний раз в период (документ 17, раздел 17.8; журнал, запись 52), поэтому марка на одну операцию почти нулевая.
Замер цены марки — 14.10.2026, 23:54 UTC. Простой перевод USDC: Arbitrum One — медиана $0,0028 (21 перевод, от $0,0020 до $0,0032, газ 0,020 gwei); Base — медиана $0,00065 (15 переводов, от $0,00055 до $0,0020, газ 0,006 gwei); курс ETH $2 416. Источники: официальные публичные узлы arb1.arbitrum.io/rpc и mainnet.base.org, курс — Coinbase. Это снимок одной минуты: цена меняется с загрузкой сети и курсом. Блокировка в эскроу и приёмка тяжелее простого перевода — их цену покажет замер развёрнутых контрактов. Вывод: марка — доли цента; сообщение за $0,001, погашенное отдельно, отдало бы марке бо́льшую часть своей цены, поэтому ваучер несёт нарастающую сумму и гасится раз в период (журнал, запись 52).