Proof of Participation
Proof of Participation(PoP)は、ZooBC がブロックについて合意する仕組みです。ブロックを作るのはオンチェーンのノードレジストリに登録されたノードで、直前のブロックのシードから抽選で選ばれ、すべての席が同じ確率を持ちます。各ノードは、ネットワークが必要とする仕事、すなわちプロトコルが割り当てたピアへブロックとトランザクションを渡すことについて計測され、その計測結果が新しいコインの取り分を決めます。ブロックが有効なのは正しい鍵がそれに署名したからであり、すべてのノードがそれを自分で確認します。
4 つの設計目標
- ブロック生成力の均一化。 残高、ステーク、ハードウェア、スコアは、席の確率を変えません。
- 開かれているがペースの決まったメンバー構成。 誰でもステークをロックして席を求めてキューに並べます。プロトコルは 1 サイクルにつき 1 つの新規ノードを加入させます。
- 計測され、報酬が与えられる参加。 中継は受け取ったピアが署名するレシートによって証明され、レシートが各ノードの収入を決めます。
- 無駄な作業なし。 安全性はパズルではなく、署名、ハッシュ、検証可能ランダム関数から得られます。
Proof of Participation と PoW・PoS の比較 では、これらの目標を Proof of Work、Proof of Stake、そしてそれらの委任型やフェデレーテッド型の変種と比較しています。
1 つのブロックができるまで
- 抽選。 直前のブロックのシードが、すべてのノードが同じように実行する乱数生成器を初期化します。生成器はラウンド 1 の生成者、ラウンド 2 の別の生成者、というように順に指名します(抽選)。
- ラウンド。 ラウンド 1 の生成者は、直前のブロックの 15 秒後にブロックのタイムスタンプを押すことを目標とします。そのノードが沈黙していれば、15 秒後にラウンド 2 の生成者が引き継ぎます(ラウンド、タイミング、時間枠)。トランザクションを含められるのは最初の 10 ラウンドだけで、直前のブロックの生成者は降格されます(優先ラウンド、空のブロック、直前の生成者)。
- ブロック。 生成者はノード鍵でブロックに署名し、検証可能ランダム関数で新しいシードを証明するため、そのシードを選ぶことはできません(ブロックシード(VRF))。
- 確認。 すべてのノードが、生成者がタイムスタンプの属するラウンドかその 1 つ前のラウンドに抽選されていたこと、署名、シードの証明、すべてのトランザクション、すべてのレシートを確認します。空のブロックも有効です。
- 仕事。 ノードはブロックとトランザクションを優先ピアに中継し、署名付きのレシートを集めます(レシートとネットワークトポロジー)。ノードが自分のブロックで提示するレシートが 参加スコア を動かし、スコアが コインベース抽選 の重みになります。
- 不在の代償。 番を飛ばしたノードは「欠席」となり、収入がなくなりスコアが下がります。4 回続けて番を逃すと一時停止され、スコアがゼロになると除名されます(逃した番、一時停止、除名)。
力と収入を切り離す
生成者の抽選はスコアを無視し、コインベース抽選はステークを無視します。スコアの高いノードはより多く稼ぎますが、より多くのブロックを作ることも、より多くのシードを選ぶこともありません。力はすべての席で同じままで、収入は各ノードが行う仕事に従います。より大きな力を得るには席を増やすしかなく、席はキューを通じて一度に 1 つずつしか加入が認められません(加入ペース)。
ブランチが競合するとき
ノードは累積難易度が最も大きいブランチに従います。累積難易度では、時間どおりのブロックが遅れたブロックより重くなります。完全な同点は先端ハッシュの小さい方が勝ちます(フォーク選択と累積難易度)。どのノードも 720 ブロック(3 時間)を超えて、またはスパインチェーン上で共同署名された最後のチェックポイントより下にロールバックすることはありません(ファイナリティとロールバック)。同じ親の上に 2 つのブロックに署名した生成者は、報告されて代償を課されることがあります(二重署名(equivocation))。
主な数値
| 項目 | 値(mainnet) |
|---|---|
| ブロック間隔とラウンドの長さ | 15 秒 |
| チェーンごとのジェネシス席 | 11 |
| トランザクションを含められるラウンド | 1 から 10 |
| 参加スコアの開始値 | 20 % |
| 一時停止までの連続した逃した番 | 4 |
| ノードごとの優先ピアと再割り当ての間隔 | 12、40 ブロックごと |
| ロールバック制限 | 720 ブロック(3 時間) |
関連項目
このトピックの記事
- Proof of Participation と PoW・PoS の比較
ZooBC の Proof of Participation が Proof of Work、Proof of Stake、委任型やフェデレーテッド型の設計とどう違うかを説明します。誰がブロックを作るか、力はどう得られるか、ブロックの安全性は何に基づくかです。 - フォーク選択と累積難易度
ZooBC のノードが競合するブランチからどちらを選ぶかを説明します。累積難易度が最も重いものが勝ち、時間どおりのブロックは遅れたブロックより重く、完全な同点は先端ハッシュの小さい方が勝ちます。 - ブロックシード(VRF)
すべてのブロックに含まれる 64 バイトのシードは、チェーンのランダムな選択を動かします。シードは検証可能ランダム関数の出力なので、生成者はそれを選べず、誰でも確認できます。 - ラウンド、タイミング、時間枠
ZooBC が各ブロックの後の時間を 15 秒のラウンドにどう区切るか、タイムスタンプがどのラウンドに属するか、そして 1 つの生成者の不在がチェーンを止められない理由を説明します。 - レシートとネットワークトポロジー
ノードがブロックとトランザクションを中継したことを ZooBC がどう証明するかを説明します。40 ブロックごとに抽選される優先ピア、232 バイトの署名付きレシート、そしてすべてのバリデーターが行う確認です。 - 二重署名(equivocation)
生成者が同じ親ブロックの上に 2 つの異なるブロックに署名した場合に何が起こるかを説明します。誠実なノードがそれをどう避けるか、登録済みノードが EquivocationReport でそれをどう証明するか、そしてその代償です。 - 優先ラウンド、空のブロック、直前の生成者
最初の 10 ラウンドだけがトランザクションを含められる理由、空のブロックでも完全なブロックである理由、そして直前のブロックの生成者が除外されず降格される理由を説明します。 - 参加スコア
ノードがどれだけよく仕事をしているかを測る 0 から 100 % のスコアについて、その上がり方と下がり方、それが決めるもの(抽選による収入、除名)、そして決して関わらないもの(ブロック生成)を説明します。 - 抽選:次のブロックを作るのは誰か
すべてのノードが直前のブロックのシードから次のブロックの生成者の順番付きリストを同じように計算する方法と、アクティブな席がすべて同じ確率を持つ理由を説明します。 - 逃した番、一時停止、除名
番を飛ばしたノードに何が起こるかを説明します。逃した番、収入を止めスコアを下げる「欠席」状態、4 回の逃しによる一時停止、そしてスコアがゼロになったときの除名です。