コンテンツにスキップ

データ可用性

Sunriseデータ可用性レイヤーは、高スループットのデータ可用性のために設計されており、アプリケーションに強化されたスケーラビリティと柔軟性を提供します。これを達成するために、SunriseはオフチェーンのBLOBデータを採用し、ブロックデータ全体ではなく、各Blobデータに対してErasure Codingを実行します。

x/daモジュールはこれらの機能を提供します。

SunriseのオフチェーンDA設計は、オンチェーンのセキュリティを犠牲にすることなく、比類のないスループットとコスト効率を実現します。

  1. オフチェーンのイレージャーエンコーディング バリデーターの計算とストレージを劇的に削減します。オンチェーンには、これらのイレージャーコーディングされたデータ共有を指すメタデータURIのみがあり、完全なデータ再構築はオフチェーンで行われます。
  2. オフチェーンストレージ統合 IPFSやArweaveなどの分散型ストレージソリューションを利用して、データシャードは外部に保存されます。MsgPublishDataには、これらのイレージャーコーディングされたデータ共有を指すメタデータURIのみが含まれ、ブロブトランザクションのオンチェーンブロックサイズ要件を削減し、スケーラビリティを向上させます。
SunriseAvail DACelestiaEigenDAEthereum (EIP-4844)
アーキテクチャオフチェーンブロブを持つL1L1ブロックチェーンL1ブロックチェーンDAサービスL1ブロックチェーン(ブロブ)
スループット5+ MB/s0.2 MB/s (4MB/ブロック)1.33 MB/s (8MB/ブロック)15 MB/s0.064 MB/s
ファイナリティまでの時間約4分 (7秒+240秒)40秒6秒 + 10分12分12分
データストレージオフチェーンブロブオンチェーンオンチェーン委員会ストレージオンチェーンブロブ
証明メカニズムオフチェーンストレージによる楽観的証明有効性証明 (KZG)不正証明有効性証明有効性証明
長期的な検索可能性シームレスネイティブではないネイティブではないネイティブではないネイティブではない
コストモデル流動性による手数料の抽象化直接手数料直接手数料委員会手数料オンチェーンガス手数料
コンセンサスプルーフ・オブ・リクイディティBabe & Grandpa (NPoS)TendermintN/AGhost & Casper
  1. データ可用性委員会

    データ可用性委員会(DAC)は、低コストで代替のデータ可用性レイヤーを構築するための従来の方法です。

    しかし、DACでは、クライアントが委員会によって証明されたデータ可用性が真か偽かを、ブロブデータ全体をダウンロードせずに検証することは不可能です。

  2. データ可用性サンプリング

    データ可用性サンプリング(DAS)を採用するデータ可用性レイヤーでは、ブロックデータはイレージャーコーディングのために処理されます。その後、クライアントはブロックデータの一部をダウンロードするだけでデータ可用性を検証でき、マークルツリー構造を使用してブロック内のブロブデータの包含を検証できます。

    一般的なDASのセットアップでは、フルノードはmempool内のトランザクションデータを転送およびダウンロードする必要があります。

    ブロブデータのサイズが大きくなるにつれて、ネットワークのスループットはこれらのトランザクション転送によって制限される可能性があり、大きなブロブデータを扱うアプリケーションにとって課題となります。

DACとDASにおけるこれらの問題に対処するために、Sunriseは次の解決策を実装しています。

  1. オフチェーンのイレージャーエンコーディング バリデーターの負荷を軽減するために、ブロブデータはオフチェーンプログラムでイレージャーコーディングのために処理されます。

  2. ブロブデータのシャーディング ブロックデータ全体ではなく、各ブロブがイレージャーコーディングのために処理されます。クライアントは、データ全体をダウンロードすることなく、シャードのダウンロードを繰り返すだけで各ブロブのデータ可用性を検証できます。クライアントはまた、マークルツリー構造を使用してブロック内のブロブの包含を検証できます。

  3. 外部ストレージ ブロブデータは、IPFSやArweaveなどの分散型ストレージプラットフォームに保存されます。ブロブデータをオンチェーンに含む代わりに、MsgPublishDataはイレージャーコーディングされたデータ共有を指すメタデータURIを保持します。

    message MsgPublishData {
    option (cosmos.msg.v1.signer) = "sender";
    string sender = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];
    string metadata_uri = 2;
    uint64 parity_shard_count = 3;
    repeated bytes shard_double_hashes = 4;
    string data_source_info = 5;
    }

    データ可用性は楽観的な方法で証明されます。Sunriseネットワークに十分な無効性の異議が提出された場合、バリデーターは二重ハッシュ化されたシャードデータ(shard_double_hashes)を使用してゼロ知識証明(ZKP)を提出し、バリデーターがシャードデータを明らかにすることなくその存在を検証できるようにします。

提出されたデータは、次のいずれかのステータスになります。

  • 作成済み異議申し立て期間異議申し立て中検証済み / 拒否済み

  • 異議申し立て期間: 提出後、データはこのステータスで一定期間維持されます。十分な無効性の異議が提出された場合、「異議申し立て中」に移行します。それ以外の場合は、「検証済み」になります。

  • 異議申し立て中: バリデーターはデータを検証し、証明を提出します。検証されたシャードが基準を満たす場合、「検証済み」になります。そうでない場合は、「拒否済み」になります。

  • 検証済み: メタデータURIがブロックに含まれ、外部から参照できます。

  • 拒否済み: データは無効と判断され、ブロックには含まれません。

graph TD
    A[作成済み] --> B[異議申し立て期間]
    B -->|異議なし| C[検証済み]
    B -->|異議あり| D[異議申し立て中]
    D -->|有効| C
    D -->|無効| E[拒否済み]
%%{init: {"theme": "default", "themeVariables": {
  "background": "transparent",
  "primaryColor": "#22223b",
  "primaryTextColor": "#22223b",
  "lineColor": "#22223b",
  "textColor": "#22223b",
  "actorBorder": "#22223b",
  "actorTextColor": "#22223b",
  "sequenceNumberColor": "#22223b",
  "messageTextColor": "#22223b",
  "signalColor": "#22223b"
}}}%%
sequenceDiagram
    autonumber
    User->>Publisher Node: ブロブデータ
    Publisher Node->>Publisher Node: イレージャーコーディング
    Publisher Node->>Decentralized Storage: データシャードをアップロード
    Publisher Node->>Sunrise: MsgPublishData
    User->>Sunrise: 必要に応じて不正チャレンジ
    Sunrise->>Validator Set: 異議申し立ての投票を開始
    Validator Set->>Sunrise: ゼロ知識有効性証明
  • ハッシュ関数: HH
  • バリデーターのセット: VV
  • データシャードのセット: SdS_d
  • パリティシャードのセット: SpS_p
  • シャードのセット: SS
S=SdSp S = S_d \cup S_p

このシステムは、H(si)H(s_i)を公開せずにデータシャードハッシュH(si)H(s_i)の所有を検証します。 この回路は、1つのシャードsSs \in S用です。

  1. 公開入力

    H_public2(s) H\_{\text{public}}^2(s)

  2. プライベート入力

    H_private(s)H\_{\text{private}}(s)

  3. 回路制約

    Hpublic2(s)=H(Hprivate(s)) H_{\text{public}}^2(s) = H(H_{\text{private}}(s))
  • レプリケーション係数(データシャードのみに基づく): rr
  • レプリケーション係数(パリティシャードを含む場合に基づく): rpr_p
rp=rSdSd+Sp r_p = r \frac{|S_d|}{|S_d| + |S_p|}
  • 各バリデーターが関与するシャードの数: nn
n=ceil(rpSd+SpV)=ceil(rSdV) n = \text{ceil}\left( r_p \frac{|S_d| + |S_p|}{|V|} \right) = \text{ceil} \left( r\frac{|S_d|}{|V|} \right)
  • このシャードに関与するバリデーターからのシャードsの有効な証明のセット: ZsZ_s
Zsrp23 \frac{|Z_s|}{r_p} \ge \frac{2}{3}
  • この条件を満たすシャードのセット: SavailableS^\text{available}
SavailableSSdSd+SpSavailableSd\begin{aligned} \frac{|S^\text{available}|}{|S|} &\ge \frac{|S_d|}{|S_d| + |S_p|} \\ \Rightarrow |S^\text{available}| &\ge |S_d| \end{aligned}
  • 10人のバリデーター: v1,...,v10v_1 , ..., v_{10}
  • 20個のシャード: s1,...,s20s_1, ..., s_{20}
    • 10個のデータシャード
    • 10個のパリティシャード
  • r=6r = 6
  • rp=6×1010+10=3r_p = 6 \times \frac{10}{10 + 10} = 3
  • 各バリデーターは6つのシャード証明を提出します
    • 3×2010=63 \times \frac{20}{10} = 6
  • バリデーターv1v_1, v3v_3およびv9v_9の証明には、シャードs1s_1と他の5つのシャードが含まれます
  • バリデーターv3v_3は、証明にシャードs1s_1の有効性を含めることに失敗しました
  • しかし、バリデーターv1v_1v9v_9は証明にシャードs1s_1の有効性を含めることに成功したため、
    • Z_s1=2|Z\_{s_1}| = 2
    • Z_s1rp23\frac{|Z\_{s_1}|}{r_p} \ge \frac{2}{3}を満たします
  • バリデーターv2v_2, v4v_4およびv10v_{10}の証明には、シャードs2s_2と他の5つのシャードが含まれます
  • バリデーターv2v_2v4v_4は、証明にシャードs2s_2の有効性を含めることに失敗しました
  • バリデーターv10v_{10}のみが証明にシャードs2s_2の有効性を含めることに成功したため、
    • Z_s2=1|Z\_{s_2}| = 1
    • Z_s2rp23\frac{|Z\_{s_2}|}{r_p} \ge \frac{2}{3}を満たしません

ケースX:シャードs_1、s_3-s_11は上記の条件で有効です

「ケースX:シャードs_1、s_3-s_11は上記の条件で有効です」セクションへのリンク
  • Savailable=10|S^\text{available}| = 10
  • Sd=10|S_d| = 10
  • SavailableSd|S^\text{available}| \ge |S_d|を満たします

ケースY:上記の条件で有効なのはシャードs_1、s_3のみです

「ケースY:上記の条件で有効なのはシャードs_1、s_3のみです」セクションへのリンク
  • Savailable=2|S^\text{available}| = 2
  • Sd=10|S_d| = 10
  • SavailableSd|S^\text{available}| \ge |S_d|を満たしません
パラメータデフォルト単位説明
publish_data_gas1,000,000gasデータ公開のガス代
challenge_threshold0.33比率チャレンジ期間に入るために必要な無効性チャレンジのしきい値
replication_factor5.0コピーデータシャードのレプリカ数
slash_epoch120,960ブロックスラッシュ判断のエポック期間(約1週間)
slash_fault_threshold0.5比率バリデーターのスラッシュを引き起こす無効な証明のしきい値
slash_fraction0.001比率スラッシュ中の投票力の削減率
challenge_period4分時間データ公開後のチャレンジ期間
proof_period10分時間チャレンジ後の証明提出期間

このモジュールは、さまざまなメッセージタイプを提供します。

  • MsgUpdateParams:モジュールパラメータの更新(ガバナンス操作)
  • MsgPublishData:メタデータURIとシャード情報を含むデータを公開
  • MsgSubmitInvalidity:特定のインデックスのデータの無効性を報告
  • MsgSubmitValidityProof:バリデーターから有効性証明を提出
  • MsgRegisterProofDeputy:バリデーターの証明代理人を登録
  • MsgUnregisterProofDeputy:証明代理人の登録を解除

このモジュールは、さまざまなクエリエンドポイントを提供します。

  • Params:モジュールパラメータのクエリ
  • PublishedData:特定のメタデータURIの公開データの詳細を取得
  • AllPublishedData:すべての公開データを一覧表示
  • ValidityProof:特定のバリデーターから有効性証明を取得
  • AllValidityProofs:特定のメタデータURIのすべての有効性証明を一覧表示
  • Invalidity:特定のメタデータURIと送信者の無効性レポートを取得
  • AllInvalidity:特定のメタデータURIのすべての無効性レポートを一覧表示
  • ValidatorShardIndices:特定のバリデーターのシャードインデックスを取得
  • ZkpProofThreshold:特定のシャード数のZKP証明のしきい値を取得
  • ProofDeputy:特定のバリデーターの証明代理人を取得

詳細については、Githubを参照してください。