Vitalik Buterin: イーサリアムのステートレス クライアント ソリューションはどのように改善できますか?
Winkrypto
2021-07-01 09:51
本文约1908字,阅读全文需要约8分钟
各アドレスに 32 バイトの「エポック プレフィックス」を追加すると、時間の経過とともにアドレス空間が指数関数的に圧縮される問題が解決される可能性があります。

元のタイトル:「もう一つの州に優しいバインドアドレススキーム」
執筆者: Vitalik Buterin、イーサリアム共同創設者
副題

復習: 状態サイズ管理手法

イーサリアムの状態容量が際限なく拡大するのを防ぐには、何らかの方法で古い状態を「非アクティブ化」し、ネットワークに参加するノードが古い状態を保存する必要がなくなるようにする必要があります。たとえクライアントの大部分がステートレスになったとしても、最終的にはネットワークがすべての状態を常に利用できることを保証できないところまでシステムが拡張されることは十分に予測できるようです。古い状態を非アクティブ化するには 2 つの方法があります。

  • これを直接削除し、別のマークル ツリーに移動します。これにより、状態オブジェクトに関心がある人は、対応するマークル ブランチを取得し、それを使用して将来のある時点で状態をアクティブ化できます。

  • オブジェクトはツリー構造の外に移動されるのではなく、ツリー内のその時点で「非アクティブ化」とマークされるだけなので、ノードはオブジェクトを保存しません (また、プロトコルはオブジェクトに保存することを要求しません)。非アクティブ化されたオブジェクトは、状態にアクセスするためのマークル証明 (つまり、証人データ) を提供するトランザクションを送信することで再アクセスできます。

アプローチ (1) は「古典的なストレージ レント スキーム」に対応し、アプローチ (2) は従来の「ステートレス クライアント」の最も単純な拡張、つまり古い状態を忘れることができるモデルに対応します。これらのアプローチは両方とも、特定の状態オブジェクトに関心がある個人がマークル ブランチを追跡できるようにするため、後でそれらの状態オブジェクトが非アクティブになった場合にそれらのブランチを使用してアクティブにすることができます。ただし、これらのアプローチには両方とも明らかな問題があります。

方法 (1) には、期限切れの契約と同じアドレスで契約を再作成する必要があるという特殊なケースがいくつかあります。つまり、アドレス A でコントラクトが作成されて有効期限が切れた場合、アドレス A でコントラクトを作成したトランザクションが再実行され、アドレス A で新しいオブジェクトが作成され、元のオブジェクトに影響を与えます。もう 1 つの状況は、オブジェクトがアドレス A で作成され、その後非アクティブ化され、アクティブ化され、変更され (たとえば、契約上の資金を別の口座に送金する)、再度非アクティブ化され、その後最初の非アクティブ化が使用される場合です。マークル ブランチがアクティブ化される場合です。 。これは予約ルールに違反しており、鋳造に使用される可能性があります。同様に有効化しようとしている別の特定の州によって契約が有効化されていないことを証明するには、追加のマークル証明を追加する必要があります。

副題

提案

上記の問題を解決できる方法 (2) の変形を提案します。方法 (2) の多くの提案された実装で示されているように、アカウントには「アクティブ」と「非アクティブ」の 2 つの状態があり、非アクティブなアカウントとは 1 年以上アクセスされていないアカウントです。非アクティブ化されたアカウントにアクセスするには、証人データを提供する必要があります。非アクティブ化されたアカウントにアクセスすると、アカウントは自動的に非アクティブ化されます (いずれかのアカウントをタッチすると、1 年間の非アクティブ化期間の計算がリセットされます)。変更内容は次のとおりです。

各アドレスに 32 バイトの「エポック プレフィックス」(整数として解釈されます)を追加します。たとえば、エポック プレフィックスが 9 のアドレスは、プレフィックス 00000009 が付いている 0x00000009de0b295669a9fd93d5f28d9ec85e40f4cb697bae のようになります。

マークル パスは、エポックのハッシュではなくプレフィックスに直接依存します (したがって、現在使用されている merkle_path_key = hash(address) ではなく、merkle_path_key = address[:4] + hash(address[4:]) になります。これにより、「未使用」が保証されます。 " アドレス空間は連続しています。

アドレスは、エポックプレフィックスがブロックチェーンの実行年数以下でない限り使用できません

エポック プレフィックスを引数として受け取り、そのエポック プレフィックスを持つアドレスでコントラクトを作成する CREATE3 オペコードが追加されます。

最新のエポック プレフィックスが依然としてアクセス可能な完全な状態が確実に存在するため、ユーザーと契約者は、デフォルトであっても常に可能な限り最新のエポック プレフィックスを使用してアカウントを作成することをお勧めします。また、「反事実のアドレス」(つまり、コントラクトコードがリリースされる前にユーザーがオンチェーン(例: ETH または ERC20 トークンの送信によって)またはオフチェーン(チャネル内での対話によって)と対話するアドレス)を保存するために、依然として古いエポックプレフィックスを使用してコントラクトを作成することが可能です。ただし、虚偽のアドレスを作成したいユーザーの場合、長期間そうしなかった場合、アカウントの古い状態のフォークを保存する責任があります。

長年の運用の後、アクティブな状態は 2 つの部分で構成されることが予想されます: (i) 最新のエポックがプレフィックスとして付けられたアドレス空間全体、および (ii) 最近アクティブに使用されていたアカウントに対応する特定の古い状態

ソースリンク:

ソースリンク:ethresear.ch

Winkrypto
作者文库