アカウントの抽象化は、ユーザーや開発者のエクスペリエンスを全体的に向上させることを目指しています。オンチェーンのエクスペリエンスをユーザーにとってよりアクセスしやすく楽しいものにするだけでなく、開発者がイーサリアム上でより強力なことを行い、ユーザーにさらに意味のある方法でサービスを提供できるようにもしています。
アカウントの抽象化へのアプローチの分類は次のとおりです:
このアプローチには、資産を移動せずにEOAからCAに移行することを可能にするメカニズムが備わっています。EIP 7377とEIP 5003(EIP 3074と併せて考えると)。
スマートアカウントの作成とアカウントの抽象化のプロトコルレベルでの確立について、以前にさまざまな提案が行われてきました;EIP-86そしてEIP-2938これらはよく引用されるもののいくつかです。しかし、この設計によって導入されるとされる複雑さと、イーサリアムがそのような複雑さに対して準備ができていないという多数派の意見により、多くの反対意見がありました。
The Merge後のVitalikの復活に続いて、ERC-4337スマートアカウント標準のオプトインバージョンとして提案され、MEV(最大抽出可能価値)のためのPBS(提案者-ビルダー分離)インフラストラクチャと類似しています。したがって、スマートアカウントの利点にアクセスしたいユーザーは、単純にERC-4337パイプラインを使用して、そのアカウントのロジックと取引の妥当性ルールを再定義することができます。これはUserOperation(またはUserOps)と呼ばれる構造体になります。
ERC 4337は、プロトコル外のエンシュラインされたスマートアカウントの代替として、現代のイーサリアムにスマートアカウントの利点をもたらしますが、複雑さをエンシュラインすることなく、そのままの複雑さを克服するためのものです。ただし、現在の状態ではインフラストラクチャが最適であるわけではなく、その複雑さはまだ重大な障害点です。
この複雑さに対処するために、RIP 7560ERC 4337のインフラストラクチャの神聖化バージョンとして、EthereumおよびそのL2全体にわたって起草されました。これにより、新しいルールを定義する必要なく、ネットワークのシビル耐性スキームを継承できます(ERC 4337が行っているように)。ERCの7562)
このレポートでは、EOAのプログラム可能性を探求し、このラインに沿ったさまざまなEIPを評価し、そのメリットと欠点について議論します。このシリーズのパート2と3では、イーサリアム内で探求されているアカウントの抽象化の残りの2つのアプローチのクラスをカバーします。
抽象化できるものを探すためには、経常勘定設計の(ある程度)全体像を把握する必要があります。このセクションは、主にイーサリアムのアカウントが実際に何であるか、そしてそれらのトランザクションがどのように検証され、実行されるかについての一種の改訂として機能します。
Ethereum accountsは、ether(ETH)のバランスとEthereumブロックチェーンでトランザクションを送信する能力を持つエンティティです。これらは、アカウントの保有物やトランザクションを指すユニークなポインターとして機能する42文字の16進数「アドレス」として表されます。
アドレスは、ブロックチェーンの状態トライへのキーとして機能します。このトライの葉ノードはアカウントデータ構造であり、4つのフィールドに分解することができます。
これらの4つのフィールドの内容は、アカウントのタイプを定義し、その機能の範囲を最終的に定義するために使用されます。したがって、Ethereumアカウントの2つのタイプは次のとおりです:
EOAは空のcodeHashとstorageHashフィールドを持ち、プライベートキーを所有する人によってのみ制御されることができます。アカウントのアドレスは、アカウントの公開キーのkeccak-256ハッシュの最後の20文字に「0x」を付けたものから取得できます。
彼らの取引は完全にプルベースであり、展開されたコードのロジックに基づいています。
これらのアカウントは、コード内容によってのみ制御されるため、秘密鍵は必要ありません。ただし、公開鍵は持っています。したがって、契約アカウントのコード内容を更新/変更できる能力を持つエージェントは、その残高にアクセスすることができます。
CAのアドレスは、作成者のアドレスと契約の展開ポイントまでのnonceから派生します。
トランザクション
最近、アカウントをイーサリアム上でトランザクションを送信する能力を持つ実体として説明しました。したがって、アカウントの主な目的はトランザクションを送受信することであり、ブロックチェーンはトランザクションの履歴を記録し、ブロックチェーンプロトコル仕様書に記載されているルールに基づいてトランザクションがアカウントフィールドをどのように変更するかを記述しています。
それでは、これらの「取引」とは何ですか?
取引は、アカウントから送信される操作で、ネットワークの「状態」に変更を引き起こします。それらはアカウントからの暗号化された署名付きの命令であり、実行されるとネットワーク全体の状態が更新されます。
無許可性は逆効果のインセンティブを伴いますが、これらに対処するためには、厳格なガイドライン(または有効性ルール)を定義する必要があります。
このコンテキストでは、トランザクションは特定の妥当性ルールに従って有効で実行可能でなければなりません。これらの妥当性ルールのほとんどは、トランザクションを送信するアカウントに配置された制約を介して実装され、アカウントの種類によって異なります。
イーサリアムでは、EOAはユーザビリティが向上しており、エンドユーザー向けに設計されています。特定の方法でトランザクションを送信し、完全に自律的に操作する能力を持っています。また、ローカルで作成することもできますが、より一般的な方法はMetaMask、Rainbow、Rabbyなどのウォレットプロバイダーの使用です。
一方、契約アカウントは、自身のロジックに許可されたトランザクションのみを「呼び出される」ことに応じて送信することができます。また、ステートストレージの支払いに十分な残高を持つEOAによってのみ作成されます。
より高度な説明は、EOAは残高しか保持できず、CAは残高と、この残高をどのように使うかを規定するロジックを保持できることです。
これらの特性は、アカウントの取引が従う必要があるルールを定義する次の論理パラメータによるものです。
これらのパラメータは、EOA向けに厳格に設計されています。
より一般的に、EOAの実行ロジックは、有効な署名ごとに1つのトランザクションに制約されています。
一方、CAsにはこれらのパラメータについての柔軟性があります:
ほとんどの実用的なケースでは、この場合に使用されるロジックは、CA のロジックの変更が有効であるためには、特定のアカウント(一般的には EOA)からの M of N の有効な署名(M < N)が必要であることを規定するマルチシグニチャスキームです。
これらの機能を評価すると、各種類のアカウントが自律性とプログラム可能性の間にトレードオフを持つように設計されていることがわかります。
EOAは完全な自律性を持ちますが、限定的なプログラム可能性があります。彼らはいつでもトランザクションを承認および送信することができますが、これらのトランザクションは厳格な形式に従わなければなりません。CAは完全なプログラム可能性を持っています(EVMの設計によってのみ制限されます)が、限定的な自律性を持っています。彼らのトランザクションは厳格な形式に従う必要はありませんが、彼らのロジックが最初に呼び出されるためにのみ送信されることができます。
以下のサブセクションでは、これらの設計選択肢の影響について研究し、このシリーズの各議論されたEIPの提案を完全に理解するために学びます。
今、私たちは異なるアカウントの機能についてかなり簡潔な知識を持っているので、イーサリアム上のユーザーと開発者の経験にとっての彼らのセリングポイントや問題を簡単に特定できます。
以前にも述べたように、EOAはエンドユーザーをターゲットとしたファーストクラスのアカウントとして設計されています。アプリケーションはこれらと簡単にやり取りするように設計されており、ほとんど複雑さはなく、もちろん作成にはコストがかかりません。しかし、そのシンプルさは厳密に決定論的に設計されているため、新しさの重要な部分を失っています。
それらに関する懸念の一部は:
誰もがいつもETHを保持することを望んだりできるわけではありません(価格の動きを見てください)、ですので、実現可能な解決策は複数のガス通貨を許可するかです(難しすぎて、「通貨」のセクションで説明されているように不変条件を多数壊してしまいます)ここまたは、トランザクションの起点でない別のアカウントによってガス料金を支払うことを許可するために、アカウントの抽象化を使用することがあります。
アカウントスペクトルの反対側にあるCAは、開発者やより技術的なユーザーベースをターゲットにしています。彼らはスマートコントラクトのための手段として機能し(つまり、スマートコントラクトをその中に含まれるロジックやコードの内容と見なします)、EVMによって可能にされる新しいトランザクション形式を実装することができます。
しかし、これらの機能にもかかわらず、それらは自律性を持たないため、称賛される二等アカウントです。彼らの欠点のいくつかは次の通りです:
このサブセクションで定義された問題につながる設計の選択肢を見直した後、提案された解決策を評価することができます。
アカウントの抽象化の概念(少なくともスマートアカウントを介して)は、常にEthereumのロードマップの重要な部分でした。実装に関連する複雑さがEthereumのローンチをさらに遅らせる可能性があるという伝説があり、異なる機能を提供する異なるアカウントを使用した現在のデザインのために廃止されました。Ethereumの焦点がThe Mergeに移ったことにより、再び遅れ、次の主要なアップグレードであるPectraのネットワークの主要な部分として再浮上しています。しかし、その複雑さはまだ埋め込まれることを阻害する重要な欠点と見なされており、特にEthereumがロールアップに焦点を当てるロードマップに切り替えたことを考慮すると、その影響は大きいです。
要件は今や二つに分かれています:
直感的に、この概念はチェーンの抽象化と相互運用性の文脈でより大きな役割を果たしますが、このレポート全体の範囲は、アカウントの抽象化自体を実現するために行われた技術的取り組みに限定されています。
アカウントの抽象化は、EOAとCAの最良の特徴を組み合わせて、新しいアカウント標準であるスマートアカウントを作成することを目指しています。スマートアカウントでは、任意のアカウントの有効性ルールを検証ロジックと実行ロジックに全体または一部分離することができます。つまり、アカウントは契約アカウントと同様にEVMに許可された範囲内で独自の有効性ルールを定義することができ、同時に完全に自律的な外部所有アカウントのままです。
スマートアカウントとスマートコントラクトウォレットの違いについては、しばしば混乱がありますので、以下でこれらの違いを明確に説明しましょう。
スマートコントラクトウォレットの商業化により、より広範な市場でCAsの採用が容易になり、技術的には少ないユーザーもその提供する機能を利用することができるようになりました。しかし、それらはまだCAsに関連する落とし穴に直面しています。
会話に戻ります。以前にアカウントのトランザクションの妥当性ルールを定義するために使用されるパラメータについて話し合いました。
最初の4つのパラメータの値は、トランザクションの実行が開始される前に行われるチェックである、アカウントの検証ロジックとして総称されることがあります。
最後のパラメータは、トランザクションの実行方法を定義します。
イントロダクションでは、現在のAAランドスケープの概要を、提案されたさまざまな設計の分類という形で提供しました。ここでは、イーサリアムのアカウントのジレンマに対する最初のクラスのソリューションであるEOAプログラマビリティに焦点を当てます。
イーサリアムの最大の魅力は、若いながらも活気あるDeFiエコシステムであり、その中には主要な流動性の吸収源となるさまざまな分散型アプリケーションがあります。これらのDAppのほとんどはEOAに対応するように最適化されているため、CAやスマートアカウントとのインターフェースは困難です。スマートコントラクトウォレットはこの場合CAを支援しますが、それには独自の制限とまったく異なるUXがあります。
スマートアカウントの標準に慣れるまで、DAppsとウォレットプロバイダーの両方が探索されている暫定的な解決策は、EOAに一時的な拡張機能を提供することです。これにより、制約された制約や実行ロジックを克服できます。
以下、私たちは行動可能な経路を提供する3つの主要なEIPの仕様について説明します。EIP 5806、野心的なEIP 3074そして最後に勝利へEIP 7702.
この提案は、EOA(外部所有アカウント)の標準にさらなる機能をもたらすため、コントラクトアカウントのロジック(スマートコントラクト)へのデリゲートコールを実行できるようにすることを目指しています。これにより、スマートコントラクトは呼び出し元EOAのコンテキストで実行され、つまり、EOAはバリデーションロジックを制御し続ける一方で、実行ロジックは対応するCAのロジックによって処理されます。
さらに進む前に、イーサリアムの進化の記憶の道をたどってみましょうEIP-7.
EIP-7は、0xf4/DELEgateCALLオペコードの作成を提案し、これはプライマリアカウントにメッセージコールを送信し、セカンダリアカウントのロジックを使用しながら、プライマリアカウントの[sender]および[value]フィールドの値を維持します。
言い換えると、プライマリアカウントは、メッセージ呼び出しで指定された期間中、セカンダリアカウントのロジックを「継承」(または好むなら借用)し、その結果、後者のロジックが前者の文脈で実行されます。
このオペコードは、dApp 開発者がアプリケーションのロジックを複数のスマートコントラクトに分割しながら、相互依存関係を維持できるようにすることで、コードサイズの障壁やガスの障壁を簡単に迂回できるようにしました。
OK、したがって、どのデリゲートコールがCA同士が相互依存できるようにするのでしょうか?EIP-5806は、EIP-7をインスピレーションにして、デリゲートコール機能をEOAにも拡張することを提案します。つまり、EOAもCAと相互依存できるようにしましょう。なぜなら、そうした方がいいからです。
EIP 5806は新しいものを導入しますEIP-2718準拠以下のようにパックされたトランザクションタイプ
rlp([chainID、nonce、max_priority_fee_per_gas、max_fee_per_gas、gas_limit、destination、data、access_list、signature_y_parity、signature_r、signature_s])。
これらのトランザクションは、[to]フィールド(受信者のアドレスを表す)が20バイトの入力としてのみアドレスを受け入れるように設計されており、CREATEオペコードの使用を送信者が無効にするようになっています。
RLPスキームの各コンポーネントの動機は次のとおりです:
EIP-5806トランザクションのEIP-2718封筒へのパッキングにより、これらは大幅に後方互換性があるようになりますが、EOAはCAと同等ではありません。そのため、不変条件の破損を防ぐために、EOAがデリゲートコールを利用する方法には特定の制限が定義される必要があります。
これらの制限は以下のオペコードを対象としています:
EIP 5806 の主な適用性は、EOA の実行の抽象化です。EOAがロジックの単純な呼び出しを超えてスマートコントラクトとトラストレスに対話できるようにすることで、次のような機能が付与されます。
EIP-5806によって提案された変更は、必要な機能を可能にする一方で、特に斬新ではありません。その存在は、既に機能しているEIP-7に基づいています。これにより、多くの潜在的な受け入れの障壁を回避することができます。
初期の段階での主な懸念の1つは、EOAがストレージにアクセスして変更するという潜在的なリスクでした。これは、CAが現在行っているのと同様に、ネットワークに絶対的に定められた不変条件の多くを破壊します。そのため、前のサブセクションで言及された制限を導入することで対処されました。
2つ目の批判(これは少し諸刃の剣です)は、EIP-5806の単純さです。EIP-5806 を受け入れることによる報酬は、実行の抽象化のみが可能で、それ以外はあまり有効ではないため、コストに見合わない可能性があるという意見もあります。EIP-5806 にオプトインする EOA では、次のサブセクションで説明する他のやや類似した EIP とは対照的に、他のすべての有効性制限はネットワークで定義されたままです。
EIP-3074は、EOAが特殊なコントラクトアカウントであるインボーカーに対して、その検証ロジックの大部分を委任することを提案しています。これにより、特定のトランザクション形式に対して、インボーカーの認証ロジックが彼らの上に重ねられます。
これにより、アクセスポリシーをインボーカーコントラクトに署名することで、そのコントラクトがEOAのアクセスポリシーを定義する責任を負うことによってこれを達成します。
このEIPでは、EVMに2つの新しいオペコードの追加が提案されています。
これらの2つのオペコードにより、EOAは事前に設定されたCAに制御を委任し、それを通じて1つとして行動することができ、契約を展開し、それに関連するコストと外部性を負担する必要がありません。
EIP-3074 では、トランザクションで [MAGIC] 署名形式を使用して、他のトランザクション署名形式との衝突を防ぐことができます。[AUTHCALL] 命令が渡されるアクティブなアカウントは、[authorized] という名前のコンテキスト変数フィールドとして定義され、これは 1 つのトランザクションを通じてのみ保持され、新しい [AUTHCALL] ごとに再定義する必要があります。
各オペコードの複雑さに取り組む前に、これらがEIP-3074トランザクションに関係するエンティティであることに注意してください。
呼び出し元コントラクトは、[authority] から [COMMIT] 値を持つ [AUTH] メッセージを受信します。この値は、アカウントが [authorized] による [AUTHCALL] 命令の実行に課したい制限を定義します。
したがって、呼び出し元は、[authorized]アカウントで定義された[contract_code]が悪意がなく、主要な署名アカウントによって設定された不変条件を満たす能力を持っていることを確認する責任があります。[COMMIT]値。
[AUTH]オペコードには3つのスタック要素入力があります。つまり、1つの出力を計算するために3つの入力で定義されています。これらの入力は次のとおりです。
最後の2つの入力は、0から97までの変更可能なメモリ範囲を表すために使用されます。
変数[yParity]、[r]、および[s]は、メッセージ上のsecp256k1曲線におけるECDSA署名[magic]として解釈されます。
[keccak256 (MAGIC || chainID || nonce || invoker address || COMMIT)]
どこ:
計算された署名が有効で、署名者のアドレスが [authority] と等しい場合、[authorized] フィールドは [authority] によって指定された値に更新されます。これらの要件のいずれかが満たされない場合、[authorized] フィールドは以前の状態のまま、または未設定の値のままになります。
このオペコードのガスコストは、次の合計として計算されます:
[AUTH]はメモリを変更しないように実装されており、[authority]の値を引数として受け取るため、提供された署名から値を簡単に検証することができます。
[AUTHCALL]オペコードには、計算に使用される7つのスタック要素入力があり、単一のスタック要素出力を計算するために使用されます。
これは [CALL] オペコードと同じロジックを持ちます。これは、アカウントにメッセージ呼び出しを送信し、そのコントラクトで特定のロジックをトリガーするために使用されます。ロジックの唯一の逸脱点は、[AUTHCALL] が実行を続行する前に [CALLER] の値を設定するように設計されていることです。
したがって、[AUTHCALL] は [authority] によって [authorized] のコンテキスト固有の動作をトリガーするために使用され、論理チェックは次のように進行します。
[AUTHCALL] のガスコストは、次の合計として計算されます。
[AUTHCALL]から返されるデータは次のようにアクセスされます:
すべてをまとめると、テクニカルな言葉をあまり使わずに言えば、イーサリアムのトランザクションでは通常2つの値が指定されます。
以前に言及したように、EOAでは、認証は実行と密接に結びついています、つまり、(tx.origin == msg.sender)です。この単純な不変条件は、このレポートの「アカウントとトランザクションの正当性」のサブセクションで説明した多くの問題を引き起こします。
[AUTH]メッセージは、[authority]からのメッセージによって、tx.origin関数を[authorized]にオフセットすることができますが、msg.senderのままです。また、[COMMIT]値を使用してこの特権に制限を定義することもできます。
[AUTHCALL]は、[authorized]が[invoker]を介して契約のロジックにアクセスできるようにし、アクセスする契約が安全であることを保証します。つまり、[AUTHCALL]ごとに、[authorized]は[COMMIT]用の特定の[invoker]を指定する必要があります。
EIP 3074は、主にEOAが承認ロジックを別のアカウントに委任できるようにすることが主な役割ですが、そのオープンな設計により、さまざまなコンテキストでさらに多くの機能が可能になります。
EOAの全検証ロジックは、必要に応じてインボーカーにさまざまな制約/革新を適用することによって抽象化できます。ターゲットロジックに基づく可能性のある設計の一部は次のとおりです。
また、実行ロジックは直感的に抽象化されています。つまり、すべての呼び出し元(つまりCA)が、今ではEOAの代理で取引リクエストを実行する責任があります。
引用その著者の1人は、「ウォレットが任意の呼び出し元に署名機能を公開することは期待していない」と述べています。 3074イニシアチブによって提示される最大の問題は、その上にイノベーションが非常に簡単に許可された取引フローと独自の取引フローになることです。まるで現在のEthereumのMEVとPBS市場の現在のイテレーションのように。
デフォルトでは、インボーカーコントラクトは、現在可能な攻撃よりも悪化する可能性があるため、非常に厳格に監査する必要があります。これにより、影響力のある人物によって開発されたわずかな数のインボーカーコントラクトだけが、ウォレット開発者のデフォルトとして採用される生態系になるでしょう。したがって、ユーザーのセキュリティのリスクを冒しながら、常に監査を行い、インボーカーコントラクトをサポートするハードな分散型の道を選択するか、より確実なユーザーセキュリティを保証し、契約の安全性に対する監視を減らす確立された信頼できるソースからインボーカーコントラクトを採用するかのトレードオフに帰着します。
このポイントの別の側面は、機能的で安全なインボーカーを設計し、監査し、マーケティングするために関連付けられたコスト関数です。小規模チームはほとんど常に、特にマーケティングの面で、すでに一定の評判を持つ大手組織によって上回られるでしょう。たとえ彼らの製品がより良いとしても。
EIP-3074 は、呼び出し側を介して導入された承認スキームよりも有効であると見なされるため、ECDSA 署名スキームを定着させます。量子抵抗は今のところ決定的な問題ではなく、ECDSAが壊れやすい未来ではもっと深刻な危機に瀕しているという議論もありますが。イーサリアムのやや明言されていない目標は、常にそのような問題の先を行くことです。UXのわずかな改善のために量子抵抗と検閲耐性を犠牲にすることは、近い将来、最善の選択ではないかもしれません。
フォワード互換性の議論のもう1つのポイントは、3074の利点がまだ評価されている間に、プロトコルの変更を必要としないERC-4337(現在は大きな市場があります)があるため、それにも互換性を持たなければならないことです。それを避けるために、エコシステムの区画化を避けるためにも、それにも対応する必要があります。
ネイティブなアカウントの抽象化ロードマップを使用しても、[AUTH]および[AUTHCALL]オペコードは最終的にEVMで廃止され、わずかなUXの改善を提供するためにイーサリアムに多くの技術的負債をもたらします。
[AUTH]メッセージを送信し、コントロールを委任した後、EOAは通常の秘密鍵認証方式を避けることが期待されます。なぜなら、「通常の」トランザクションを送信すると、委任した認可がすべての呼び出し元に取り消されるからです。
したがって、ECDSAスキームは、関連する契約が有効にする他のいかなる認証スキームよりも厳格に優れているため、秘密鍵の紛失はアカウントの資産の完全な損失をもたらすことになります。
この提案は、元々EIP 3074のややミニマリスティックなバリエーションとして設定されていました。意味もそれに対するアップデートであるとされ、特に既に繁栄している4337エコシステムおよびネイティブアカウント抽象化提案(RIP 7560)との非互換性に関する懸念を解消するためにEIP 3074の潜在的な非効率性に対処するために生まれました。
そのアプローチは、新しいEIP 2718に準拠したトランザクションタイプである[SET_CODE_TX_TYPE]の追加です。これにより、特定のトランザクションに対してEOAがスマートアカウントとして振る舞うことができます。
この設計により、EIP 5806と同じ機能とさらにいくつかの機能が可能になりますが、ネイティブのアカウントの抽象化のロードマップと既存の取り組みとの互換性は維持されます。
EIP-7702は、[SET_CODE_TX_TYPE] 2718準拠のトランザクションを介して、EOAが契約のコード内容を「インポート」することを許可します。フォーマットは次のとおりです:
rlp([chain_id、nonce、max_priority_fee_per_gas、max_fee_per_gas、gas_limit、destination、value、data、access_list、authorization_list、signature_y_parity、signature_r、signature_s])
このペイロードは、EIP 5806とまったく同じですが、「許可リスト」を導入しています。このリストは、次の形式の順序付けられた値のシーケンスです:
[[chain_id、address、nonce、y_parity、r、s]、...]
各タプルは、[address]の値を定義します。
先に進む前に、SET_CODE_TX_TYPEに関与する当事者は次のとおりです。
【権限】が[アドレス]を指定するSET_CODE_TX_TYPEに署名すると、委任指示子が作成されます。これは「ポインタプログラム」であり、[権限]のアクションによるすべてのコード取得要求がいつでも[アドレス]の観察可能なコードに結合されるようにします。
各 [chain_id、address、nonce、y_parity、r、s] のタプルに対して、7702型トランザクションの論理フローは次のとおりです:
ふぅ! すべてを結びつけるために、このEIPによってEOAは、コントラクトのコードへのポインタを設定するトランザクションを送信できるようになり、それによってEOAは後続のトランザクションで独自のロジックを実装できるようになります。この方法によって、EIP 5806よりも厳密に強力です。なぜなら、EOAは実際にはコードの内容を望むだけの時間を持つことができるからです(EIP 5806では単にEOAがデリゲートコールを送信できるようにするだけです)。
EOAが実行したいロジックを積極的に受け入れるため、もはや抽象化ではないと主張できるかもしれませんが、それでもそのロジックの「主要な所有者」ではありません。また、直接ロジックを含んでいるわけではなく、計算の複雑さを減らすためにロジックへのポインターを指定するだけです。したがって、実行抽象化に進みます!
require(msg.sender == tx.origin)の不変条件が自己スポンサーシップを許可するために破棄されている間、EIPは依然としてスポンサーされたトランザクションリレーアの統合を許可しています。ただし、注意点として、そのようなリレーアにはガイフィング攻撃を防ぐための評判またはステークベースのシステムが必要です。
EOAはアカウントのコードの特定の部分を指すことができます。そのため、その部分のロジックのみが彼らのコンテキストで実行可能です。
これにより、特定のdAPPが特定の条件下でアカウントの残高にのみアクセスできるようにするサブキーの存在が可能になります。「特権のエスカレーション」を実現するために使用されます。たとえば、ERC-20トークンを消費する権限を持つがETHを消費する権限は持たない、または1日に総残高の1%までしか消費できない権限、または特定のアプリケーションとのみやりとりできる権限などが考えられます。
非制限的な性質のため、EIP-7702トランザクションは、手数料市場論理(例:EIP-1559およびEIP-4844)などの制限的なパラメーターなしに、CREATE2オプコードにアクセスしてバイトコードをアドレスに展開することを許可する可能性があります。これにより、同じバイトコードを持つ複数のステートマシン上で復元および使用されるアドレスが可能になり、各チェーン上のそのアカウントが他のコンテキスト変数パラメータを定義する責任を負います。
EIP-7702はまだ非常に最近のものですが、その依存関係や潜在的な欠点のために多くのプロトタイピングとテストがすでに行われていますが、その最小限のモデルは異なるコンテキストで多くの柔軟性、そして有用性を保証しています。しかし、これはあまりにも多くの不変条件を破り、直ちに後方互換性がありません。
そのロジックの一部には:
ほとんどのユーザーは、アカウントの実際の内容に詳しくない(アカウントとアドレスの違いさえわかっていないこともあります!)ため、アドレスの衝突を許すことは、EOAがCAを装ってユーザーの資金を引き付け、最終的にはすべてを盗むという長ったらしい試みが可能になるということを意味します。EIP-3607は、コードを含むアカウントが自分自身の認証ロジックを使用して残高を使うことができないようにすることで、これに対処しました。しかし、EIP 7702は、一部のプログラマビリティを得た後もEOAが自律的であり続けるようにするために、この不変条件を破っています。
アカウントのアドレスを署名することは、基本的にはinvokersを使った3074のスキームのようなものです。異なるチェーン上でアドレスが異なるコードコンテンツを持つ可能性があるため、クロスチェーンのコードコンテンツの一貫性に厳密な保証を提供しません。これは、あるチェーン上で同じロジックを含むコードコンテンツを持つアドレスが、別のチェーン上では悪意のあるものになる可能性があることを意味し、これはユーザー資金の損失につながる可能性があります。
現在の形式のEOAは、EVMが提供するプログラマビリティ機能をユーザーが活用できないため、大幅に制限されています。アカウントのアップグレードにはさまざまな方法がありますが、このレポートの冒頭で概説したように、選択したソリューションは、安全で安心なセルフカストディの原則を維持する必要があります。さらに、EOAのアップグレードは、ユーザーエクスペリエンスとアプリケーション開発者の両方に大きな影響を与える可能性があるため、すべての利害関係者の声を考慮する必要があります。
EOAが任意の方法でコードを実行できるようにすると、アカウントの機能が大幅に拡張されますが、この新しい表現可能性には、重大なリスクと盲点が伴います。これらのトレードオフを解決することは、イーサリアムユーザーに無競争のUXメリットをもたらすアップグレードを提供するために重要です。
イーサリアムのオープンな議論の文化は、ほぼすべての設計のほぼすべての意味合いが徹底的に専門家によって解体されるため、このようなイノベーションの素晴らしい試験場となっています。この包括的な考慮は、敵対者からの不正行為のリスクを軽減するのに役立つはずです。
EIP-7702は、現在、EOAにEVMプログラミング性をもたらす機構の模範とされており、PectraアップグレードのEIP 3074のスロットに代わるとして指定されています。 3074のメカニズムのオープンな設計を継承しながら、攻撃面/リスクを大幅に低減しています。 さらに、特定のオペコードクラスに制限を避けることで、3074の制限を回避することにより、より多くのことが可能になります。
提案のデザインにはまだいくつかの改良が行われていますが、特にVitalikが直接支持しているため、開発者から多くの支持と支援を既に得ています。
コミュニティ内では、アカウントの抽象化へのこのアプローチがスマートアカウントよりも優れていると主張されています。このコメントでは、この方法は変更が少なく、複雑ではないことを強調しており、EOAが既に確立されていると述べています。しかし、イーサリアムネットワークのあらゆるレベルでの将来のセキュリティのマイルストーンである量子耐性を忘れてはなりません。現在のアカウントモデルのコアでは、EOAの承認にはECDSAベースの署名スキームが使用されているため、この量子安全性は実現不可能です。
したがって、EOAのプログラマビリティは、宛先ではなく、スマートアカウントへのパスに沿ったステップと見なされるべきです。EOAを強化し、ユーザーエクスペリエンスと開発者エクスペリエンスを向上させると同時に、スマートアカウントの最終的なアカウント抽象化目標との互換性を維持します。
次のレポートでは、アカウントの抽象化のロードマップにどのように適合するかを見るために、次のようにEOA移行スキームに入る予定です。お楽しみに!
アカウントの抽象化は、ユーザーや開発者のエクスペリエンスを全体的に向上させることを目指しています。オンチェーンのエクスペリエンスをユーザーにとってよりアクセスしやすく楽しいものにするだけでなく、開発者がイーサリアム上でより強力なことを行い、ユーザーにさらに意味のある方法でサービスを提供できるようにもしています。
アカウントの抽象化へのアプローチの分類は次のとおりです:
このアプローチには、資産を移動せずにEOAからCAに移行することを可能にするメカニズムが備わっています。EIP 7377とEIP 5003(EIP 3074と併せて考えると)。
スマートアカウントの作成とアカウントの抽象化のプロトコルレベルでの確立について、以前にさまざまな提案が行われてきました;EIP-86そしてEIP-2938これらはよく引用されるもののいくつかです。しかし、この設計によって導入されるとされる複雑さと、イーサリアムがそのような複雑さに対して準備ができていないという多数派の意見により、多くの反対意見がありました。
The Merge後のVitalikの復活に続いて、ERC-4337スマートアカウント標準のオプトインバージョンとして提案され、MEV(最大抽出可能価値)のためのPBS(提案者-ビルダー分離)インフラストラクチャと類似しています。したがって、スマートアカウントの利点にアクセスしたいユーザーは、単純にERC-4337パイプラインを使用して、そのアカウントのロジックと取引の妥当性ルールを再定義することができます。これはUserOperation(またはUserOps)と呼ばれる構造体になります。
ERC 4337は、プロトコル外のエンシュラインされたスマートアカウントの代替として、現代のイーサリアムにスマートアカウントの利点をもたらしますが、複雑さをエンシュラインすることなく、そのままの複雑さを克服するためのものです。ただし、現在の状態ではインフラストラクチャが最適であるわけではなく、その複雑さはまだ重大な障害点です。
この複雑さに対処するために、RIP 7560ERC 4337のインフラストラクチャの神聖化バージョンとして、EthereumおよびそのL2全体にわたって起草されました。これにより、新しいルールを定義する必要なく、ネットワークのシビル耐性スキームを継承できます(ERC 4337が行っているように)。ERCの7562)
このレポートでは、EOAのプログラム可能性を探求し、このラインに沿ったさまざまなEIPを評価し、そのメリットと欠点について議論します。このシリーズのパート2と3では、イーサリアム内で探求されているアカウントの抽象化の残りの2つのアプローチのクラスをカバーします。
抽象化できるものを探すためには、経常勘定設計の(ある程度)全体像を把握する必要があります。このセクションは、主にイーサリアムのアカウントが実際に何であるか、そしてそれらのトランザクションがどのように検証され、実行されるかについての一種の改訂として機能します。
Ethereum accountsは、ether(ETH)のバランスとEthereumブロックチェーンでトランザクションを送信する能力を持つエンティティです。これらは、アカウントの保有物やトランザクションを指すユニークなポインターとして機能する42文字の16進数「アドレス」として表されます。
アドレスは、ブロックチェーンの状態トライへのキーとして機能します。このトライの葉ノードはアカウントデータ構造であり、4つのフィールドに分解することができます。
これらの4つのフィールドの内容は、アカウントのタイプを定義し、その機能の範囲を最終的に定義するために使用されます。したがって、Ethereumアカウントの2つのタイプは次のとおりです:
EOAは空のcodeHashとstorageHashフィールドを持ち、プライベートキーを所有する人によってのみ制御されることができます。アカウントのアドレスは、アカウントの公開キーのkeccak-256ハッシュの最後の20文字に「0x」を付けたものから取得できます。
彼らの取引は完全にプルベースであり、展開されたコードのロジックに基づいています。
これらのアカウントは、コード内容によってのみ制御されるため、秘密鍵は必要ありません。ただし、公開鍵は持っています。したがって、契約アカウントのコード内容を更新/変更できる能力を持つエージェントは、その残高にアクセスすることができます。
CAのアドレスは、作成者のアドレスと契約の展開ポイントまでのnonceから派生します。
トランザクション
最近、アカウントをイーサリアム上でトランザクションを送信する能力を持つ実体として説明しました。したがって、アカウントの主な目的はトランザクションを送受信することであり、ブロックチェーンはトランザクションの履歴を記録し、ブロックチェーンプロトコル仕様書に記載されているルールに基づいてトランザクションがアカウントフィールドをどのように変更するかを記述しています。
それでは、これらの「取引」とは何ですか?
取引は、アカウントから送信される操作で、ネットワークの「状態」に変更を引き起こします。それらはアカウントからの暗号化された署名付きの命令であり、実行されるとネットワーク全体の状態が更新されます。
無許可性は逆効果のインセンティブを伴いますが、これらに対処するためには、厳格なガイドライン(または有効性ルール)を定義する必要があります。
このコンテキストでは、トランザクションは特定の妥当性ルールに従って有効で実行可能でなければなりません。これらの妥当性ルールのほとんどは、トランザクションを送信するアカウントに配置された制約を介して実装され、アカウントの種類によって異なります。
イーサリアムでは、EOAはユーザビリティが向上しており、エンドユーザー向けに設計されています。特定の方法でトランザクションを送信し、完全に自律的に操作する能力を持っています。また、ローカルで作成することもできますが、より一般的な方法はMetaMask、Rainbow、Rabbyなどのウォレットプロバイダーの使用です。
一方、契約アカウントは、自身のロジックに許可されたトランザクションのみを「呼び出される」ことに応じて送信することができます。また、ステートストレージの支払いに十分な残高を持つEOAによってのみ作成されます。
より高度な説明は、EOAは残高しか保持できず、CAは残高と、この残高をどのように使うかを規定するロジックを保持できることです。
これらの特性は、アカウントの取引が従う必要があるルールを定義する次の論理パラメータによるものです。
これらのパラメータは、EOA向けに厳格に設計されています。
より一般的に、EOAの実行ロジックは、有効な署名ごとに1つのトランザクションに制約されています。
一方、CAsにはこれらのパラメータについての柔軟性があります:
ほとんどの実用的なケースでは、この場合に使用されるロジックは、CA のロジックの変更が有効であるためには、特定のアカウント(一般的には EOA)からの M of N の有効な署名(M < N)が必要であることを規定するマルチシグニチャスキームです。
これらの機能を評価すると、各種類のアカウントが自律性とプログラム可能性の間にトレードオフを持つように設計されていることがわかります。
EOAは完全な自律性を持ちますが、限定的なプログラム可能性があります。彼らはいつでもトランザクションを承認および送信することができますが、これらのトランザクションは厳格な形式に従わなければなりません。CAは完全なプログラム可能性を持っています(EVMの設計によってのみ制限されます)が、限定的な自律性を持っています。彼らのトランザクションは厳格な形式に従う必要はありませんが、彼らのロジックが最初に呼び出されるためにのみ送信されることができます。
以下のサブセクションでは、これらの設計選択肢の影響について研究し、このシリーズの各議論されたEIPの提案を完全に理解するために学びます。
今、私たちは異なるアカウントの機能についてかなり簡潔な知識を持っているので、イーサリアム上のユーザーと開発者の経験にとっての彼らのセリングポイントや問題を簡単に特定できます。
以前にも述べたように、EOAはエンドユーザーをターゲットとしたファーストクラスのアカウントとして設計されています。アプリケーションはこれらと簡単にやり取りするように設計されており、ほとんど複雑さはなく、もちろん作成にはコストがかかりません。しかし、そのシンプルさは厳密に決定論的に設計されているため、新しさの重要な部分を失っています。
それらに関する懸念の一部は:
誰もがいつもETHを保持することを望んだりできるわけではありません(価格の動きを見てください)、ですので、実現可能な解決策は複数のガス通貨を許可するかです(難しすぎて、「通貨」のセクションで説明されているように不変条件を多数壊してしまいます)ここまたは、トランザクションの起点でない別のアカウントによってガス料金を支払うことを許可するために、アカウントの抽象化を使用することがあります。
アカウントスペクトルの反対側にあるCAは、開発者やより技術的なユーザーベースをターゲットにしています。彼らはスマートコントラクトのための手段として機能し(つまり、スマートコントラクトをその中に含まれるロジックやコードの内容と見なします)、EVMによって可能にされる新しいトランザクション形式を実装することができます。
しかし、これらの機能にもかかわらず、それらは自律性を持たないため、称賛される二等アカウントです。彼らの欠点のいくつかは次の通りです:
このサブセクションで定義された問題につながる設計の選択肢を見直した後、提案された解決策を評価することができます。
アカウントの抽象化の概念(少なくともスマートアカウントを介して)は、常にEthereumのロードマップの重要な部分でした。実装に関連する複雑さがEthereumのローンチをさらに遅らせる可能性があるという伝説があり、異なる機能を提供する異なるアカウントを使用した現在のデザインのために廃止されました。Ethereumの焦点がThe Mergeに移ったことにより、再び遅れ、次の主要なアップグレードであるPectraのネットワークの主要な部分として再浮上しています。しかし、その複雑さはまだ埋め込まれることを阻害する重要な欠点と見なされており、特にEthereumがロールアップに焦点を当てるロードマップに切り替えたことを考慮すると、その影響は大きいです。
要件は今や二つに分かれています:
直感的に、この概念はチェーンの抽象化と相互運用性の文脈でより大きな役割を果たしますが、このレポート全体の範囲は、アカウントの抽象化自体を実現するために行われた技術的取り組みに限定されています。
アカウントの抽象化は、EOAとCAの最良の特徴を組み合わせて、新しいアカウント標準であるスマートアカウントを作成することを目指しています。スマートアカウントでは、任意のアカウントの有効性ルールを検証ロジックと実行ロジックに全体または一部分離することができます。つまり、アカウントは契約アカウントと同様にEVMに許可された範囲内で独自の有効性ルールを定義することができ、同時に完全に自律的な外部所有アカウントのままです。
スマートアカウントとスマートコントラクトウォレットの違いについては、しばしば混乱がありますので、以下でこれらの違いを明確に説明しましょう。
スマートコントラクトウォレットの商業化により、より広範な市場でCAsの採用が容易になり、技術的には少ないユーザーもその提供する機能を利用することができるようになりました。しかし、それらはまだCAsに関連する落とし穴に直面しています。
会話に戻ります。以前にアカウントのトランザクションの妥当性ルールを定義するために使用されるパラメータについて話し合いました。
最初の4つのパラメータの値は、トランザクションの実行が開始される前に行われるチェックである、アカウントの検証ロジックとして総称されることがあります。
最後のパラメータは、トランザクションの実行方法を定義します。
イントロダクションでは、現在のAAランドスケープの概要を、提案されたさまざまな設計の分類という形で提供しました。ここでは、イーサリアムのアカウントのジレンマに対する最初のクラスのソリューションであるEOAプログラマビリティに焦点を当てます。
イーサリアムの最大の魅力は、若いながらも活気あるDeFiエコシステムであり、その中には主要な流動性の吸収源となるさまざまな分散型アプリケーションがあります。これらのDAppのほとんどはEOAに対応するように最適化されているため、CAやスマートアカウントとのインターフェースは困難です。スマートコントラクトウォレットはこの場合CAを支援しますが、それには独自の制限とまったく異なるUXがあります。
スマートアカウントの標準に慣れるまで、DAppsとウォレットプロバイダーの両方が探索されている暫定的な解決策は、EOAに一時的な拡張機能を提供することです。これにより、制約された制約や実行ロジックを克服できます。
以下、私たちは行動可能な経路を提供する3つの主要なEIPの仕様について説明します。EIP 5806、野心的なEIP 3074そして最後に勝利へEIP 7702.
この提案は、EOA(外部所有アカウント)の標準にさらなる機能をもたらすため、コントラクトアカウントのロジック(スマートコントラクト)へのデリゲートコールを実行できるようにすることを目指しています。これにより、スマートコントラクトは呼び出し元EOAのコンテキストで実行され、つまり、EOAはバリデーションロジックを制御し続ける一方で、実行ロジックは対応するCAのロジックによって処理されます。
さらに進む前に、イーサリアムの進化の記憶の道をたどってみましょうEIP-7.
EIP-7は、0xf4/DELEgateCALLオペコードの作成を提案し、これはプライマリアカウントにメッセージコールを送信し、セカンダリアカウントのロジックを使用しながら、プライマリアカウントの[sender]および[value]フィールドの値を維持します。
言い換えると、プライマリアカウントは、メッセージ呼び出しで指定された期間中、セカンダリアカウントのロジックを「継承」(または好むなら借用)し、その結果、後者のロジックが前者の文脈で実行されます。
このオペコードは、dApp 開発者がアプリケーションのロジックを複数のスマートコントラクトに分割しながら、相互依存関係を維持できるようにすることで、コードサイズの障壁やガスの障壁を簡単に迂回できるようにしました。
OK、したがって、どのデリゲートコールがCA同士が相互依存できるようにするのでしょうか?EIP-5806は、EIP-7をインスピレーションにして、デリゲートコール機能をEOAにも拡張することを提案します。つまり、EOAもCAと相互依存できるようにしましょう。なぜなら、そうした方がいいからです。
EIP 5806は新しいものを導入しますEIP-2718準拠以下のようにパックされたトランザクションタイプ
rlp([chainID、nonce、max_priority_fee_per_gas、max_fee_per_gas、gas_limit、destination、data、access_list、signature_y_parity、signature_r、signature_s])。
これらのトランザクションは、[to]フィールド(受信者のアドレスを表す)が20バイトの入力としてのみアドレスを受け入れるように設計されており、CREATEオペコードの使用を送信者が無効にするようになっています。
RLPスキームの各コンポーネントの動機は次のとおりです:
EIP-5806トランザクションのEIP-2718封筒へのパッキングにより、これらは大幅に後方互換性があるようになりますが、EOAはCAと同等ではありません。そのため、不変条件の破損を防ぐために、EOAがデリゲートコールを利用する方法には特定の制限が定義される必要があります。
これらの制限は以下のオペコードを対象としています:
EIP 5806 の主な適用性は、EOA の実行の抽象化です。EOAがロジックの単純な呼び出しを超えてスマートコントラクトとトラストレスに対話できるようにすることで、次のような機能が付与されます。
EIP-5806によって提案された変更は、必要な機能を可能にする一方で、特に斬新ではありません。その存在は、既に機能しているEIP-7に基づいています。これにより、多くの潜在的な受け入れの障壁を回避することができます。
初期の段階での主な懸念の1つは、EOAがストレージにアクセスして変更するという潜在的なリスクでした。これは、CAが現在行っているのと同様に、ネットワークに絶対的に定められた不変条件の多くを破壊します。そのため、前のサブセクションで言及された制限を導入することで対処されました。
2つ目の批判(これは少し諸刃の剣です)は、EIP-5806の単純さです。EIP-5806 を受け入れることによる報酬は、実行の抽象化のみが可能で、それ以外はあまり有効ではないため、コストに見合わない可能性があるという意見もあります。EIP-5806 にオプトインする EOA では、次のサブセクションで説明する他のやや類似した EIP とは対照的に、他のすべての有効性制限はネットワークで定義されたままです。
EIP-3074は、EOAが特殊なコントラクトアカウントであるインボーカーに対して、その検証ロジックの大部分を委任することを提案しています。これにより、特定のトランザクション形式に対して、インボーカーの認証ロジックが彼らの上に重ねられます。
これにより、アクセスポリシーをインボーカーコントラクトに署名することで、そのコントラクトがEOAのアクセスポリシーを定義する責任を負うことによってこれを達成します。
このEIPでは、EVMに2つの新しいオペコードの追加が提案されています。
これらの2つのオペコードにより、EOAは事前に設定されたCAに制御を委任し、それを通じて1つとして行動することができ、契約を展開し、それに関連するコストと外部性を負担する必要がありません。
EIP-3074 では、トランザクションで [MAGIC] 署名形式を使用して、他のトランザクション署名形式との衝突を防ぐことができます。[AUTHCALL] 命令が渡されるアクティブなアカウントは、[authorized] という名前のコンテキスト変数フィールドとして定義され、これは 1 つのトランザクションを通じてのみ保持され、新しい [AUTHCALL] ごとに再定義する必要があります。
各オペコードの複雑さに取り組む前に、これらがEIP-3074トランザクションに関係するエンティティであることに注意してください。
呼び出し元コントラクトは、[authority] から [COMMIT] 値を持つ [AUTH] メッセージを受信します。この値は、アカウントが [authorized] による [AUTHCALL] 命令の実行に課したい制限を定義します。
したがって、呼び出し元は、[authorized]アカウントで定義された[contract_code]が悪意がなく、主要な署名アカウントによって設定された不変条件を満たす能力を持っていることを確認する責任があります。[COMMIT]値。
[AUTH]オペコードには3つのスタック要素入力があります。つまり、1つの出力を計算するために3つの入力で定義されています。これらの入力は次のとおりです。
最後の2つの入力は、0から97までの変更可能なメモリ範囲を表すために使用されます。
変数[yParity]、[r]、および[s]は、メッセージ上のsecp256k1曲線におけるECDSA署名[magic]として解釈されます。
[keccak256 (MAGIC || chainID || nonce || invoker address || COMMIT)]
どこ:
計算された署名が有効で、署名者のアドレスが [authority] と等しい場合、[authorized] フィールドは [authority] によって指定された値に更新されます。これらの要件のいずれかが満たされない場合、[authorized] フィールドは以前の状態のまま、または未設定の値のままになります。
このオペコードのガスコストは、次の合計として計算されます:
[AUTH]はメモリを変更しないように実装されており、[authority]の値を引数として受け取るため、提供された署名から値を簡単に検証することができます。
[AUTHCALL]オペコードには、計算に使用される7つのスタック要素入力があり、単一のスタック要素出力を計算するために使用されます。
これは [CALL] オペコードと同じロジックを持ちます。これは、アカウントにメッセージ呼び出しを送信し、そのコントラクトで特定のロジックをトリガーするために使用されます。ロジックの唯一の逸脱点は、[AUTHCALL] が実行を続行する前に [CALLER] の値を設定するように設計されていることです。
したがって、[AUTHCALL] は [authority] によって [authorized] のコンテキスト固有の動作をトリガーするために使用され、論理チェックは次のように進行します。
[AUTHCALL] のガスコストは、次の合計として計算されます。
[AUTHCALL]から返されるデータは次のようにアクセスされます:
すべてをまとめると、テクニカルな言葉をあまり使わずに言えば、イーサリアムのトランザクションでは通常2つの値が指定されます。
以前に言及したように、EOAでは、認証は実行と密接に結びついています、つまり、(tx.origin == msg.sender)です。この単純な不変条件は、このレポートの「アカウントとトランザクションの正当性」のサブセクションで説明した多くの問題を引き起こします。
[AUTH]メッセージは、[authority]からのメッセージによって、tx.origin関数を[authorized]にオフセットすることができますが、msg.senderのままです。また、[COMMIT]値を使用してこの特権に制限を定義することもできます。
[AUTHCALL]は、[authorized]が[invoker]を介して契約のロジックにアクセスできるようにし、アクセスする契約が安全であることを保証します。つまり、[AUTHCALL]ごとに、[authorized]は[COMMIT]用の特定の[invoker]を指定する必要があります。
EIP 3074は、主にEOAが承認ロジックを別のアカウントに委任できるようにすることが主な役割ですが、そのオープンな設計により、さまざまなコンテキストでさらに多くの機能が可能になります。
EOAの全検証ロジックは、必要に応じてインボーカーにさまざまな制約/革新を適用することによって抽象化できます。ターゲットロジックに基づく可能性のある設計の一部は次のとおりです。
また、実行ロジックは直感的に抽象化されています。つまり、すべての呼び出し元(つまりCA)が、今ではEOAの代理で取引リクエストを実行する責任があります。
引用その著者の1人は、「ウォレットが任意の呼び出し元に署名機能を公開することは期待していない」と述べています。 3074イニシアチブによって提示される最大の問題は、その上にイノベーションが非常に簡単に許可された取引フローと独自の取引フローになることです。まるで現在のEthereumのMEVとPBS市場の現在のイテレーションのように。
デフォルトでは、インボーカーコントラクトは、現在可能な攻撃よりも悪化する可能性があるため、非常に厳格に監査する必要があります。これにより、影響力のある人物によって開発されたわずかな数のインボーカーコントラクトだけが、ウォレット開発者のデフォルトとして採用される生態系になるでしょう。したがって、ユーザーのセキュリティのリスクを冒しながら、常に監査を行い、インボーカーコントラクトをサポートするハードな分散型の道を選択するか、より確実なユーザーセキュリティを保証し、契約の安全性に対する監視を減らす確立された信頼できるソースからインボーカーコントラクトを採用するかのトレードオフに帰着します。
このポイントの別の側面は、機能的で安全なインボーカーを設計し、監査し、マーケティングするために関連付けられたコスト関数です。小規模チームはほとんど常に、特にマーケティングの面で、すでに一定の評判を持つ大手組織によって上回られるでしょう。たとえ彼らの製品がより良いとしても。
EIP-3074 は、呼び出し側を介して導入された承認スキームよりも有効であると見なされるため、ECDSA 署名スキームを定着させます。量子抵抗は今のところ決定的な問題ではなく、ECDSAが壊れやすい未来ではもっと深刻な危機に瀕しているという議論もありますが。イーサリアムのやや明言されていない目標は、常にそのような問題の先を行くことです。UXのわずかな改善のために量子抵抗と検閲耐性を犠牲にすることは、近い将来、最善の選択ではないかもしれません。
フォワード互換性の議論のもう1つのポイントは、3074の利点がまだ評価されている間に、プロトコルの変更を必要としないERC-4337(現在は大きな市場があります)があるため、それにも互換性を持たなければならないことです。それを避けるために、エコシステムの区画化を避けるためにも、それにも対応する必要があります。
ネイティブなアカウントの抽象化ロードマップを使用しても、[AUTH]および[AUTHCALL]オペコードは最終的にEVMで廃止され、わずかなUXの改善を提供するためにイーサリアムに多くの技術的負債をもたらします。
[AUTH]メッセージを送信し、コントロールを委任した後、EOAは通常の秘密鍵認証方式を避けることが期待されます。なぜなら、「通常の」トランザクションを送信すると、委任した認可がすべての呼び出し元に取り消されるからです。
したがって、ECDSAスキームは、関連する契約が有効にする他のいかなる認証スキームよりも厳格に優れているため、秘密鍵の紛失はアカウントの資産の完全な損失をもたらすことになります。
この提案は、元々EIP 3074のややミニマリスティックなバリエーションとして設定されていました。意味もそれに対するアップデートであるとされ、特に既に繁栄している4337エコシステムおよびネイティブアカウント抽象化提案(RIP 7560)との非互換性に関する懸念を解消するためにEIP 3074の潜在的な非効率性に対処するために生まれました。
そのアプローチは、新しいEIP 2718に準拠したトランザクションタイプである[SET_CODE_TX_TYPE]の追加です。これにより、特定のトランザクションに対してEOAがスマートアカウントとして振る舞うことができます。
この設計により、EIP 5806と同じ機能とさらにいくつかの機能が可能になりますが、ネイティブのアカウントの抽象化のロードマップと既存の取り組みとの互換性は維持されます。
EIP-7702は、[SET_CODE_TX_TYPE] 2718準拠のトランザクションを介して、EOAが契約のコード内容を「インポート」することを許可します。フォーマットは次のとおりです:
rlp([chain_id、nonce、max_priority_fee_per_gas、max_fee_per_gas、gas_limit、destination、value、data、access_list、authorization_list、signature_y_parity、signature_r、signature_s])
このペイロードは、EIP 5806とまったく同じですが、「許可リスト」を導入しています。このリストは、次の形式の順序付けられた値のシーケンスです:
[[chain_id、address、nonce、y_parity、r、s]、...]
各タプルは、[address]の値を定義します。
先に進む前に、SET_CODE_TX_TYPEに関与する当事者は次のとおりです。
【権限】が[アドレス]を指定するSET_CODE_TX_TYPEに署名すると、委任指示子が作成されます。これは「ポインタプログラム」であり、[権限]のアクションによるすべてのコード取得要求がいつでも[アドレス]の観察可能なコードに結合されるようにします。
各 [chain_id、address、nonce、y_parity、r、s] のタプルに対して、7702型トランザクションの論理フローは次のとおりです:
ふぅ! すべてを結びつけるために、このEIPによってEOAは、コントラクトのコードへのポインタを設定するトランザクションを送信できるようになり、それによってEOAは後続のトランザクションで独自のロジックを実装できるようになります。この方法によって、EIP 5806よりも厳密に強力です。なぜなら、EOAは実際にはコードの内容を望むだけの時間を持つことができるからです(EIP 5806では単にEOAがデリゲートコールを送信できるようにするだけです)。
EOAが実行したいロジックを積極的に受け入れるため、もはや抽象化ではないと主張できるかもしれませんが、それでもそのロジックの「主要な所有者」ではありません。また、直接ロジックを含んでいるわけではなく、計算の複雑さを減らすためにロジックへのポインターを指定するだけです。したがって、実行抽象化に進みます!
require(msg.sender == tx.origin)の不変条件が自己スポンサーシップを許可するために破棄されている間、EIPは依然としてスポンサーされたトランザクションリレーアの統合を許可しています。ただし、注意点として、そのようなリレーアにはガイフィング攻撃を防ぐための評判またはステークベースのシステムが必要です。
EOAはアカウントのコードの特定の部分を指すことができます。そのため、その部分のロジックのみが彼らのコンテキストで実行可能です。
これにより、特定のdAPPが特定の条件下でアカウントの残高にのみアクセスできるようにするサブキーの存在が可能になります。「特権のエスカレーション」を実現するために使用されます。たとえば、ERC-20トークンを消費する権限を持つがETHを消費する権限は持たない、または1日に総残高の1%までしか消費できない権限、または特定のアプリケーションとのみやりとりできる権限などが考えられます。
非制限的な性質のため、EIP-7702トランザクションは、手数料市場論理(例:EIP-1559およびEIP-4844)などの制限的なパラメーターなしに、CREATE2オプコードにアクセスしてバイトコードをアドレスに展開することを許可する可能性があります。これにより、同じバイトコードを持つ複数のステートマシン上で復元および使用されるアドレスが可能になり、各チェーン上のそのアカウントが他のコンテキスト変数パラメータを定義する責任を負います。
EIP-7702はまだ非常に最近のものですが、その依存関係や潜在的な欠点のために多くのプロトタイピングとテストがすでに行われていますが、その最小限のモデルは異なるコンテキストで多くの柔軟性、そして有用性を保証しています。しかし、これはあまりにも多くの不変条件を破り、直ちに後方互換性がありません。
そのロジックの一部には:
ほとんどのユーザーは、アカウントの実際の内容に詳しくない(アカウントとアドレスの違いさえわかっていないこともあります!)ため、アドレスの衝突を許すことは、EOAがCAを装ってユーザーの資金を引き付け、最終的にはすべてを盗むという長ったらしい試みが可能になるということを意味します。EIP-3607は、コードを含むアカウントが自分自身の認証ロジックを使用して残高を使うことができないようにすることで、これに対処しました。しかし、EIP 7702は、一部のプログラマビリティを得た後もEOAが自律的であり続けるようにするために、この不変条件を破っています。
アカウントのアドレスを署名することは、基本的にはinvokersを使った3074のスキームのようなものです。異なるチェーン上でアドレスが異なるコードコンテンツを持つ可能性があるため、クロスチェーンのコードコンテンツの一貫性に厳密な保証を提供しません。これは、あるチェーン上で同じロジックを含むコードコンテンツを持つアドレスが、別のチェーン上では悪意のあるものになる可能性があることを意味し、これはユーザー資金の損失につながる可能性があります。
現在の形式のEOAは、EVMが提供するプログラマビリティ機能をユーザーが活用できないため、大幅に制限されています。アカウントのアップグレードにはさまざまな方法がありますが、このレポートの冒頭で概説したように、選択したソリューションは、安全で安心なセルフカストディの原則を維持する必要があります。さらに、EOAのアップグレードは、ユーザーエクスペリエンスとアプリケーション開発者の両方に大きな影響を与える可能性があるため、すべての利害関係者の声を考慮する必要があります。
EOAが任意の方法でコードを実行できるようにすると、アカウントの機能が大幅に拡張されますが、この新しい表現可能性には、重大なリスクと盲点が伴います。これらのトレードオフを解決することは、イーサリアムユーザーに無競争のUXメリットをもたらすアップグレードを提供するために重要です。
イーサリアムのオープンな議論の文化は、ほぼすべての設計のほぼすべての意味合いが徹底的に専門家によって解体されるため、このようなイノベーションの素晴らしい試験場となっています。この包括的な考慮は、敵対者からの不正行為のリスクを軽減するのに役立つはずです。
EIP-7702は、現在、EOAにEVMプログラミング性をもたらす機構の模範とされており、PectraアップグレードのEIP 3074のスロットに代わるとして指定されています。 3074のメカニズムのオープンな設計を継承しながら、攻撃面/リスクを大幅に低減しています。 さらに、特定のオペコードクラスに制限を避けることで、3074の制限を回避することにより、より多くのことが可能になります。
提案のデザインにはまだいくつかの改良が行われていますが、特にVitalikが直接支持しているため、開発者から多くの支持と支援を既に得ています。
コミュニティ内では、アカウントの抽象化へのこのアプローチがスマートアカウントよりも優れていると主張されています。このコメントでは、この方法は変更が少なく、複雑ではないことを強調しており、EOAが既に確立されていると述べています。しかし、イーサリアムネットワークのあらゆるレベルでの将来のセキュリティのマイルストーンである量子耐性を忘れてはなりません。現在のアカウントモデルのコアでは、EOAの承認にはECDSAベースの署名スキームが使用されているため、この量子安全性は実現不可能です。
したがって、EOAのプログラマビリティは、宛先ではなく、スマートアカウントへのパスに沿ったステップと見なされるべきです。EOAを強化し、ユーザーエクスペリエンスと開発者エクスペリエンスを向上させると同時に、スマートアカウントの最終的なアカウント抽象化目標との互換性を維持します。
次のレポートでは、アカウントの抽象化のロードマップにどのように適合するかを見るために、次のようにEOA移行スキームに入る予定です。お楽しみに!