アカウント抽象化(ERC-4337)
秘密鍵1本を失えば全資産を失う従来ウォレットの弱点を、アカウント抽象化はどう克服するか。ソーシャルリカバリやガス代行、任意の署名方式を、コンセンサス層を変えずに実現する仕組みが腑に落ちる。
- 1.外部所有アカウント(EOA)は秘密鍵1本が唯一の権限で、署名方式もガス支払いも固定される。ERC-4337はウォレットをスマートコントラクトアカウントにし、認証と支払いのロジックを自由化する。
- 2.取引はEOAのトランザクションではなくUserOperationとして専用メモリプールに集まり、Bundlerが束ねてEntryPointコントラクトへ1本のトランザクションで投入する。コンセンサス層(プロトコル本体)は無改修のまま実現する。
- 3.Paymasterがガスを肩代わりでき、複数署名やしきい値・パスキー・ソーシャルリカバリを検証ロジックとして実装できる。鍵の紛失=資産喪失という単一障害点を、契約側の設計で緩和できる。
なぜアカウントを「抽象化」するのか
Ethereum のアカウントには2種類あります。外部所有アカウント(EOA, Externally Owned Account)は秘密鍵に対応するアカウントで、残高だけを持ちコードを持ちません。もう一方のコントラクトアカウントはコードと永続ストレージを持ちますが、自発的にトランザクションを起こせません。この非対称が問題の根です。台帳の状態を動かすトランザクションは、必ず EOA の秘密鍵による ECDSA 署名から始まる必要があります。署名方式は secp256k1 の ECDSA 一択、権限は鍵1本、ガスは必ずその EOA の残高(ネイティブ通貨)から支払う——これらがプロトコルに固く焼き付けられています。
帰結は重い。鍵を失えば資産は永久に動かせず(/blockchain/signatures-wallets-keys/ で述べた通り、復旧窓口は存在しません)、新しい署名アルゴリズムに乗り換える術もなく、ガス用のネイティブ通貨を必ず自分で用意せねばなりません。**アカウント抽象化(Account Abstraction, AA)**は、この「アカウントが何を認証とみなし、誰がガスを払うか」をプロトコルから引き剝がし、プログラム可能なコントラクト側へ移す取り組みです。
「抽象化」の核心は、isValid(署名, 操作) という判定を EOA 固定の ECDSA から、コントラクトが自由に定義する関数へ置き換える点にあります。1-of-1 の鍵でも、3-of-5 のマルチシグでも、指紋認証(パスキー)でも、時間ロックでも、同じ「取引を承認する」インタフェースの背後に置ける。プロトコルは「そのアカウントの検証関数が真を返したか」だけを見ます。
ERC-4337:コンセンサスを変えずに実現する
アカウント抽象化の理想は、EOA を廃してすべてのアカウントをコントラクトにすることですが、それにはプロトコル本体(コンセンサス層)の改修が要り、ハードフォークの合意形成は重い。ERC-4337 は、コンセンサスに一切手を入れず、アプリケーション層だけでアカウント抽象化を実現した設計です。鍵となるのは、通常のトランザクションを模した別レイヤの取引オブジェクトを新設し、それを既存のトランザクションで包んでチェーンへ届ける発想です。
登場する構成要素は次の通りです。
| 構成要素 | 正体 | 役割 |
|---|---|---|
| UserOperation | 取引の意図を表す構造体(署名付き) | 『何をしたいか』+認証情報。EOAのトランザクションの代替物 |
| 専用メモリプール | UserOperation 専用の別 mempool | 通常のトランザクションプールとは分離して漂う |
| Bundler | UserOperation を収集する実行者 | 複数の UserOperation を束ね1本のトランザクションに詰めて送る |
| EntryPoint | 監査済みの単一シングルトン契約 | 束を受け取り、各アカウントの検証→実行を統括する |
| Account(ウォレット) | ユーザーごとのコントラクトアカウント | 検証関数と実行関数を実装する本体 |
| Paymaster | ガスを肩代わりする契約(任意) | ユーザーの代わりに手数料を負担・徴収する |
流れはこうです。ユーザーは秘密鍵でトランザクションを直接発行する代わりに、UserOperation に「呼び出したい処理(calldata)」と「認証情報(signature)」を詰めて署名し、専用メモリプールへ投げます。Bundler(自らガス代を立て替えられる EOA を持つ運用者)がプールから複数の UserOperation を拾い、EntryPoint コントラクトの handleOps を呼ぶ1本の通常トランザクションに束ねて送信します。EntryPoint は束の各要素について、まず各 Account の検証を回し、通過したものだけ実行します。ここで Bundler は /blockchain/layer2-rollups/ の順序付けと同様に取引を集約する役ですが、あくまで既存プロトコルの上に追加のインフラ層として乗る点が違います。
UserOperation(主要フィールドの概念図)
sender # 操作を実行するアカウント(コントラクト)のアドレス
nonce # リプレイ防止の一意カウンタ(アカウント単位)
callData # sender 上で実行したい処理の呼び出しデータ
signature # 検証関数が解釈する任意形式の認証情報
maxFeePerGas 等 # ガス上限・手数料の指定
paymasterAndData # ガスを肩代わりする Paymaster 指定(無ければ自己負担)
factory / factoryData # 未デプロイ時にアカウントを生成する情報(任意)
EntryPoint は束を、まず全 UserOperation の検証フェーズ、続いて全実行フェーズ、と明確に分離して処理します。狙いは Bundler の保護です。Bundler は自腹でガスを払って束を送るため、実行が失敗すると手数料を回収できず損をしかねません。先に全件の検証(=支払い能力と署名の正当性の確認)を済ませることで、「検証は通るが実行で無限に費用がかさむ」ような操作を弾き、Bundler が確実に手数料を得られる状態を作ります。
検証フェーズ:署名方式を柔軟にする核心
アカウント抽象化の主役は、各 Account コントラクトが実装する検証関数 validateUserOp です。EntryPoint は実行に先立ちこの関数を呼び、アカウントに「この UserOperation を本当に承認するか」を問います。返り値が承認(かつ手数料の前払いが可能)なら実行へ進み、そうでなければその操作は束から除外されます。
ここが従来 EOA との決定的な差です。EOA では「secp256k1 の ECDSA 署名が公開鍵に一致するか」という判定がプロトコルに固定されていました。ERC-4337 ではこの判定がコントラクトのコードそのものなので、アカウントごとに自由に定義できます。
| 署名・認証方式 | validateUserOp での検証内容 | 利点 |
|---|---|---|
| ECDSA 単一鍵 | 従来同様 secp256k1 署名を1本検証 | 既存資産と互換・シンプル |
| マルチシグ(M-of-N) | N人中M人分の署名が揃うか検証 | 1本漏洩しても資産を守れる |
| パスキー / WebAuthn | P-256(secp256r1)署名を検証 | 生体認証・端末セキュアエンクレーブを利用 |
| セッション鍵 | 権限・有効期限を限定した鍵を検証 | ゲーム等で毎回の署名を省き UX 向上 |
| ソーシャルリカバリ用ガーディアン | 保護者アドレス群の合意を検証 | 鍵紛失時に所有者鍵を差し替え可能 |
nonce によるリプレイ防止も検証段で担われます。/blockchain/utxo-vs-account-model/ で触れた通り、アカウントモデルでは同じ取引の使い回し(リプレイ)を防ぐために単調増加のカウンタが要ります。ERC-4337 でも UserOperation ごとに nonce を持ち、EntryPoint が消費済みか検査するため、同一操作を二度実行させられません。
validateUserOp の中では、実行できる操作が意図的に制限されます。とりわけ他アカウントのストレージなど共有状態への依存が禁じられます。理由は Bundler の DoS 耐性です。Bundler はメモリプール上の UserOperation を「実行すれば確実に手数料が取れる」と見込んで束ねますが、検証がグローバル状態に依存すると、束ねる直前に他人の取引で状態が変わり検証が失敗——立て替えたガスが無駄になる、という攻撃が可能になります。検証を自アカウントのローカル状態に閉じることで、この非決定性を封じています(ERC-7562 として規約化)。
Paymaster:ガス代行の仕組み
Paymaster は、ユーザーの代わりにガス手数料を負担できるコントラクトです。従来、取引を出すには必ずネイティブ通貨(ETH 等)を保有せねばならず、新規ユーザーの参入障壁でした。Paymaster を使えば、この前提を崩せます。
仕組みは、Paymaster が EntryPoint に**あらかじめデポジット(担保)**を積んでおき、UserOperation の paymasterAndData で指定されると、その操作のガスを Paymaster のデポジットから支払う、というものです。検証フェーズでは EntryPoint が Paymaster にも「この操作の肩代わりを引き受けるか」を確認し、承認されれば実行後に実費がデポジットから引かれます。
| Paymaster の類型 | 課金の仕方 | ユースケース |
|---|---|---|
| スポンサー型 | 運営がガスを全額負担(ユーザー無料) | オンボーディング・特定アプリの無料体験 |
| ERC-20 徴収型 | ガス相当をステーブルコイン等で徴収 | ETH を持たずトークンだけで取引できる |
| 条件付き型 | 特定条件(会員・回数制限)で肩代わり | 販促・不正防止を組み込んだ手数料設計 |
Paymaster は他人のガスを肩代わりする以上、無条件に引き受ければデポジットを枯渇させられる DoS の標的になります。ERC-20 徴収型なら「ユーザーが実際にトークンで支払える残高・承認(allowance)があるか」を検証段で確認せねばならず、ここでも共有状態依存の制約が絡みます。肩代わりの条件検証が甘い Paymaster は、攻撃者に無料でガスを消費させる穴になります。
ソーシャルリカバリと単一障害点の緩和
ERC-4337 が実務にもたらす最大の価値の一つがソーシャルリカバリです。従来のシードフレーズ方式は、/blockchain/signatures-wallets-keys/ で述べた通り、ニーモニックが全鍵の親であり唯一にして最大の単一障害点でした。漏洩すれば全資産を奪われ、失えば永久に取り戻せません。
アカウントがコントラクトなら、この所有権のモデル自体を作り替えられます。典型は、日常の署名に使う所有者鍵とは別に、信頼する複数のガーディアン(家族・別デバイス・友人のアドレス)をあらかじめ登録しておく設計です。所有者鍵を紛失したら、ガーディアンの過半数が合意して所有者鍵を新しい鍵へ差し替えるトランザクションを承認します。資産そのものはアカウント(コントラクト)に留まったまま、それを操作する「鍵」だけを付け替えるわけです。
「EOA とコントラクトアカウントの違い」「ERC-4337 がコンセンサス層を変えずに済む理由」は頻出です。核は、UserOperation という別レイヤの取引を Bundler が既存トランザクションで包み EntryPoint へ届ける点。署名方式の柔軟化は validateUserOp を差し替え可能にしたこと、ガス代行は Paymaster のデポジット肩代わり、ソーシャルリカバリは「資産はコントラクトに置いたまま操作鍵を付け替える」ことで単一障害点を緩和する——と一本の筋で説明できると強いです。
安全装置として、鍵の差し替えにはタイムロック(例:申請から数日後に発効)を組み合わせるのが定石です。万一ガーディアンが結託または乗っ取られても、正当な所有者は発効前に異議を唱えて差し替えを取り消せます。これは「即時性」と「取り消し可能性」を天秤にかける設計判断で、コントラクトだからこそ表現できます。
まとめ
- EOA は秘密鍵1本が唯一の権限で、ECDSA 署名・ネイティブ通貨でのガス支払いがプロトコルに固定される。この硬直性が鍵紛失=資産喪失などの弱点を生む。
- アカウント抽象化は認証とガス支払いのロジックをプロトコルからコントラクトへ移す。ERC-4337 はコンセンサス層を無改修のまま、アプリ層だけでこれを実現した。
- UserOperation を専用メモリプールに集め、Bundler が束ねて EntryPoint に投入し、EntryPoint が全件検証→実行の2相で処理する。検証と実行の分離は Bundler の手数料回収を守るため。
validateUserOpを差し替えることで、マルチシグ・パスキー・セッション鍵など任意の署名方式を実装できる。検証段は Bundler の DoS 耐性のため共有状態依存が制限される。- Paymaster はデポジットからガスを肩代わりし、ETH 非保有ユーザーやトークン払いを可能にする。ソーシャルリカバリはガーディアン合意で操作鍵を付け替え、シードフレーズという単一障害点を緩和する。
ブロックチェーン Article
アカウント抽象化(ERC-4337)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
ブロックチェーン
比較で見る軸
難易度: advanced / カテゴリ: ブロックチェーン / タグ数: 6
導入後に効く点
取引はEOAのトランザクションではなくUserOperationとして専用メモリプールに集まり、Bundlerが束ねてEntryPointコントラクトへ1本のトランザクションで投入する。コンセンサス層(プロトコル本体)は無改修のまま実現する。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ブロックチェーン
- タグ数
- 6
判断チェックリスト
- 自社の用途が「ブロックチェーン / アカウント抽象化」に近いか確認する。
- 強みである「外部所有アカウント(EOA)は秘密鍵1本が唯一の権限で、署名方式もガス支払いも固定される。ERC-4337はウォレットをスマートコントラクトアカウントにし、認証と支払いのロジックを自由化する。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。