ノードの鍵
ZooBC のノード運用者は 2 つの鍵を使います。ノード鍵はマシンの身元です。ノード上に置かれ、ノードが日常的に行うことに署名します。オーナー鍵は運用者のウォレットにある通常のアカウントで、席とステークを管理します。両者を分けておくことで、サーバーへの侵入があっても運用者のウォレットが渡ってしまうことはありません。
ノード鍵
ノード鍵は 32 バイトの Ed25519 鍵で、プレフィックス ZNK_ を付けて書かれます。ノードの設定ファイル node.conf に保存され、次のものに署名します。
- ノードが作るブロックと、各ブロックのシードの裏付けとなる証明(ブロックシード(VRF))
- ピアから受け取ったブロックとトランザクションに対するレシート(レシートとネットワークトポロジー)
- 各接続を開くハンドシェイクを含む、ピアへのメッセージ
- スパインチェーン への署名
- 価格投票やリリースの拒否などのアテステーションと投票
- 分散ストレージのピースを保持していることの証明(分散ストレージプール)
node.conf には秘密鍵が入っているため、マシン上の他のユーザーがファイルを読める状態だとノードは起動を拒否します。ノードがファイルの所有者であれば、ノード自身がファイルのモードを 0600 に設定します。
ノード自身のアカウント
同じ 32 バイトをプレフィックス ZBC_ で書いたものは通常のアカウントであり、ノード自身のアカウントです。このアカウントは、ストレージ証明、アテステーション、投票など、ノードの義務のトランザクションを手数料ちょうど 0 で送ります(手数料)。各ジェネシス席は、このアカウントに 10 ZBC を持って始まります。
1 つの鍵の 2 つの表記は、プレフィックスの後の最初の 51 文字が共通で、最後の 5 文字だけが異なります。末尾の 3 バイトのチェックサムがプレフィックスも対象にしているからです。そのため手作業で ZNK を ZBC に置き換えるとチェックサムが壊れ、書き換えたテキストは拒否されます(アカウントとアドレス)。
オーナー鍵
オーナー鍵は、運用者のウォレットにある通常の ZBC_ アカウントです。レジストリのトランザクションに署名します。
- NodeRegistration(タイプ 2):ノードを登録し、ステークをロックします。
- ステークの引き上げ
- NodeRegistrationUpdate(タイプ 258):席を新しいノード鍵へ移します。
- RemoveNodeRegistration(タイプ 514):ノードを削除します。
- ClaimNodeRegistration(タイプ 770):ステークをクレームします。
ステークはこのアカウントから出され、ノードの抽選の当選分はこのアカウントに支払われます。ノードがオーナーの鍵を持つことは決してありません。
2 つの鍵を結ぶ所有証明
登録には両方の鍵が必要です。ノード鍵がオーナーのアカウントと最近のブロックを記した短いメッセージに署名し、オーナー鍵がそれを運ぶトランザクションに署名します。どちらか一方の鍵だけではこの組を登録できず、他人のノードを自分のアカウントで登録することは誰にもできません。同じ証明は、ステークの引き上げとクレームにも必要です。その正確な構成は ノードの登録 にあります。
運用者は両方の鍵を自分で作成します。誰かが発行するものはなく、他の誰もコピーを持ちません。
席を新しいノード鍵へ移す
ノード鍵が漏れた場合やマシンを入れ替える場合、オーナーは改めて登録することなく、席を新しいノード鍵へ移すことができます。NodeRegistrationUpdate は新しい 32 バイトの鍵を、新しい鍵で署名された所有証明とともに運びます。ノードは ID、スコア、キューの状態、加入の状態を保持します。この変更は、それを含むブロックの 120 ブロック(30 分)後に有効になります。
ノード鍵でもステークを動かせる
ノード鍵はウォレットの鍵と同じくらい慎重に守ってください。ノード鍵を持つ者は誰でも、ClaimNodeRegistration によって席のステークを自分が管理するアカウントへクレームできます。オーナー自身のクレームは削除として扱われ、同じ 7 日間のクールダウンがあります。それ以外の者のクレームは告知され、40,320 ブロック(7 日)後に実行されますが、それまでにオーナーがノードを削除すれば実行されません。したがって、チェーンを見守っているオーナーには対応のための 1 週間があります(レジストリからの離脱)。これは、オーナーアカウントにアクセスできなくなったオーナーのための手段でもあります。その場合クレームは別のアカウントから行われるため、やはり 7 日後に実行されます。
その他の鍵
ネイティブの鍵は、リカバリーフレーズから m/44'/883'/n' に沿って導出できます。同じ 32 バイトの鍵は、リレー鍵(ZBR_)やゲートウェイ鍵(ZBG_)として書くこともできます(鍵とアカウントタイプ)。プロトコルの 4 つの役割鍵(リリース権限者、ページ権限者、トレジャリー、マーケットメイカー)は、別々のデバイス上の別々の鍵です(ZooBC Foundation)。運用者はそのいずれも必要としません。