Ethereumのアカウント抽象化では、覚えておきたい標準アドレスが2つあります。EntryPoint v0.6のアドレスは0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789です。2024年初頭にデプロイされたEntryPoint v0.7のアドレスは0x0000000071727De22E5E9d8BAf0edAc6f37da032です。メインネット、Arbitrum、Optimism、Base、Polygon、その他大半のEVMチェーンにおけるERC-4337トランザクションは、いずれか一方のシングルトンを経由します。これらのコントラクトの役割と、その周囲にある5つの役割を理解すれば、ERC-4337の全体像がわかります。
この記事はSmart Accountsシリーズの第2回です。第1回では、EOAをデフォルトにするべきでない理由を取り上げました。今回は仕組みを詳しく見ていきます。6つの役割、UserOperation構造体、スマートアカウントからトークンをスワップするときに実際に起こること、v0.6からv0.7への変更点、ペイマスター、公開alt-mempoolとプライベートバンドラーの違い、そして想定される追加コストを解説します。
6つの役割を1つの図で見る
ERC-4337では、EOAが1つのステップで行う処理を、連携する6つの役割に分けています。Ethereumのハードフォークは必要ありませんでした。このシステムはすべて、コントラクトとオフチェーンのインフラで構成されています。
- 送信者(スマートアカウント):資産を保有し、
validateUserOpを実装するコントラクトウォレットです。やり取りするあらゆるDAppから見ると、msg.senderにあたります。例:Safe、Kernel、Biconomy Nexus、Coinbase Smart Wallet、AlchemyのLight Account。 - UserOperation:送信者が実行したい処理を記述する疑似トランザクション構造体です(実際のEthereumトランザクションではありません)。ユーザーが署名するのはトランザクションではなくUserOpです。
- バンドラー:mempoolからUserOpを集めてシミュレーションし、1回の
handleOps呼び出しにまとめ、L1のガス代を支払うオフチェーンノードです。送信者(またはペイマスター)から払い戻される額と、バリデーターに支払う額との差額が、バンドラーの収益になります。 - EntryPoint:信頼されたシングルトンコントラクトです。バンドル内の各UserOpを順に処理し、各送信者の
validateUserOpを呼び出してコールデータを実行し、返金やリバートを処理します。各チェーンには、バージョンごとにEntryPointが1つだけ存在します。 - ペイマスター(任意):送信者に代わってガス代を支払うコントラクトです。ユーザーへのスポンサー提供(ユーザーは無料)か、USDCなどのERC-20との交換で支払います。
- アグリゲーター(任意):1回の署名検証で多数のUserOpを検証するコントラクトです。BLS方式やzk証明に役立ちます。現在、本番環境で使われることはほとんどありません。
この6つの役割を念頭に置いてください。この記事の残りは、これらが互いにやり取りする仕組みを説明します。
UserOperation構造体
UserOperationは、JSON-RPCで扱いやすい形式にまとめられたフィールド群です。署名すると、まだL1に送信せずに実行の意図を表せます。v0.7の構成には、論理上11個のフィールドがあります。
sender— スマートアカウントのアドレスです。nonce— 256ビットの値です。上位192ビットはキー(並列 nonce レーン)、下位64ビットはシーケンスを表します。すべてを順番に処理するEOAとは異なり、ERC-4337が並列nonceに対応できるのはこの仕組みによるものです。factoryとfactoryData— CREATE2による初回デプロイに使います。デプロイ後はnullになります。callData— 検証後にスマートアカウントが実行する呼び出しです。callGasLimit、verificationGasLimit、preVerificationGas— 個別に設定される3つのガス上限です。maxFeePerGas、maxPriorityFeePerGas— 通常のtxと同じEIP-1559の仕様です。paymasterAndData(v0.6)は、paymaster、paymasterVerificationGasLimit、paymasterPostOpGasLimit、paymasterData(v0.7)に分割されます。signature— スマートアカウントが独自のvalidateUserOpで解釈する不透明なバイト列です。
署名方式はウォレットによって異なります。secp256k1を使うECDSAが一般的ですが、P-256やパスキーによる検証、マルチシグ、ソーシャルリカバリーの閾値、セッションキーの署名者も、すべて同じインターフェースを通じて利用できます。この柔軟性こそが、ERC-4337の要点です。
エンドツーエンド:スマートアカウントでUSDCをETHにスワップするときの流れ
実際のスワップを追いながら、各役割が順に動く様子を見てみましょう。
- ウォレットの画面で「スワップ」をタップします。 ウォレットがUserOperationを作成します。
sender = 0xUserSafe、callData = swapUSDCforETH(amount)を指定してUniswapを呼び出します。 - ガス代を見積もります。 ウォレットはバンドラーのRPCに対して
eth_estimateUserOperationGasを呼び出します。バンドラーはEntryPointを使ってUserOpをシミュレーションし、3つのガス上限を返します。 - ユーザーが署名します。 ウォレットはEntryPointのアドレスとチェーンIDを使ってUserOpのハッシュを計算し、ユーザーに署名を求めます(パスキー、ハードウェアキーなど)。その後、署名を添付します。
- 送信します。 署名済みUserOpを
eth_sendUserOperation経由で1つ以上のバンドラーに送ります。Ethereumの通常のトランザクション用mempoolとは別のP2Pネットワークであるalt-mempoolに入ります。 - バンドラーがシミュレーションします。 バンドラーは
eth_callを使い、simulateValidationに対して再シミュレーションします。ERC-7562のストレージアクセス規則を確認します。検証中にUserOpがアクセスできるのは自身のストレージだけです。そうでなければ、バンドラーが攻撃を受けるリスクがあります。 - バンドルを作成します。 バンドラーはこのUserOpを最大約10件の他のUserOpとまとめ、EntryPointに対する1回の
handleOps([...userOps], beneficiary)呼び出しにします。 - オンチェーンで実行します。 EntryPointは各UserOpを順に処理します。送信者の
validateUserOpを呼び出し、前払い分を差し引いた後、callDataを実行します。これにより、スマートアカウントからUniswapのスワップが実行されます。 - 返金します。 EntryPointは未使用のガス代を送信者(またはペイマスター)に返金し、バンドラーの受取人アドレスに支払います。
ステップ5に失敗すると、バンドラーはUserOpを破棄し、ユーザーにはAAxxエラーコードが表示されます。よくあるのは、AA21(前払い分の不足)、AA23(署名エラー)、AA25(nonceが無効)、AA33(ペイマスターがリバート)、AA40(検証用ガス上限超過)です。これらのコードは覚えておくとよいでしょう。実際に目にすることになります。
EntryPoint v0.6とv0.7の違い
v0.6は2023年3月に0x5FF1…2789でリリースされました。動作はしましたが、3つの課題がありました。3種類のガスを1つにまとめていたpaymasterAndDataのデータ、扱いにくいinitCodeのパッキング、送信者に過剰請求するガス計算です。v0.7では、これらすべてが修正されました。
v0.7の主な変更点は次のとおりです。
- アドレス:
0x0000000071727De22E5E9d8BAf0edAc6f37da032(先頭のゼロに注目してください。これは、ゼロバイトのガス代が4、ゼロ以外のバイトが16であるため、コールデータのガス代を抑えられるよう、先頭にゼロが並ぶアドレスを採掘して選んだものです)。 - ペイマスターフィールドの分割:
paymaster、paymasterVerificationGasLimit、paymasterPostOpGasLimit、paymasterDataがそれぞれ独立しました。見積もりが簡単になり、予算の指定漏れも起きにくくなります。 - ファクトリーの分割:同様に、
factoryとfactoryDataが独立したフィールドになり、パックされたinitCodeを使わなくなりました。 - 未使用ガスへのペナルティ:未使用の
callGasLimit/paymasterPostOpGasLimitの10%が送信者に請求され、ガス上限を大幅に過大見積もりするUserOpを抑制します。 - EIP-7702互換フック:v0.7では、通常のEOAがスマートアカウントの実装へ一時的に委任できる仕組みが追加されました。これは、Pectraで実装されたEIP-7702のアップグレードパスの基盤になりました。
v0.6は現在も稼働しており、引き続き使われています。多くのウォレットがv0.7対応モジュールをリリースしたのは、2024年もかなり後になってからでした。ほとんどのチェーンでは、EntryPointの両バージョンが何年にもわたって並行稼働します。
ペイマスター:ガス代を支払うのは誰か
ペイマスターはEntryPointにETHのステークを預け、そのポリシーに合致するUserOpのガス代を負担するコントラクトです。主な方式は3つあります。
- 検証型ペイマスター(スポンサー型)。バックエンドがオフチェーンで承認に署名し、ペイマスターがオンチェーンで署名を検証して支払います。ガス代なしで利用を開始できるようにしたいアプリで使われます。例:Coinbase Smart Wallet、Farcaster Frames、多くのNFTミント。
- ERC-20ペイマスター。ユーザーはUSDC、USDT、またはDAIで支払い、ペイマスターはバックエンドでETHにスワップするか、ETHの在庫を保有します。Pimlico、Biconomy、Stackupはいずれも一般公開のものを運営しています。
- permit対応トークンペイマスター。EIP-2612のpermitを使い、ユーザーは1回の署名でUserOpとトークン承認の両方に署名します。
EntryPointの検証フェーズでは、ペイマスターのvalidatePaymasterUserOpが実行されます。これがリバートするとAA33が発生します。ステークが不足するとEntryPointが没収し、損失はバンドラーが負担します。そのため、バンドラーはペイマスターの評価リストを管理しています。ERC-7562ではこうした評価ルールが定められ、バンドラーのmempoolがスパムに強い状態に保たれます。同じ仕組みを踏まえると、DeFiの承認とマルチシグを適切に管理する方法が4337でもそのまま活かせる理由がわかります。脅威は同じで、仕組みの枠組みが変わるだけです。
パブリックな代替mempoolとプライベートバンドラー
UserOpをオンチェーンに送る方法は2つあります。
パブリックな代替mempool:ERC-7562に準拠したバンドラーは、libp2pネットワーク上でUserOpをゴシップします。Pimlico、Stackup、Alchemy、Etherspot、Voltaireのノードを運用している人なら誰でも、あなたのUserOpを取得できます。許可不要で検閲耐性がありますが、通常のEthereumトランザクションと同じMEVの懸念があります。サーチャーは取り込まれる前にあなたのオペレーションを確認できます。
プライベートバンドラー:eth_sendUserOperationをプロバイダー1社のRPCに直接送信します。プロバイダーはシミュレーション、バンドル、送信を非公開で行います(多くの場合Flashbots経由です)。処理は速く、MEVから保護されますが、検閲やフロントランをしないバンドラーを信頼する必要があります。2026年時点では、一般向けウォレットの多くがデフォルトでプライベートバンドラーを使用しています。
このトレードオフは、通常のトランザクションにおけるパブリックmempoolとFlashbots Protectの比較に似ています。L1の時代以降、基礎となるトランザクションのライフサイクルを確認していない場合は、バンドラーが介在すると何が変わるのかを、その解説で確認できます。
アグリゲーター、普及状況、コスト
アグリゲーターは、1回の署名検証でバッチを検証するコントラクトです。代表的な用途はBLSです。BLSで署名された50件のUserOpを集め、署名を1回のペアリング検証にまとめることで、署名にかかるガスを約95%削減できます。BLS署名に対応するウォレットの開発が難しく、取引量が多くなければガス削減の効果が出ないため、普及は遅れています。2026年半ば時点で、メインネットのUserOpのうちアグリゲーターを使うものは1%未満です。
普及状況(bundlebear.comによる2026年第1四半期の数値):全チェーン合計の累計UserOp数は約380,000,000件で、その大半をBase、Polygon、Arbitrumが占めています。メインネットのシェアは約6~8%で、件数では最も少ない一方、移転額では最大です。一般向けの利用ではCoinbase Smart Wallet、Farcaster、Argentが大きな割合を占めています。
追加コスト:v0.7のUserOpは、同等のEOAトランザクションより約30,000~40,000ガス多くかかります。これはEntryPointのループ処理、検証、バンドルの管理にかかるコストです。メインネットで20 gweiの場合、1件あたり1ドル未満の額です。factoryDataによる初回のアカウント展開には、さらに約250,000ガスかかります。calldataが主なコストとなるL2では、追加コストの割合は1桁台です。スポンサー付きUserOpではこのコストをdAppが負担するため、一般向けアプリでは無料のトランザクションを見かけますが、本格的なDeFiではそうではありません。より広範なトランザクション手数料の解説では、この追加コストが各種の手数料市場でどのように反映されるかを説明しています。
要点は、ERC-4337が6つの役割(送信者、UserOp、バンドラー、EntryPoint、ペイマスター、アグリゲーター)と1つの構造体、覚えておくべき2つのEntryPointアドレスを備え、任意の署名方式、ガス代のスポンサー、バッチ処理、並列ノンスを実現する代わりに、約30,000~40,000ガスの追加コストがかかるということです。このシリーズの第3部では、EIP-7702を取り上げます。これはPectraで並行して進められている仕組みで、既存のEOAがアドレスを変更せずに同じ機能を利用できるようにします。



