> 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-ja/nomi/erc-4337.md).

# ERC-4337の詳細解説

> アカウント抽象化標準 — 暗号資産をシンプルにする技術。

***

## ERC-4337 とは？

**ERC-4337** Ethereum の標準です **アカウント抽象化**。これにより、拡張機能を備えた「スマートウォレット」（Smart Accounts）が、Ethereum プロトコル自体を変更することなく利用可能になります。

ERC-4337 より前は、ウォレットはシンプルでした — 1 つの鍵がトランザクションに署名し、そのトランザクションの支払いは ETH で行われます。ERC-4337 では、ウォレットは **プログラム可能**.

***

## 主要コンポーネント

### UserOperation

通常のトランザクションの代わりに、ユーザーは **UserOperation** — やりたいことの説明です：

```
UserOperation {
  sender         Smart Account のアドレス
  nonce          操作シーケンス番号
  initCode       SA を作成するコード（未デプロイの場合）
  callData       実行内容（送金、スワップなど）

  callGasLimit           実行用ガス上限
  verificationGasLimit   検証用ガス上限
  preVerificationGas     検証前のガス
  maxFeePerGas           最大ガス価格
  maxPriorityFeePerGas   優先手数料

  paymasterAndData   ペイマスターのデータ（スポンサー付きの場合）
  signature          所有者の署名
}
```

### EntryPoint

その **単一のエントリポイント** — 次の機能を持つスマートコントラクト：

1. Bundler から UserOperation を受け取る
2. 所有者の署名を検証する
3. Smart Account を通じて操作を実行する
4. ペイマスターとガス代を精算する

EntryPoint はすべての EVM ネットワークで同じコントラクトです（標準化されたアドレス）。

### Bundler

その **パッケージングサービス** — ユーザーから UserOperation を収集し、通常のトランザクションとして EntryPoint にブロックチェーンへ送信します。

### Paymaster

その **ガススポンサー** — ユーザーのガス代を支払えるスマートコントラクト。 `paymasterAndData` に許可を署名し、EntryPoint がそこからガス代を請求します。

***

## トランザクションの流れ

```
┌──────────┐     ┌──────────┐     ┌──────────┐     ┌──────────┐
│          │     │          │     │          │     │          │
│  ウォレット│────▶│ペイマスター│────▶│バンドラー  │────▶│EntryPoint│
│  アプリ    │     │          │     │          │     │(オンチェーン)│
│          │     │          │     │          │     │          │
└──────────┘     └──────────┘     └──────────┘     └──────────┘
                                                        │
  1. 作成        2. ガス取得 +     3. mempool へ送信    4. 検証と実行
     UserOp          ペイマスター       mempool         と実行
                     データ
```

### 詳細：

1. **ウォレットアプリ** UserOperation を作成し、 `callData` （何をするか）と `nonce`
2. **Paymaster** ガスデータとその署名を追加し（`paymasterAndData`)
3. ウォレットアプリ **署名する** EOA キーで UserOp ハッシュに
4. **Bundler** 署名済みの UserOp を受け取り、ブロックチェーンに送信する
5. **EntryPoint** 署名を検証 → callData を実行 → ガス代を Paymaster に請求

***

## 遅延デプロイ

Smart Account は事前に作成する必要がありません。最初のトランザクションで、 `initCode` が含まれ、デプロイ指示を表します：

```
最初のトランザクション：
  initCode = [factory.createAccount(owner, salt)]  ← SA をデプロイ
  callData = [transfer(to, amount)]                ← そしてすぐに送金を実行
```

Bundler と EntryPoint は 2 つの処理を 1 つのトランザクションで処理します。

***

## CREATE2 — 決定論的アドレス

Smart Account のアドレスは **数学的に**、作成前に計算されます：

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

同じパラメータ = **どの** EVM ネットワークでも同じアドレス。だから SA のアドレスは Base、Arbitrum、Polygon、その他すべてで同一です。

***

## バッチ操作

Smart Account は **複数の呼び出し** を 1 つの UserOperation で実行できます：

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

3 つの操作 — 1 回の署名、1 回のトランザクション、1 回のガス支払い。

***

## ERC-4337 の利点

| 項目              | 通常のウォレット（EOA） | スマートアカウント（ERC-4337） |
| --------------- | :-----------: | :-----------------: |
| ガス支払い           |     ETH のみ    |    ETH、USDC、または無料   |
| バッチ操作           |      いいえ      |          はい         |
| カスタムロジック        |      いいえ      |          はい         |
| 復旧              |   シードフレーズのみ   |    ソーシャルリカバリー（将来）   |
| すべてのチェーンで同じアドレス |       はい      |     はい（CREATE2）     |
| スポンサーシップ        |      いいえ      |      Paymaster      |
