データ可用性
Sunriseデータ可用性レイヤーは、高スループットのデータ可用性のために設計されており、アプリケーションに強化されたスケーラビリティと柔軟性を提供します。これを達成するために、SunriseはオフチェーンのBLOBデータを採用し、ブロックデータ全体ではなく、各Blobデータに対してErasure Codingを実行します。
x/daモジュールはこれらの機能を提供します。
主な特徴
「主な特徴」セクションへのリンクSunriseのオフチェーンDA設計は、オンチェーンのセキュリティを犠牲にすることなく、比類のないスループットとコスト効率を実現します。
- オフチェーンのイレージャーエンコーディング バリデーターの計算とストレージを劇的に削減します。オンチェーンには、これらのイレージャーコーディングされたデータ共有を指すメタデータURIのみがあり、完全なデータ再構築はオフチェーンで行われます。
- オフチェーンストレージ統合 IPFSやArweaveなどの分散型ストレージソリューションを利用して、データシャードは外部に保存されます。MsgPublishDataには、これらのイレージャーコーディングされたデータ共有を指すメタデータURIのみが含まれ、ブロブトランザクションのオンチェーンブロックサイズ要件を削減し、スケーラビリティを向上させます。
DAの比較
「DAの比較」セクションへのリンク| Sunrise | Avail DA | Celestia | EigenDA | Ethereum (EIP-4844) | |
|---|---|---|---|---|---|
| アーキテクチャ | オフチェーンブロブを持つL1 | L1ブロックチェーン | L1ブロックチェーン | DAサービス | L1ブロックチェーン(ブロブ) |
| スループット | 5+ MB/s | 0.2 MB/s (4MB/ブロック) | 1.33 MB/s (8MB/ブロック) | 15 MB/s | 0.064 MB/s |
| ファイナリティまでの時間 | 約4分 (7秒+240秒) | 40秒 | 6秒 + 10分 | 12分 | 12分 |
| データストレージ | オフチェーンブロブ | オンチェーン | オンチェーン | 委員会ストレージ | オンチェーンブロブ |
| 証明メカニズム | オフチェーンストレージによる楽観的証明 | 有効性証明 (KZG) | 不正証明 | 有効性証明 | 有効性証明 |
| 長期的な検索可能性 | シームレス | ネイティブではない | ネイティブではない | ネイティブではない | ネイティブではない |
| コストモデル | 流動性による手数料の抽象化 | 直接手数料 | 直接手数料 | 委員会手数料 | オンチェーンガス手数料 |
| コンセンサス | プルーフ・オブ・リクイディティ | Babe & Grandpa (NPoS) | Tendermint | N/A | Ghost & Casper |
設計概要
「設計概要」セクションへのリンク他のDAレイヤーの設計パターン
「他のDAレイヤーの設計パターン」セクションへのリンク-
データ可用性委員会
データ可用性委員会(DAC)は、低コストで代替のデータ可用性レイヤーを構築するための従来の方法です。
しかし、DACでは、クライアントが委員会によって証明されたデータ可用性が真か偽かを、ブロブデータ全体をダウンロードせずに検証することは不可能です。
-
データ可用性サンプリング
データ可用性サンプリング(DAS)を採用するデータ可用性レイヤーでは、ブロックデータはイレージャーコーディングのために処理されます。その後、クライアントはブロックデータの一部をダウンロードするだけでデータ可用性を検証でき、マークルツリー構造を使用してブロック内のブロブデータの包含を検証できます。
一般的なDASのセットアップでは、フルノードはmempool内のトランザクションデータを転送およびダウンロードする必要があります。
ブロブデータのサイズが大きくなるにつれて、ネットワークのスループットはこれらのトランザクション転送によって制限される可能性があり、大きなブロブデータを扱うアプリケーションにとって課題となります。
Sunriseの設計
「Sunriseの設計」セクションへのリンクDACとDASにおけるこれらの問題に対処するために、Sunriseは次の解決策を実装しています。
-
オフチェーンのイレージャーエンコーディング バリデーターの負荷を軽減するために、ブロブデータはオフチェーンプログラムでイレージャーコーディングのために処理されます。
-
ブロブデータのシャーディング ブロックデータ全体ではなく、各ブロブがイレージャーコーディングのために処理されます。クライアントは、データ全体をダウンロードすることなく、シャードのダウンロードを繰り返すだけで各ブロブのデータ可用性を検証できます。クライアントはまた、マークルツリー構造を使用してブロック内のブロブの包含を検証できます。
-
外部ストレージ ブロブデータは、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: ゼロ知識有効性証明
ゼロ知識証明システム
「ゼロ知識証明システム」セクションへのリンク用語と表記
「用語と表記」セクションへのリンク- ハッシュ関数:
- バリデーターのセット:
- データシャードのセット:
- パリティシャードのセット:
- シャードのセット:
このシステムは、を公開せずにデータシャードハッシュの所有を検証します。 この回路は、1つのシャード用です。
-
公開入力
-
プライベート入力
-
回路制約
データ可用性の条件
「データ可用性の条件」セクションへのリンク- レプリケーション係数(データシャードのみに基づく):
- レプリケーション係数(パリティシャードを含む場合に基づく):
- 各バリデーターが関与するシャードの数:
各シャードがデータ可用性を証明するための要件
「各シャードがデータ可用性を証明するための要件」セクションへのリンク- このシャードに関与するバリデーターからのシャード
sの有効な証明のセット:
- この条件を満たすシャードのセット:
データ可用性を証明するための集計の要件
「データ可用性を証明するための集計の要件」セクションへのリンクパラメータの例
「パラメータの例」セクションへのリンク- 10人のバリデーター:
- 20個のシャード:
- 10個のデータシャード
- 10個のパリティシャード
- 各バリデーターは6つのシャード証明を提出します
ケースA:有効なシャードs_1
「ケースA:有効なシャードs_1」セクションへのリンク- バリデーター, およびの証明には、シャードと他の5つのシャードが含まれます
- バリデーターは、証明にシャードの有効性を含めることに失敗しました
- しかし、バリデーターとは証明にシャードの有効性を含めることに成功したため、
- を満たします
ケースB:無効なシャードs_2
「ケースB:無効なシャードs_2」セクションへのリンク- バリデーター, およびの証明には、シャードと他の5つのシャードが含まれます
- バリデーターとは、証明にシャードの有効性を含めることに失敗しました
- バリデーターのみが証明にシャードの有効性を含めることに成功したため、
- を満たしません
ケースX:シャードs_1、s_3-s_11は上記の条件で有効です
「ケースX:シャードs_1、s_3-s_11は上記の条件で有効です」セクションへのリンク- を満たします
ケースY:上記の条件で有効なのはシャードs_1、s_3のみです
「ケースY:上記の条件で有効なのはシャードs_1、s_3のみです」セクションへのリンク- を満たしません
パラメータ
「パラメータ」セクションへのリンク| パラメータ | デフォルト | 単位 | 説明 |
|---|---|---|---|
| publish_data_gas | 1,000,000 | gas | データ公開のガス代 |
| challenge_threshold | 0.33 | 比率 | チャレンジ期間に入るために必要な無効性チャレンジのしきい値 |
| replication_factor | 5.0 | コピー | データシャードのレプリカ数 |
| slash_epoch | 120,960 | ブロック | スラッシュ判断のエポック期間(約1週間) |
| slash_fault_threshold | 0.5 | 比率 | バリデーターのスラッシュを引き起こす無効な証明のしきい値 |
| slash_fraction | 0.001 | 比率 | スラッシュ中の投票力の削減率 |
| challenge_period | 4分 | 時間 | データ公開後のチャレンジ期間 |
| proof_period | 10分 | 時間 | チャレンジ後の証明提出期間 |
メッセージ
「メッセージ」セクションへのリンクこのモジュールは、さまざまなメッセージタイプを提供します。
- MsgUpdateParams:モジュールパラメータの更新(ガバナンス操作)
- MsgPublishData:メタデータURIとシャード情報を含むデータを公開
- MsgSubmitInvalidity:特定のインデックスのデータの無効性を報告
- MsgSubmitValidityProof:バリデーターから有効性証明を提出
- MsgRegisterProofDeputy:バリデーターの証明代理人を登録
- MsgUnregisterProofDeputy:証明代理人の登録を解除
このモジュールは、さまざまなクエリエンドポイントを提供します。
- Params:モジュールパラメータのクエリ
- PublishedData:特定のメタデータURIの公開データの詳細を取得
- AllPublishedData:すべての公開データを一覧表示
- ValidityProof:特定のバリデーターから有効性証明を取得
- AllValidityProofs:特定のメタデータURIのすべての有効性証明を一覧表示
- Invalidity:特定のメタデータURIと送信者の無効性レポートを取得
- AllInvalidity:特定のメタデータURIのすべての無効性レポートを一覧表示
- ValidatorShardIndices:特定のバリデーターのシャードインデックスを取得
- ZkpProofThreshold:特定のシャード数のZKP証明のしきい値を取得
- ProofDeputy:特定のバリデーターの証明代理人を取得
詳細については、Githubを参照してください。