今回は前回に引き続き、Account Abstraction(AA)について解説します。前回はAAの概要やメリットについて解説しましたが、今回はAAの関連規格について、それぞれの仕組みと特徴を見ていきたいと思います。
AAに関連するEthereumの規格のうち、現在も議論の対象になっているものとして、主にEIP-3074、ERC-4337、EIP-7702という3つを挙げることができます。
まずはこれらの3つの規格のうち、最も古くから提案されているEIP-3074について見ていきましょう。EIP-3074は2020年頃から提案されているAA関連規格です。EIP-3074の仕組みは次のようなものです。
EIP-3074が導入されると、「AUTH」「AUTHCALL」という2つのオペコード(Ethereum上で用いられる、基礎となる命令のようなもの)が追加されます。AUTHは特定のスマートコントラクトに自分のウォレットアドレスの権限を委任する命令です。またAUTHCALLは、AUTHによって委任されたスマートコントラクトが、元のウォレットアドレスの代わりにトランザクションの処理を行う命令となっています。この2つのオペコードの追加によって、以下のようなフローでトランザクションを実行することができるようになります。
まず、ユーザーはウォレットアドレスの秘密鍵を用いて実行したいトランザクションの内容を書いたメッセージに署名を行います。これはトランザクションではないため、ガス代は発生しません。次に、任意のウォレットアドレス(ユーザー以外でも可)がこの署名されたメッセージをトランザクションとして「Invoker」と呼ばれるスマートコントラクトに送信します。最後に、Invokerがメッセージに含まれているトランザクションについて、AUTHとAUTHCALLを用いてユーザーの代わりに実行します。
このような流れによって、ガス代の支払いは任意のウォレットアドレスに、トランザクションの実行はスマートコントラクトに委任するようなAAを実現することができます。
EIP-3074の利点として、既存のウォレットアドレスをそのまま流用してAAを実現できるといったことが挙げられます。
一方で、EIP-3074には欠点も多くあります。最も大きな欠点は、Ethereumの大型アップグレードが行われるタイミングでしか実装できないということです。これは、オペコードを追加するためにはプロトコルを改修する必要があるためです。
当然ながら、1回のEthereum大型アップグレードにて改修できるプロトコルには限界があります。直近の大型アップグレードである「Dencun」や「Shapella」ではレイヤー2のガス代削減やステーキングの引き出し機能などの実装に注力していたこともあって、EIP-3074はまだEthereumに実装されていません。
また、既存のウォレットアドレスを流用することに伴う欠点もあります。秘密鍵やシードフレーズの管理が必要であったり、ECDSAによる署名プロセスが不可避であるといった点です。前回解説したAAによるメリットのうち、2.4.5.の3つについてはEIP-3074で実現することができません。
そこで、EIP-3074とは別のアプローチでAAを実現しようと提案された規格が、ERC-4337です。ERC-4337の仕組みについても見ていきましょう。
まずトランザクションを実行したいユーザーは、トランザクションの内容をUserOperationという形式で「Bundler」と呼ばれるウォレットアドレスに送ります。これはトランザクションではないため、ガス代は発生しません。その後、Bundlerは「EntryPoint」と呼ばれるスマートコントラクトに複数のUserOperationをまとめて送り、EntryPointはUserOperation内のデータを用いて検証および処理の実行を行います。
EIP-3074のメッセージと比較して、ERC-4337のUserOperationは署名にECDSA以外の暗号化方式を用いることができます。これによって、前回解説したAAによるメリットのうち、5.を実現することができます。また、EIP-3074のメッセージを送信するのはウォレットアドレスである必要がありましたが、ERC-4337のUserOperationはスマートコントラクトによって送信することができます。これによって、4.のメリットについても実現することができます。1.のメリットについても、UserOperationにて「Paymaster」というガス代の支払いを行うアドレスを指定することができるため、実現可能となっています。
さらに、ERC-4337はプロトコルの改修なしで実装することができるという利点を持っています。このため、ERC-4337は2023年3月にすでに実装されています。
ただし、ERC-4337も完全なAAであるというわけではありません。EIP-3074のように、既存のウォレットアドレスがAAを使えるようにすることはできないためです。
UserOperationはスマートコントラクトから送信されるものであるため、ERC-4337を利用するためには、ERC-4337に対応したスマートコントラクトベースのウォレットを用意する必要があります。
こうした背景から、ERC-4337が実装された後でもEIP-3074を実装する必要性はあると考えられてきました。実際にEIP-3074については、次期のEthereum大型アップグレードである「Pectra」にて実装されることが予定されていました。しかし、今年の5月に急遽この予定が撤回され、PectraではEIP-3074の代わりにEIP-7702という規格が実装されることになりました。
EIP-3074に何があったのか、次回はAA関連規格を取り巻く現状とEIP-7702の特徴、さらにはAAが目指す最終形について見ていきたいと思います。
「MCB Web3カタログ」でウォレット関連のサービス一覧を確認する
※ニュースレターを無料購読していただくと、毎週月曜日の17:00にイーサリアム技術解説シリーズを含む最新のニュースレターをお届けいたします。
過去のイーサリアム技術解説
アカウント・アブストラクション(AA)特集
・ウォレットのUXを向上させる、Account Abstractionとその近況(第1回)
・ウォレットのUXを向上させる、Account Abstractionとその近況(第2回)
・ウォレットのUXを向上させる、Account Abstractionとその近況(第3回)
・ウォレットのUXを向上させる、Account Abstractionとその近況(第4回)
ダンクシャーディング特集
・レイヤー2のガス代を減少させる、ダンクシャーディングとData Availability(第1回)
・レイヤー2のガス代を減少させる、ダンクシャーディングとData Availability(第2回)
・レイヤー2のガス代を減少させる、ダンクシャーディングとData Availability(第3回)
ステートレスクライアント特集
・Ethereumにおける真の分散化を目指す、ステートレスクライアントとVerkle Trees(第1回)
・Ethereumにおける真の分散化を目指す、ステートレスクライアントとVerkle Trees(第2回)
・Ethereumにおける真の分散化を目指す、ステートレスクライアントとVerkle Trees(第3回)