優先ラウンド、空のブロック、直前の生成者
抽選された生成者がブロックに何を入れてよいか、そしていつブロックを作れるかは、2 つのルールで決まります。トランザクションを含められるのは最初の 10 ラウンドの生成者だけで、それより後の生成者は空のブロックしか作れません。また、直前のブロックを作ったノードは次の抽選で降格されるため、次のブロックを作るのは遅い段階のフォールバックとしてだけです。どちらのルールも、何が起きてもチェーンを動かし続けつつ、重要な選択を抽選が先頭に置いた生成者に残します。
優先ラウンド
各生成者にはポジションがあります。自分を指名した抽選の、0 から数えたインデックスです。パラメータ max_priority_blocksmiths は 10 なので、次のようになります。
- ポジション 0 から 9、つまりラウンド 1 から 10 までは、トランザクションを含めることができます。
- ポジション 10 以降(ラウンド 11 以降)では、ブロックはトランザクションを含んではなりません。レシートは含めることができます。
このルールは、ブロックの生成時、各ノードの候補ブロックのプール内、そしてすべてのバリデーターによって確認されます。トランザクションを含む遅いブロックは拒否されます。
このルールは 2 つの目標のバランスを取っています。ライブネスは、上位の生成者がオンラインであることに決して依存しません。抽選された多くのノードがダウンしていても、リストのさらに下の誰かがチェーンを伸ばし続けます。一方でトランザクションを選ぶ権利は最優先の生成者に残るため、順位の低いノードが満杯のブロックや選り抜きのトランザクションを集めたブロックを急いでチェーンに載せても、得るものは何もありません。
空のブロックも完全なブロック
空のブロックは完全に有効です。生成者が獲得したレシートを運ぶため、その生成者の中継作業はやはり参加スコアに反映されます。また、他のブロックと同様に、その時刻に予定されたコインベースを支払います。バージョン 0.5.8 以降、すべてのブロックのコインベースはスケジュールとちょうど一致しなければならないため、コインベース抽選 がブロックを飛ばすことはありません(供給量と発行 を参照)。
保留中のトランザクションが失われることはありません。トランザクションを含めることのできる生成者による次のブロックまで、ノードのプールで待ちます。
直前の生成者は降格される
ブロック N の生成者はブロック N+1 の抽選に残りますが、その抽選は、トランザクションを含められる最後のラウンドであるラウンド 10 より早いものとしては数えられません。ブロックの重みにも同じように上限が設けられます。重みの式ではその抽選回数 k が 10 を下回ることはないため、そのノードがフォールバックとしてブロック N+1 を作った場合、そのブロックが加える重みはラウンド 1 のブロックの最大 10 分の 1 です(フォーク選択と累積難易度 を参照)。実際には、別の抽選されたノードがブロック N+1 を作れる限り、そのノードが作ります。
降格はペナルティではありません。降格された抽選が逃した番として数えられることはなく、ノードは席もスコアも保持します。
なぜ 2 回続けて生成させないのか
ブロック N+1 のシードは、オンチェーンのゲームや賭けの結果など、ブロック N に依存する抽選を確定させます(ブロックシード(VRF) と ZooBC のアプリ を参照)。両方のブロックを作ったノードは、ブロックの中身とそれを確定させるシードの両方を握ることになります。ルールの考え方は、別のノードが応答できる限り、誰も賭けとそれを決着させるシードの両方を持つべきではない、というものです。
なぜ抽選から除外しないのか
直前の生成者を除外すると、2 ノードのチェーンは 2 つのノードの間で厳密に交互に生成することになり、稼働中のノードが 1 つだけのチェーンはまったく生成できなくなります。除外ではなく降格なので、直前の生成者は最後の手段の生成者として残ります。他の誰もブロックを届けなければ、目標時刻が直前のブロックの 150 秒後であるラウンド 10 から、そのノードがブロックを作ることができます。このルールが原因でチェーンが止まることはありません。