> For the complete documentation index, see [llms.txt](https://docs.qr.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.qr.xyz/qr-ru/pod-kapotom/erc-4337.md).

# Подробный разбор ERC-4337

> Стандарт Account Abstraction — технология, которая делает криптовалюту простой.

***

## Что такое ERC-4337?

**ERC-4337** — это стандарт Ethereum для **абстракции аккаунта**. Он позволяет использовать «умные кошельки» (Smart Accounts) с расширенной функциональностью без изменений самого протокола Ethereum.

До ERC-4337 кошельки были простыми — ключ подписывает транзакцию, транзакция оплачивается в ETH. С ERC-4337 кошелёк становится **программируемым**.

***

## Ключевые компоненты

### UserOperation

Вместо обычной транзакции пользователь создаёт **UserOperation** — описание того, что он хочет сделать:

```
UserOperation {
  sender         адрес Smart Account
  nonce          номер операции
  initCode       код для создания SA (если ещё не развернут)
  callData       что выполнить (перевод, обмен и т. д.)

  callGasLimit           лимит газа для выполнения
  verificationGasLimit   лимит газа для проверки
  preVerificationGas     газ до проверки
  maxFeePerGas           максимальная цена газа
  maxPriorityFeePerGas   приоритетная комиссия

  paymasterAndData   данные Paymaster (если спонсируется)
  подпись владельца
}
```

### EntryPoint

Раздел **единую точку входа** — смарт-контракт, который:

1. Получает UserOperations от Bundler
2. Проверяет подпись владельца
3. Выполняет операцию через Smart Account
4. Рассчитывается за газ с Paymaster

EntryPoint — это один и тот же контракт во всех EVM-сетях (стандартизированный адрес).

### Bundler

Раздел **сервис пакетирования** — собирает UserOperations от пользователей и отправляет их в блокчейн как обычную транзакцию в EntryPoint.

### Пеймастер

Раздел **спонсор газа** — смарт-контракт, который может оплатить газ за пользователя. Подписывает разрешение в `paymasterAndData`, а EntryPoint списывает с него газ.

***

## Поток транзакции

```
┌──────────┐     ┌──────────┐     ┌──────────┐     ┌──────────┐
│          │     │          │     │          │     │          │
│  Кошелёк │────▶│ Paymaster│────▶│ Bundler  │────▶│EntryPoint│
│  App     │     │          │     │          │     │(on-chain)│
│          │     │          │     │          │     │          │
└──────────┘     └──────────┘     └──────────┘     └──────────┘
                                                        │
  1. Создать        2. Получить газ +     3. Отправить в    4. Проверить
     UserOp          paymaster       mempool         и выполнить
                     данные
```

### Подробно:

1. **Приложение кошелька** создаёт UserOperation с `callData` (что делать) и `nonce`
2. **Пеймастер** добавляет данные о газе и свою подпись (`paymasterAndData`)
3. Приложение кошелька **подписывает** хеш UserOp с помощью ключа EOA
4. **Bundler** принимает подписанный UserOp и отправляет его в блокчейн
5. **EntryPoint** проверяет подпись → выполняет callData → списывает газ с Paymaster

***

## Ленивая развертка

Smart Account не нужно создавать заранее. При первой транзакции, `initCode` в UserOperation содержит инструкцию развертывания:

```
Первая транзакция:
  initCode = [factory.createAccount(owner, salt)]  ← развернуть SA
  callData = [transfer(to, amount)]                ← и сразу выполнить перевод
```

Bundler и EntryPoint обрабатывают оба действия в одной транзакции.

***

## CREATE2 — детерминированный адрес

Адрес Smart Account вычисляется **математически**, до создания:

```
SA_address = CREATE2(factory, keccak256(owner + salt))
```

Одинаковые параметры = одинаковый адрес в **любой** EVM-сети. Поэтому адрес вашего SA одинаков в Base, Arbitrum, Polygon и всех остальных.

***

## Пакетные операции

Smart Account может выполнять **несколько вызовов** в одной UserOperation:

```
UserOperation.callData = executeBatch([
  approve(USDC, spender, amount),
  swap(USDC, ETH, amount),
  collectFee(treasury, feeAmount)
])
```

Три операции — одна подпись, одна транзакция, одна оплата газа.

***

## Преимущества ERC-4337

| Свойство                          | Обычный кошелёк (EOA) |        Smart Account (ERC-4337)       |
| --------------------------------- | :-------------------: | :-----------------------------------: |
| Оплата газа                       |       Только ETH      |        ETH, USDC или бесплатно        |
| Пакетные операции                 |          Нет          |                   Да                  |
| Пользовательская логика           |          Нет          |                   Да                  |
| Восстановление                    |   Только seed-фраза   | Социальное восстановление (в будущем) |
| Один и тот же адрес во всех сетях |           Да          |              Да (CREATE2)             |
| Спонсирование                     |          Нет          |               Пеймастер               |
