EIP-4337 と Account Abstraction
初めに
この記事は、2022年10月11日に公開された@0xPhillan氏による「What is EIP-4337 and “account abstraction”?」を許可を得た上で翻訳した記事になります。
*原文執筆時(2022年10月11日)から時間が経過しているため、内容と実際の情報が異なる場合があります。予めご了承ください。
要約:
Account Abstraction(アカウントアブストラクション)を行うと、スマートコントラクトとして存在する新しいアカウントタイプを作成することができます。アカウントがスマートコントラクトとして存在することで、トランザクションの検証と実行の分割が可能となります。
EIP-4337は、Account Abstractionの提案であり、Vitalik Buterin、Yoav Weiss、Kristof Gazso、Namra Patel、Dror Tirosh、Shahaf Nacson、Tjaden Hessによって執筆されました。
この提案は、コンセンサスレベルの変更(つまり、ハードフォークが必要ない)を行うことなく、Account Abstractionの仕様を定めています。
つまり、現在のEVMで、スマートコントラクトを使用し、Account Abstractionの機能を実現することを可能にします。
EIP(およびERC)とは何かの簡単な復習については、マスターWeb3基本:ノードからネットワークまでの記事の「EIPからERCへ」セクションを参照してください。
詳細な説明:
イーサリアムのアカウント
現在、イーサリアムには2種類のアカウントがあります:
EOA (Externally Owned Account / 外部所有アカウント)
CA(Contract accounts / コントラクトアカウント)
トランザクションは、EOAの所有者がそのアカウントの秘密鍵で、トランザクションの詳細を署名することによって承認されます。
トランザクションの詳細と署名は、イーサリアムバーチャルマシン(EVM)に送信され、署名が有効であることとトランザクションのnonceがアカウントのnonceと一致することが検証されます。
検証が完了すると、EVMがトランザクションを実行し、ガス料金(トランザクション手数料)をEOAの残高から差し引きます。
Abstraction(抽象化)の定義
コンピューターサイエンスにおいて、Abstractionとは、大きな要素から関連する部分を抽出すること、または別の言い方をすると、何かをより小さな要素に分割することを指します。
イーサリアムにおいて、Account Abstractionとは、トランザクションの検証と実行を単一のプロセスから、トランザクションの検証と実行が分けられ、それぞれが個別に調整可能な要素となることを指しています。
これにより、ユーザーは個別の要件に合わせて必要な要素を使用できるため、より柔軟かつ効率的にトランザクションを実行できます。
EIP-4337におけるAccount Abstraction
EIP-4337では、検証とトランザクション処理が2つのスマートコントラクト、つまりエントリーポイントコントラクトとウォレットコントラクトに分割されます。
エントリーポイントコントラクトとは、ウォレットコントラクトと通信するコーディネーターとして機能します。
ウォレットコントラクトとは、ウォレットコントラクトによって実装されたカスタムロジックに基づいて、ユーザーのトランザクションの検証を処理します。
ウォレットコントラクトがトランザクションを正常に検証すると、エントリーポイントコントラクトがトランザクションを実行し、次のブロックに含めるために送信されます。
このAbstractionにより、開発者やユーザーは、custom Wallet Contracts(カスタムウォレットコントトラクト)においてトランザクションが有効になるための要件を、自由にコーディングできます。
たとえば、マルチシグ、ソーシャルリカバリ機能、あるいはQuantum-resistant signature scheme(量子耐性署名方式)などを使用することができます。
一方、EOAは、ECDSA暗号化方式のみを使用することができるのに対して、Account Abstraction後のアカウントは自由度が高くなります。
EIP-4337では、EIP-2938で以前、提案されたような、コンセンサスレベルのプロトコル変更を行わずに、Account Abstractionが導入されています。
また、これは、Account Abstractionに必要な機能が現在のEVMでスマートコントラクトを使用して実現できるため可能になります。
EIP-4337 の追加のアーキテクチャ要件
スマートコントラクトを通じたAccount Abstractionに加えて、EIP-4337は、UserOperationsというAccount Abstraction専用の新しいトランザクションタイプ、UserOperations専用のmempool、そしてBundlerを導入しています。
Bundlerは、UserOperationsをまとめてバッチにし、エントリーポイントコントラクトに送信するプログラムです。これらのトランザクションは、EOA用のmempoolと通常のトランザクションと一緒に存在するために必要とされます。
UserOperationsを作成して署名した後、ウォレットアプリはそれをUserOperationのmempoolに送信します。
mempoolとは、トランザクションが検証されてブロックに含まれる前にEthereumノード上に保存されるメモリモジュールのことです。
しかし、UserOperationsはトランザクションと構造的に異なるため、既存のmempoolに含めることはできません。
これを解決するために、コンセンサスレベルの変更が必要で、これにはネットワークのハードフォークが必要になります。
それを避けるために、新しいmempoolを追加することが提案されており、Ethereumノードクライアントの更新のみが必要となります。
BundlerはUserOperationのmempoolに存在するトランザクションを監視し、それらをバッチにまとめてEVM上のエントリーポイントコントラクトに送信する役割を担うものです。
つまり、UserOperationsは新しいmempoolに存在することになります。このようにして、抽象化されたアカウント用のトランザクションを扱うための新しいプロトコルが実現されます。
この設計により、次の利点も得られます。
・複数の操作が通常、複数のトランザクションを必要とする場合でも、一緒にバンドルすることができます。たとえば、トークンの支出を承認し、トークンの取引を開始することが、単一のトランザクションとして実行される場合があります。
・スマートコントラクトウォレットインターフェイスの標準化。汎用性と標準化は、相互運用性とセキュリティの向上につながります。ERC-20(トークン標準)やERC-721(非代替性トークン標準)がトークン化に対してどのような影響を与えたかを見てみてください。
Paymaster(ペイマスター)
EIP-4337には、Paymaster機能の提案も含まれています。この機能を使用することで、第三者が特定のUserOperationsのトランザクションコストをユーザーの代わりに支払うことができます。
これは、プロトコルの使用を補助するために、ユーザーのガス料金を支払うことで使用をサブサイズするために使用できます。
検証ループでは、エントリーポイントコントラクトは、ウォレットコントラクトに送信する前に、ペイマスターアカウントにUserOperationsをカバーするための十分な資金があるかどうかを確認します。
すべてが成功した場合、実行ループでユーザーとペイマスターのアカウント残高が計算され、更新され、次のブロックに含まれるように渡されます。
複数の操作メカニズムと組み合わせたペイマスター機能は、別の興味深いユースケースを可能にします。
・ERC-20トークンをトランザクション手数料に使用することができます。複数の操作を1つのトランザクションで送信できるようにすることで、ERC-20トークンをpaymasterに転送し、paymasterがEtherを使用してガスを支払うことができます。
すべて1つのトランザクションで処理できます。
まとめ
EIP-4337のアカウント抽象化によって、一般のユーザーもスマートコントラクトのプログラム可能性を日常的なアカウントに活用できるようになります。
抽象化されたアカウントは、一般ユーザーや開発者にスマートコントラクトのプログラム可能性を提供し、一般ユーザーは、Ethereumアカウントをよりよく制御できるようになり、開発者は、追加の利便性を提供することでユーザーエクスペリエンスを向上させることができます。
実装されると、開発者コミュニティがこの技術を活用する新しい方法を開発することが期待されます。
EIP-4337の機能のいくつかを体験するには、Stackup Walletをテストすることができます。
私の知る限りでは、これがEIP-4337の機能を最初に実装したウォレットです。また、彼らのDiscordも強くお勧めします。そこでは、開発者が質問に答えたり、新しい機能を紹介したりすることができます。