【完全保存版】SolanaのTowerBFTの概要を理解しよう!
0 はじめに
Tower BFTとは、Solanaにおいて、誤ったフォークが作られないようにするための強力な仕組みです。
この記事では、その概要を説明していきます。
詳細は、公式をご参照ください。
1 スロットとブロックについて
1 スロットについて
まずは、基本的なところから見ていきましょう。
Solanaにおいて、「スロット」とは時間の単位です。
このスロットごとに、基本的にはブロックが作られます。
2 現在のスロットについて
こちらが、記事執筆時点での最新のスロットです。
この時点での最新のスロットは「260,527,507」のようです。
つまり、今は2〜3億の間くらいということですね。
3 スロットとブロックの関係について
とはいえ、スロットで必ずブロックが作られるわけではありません。
例えば、下の場合、「260,527,911」と「260,527,912」ではブロックは作られていません。
そのため、下のように、ブロックの数とスロットの数には差があります。
ただ、この記事では、この部分はメインではないため、各スロットでブロックが作られるものとして進めていきます。
2 投票とロックアウトについて
1 バリデータとは
トランザクションの検証やブロックの生成と追加を行うノードです。
現在、Solanaでは1,799のバリデータがあるようです。
彼らは、ブロックへ投票を行うことで報酬を獲得することができます。
(投票して、すぐに獲得するわけではありません。その辺りの説明は後で出てきます。)
2 バリデータと投票
バリデータはブロックに「投票」を行うことができます。
下のようになります。
例えば、新しいブロックなどを見てみると、このようにバリデーターから投票されていることがわかります。
3 投票とロック期間について
投票を行うと、ロックアウトが開始されます。
最初のロックアウトは、デフォルトで「2」と設定されています。
このロックアウトとは、スロットでの期間を指します。
下のように「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倍程度は待つ必要があり、致命的です。
そのため、実際には、誤ったフォークにロックアウトされないために、「閾値チェック」が行われます。(長くなるので、この記事では省きます。)
2 報酬について
最後に、なぜ、投票を行うのかを見てみましょう。
これは、下の1文に書かれています。
最大値である、32行が溜まった後に抜けると、それが報酬のトリガーとなります。
これが投票に対するインセンティブになっています。
今回は以上で、towerBFTの仕組みの概要を終了します。
サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊