見出し画像

【完全保存版】SolanaのTowerBFTの概要を理解しよう!

0 はじめに

Tower BFTとは、Solanaにおいて、誤ったフォークが作られないようにするための強力な仕組みです。

この記事では、その概要を説明していきます。

詳細は、公式をご参照ください。

1 スロットとブロックについて

1 スロットについて

まずは、基本的なところから見ていきましょう。

Solanaにおいて、「スロット」とは時間の単位です。

このスロットごとに、基本的にはブロックが作られます。

2 現在のスロットについて

こちらが、記事執筆時点での最新のスロットです。

この時点での最新のスロットは「260,527,507」のようです。

つまり、今は2〜3億の間くらいということですね。

https://solscan.io/blocks

3 スロットとブロックの関係について

とはいえ、スロットで必ずブロックが作られるわけではありません。

例えば、下の場合、「260,527,911」と「260,527,912」ではブロックは作られていません。

https://solscan.io/blocks

そのため、下のように、ブロックの数とスロットの数には差があります。

ただ、この記事では、この部分はメインではないため、各スロットでブロックが作られるものとして進めていきます。

https://solscan.io/

2 投票とロックアウトについて

1 バリデータとは

トランザクションの検証ブロックの生成と追加を行うノードです。

現在、Solanaでは1,799のバリデータがあるようです。

https://solscan.io/validator

彼らは、ブロック投票を行うことで報酬を獲得することができます。

投票して、すぐに獲得するわけではありません。その辺りの説明は後で出てきます。)

2 バリデータと投票

バリデータはブロックに「投票」を行うことができます。

下のようになります。

例えば、新しいブロックなどを見てみると、このようにバリデーターから投票されていることがわかります。

https://solscan.io/block/260529964

3 投票とロック期間について

投票を行うと、ロックアウトが開始されます。

最初のロックアウトは、デフォルトで「2」と設定されています。

https://docs.solanalabs.com/implemented-proposals/tower-bft

このロックアウトとは、スロットでの期間を指します。

下のように「1,003」のスロットまではロックアウトになります。

4 ロックアウトとは

ロックアウトとは一部の投票が制限される期間です。

4ー1 直系の子孫の場合

ブロックが直系の子孫である場合、投票は制限されません。

赤のブロックから見ると、下が直系の子孫です。

そのため、スロット「1,003」の時直系のブロックに投票することができます。

4ー2 直系でない子孫の場合

一方、ロックアウト中は、直系以外のブロックへの投票はできません。

そのため、下の場合、スロット「1,002」、「1,003」では、直系以外のブロックには投票できません。

ただ、逆にいうと、ロックアウトさえ終われば、直系でないブロックにも投票できます。

つまり、下の場合は、もともと上のブロック群を支持(投票)していたものの、後から下に変えた例です。

ただ、2つのスロットがロックされたところで、大したことがなさそうに思えます。

3 ロックアウトの増加率について

1 ロックアウトの増加率について

実は、ロックアウトは、最初は「2」ですが、指数関数的(どんどん2バイされる)に増えてきます。

下のように、成長率「2倍」となっています。

2 増加率の具体例

具体的に考えてみましょう。

なお、この記事では、ロックアウトが2のことを、L(2)と表すこととします。

次に、スロット:1,002で投票が行われました。

この場合、最初のロックアウトは、2倍となり、1,005までとなります。

また、スロット:1,003で新しく投票されれば、このようにロック期間がそれぞれ2倍に変わります。

上の例では、毎回必ず投票していますが、そうでない場合もありえます。

次の章では、公式の例を元に考えてみましょう。

4 公式の例を考えよう

1 最初の状態

はじめの状況がこちらです。

公式では、このように書かれています。

2 スロット:9での投票

しばらく間を開けて、スロット9で投票しました。

なお、下の図ではスロット1〜4は最新状況をまだ反映していません。

スロット3、4に着目すると、すでにロックアウトが終了しています。(現在、スロット:9なので)

そのため、スロット3、4は下のように消えました。

公式の図としては、このようになっています。

3 スロット:10での投票

次に、スロット10で投票が行われました。

これによって、スロット9のロックアウトが2倍になりました。

スロット1ロックアウト中の投票の量が4のため、ロックアウトは16(2の4乗)で変化はありません。

スロット2も同様です。

公式の図ではこうなりました。

4 スロット:11での投票

次に、スロット11で投票が行われました。

この結果、ロックアウトが2倍になるので、下のようになります。

このようになりました。

5 スロット:18での投票

次に、スロット18で投票が行われました。

スロット17時点までのロックアウトは消えるので、下のようになります。

図にすると、このようになります。

5 投票情報の総数と報酬について

1 投票情報の総数について

ちなみに、この投票情報は全部でいくつ入るのでしょう?

それが、こちらの32個になります。

つまり、すべて入った状態であると、最初の投票は2の32乗という、約43億のロックアウトが発生しています。

これがどのくらいの量かを思い出してみましょう。

現在のスロット総数は2〜3億の間くらいなので、今までのスロットの20倍程度は待つ必要があり、致命的です。

https://solscan.io/

そのため、実際には、誤ったフォークにロックアウトされないために、「閾値チェック」が行われます。(長くなるので、この記事では省きます。)

2 報酬について

最後に、なぜ、投票を行うのかを見てみましょう。

これは、下の1文に書かれています。

最大値である、32行が溜まった後に抜けると、それが報酬のトリガーとなります。

これが投票に対するインセンティブになっています。



今回は以上で、towerBFTの仕組みの概要を終了します。


サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊