ノードレジストリとその席
ノードレジストリは、ZooBC のブロックを作ることを許されたノードのオンチェーンの一覧です。各エントリが席です。Proof of Participation では、誰がブロックを作るかを決めるのはコインやハードウェアではなく席です。運用者が次のブロックを作る確率は、その運用者が持つ席の割合に等しくなります。レジストリへのすべての変更はすべてのノードが検証するトランザクションであり、誰でもそれを読むことができます。
席が記録するもの
レジストリは各ノードについて次のものを保持します。
- ノード ID:ノード鍵から導かれる数値です。最初の 8 バイトをリトルエンディアンの整数として読み、最上位ビットを 0 にしたものです。
- ノード鍵:ノードの仕事に署名する 32 バイトの Ed25519 公開鍵です(ノードの鍵 を参照)。
- オーナーアカウント:ノードを登録し、管理する通常のアカウントです。
- 登録の高さ:ノードが登録されたブロックです。
- ロックされたステーク:オーナーが保証金としてロックした ZBC です。
- ステータス:登録済み(アクティブ)、キューで待機中、削除済みのいずれかです。
ノードの参加スコアもその横に保持されます。レジストリはブロック高ごとに版管理されているため、過去のどの高さのメンバー構成も再構築でき、各ブロックは直前のブロック時点のレジストリに照らして判定されます。
なぜ席なのか
Proof of Work ではブロック生成の取り分をハードウェアの調達と同じ速さで、Proof of Stake ではコインの購入と同じ速さで買うことができます。ZooBC ではそれは席の取り分であり、席はプロトコルが定めるペースで 1 つずつ加入が認められます(加入ペース)。したがって、ブロック生成の過半を素早く買うことはできません。Proof of Participation と PoW・PoS の比較 では 3 つの設計を並べて比較しています。
生成者の抽選は、一時停止中でない登録済みの席に対して均一です(抽選)。オーナーがどれだけロックしたかにかかわらず、すべての席が同じ確率で抽選されます。30 席のうち 3 席を持つ運用者は、各席が 100 ZBC をロックしていても 10,000 ZBC をロックしていても、およそ 10 ブロックに 1 つを作ります。
ステークの役割
ステークでブロックが買えないなら、ステークは何のためにあるのでしょうか。
- 加入を待つノードのキューを、ステークに待機時間を掛けた値で並べます(キュー)。
- すべての席に対価を持たせます。新規ノードは少なくとも参入時の最低額をロックしなければなりません(ノードの登録)。
- 保証金です。ノードが除名されたとき、または欠席中や一時停止中に離脱したときには、その 10 分の 1 を失います。その 10 分の 1 は、働いているノードに支払うロンジェビティプールに入ります(レジストリからの離脱)。
ステークそれ自体は何も稼ぎません。報酬もステークを考慮しません。コインベース抽選は参加スコアで重み付けされ、スコアは実際の仕事によってのみ上がります(成熟と収入)。
ジェネシス席と新規ノード
各チェーンは、ZooBC Foundation が保有する 11 のジェネシス席から始まります。これらは高さ 0 でレジストリに書き込まれ、ロックされたステークはなく、既定のスコアは 20 % で、各ノード自身のアカウントに 10 ZBC の運用残高があります。それ以外のノードはすべてキューを通じて加入します。応募者を選ぶ者はおらず、承認手続きもありません。決まった日程もなく、ある加入から次の加入までの間隔は、集計対象の席の数によって決まります。登録に有効期限はありません。
席のステータスの変わり方
| 変更前 | 変更後 | 原因 |
|---|---|---|
| (なし) | 登録済み | 高さ 0 でのジェネシス |
| (なし)または削除済み | キューで待機中 | 登録 |
| キューで待機中 | 登録済み | 加入 |
| 登録済み | 削除済み | 除名、オーナーによる削除、またはクレーム |
| キューで待機中 | 削除済み | 削除、クレーム、または出席不足による除外 |
一時停止はステータスではありません。一時停止中のノードは「登録済み」のままですが、復帰するまで生成者の抽選から外されます(逃した番、一時停止、除名)。
レジストリを読む
レジストリは公開されており、読むのに鍵は必要ありません。
GET /api/v1/nodes?status=allは、すべての席をオーナーと登録の高さとともに一覧表示します。ジェネシス席の高さは 0 のままです。GET /api/v1/nodes?status=queuedは、キューを各ノードのステークと登録の高さとともに一覧表示します。GET /api/v1/blockchain/rulesは、有効なルールを一覧表示します。
レジストリはウォレットの一覧ではありません。通常のアカウントは、ZBC を保有したり送金したりするのに登録を必要としません。