セイウチの読み取りを簡単に:2f+1スライバーを集めて検証

セイウチからのblobの読み取りはアルゴリズム的にシンプルです。クライアントは、十分な断片を集めて、それらが正しく再構築されることを確認するという2つのアクションを実行するだけです。このプロトコルは、両方の操作を透明で効率的にします。

読み取りはターゲットから始まります。クライアントはblob IDとそれをコミットしたオンチェーンのPoAを知っています。この情報から、クライアントは書き込み中に使用されたのと同じグリッド計算を用いて、どのバリデーターがどのスライバーを保持しているかを導き出します。クライアントはバリデーターに連絡し、断片をリクエストします。

クライアントはバリデーターからの応答を収集します。いくつかの断片は迅速に到着します(応答するバリデーターからのプライマリースライバー)。他のものは遅れて到着するか、まったく到着しません(セカンダリーまたは応答しないノード)。このプロトコルはしきい値を必要とします:fの断片が破損またはビザンチンであっても、正しさを保証するためには2f+1の正直な断片が必要です。

クライアントが十分な断片を持っていると、再構築は簡単です。2Dグリッド構造を使用して、断片を結合し、結果をオンチェーンのコミットメントハッシュと照合します。再構築されたblobがコミットされたハッシュと一致すれば、検証は成功します。一致しない場合、クライアントは再構築が失敗したことを知り、再試行またはエラーを報告できます。

その美しさはシンプルさにあります。複雑なクオーラム選挙はありません。リーダー選挙もありません。コンセンサスプロトコルもありません。ただ:断片を集め、コミットメントと照合して完了です。検証に失敗した場合は、さらに断片を集めて再試行します。このシステムは、遅いまたは嘘をつくバリデーターに対して自然に耐性があります。

このシンプルさが読み取りを堅牢にします。クライアントは他のリーダーと調整することなく、ローカルで実装できます。ビザンチンバリデーターは、一人一人のリーダーがオンチェーンのコミットメントに対して独立して検証を行うため、一貫性を損なうことはできません。

@Walrus 🦭/acc #Walrus $WAL