Sliver.tvを提供するTHETAネットワークのホワイトペーパーの翻訳 #6

 

システムモデル

ブロックのファイナライゼーションとファイナライゼーションのプロセスの話をする前に、我々のシステムの全体像について話をする。話を簡略化するために、各ノードが同じ量のステイクを持っているケースを想定する。その一般化したアルゴリズムを、実際には、異なるノードが、異なる量のステイクを保有しているケースに拡張する。

バリデーターコミッティがコンセンサスを失敗するケース: m数のバリーデーターがおり、そのうちの1/3がビザンチン将軍(裏切りもの)だったとする。彼らは、アタッカーによってコントロールされている、が、これは実際には稀である。また、我々は、特定のペアのバリデーターノードが、TCPコネクションでメッセージをやりとりできる状況を想定する。

ガーディアンプールのファイナライズが失敗するケース:n数のガーディアンノードがいる。そのう地、1/3がビザンチン将軍だとする。そして、二つのガーディアン間では、直接のメッセージのやりとりはないものとする。彼らの間のメッセージは、他のノードを通じてルートされ、そのうちのいくつかはビザンチン将軍のノードである。

タイミングモデル:我々は、”weak synchrony”モデルを想定する。より明確に言うと、ネットワークは非同期である。そして、一定の非同期の期間は、特定の間、分断されている。特定の時間内に、二つの正直なノードが、全てのメッセージの転送を行うために十分である。後ほど話をするが、この非同期の期間の間に、Ledgerは、単純に新しいブロックを生成することをストップするのである。ネットワーク分断があったとしても、コンフリクトするブロックは生成しない。同期するフェーズで、ブロック生産は、自然と再開し、結果的にネットワークの生存維持は達成される。

アタッカーモデル:強力なアタッカーを想定する。彼らは、大規模なノードを破壊することができるが、1/3以上のガーディアンノードを同時に攻撃することはできない。彼らは、大規模なネットワークを操作できるし、一定の期間、ネットワークを分断することもできる。しかし、彼らは、計算機科学的に区切られているのだ。彼らはフェイクの著名を作ることもできないし、暗号化されたハッシュ値を反転させることもできない。

ブロック・セトルメント・プロセス

ブロック・セトルメントとは、バリデーターコミッティが、合意に至り、そして、ガーディアン・プールがファイナライズするための一連のブロックを生成するプロセスのことを言う。最近、PoSにおけるTenderminty、Casper FFG、そしてHot-Stuffにインスパイアされ、以下に記述するようにブロックセトルメントのアルゴリズムをデザインした。バリデーターは、新たなブロックを提案するターンで、ブロック提案をローテーションする戦略を採用している。コミッティの投票モデルは、Casper FFGやHot-stuffを参考に作っている。

ブロック提案

バリデーターの中における新しいブロック提案者は、Round robin 方式で選ばれる。ラウンドロビン方式を実現にするには、各ブロック提案者が、epochと呼ばれるローカルの論理時計を合わせておく必要がある。m数のバリデーターがいることを想定し、epcohの時間は、t、とした場合、Index (t mod m)の方式で、提案者が選ばれるのである。

1) epoch t が、停止することはあってはならない。それによって、ブロック提案者のローテーションは保証される。そして、

2) epoch t の時点における異なるバリデーターは、全て、t の値を共有できているため、どのノードが次のブロックを生成すべきかをわかっている。

以下は、我々のブロック提案者の選挙の仕組みである。

このプロトコルでは、 EpochChange(t+1)を定義し、バリデーター間で、epotch t + 1と同時にシンクロするためのメッセージを送りあうことができる。基本的に、以下の条件が満たった場合に、全ての他のバリデーターは、EpochChange(t+1)でメッセージをブロードキャストする。

1) ノードが、一つのブロックを、epoch t において、提案ないしは投票する。もしくは
2) ノードが、他のバリデーターからm/3+1  EpochChange(t+1)のメッセージを受け取る。もしくは
3) ノードが、epoch t でタイムアウトした場合(タイムアウトは 4 △でセットされている)

一方で、バリーデーターは、2m/3 EpochChange(t+1)のメッセージを他のノードから受け取った場合に、epoch t + 1で参加する。

バリデーターとガーディアンへの報酬とペナルティ

トークンの報酬とペナルティは、コンセンサスプロセスに参加することを動機づけするためのものであり、プロトコルから逸脱するものではない。

バリデーターとガーディアンは、トークン報酬を受け取る。各ブロックは、コインベース・トランザクションを含んでおり、ビットコインのそれと同じ意味で、これはバリデーターとガーディアンアドレスに、新たに作られたトークンをデポジットすることを言っている。全てのバリーデーターは、ブロック生成ごとにトークンを受け取る。一方、ガーディアンに対しては、数が多いため、ブロック生成ごとに報酬を与えるのは現実的ではない。代わりに、我々は以下のアルゴリズムを提案する。

新しく提案されるブロックの高さを lで定義し、cpは、最近ファイナライズされたチェックポイントとする。ブロック提案者は、アグリゲーションされた著名σcpと、チェックポイントcpに対して、対応する Ccpを受け取る。(σcp,ccp)をバリデーションする上で、提案者は、ベクトルCcpの値がゼロ(つまり、そのガーディアンがチェックポイントにサインしたこと)に対するエントリーを行う各ガーディアンの以下の条件をチェックする。


B l-1は、ブロックの高さであるl-1のハッシュ値であり、H:G×{0,1}*→Gは、BLS著名アルゴリズムにおけるハッシュファンクションを同じである。もし、不一致となった場合、提案者は、ガーディアンをパブリックキー pkと共に、コインベースのトランザクションを受け取るリストに送る。スレッシュホールドtは、少数のガーディアンが選ばれるように処理される。また、提案者は、報酬の署名として、(σcp,ccp)をコインベーストランザクションに添付する。

Theta Ledgerは、あらゆる悪意的行為に対してペナルティを強制する。特に、もしブロック提案者が、同じブロックの高さでコンフリクトが起きている場合、もしくは、バリデーターが同じ高さの異なるブロックに投票を行った場合、ペナルティを課す。バリデーターもガーディアンもその役割を担うにあたり、一定量のトークンをデポジットしているため、そのトークンからペナルティを徴収する。悪意的な行為を発見したノードは、ブロックチェーンに対して、特別なSlashトランザクションを提出することができる。

たとえば、コンフリクトするブロックに著名したなどの証拠を、Slashトランザクションに添付する。ペナルティ分のトークンが、悪意的なノードから徴収され、そのトークンはSlashトランザクションを初めに報告してくれたノードに与えられる。

1/3のバリデーターが乗っ取られた場合、悪意的なバリーデーターは、あるブロックからブロックチェーンをフォークさせることで、ダブルスペンドアタックを実行することができるが、しかし、ブロックは決済はされるがファイナライズはまだされない。しかしながら、この行為は、同じ高さのブロックがフォークによって生成されることになるため、ガーディアンプールが発見可能であり、しかし、2/3以上のバリーデーターの著名を受けたものになる。このケースにおいては、二重著名をしたバリーデーターはペナルティ対象になり、バリデーターコミッティが再度選ばれる。再選が終わると、ブロックチェーンは、最後にファイナライズされたチェックポイントから再度更新を再開する。

関連記事