Lagrix

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

4 мин чтения
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).