SST:アステカの共有州木

1 はじめに

Aztec チームは、11 月に設計した SST (Shared State Trees) データ構造をリリースしました。具体的なドキュメントについては、次を参照してください。

そして、Noir を使用して検閲可能なトークン アクセス制御の例を作成しました。

SST (Shared State Trees) データ構造は以下をサポートします。

  • プライベート実行コンテキストの状態情報にアクセスして、プライベート状態管理を実装します。
  • パブリック実行コンテキストの状態情報にアクセスして、パブリック状態管理を実装します。

SST の共有アクセス メカニズムは、次のシナリオで特に役立ちます。

  • 1) アドレス登録: 他のコントラクトと対話するコントラクトをサポートし、パブリック実行およびプライベート実行でアクセス可能なアドレス ストレージの取得を容易にします。
  • 2) 不変値: 特定のコントラクトアドレスなどの特定の定数値。単一の不変の場所に保存されることでメリットが得られ、パブリック シナリオとプライベート シナリオの両方で一貫性が提供されます。
  • 3) アクセス制御: コントラクト内の権限を管理します。たとえば、トークン コントラクトの所有者は新しいトークンを鋳造できますが、これはパブリック実行とプライベート実行の間で共有するとより効率的です。

2.単層SST

契約固有の SST は次のとおりです:
ここに画像の説明を挿入します
ここで:

  • C m \mathcal{C}_mCm は: 特定の契約の場合 m m m の 1 つの集合値 V m , j ∀ j V_{m,j}\forall j mj j のコミットメント値。 [現在、コミットにマークル ツリーを使用しています。将来的には、ストレージ要件をさらに削減するために、https://github.com/geometryresearch/semacaulk などの他のオンチェーン多項式コミットメント スキームの使用を検討してください。 (堅牢性+錆び) 。 Semacaulk は、安価な挿入をサポートするためにオンチェーン多項式コミットメントを使用するカスタマイズされたセット メンバーシップ証明の証明者および検証者であり、検証オーバーヘッドは単一の Groth16 証明を検証するのと同等です。 】

単層 SST から値を読み取ります。

  • パブリック読み取り: 直接読み取り V m , j V_{m,j} mj
  • プライベート読み取り: つまり、 V m , j ∈ C m V_{m,j}\in \mathcal{C}_m を提供します。mj Cm の会員証。

単層 SST 中の特定の値を更新します V m , j V_{m,j} mj V m , j ′ V_{m,j}' mj' 、次の 2 つのステップに分ける必要があります。

  • 1)证明 V m , j ∈ C m V_{m,j}\in \mathcal{C}_m mj Cm 、つまり現在の値 V m , j V_{m,j} mj 状態で。
  • 2)当 V m , j V_{m,j} mj で置き換え V m , j ' V_{m,j}' mj' その後、新しいコミットメント値を計算します C m ' \mathcal{C}_m' Cメートル'

つまり、単層 SST が更新されるたびに、値を更新する必要があります。 V m , j V_{m,j} mj 値自体と単層 SST の確定値 C m \mathcal{C}_m Cm 。このアプローチには次の問題があります。

  • 1) 契約漏洩: 契約固有の SST を検索すると、どの契約を検索しているかが漏洩します。
  • 2) 以前の会員証明を無効にします。 2 人が同じ契約の金額を同時に更新した場合、最初に完了した契約の証明は 2 番目の契約の証明を無効にします。

3. 多層SST

コントラクト漏洩の問題を解決するために、マルチレイヤー SST として構築された追加レイヤーが導入されます:
ここに画像の説明を挿入します
マルチレイヤー SST から特定の値を読み取ります:

  • 公開読み取り: 直接読み取り V i , j V_{i,j} ij
  • private读取:即提供 V i , j ∈ C i V_{i,j}\in \mathcal{C}_i ij Ci C i ∈ C \mathcal{C}_i\in \mathcal{C} Ci C のメンバーシップ証明。

更新多層 SST 中の特定の値 V i , j V_{i,j} ij V i , j ′ V_{i,j}' ij' 、次の 3 つのステップに分ける必要があります。

  • 1)证明 V i , j ∈ C i V_{i,j}\in \mathcal{C}_i ij Ci C i ∈ C \mathcal{C}_i\in \mathcal{C} Ci C、つまり現在の値 V i , j V_{i,j} ij 状態で。
  • 2)当 V i , j V_{i,j} ij 替换为 V i , j ′ V_{i,j}' ij' の後、新しいコミットメント値を計算します C i ' \mathcal{C}_i' C'
  • 3)基于新的 C i ′ \mathcal{C}_i' C' 、新しいコミットメント値を計算します C ' \mathcal{C}' C'

这样, C i ∈ C \mathcal{C}_i\in \mathcal{C} Ci C のメンバーシップ証明は他の契約から独立しています。ただし、他のコントラクトを変更するとそのメンバーシップ証明が無効になるため、SST 読み取りを非公開実行で使用することはできません。

4. SST の更新が遅い

多層SSTにおける条件競合問題を解決するために、「遅延」更新または「遅い」更新の概念が導入される。論理的に言えば、2 つのツリーを維持および追跡する必要があります。

  • 現在のツリー: 現在の値の場合
  • 保留ツリー: 保留中の値に使用されます。

エポック間隔に達すると、現在のツリーが保留中のツリーに置き換えられ、新しい保留中のツリーが有効になります。
ここに画像の説明を挿入します
これにより、読み取り失敗の問題は大幅に解決されましたが、他のコントラクトによって引き起こされる更新失敗の問題は依然として残ります。同時に更新する必要がある 2 つの異なるツリーを追跡する必要があるため、必要なストレージ変更の量が非常に多くなります。

5.実質的に遅いアップデート

更新に必要なストレージの量と上記の低速更新 SST の複雑さを軽減するために、低速更新 SST に基づいて変更が加えられました。

  • エポック スワップのオーバーヘッドを更新全体にわたって償却します。

ここに画像の説明を挿入します
対応する更新プロセスは次のとおりです。
¥
具体的な例は次のとおりです。
ここに画像の説明を挿入します

参考文献

[1] アステカ 2023 年 11 月 共有州ツリー - SST

アステカシリーズのブログ

おすすめ

転載: blog.csdn.net/mutourend/article/details/134683572