ZooBC ウィキ
Proof of Participation

ラウンド、タイミング、時間枠

ZooBC は 15 秒ごとに 1 ブロックを目標としています。各ブロックの後、時間は 15 秒のラウンドに区切られ、抽選がラウンドごとに 1 つの生成者を指名します。ブロックのタイムスタンプがそのブロックの属するラウンドを決め、そのブロックを作れるのは、そのラウンドかその前のラウンドに抽選されたノードだけです。このルールによってチェーンは一定のリズムを保ち、生成者が不在でも次のブロックの遅れは 15 秒だけで、それ以上にはなりません。

ラウンドと目標時刻

直前のブロックのタイムスタンプを P とします。ラウンド r の目標時刻は P + 15 × r です。ラウンド 1 は直前のブロックの 15 秒後、ラウンド 2 は 30 秒後、ラウンド 3 は 45 秒後、というように続きます。ラウンド 1 の生成者は、目標時刻にブロックのタイムスタンプを押すことを目指します。そのノードが沈黙したままなら、ラウンド 2 の生成者が 30 秒を目標にブロックを作り、以下リストに沿って同様に続きます。

高さが飛ばされることはありません。生成者が不在のときは、次のブロックが同じ高さで、次の順番の生成者から、15 秒遅れて届くだけです。実際の生成者より前に抽選されたノードはすべて、逃した番が 1 回数えられます(逃した番、一時停止、除名 を参照)。

直前のブロックの後のタイムライン:+15 秒のラウンド 1 は沈黙して逃した番が数えられ、+30 秒のラウンド 2 がブロックを作り、ラウンド 3 は不要です。
直前のブロックの後のタイムライン:+15 秒のラウンド 1 は沈黙して逃した番が数えられ、+30 秒のラウンド 2 がブロックを作り、ラウンド 3 は不要です。

各生成者に 2 つのラウンド

ラウンド i に抽選された生成者は、ラウンド i またはラウンド i + 1 のブロックを作ることができます。そのため遅れたラウンド 1 のノードはラウンド 2 の間もまだブロックを届けることができ、同時にラウンド 2 のノードにも権利があります。どの時点でも 2 つの抽選されたノードが生成の権利を持ち、チェーンが 1 つのノードを待ち続けることはありません。また、誰かが一時停止されるのを待つこともありません。一時停止には 4 回連続で番を逃す必要があり、その効果は将来の抽選からノードを外すことだけです。

+15 秒、+30 秒、+45 秒を中心とする帯としてのラウンド 1、2、3。ラウンド 1 のノードはラウンド 2 の間もまだブロックを届けることができ、ラウンド 2 の代役は +30 秒にタイムスタンプを押します。
+15 秒、+30 秒、+45 秒を中心とする帯としてのラウンド 1、2、3。ラウンド 1 のノードはラウンド 2 の間もまだブロックを届けることができ、ラウンド 2 の代役は +30 秒にタイムスタンプを押します。

タイムスタンプが属するラウンド

時刻 T にタイムスタンプを押されたブロックのラウンドは次のとおりです。

round(T) = 1 + floor((T − P − 15 + 7) / 15)     (and never less than 1)

各ラウンドには、目標時刻の 7 秒前から 7 秒弱後までの 14 秒の受け入れ窓もあります。秒単位で表すと次のようになります。

ラウンド目標時刻式が数える秒受け入れ窓(目標時刻 ± 7 秒)
1P + 15P + 22 までP + 8 から P + 21
2P + 30P + 23 から P + 37P + 23 から P + 36
3P + 45P + 38 から P + 52P + 38 から P + 51
4P + 60P + 53 から P + 67P + 53 から P + 66

式が各ラウンドに割り当てる最後の秒(P + 22、P + 37、P + 52 …)は、そのラウンドの受け入れ窓の 1 秒後にあります。バリデーターはブロックのタイムスタンプを、そのラウンドの受け入れ窓に対して 2 秒の許容差で確認するため、これらの継ぎ目の秒も受け入れられます。

ラウンドは 2 つの点で重要です。ブロックを作れるのが誰かを決めることと、フォーク選択と累積難易度 におけるブロックの重みに上限を設けることです。ブロックの重みは、タイムスタンプが属するラウンドより良く評価されることはないため、ラウンド 2 に抽選された生成者がラウンド 3 のタイムスタンプを押しても、ラウンド 3 のブロック以上の重みにはなりません。

親 P からの時間軸に、ラウンド 1 から 4 が隣り合う帯として並んでいます。P + 50 のタイムスタンプはラウンド 3 に入るため、その重みは少なくとも 3 回の抽選として数えられます。
親 P からの時間軸に、ラウンド 1 から 4 が隣り合う帯として並んでいます。P + 50 のタイムスタンプはラウンド 3 に入るため、その重みは少なくとも 3 回の抽選として数えられます。

すべてのノードが適用する時刻のルール

  • 親の 13 秒未満後にタイムスタンプを押されたブロックは、速すぎる生成として拒否されます(15 秒の間隔から 2 秒の許容差を引いたものです)。したがって、空白に気づいた瞬間にすぐタイムスタンプを押してブロックを作ることはできません。
  • ノード自身の時計より 7,200 秒(2 時間)以上先のタイムスタンプを押されたブロックは、そのノードの時計が追いつくまで、そのノードに拒否されます。
  • 1 時間(3,600 秒の復旧限度)を超えて停止した後は、抽選が予定する生成者から来たブロックであれば受け入れられるため、止まったチェーンは再び動き出せます。

2 つの時間枠が関係します。ラウンド i に抽選された生成者は、そのラウンドの作成枠の中でブロックのタイムスタンプを押さなければなりません。作成枠はラウンドの目標時刻の 7 秒前から 27 秒後までで、次のラウンドにまで及びます。さらにバリデーターは、タイムスタンプがそれの属するラウンドの受け入れ窓の中に、2 秒の許容差で収まっていることも求めます。

ローカルなタイミングのポリシー

2 つのタイミングは各ノード独自のポリシーであって、コンセンサスのルールではありません。最初に抽選された生成者は P + 15 にブロックを送信し、他の生成者は自分のラウンドの時間枠の終わりの 5 秒前に送信します(P + 15 より前には送りません)。また各ノードは約 1 秒ごとに、手元にある候補ブロックの中から、時間枠が開いているもののうち最もポジションの小さいものを適用します。

比較のために言えば、Bitcoin は 10 分ごとに 1 ブロックを目標としています。ZooBC の 15 秒のリズムはすべての ZooBC チェーンで同じで、1 日は 5,760 ブロックです(ブロックと時間 を参照)。

関連項目