ノードの運用
ZooBC のノードとは、コンピューター上で動く ZooBC のソフトウェアです。チェーンのコピーを保持し、すべてのブロックとトランザクションを他のすべてのノードと同じルールで確認し、公開の HTTP API を提供します。誰でもノードを動かすことができ、チェーンを追跡するだけのノードでも、オーナーは誰も信頼することなくすべてを確認できます。ブロックを作るのは別の段階です。ノードがブロックを作るのは、ノードレジストリとその席 に席を持ってからだけです。
ノードが動かすもの
ノードは zoobc-node --start node.conf で起動する 1 つのプロセスで、1 つの SQLite データベースを持ちます。3 つのポートで待ち受けます。
| ポート | 用途 | |
|---|---|---|
| 8001 | ピアツーピアネットワーク | |
| 8080 | HTTP API。ウェブウォレット も提供します | |
| 8545 | [[metamask | MetaMask]] が使う Ethereum 形式の RPC アダプター。既定ではノード自身のマシン上(ループバック)のみ |
ノードがジェネシスブロックを作ることはありません。ブロック 0 はあらかじめデータベースに入っていなければならず、そのブロックのハッシュがチェーンの身元です(ジェネシスブロック を参照)。ノードが抜け出せないブランチに行き詰まった(wedged)場合は、auto_resync の設定が既定でオンなので、自分のチェーンを破棄し、スパインチェーン に固定されたスナップショットから自身を再構築します。リリースは リリースピン を同梱することもできます。これはノード自身のスパインが一致しなければならない既知のスパインブロックです。新しいバージョンは、ノードの横で動き、オーナーが管理するアップデーターを通じて届きます(リリースとアップデート)。
起動からブロック生成まで
- 運用者が 2 つの鍵を作成します。マシン用のノード鍵と、ウォレットのオーナー鍵です(ノードの鍵)。
- オーナーが、ステークをロックし、2 つの鍵が対応していることの証明を添えた登録を送ります(ノードの登録)。
- ノードは、ステークに待機時間を掛けた値で並ぶ公開されたキューで待ちます(キュー)。
- 加入タイマーが、プロトコルの定めるゆっくりとしたペースで、1 ノードずつ加入させます(加入ペース)。
- 加入が認められると、ノードはブロックを作るよう抽選され(抽選)、割り当てられたピアにブロックとトランザクションを中継し(レシートとネットワークトポロジー)、短い成熟期間の後に報酬の分配を受けます(成熟と収入)。
各チェーンは ZooBC Foundation が保有する 11 のジェネシス席から始まります。それ以外のノードはすべてキューを通じて加入し、誰が入るかを選ぶ者はいません。手作業で与えられる席はなく、Proof of Work のように計算能力で勝ち取れる席もありません。
レジストリにとどまる
席は仕事をすることで維持されます。抽選された番を理由を問わず飛ばした登録済みノードは、次に自分のブロックを作るまで欠席状態になります。欠席中は何も稼げず、参加スコアがスコア単位ごとに(100 点中)5 点下がります。スコア単位は、ノード数 2,880 未満のネットワークでは 12 時間です。ノードが署名するレシートや ping ではこの状態は終わらず、終わるのは自身の次のブロックだけです。
4 回続けて番を逃すと、ノードは一時停止もされます。生成者の抽選から外れますが、席は保持します。オンラインに戻ると、ソフトウェアが ping を送ります。これは一時停止中のノードだけが送れる手数料不要の小さなトランザクションで、ノードを仮復帰として抽選に戻します。スコアがゼロに達すると、ノードは除名されます。詳細は 逃した番、一時停止、除名 に、席が終わるすべての道筋は レジストリからの離脱 に、すべての数値は mainnet のノードパラメータ にあります。
関連項目
このトピックの記事
- mainnet のノードパラメータ
ノードの登録、キュー、加入、ライブネス、収入、離脱、アップデート、ノードプロセスを決める mainnet の値を、1 行ずつまとめた参照表です。 - キュー
登録した新規ノードが席を待つ仕組みを説明します。ステークに待機時間を掛けた値による順序、毎日の出席確認、そしてキューからの離脱にかかるコストです。 - ノードの登録
オーナーがノードを登録する方法を説明します。NodeRegistration トランザクション、ノード鍵とオーナーを結び付ける所有証明、そしてキューが受け付ける最小のステークです。 - ノードの鍵
ノードの仕事に署名するノード鍵と、席とステークを管理するオーナー鍵について、それぞれがどこに置かれ、何に署名し、どのように結び付けられているかを説明します。 - ノードレジストリとその席
ブロックを作ることを許されたノードのオンチェーンの一覧です。各席が何を記録するか、コインではなく席がブロック生成を決める理由、そして誰でもそれを読める方法を説明します。 - リリースとアップデート
新しいノードのバージョンがチェーン上でどう告知されるか、各ノードの横で動くアップデーターがそれをどう安全にインストールするか、そして新しいコンセンサスルールのバンドルがどう有効になるかを説明します。 - レジストリからの離脱
席が終わる道筋(オーナーによる削除、スコアがゼロになったときの除名、ノード鍵によるクレーム)と、オーナーがステーク全額を取り戻す場合、10 分の 1 を失う場合を説明します。 - 加入ペース
ZooBC がレジストリへの新規ノードをなぜ 1 つずつゆっくり加入させるのか、加入の間隔を決める式、そして mainnet でのスケジュールを説明します。 - 成熟と収入
登録済みノードが何を稼ぐか、コインベース抽選が各ブロックの報酬を参加スコアに応じてどう分配するか、そして新しいノードが稼ぐ前に成熟しなければならない理由を説明します。