ベーカー(Baker)になるーブロックを生成する:クイックスタート

ここでは、なぜ ベーカーになるのか、どのようにして ベーカーになるのか、ベーカーとは何か、ネットワークの中での役割などを説明します。

MAK
Concordium-Japan
14 min readNov 25, 2020

--

このセクションで学ぶこと:

  • ベーカー(Baker)とは何か、それに関連する概念。
  • ベーカーになるためにノードをアップグレードする方法。
  • Testnetの委任 (delegation)アカウントに委任を依頼する方法。

Baker になるまでの流れをまとめると以下のようになります:

  1. アカウントを取得する。
  2. ベーカーキー (Baker keys) のセットを取得する。
  3. ベーカーキーを使ってノードを起動する。
  4. ベーカーキーをアカウントに登録する。
  5. 委任 (delegation) されたステークを取得する。

これらのステップを完了すると、ノードはブロックをベイク(生成)し、それを登録したアカウントに報酬をもたらします。以下のドキュメントでは、この手順を説明しています。

定義

ベーカー(Baker)とは、チェーンに追加される新しいブロックを作成(またはベーキング)することで、ネットワークに積極的に参加するノードのことです。ベーカーは、ブロックチェーンの整合性が維持されるように、ブロックに含まれるトランザクションを収集、オーダー、検証します。ベーカーはベイクした各ブロックに署名し、ネットワークの他の参加者がチェックして実行できるようにします。

各ベーカーは baker credentialsと呼ばれる一連の暗号鍵を持っています。ベーカーはこれらの鍵を使用してブロックに署名します。登録された各 ベーカーには、そのベーカーを参照する際に使用される Baker ID が関連付けられています。

ベーカーが有効なブロックを作成してチェーンに含まれるようになると、しばらくするとそのベーカーに登録されている reward account (報酬アカウント)に報酬が支払われます。

報酬やその他のベーキングに関連するコンセプトを考える際には、現在のベーカーと委任 (delegation) のセットが固定された期間を定義する時間の単位として epoch (エポック)というコンセプトを使用します。

ブロックをつくる資格を得るためには、Baker は lottery(抽選)に参加しなければならず、当選券を得る確率は Baker に委任 (delegation)されたステークにほぼ比例します。

アカウントは Baker に委任 (delegation) することを選択することができ、ベーカーはそのアカウントのステークを lottery power(抽選力)として使用することができます。この処理を delegation(委任)といいます。この方法では、新規参入者がベーカーになるプロセスを経てベーカーになることができ、ステークがベーカーに委任された場合、ベーカーは抽選に勝つことができ、いくつかのブロックをつくる機会を得ることができるようになります。アカウントがステークを委任した場合、委任されたステークがベーカーの lottery power に貢献する前に、最大2つの epoch(エポック)が経過する必要があります。アカウントが委任を停止した場合( undelegation order を送信した場合)も同じ原則が適用されます。詳細については、このクイックスタートの最後のセクションを参照してください。

ベーカーになるプロセスを簡単にするために、テストネット上では、Concordiumは4つの委任アカウントを配置しています。これについては後で説明します。

アカウントの管理

このセクションでは、アカウントをインポートするための関連手順を簡単に説明します。詳細については、アカウントの管理を参照してください。

アカウントは、Concordium IDアプリを使用して作成します。アカウントの作成に成功したら、More タブに移動して Export を選択すると、アカウント情報を含むJSONファイルを取得することができます。

アカウントをツールチェーンにインポートするには、ユーザーは、 concordium-node の実行時に http://localhost:8099 にあるノードダッシュボードにアクセスする必要があります。

ノードダッシュボードはエクスポートされたファイルを復号化し、全てのアカウントをインポートするためのパスワードを要求します。同じパスワードは、トランザクション署名キーと暗号化された転送キーの暗号化に使用されます。

ベーカーキー(Baker Key)

ノードが baker credentials で起動されて、チェーン上でベーカーとして登録されると、ベーキングを開始する準備が整います。したがって、ノードの実行後に baker として登録することをサポートするために、concordium-node は自動的に資格情報 baker-credentials.json のセットを生成します。

これらのキーはデータディレクトリに生成され、実行しているOSに応じて変化します。LinuxとmacOSでは、データディレクトリは ~/.local/share/concordium ですが、Windowsでは %LOCALAPPDATA%\concordium になります。

通常、データディレクトリは消去されませんが、複数の実行ノードやより高度な設定で使用したい場合に備えて、ユーザーはファイルのコピーを作成することができます。

ベーカー(Baker)の登録と報酬アカウントの関連付け

ベーカーになるための最初のステップは、報酬アカウントに関連してチェーンに ベーカーキー (Baker keys) を登録することです。

ノードダッシュボードからの新規 Baker 登録の流れは以下の通りです:

  1. アカウントをインポートし、アクティブアカウントとして選択する。
  2. ベイキング(Baking)ヘッダーのプロンプトで、トランザクションに署名するための鍵を導入する。
  3. ベイキングヘッダーのボタンをクリックして処理を開始する。
  4. トランザクションが確定するのを待って、2エポックがアクティブになるのを待つ。

瞬間ごとにノードダッシュボードにプロセスの状態が表示されます。この時点から、ユーザーはベーカーの登録を解除したい場合は、Stop baking をクリックすることができます。

ベーカリストに登録されることも登録解除されることも、トランザクションが完了してから2エポック後に発生します。

この時点でベーカーは登録され、選択されたアカウントに関連付けられています。報酬はそのアカウントに支払われ、ノードは自動的にベイクを開始します。

ベーカーのステータスと抽選力をチェック

ユーザーは、ノードダッシュボードで、そのノードがベイキングしていることと、その状態を確認することができます。しかし、これは他のコンポーネントにも程度の差こそあれ反映されています。

ネットワークダッシュボードでは、ユーザーのノードは Baker 欄に Baker ID が表示されます。

しかし、ノードダッシュボードにもネットワークダッシュボードにも表示されない情報がまだあります。抽選力とは、あるベーカーがどのくらいの確率で抽選に当たり、ブロックをベイクするかを決定するものです。前述したように、これは与えられたベイカーに委任された総ステークのパーセンテージです。ベーカーに委任されたステークを確認する唯一の方法は concordium-client を使用することです:

このコマンドは、チェーンに登録されている異なるベイカーとその相対的な抽選力のリストを出力します。

また、ユーザーのベイカーが十分なステークを委任されている場合、ブロックの生産を開始し、ユーザーはウォレットでベイカーに関連付けられたアカウントでベイキング報酬を受け取っていることを確認することができます。

ベーカーへの委任

この時点で、ベーカーリストにベーカーキーが追加されてから2エポックが経過しているので、ユーザのノードはベーカーとしてベイキングができます。このノードはベーカーに委任されたステークを使って抽選券を取得しようとしますが、新しいベーカーは作成時にステークを持っていません。

委任には有効期限がなく、終了するには別のアカウントに別の委任トランザクションを発行するか、委任解除のトランザクションを発行する必要があります。

Concordiumのアカウントからの委任リクエスト

前述したように、Cocordiumはネットワーク内に4つのアカウントを所有しており、それぞれが初期の総ステイクの5%を保有しています。これらのアカウントは、要求があればベイカーに委任することができ、その委任は2エポック間有効です。

これを行うためには、ユーザーはもう一度ノードダッシュボードにアクセスする必要があります。ベイカーがベイカーリストに追加されると、ノードダッシュボードにConcordiumアカウントからの委任を要求するための新しいボタンが表示されます。

リクエストされると、委任処理が開始され、ノードダッシュボードは、各瞬間に委任がどのようなステップで行われているかを報告します。ユーザーは少なくとも2エポック間は委任されたステークを持つことが許されており、それは自動的に取り消されます。

先ほどのベーカーリストのチェックと同じコマンドを使って、ユーザーは各瞬間に委任されたステークをチェックすることができます。

選択したベーカーに手動で委任する

すべてのベーカーはアカウントに関連付けられています。しかし、ベイカーは自動的にそのアカウントのステークを受け継ぐわけではありません。ベーカーが(抽選に参加するために必要な)ステークを持っていることを確認するためには、アカウントは明示的にステークをベーカーに委任しなければなりません。これを行うために、アカウントはコマンドラインから委任トランザクションを送信することができます。

ユーザーがノードダッシュボードを介して、またはコマンドライン・インターフェースを使用してツールチェーンにアカウントをロードしたと仮定すると、アカウント SENDER が所有するステークをベーカー BAKER_ID に委任するためのトランザクションを送信することができます。これを行うためには、ユーザーは以下のコマンドを実行する必要があります:

ユーザーはブロックチェーンに登録されているベーカーIDの中から任意のベーカーIDを選択し、そこにステークを委任することができます。すでに委任しているアカウントから新しい委任トランザクションを送信すると、古い受取人からの委任を解除し、新しい受取人に委任します。

また、ユーザーは、実行中の委任トランザクションを送信している任意の委任を手動で委任解除することを選択することができますが、これはコマンドラインで以下のコマンドで行います:

アカウントが現在ベイカーに委任しているかどうかとそのベイカーIDを確認するには、ノードを照会することでアカウントの情報を確認することができます。

ファイナライゼーション

ブロックが"信頼ある"チェーンの一部とみなされるためには、ネットワーク内のノードが特定のブロックを含めることに同意するかどうかを決定するコンセンサスのプロセスを経る必要があります。このプロセスはファイナライゼーションと呼ばれています。これについての詳細は、こちらを確認してください。

ファイナライゼーションは、ある程度の利害関係を持つベーカーたちで構成されるファイナライゼーション・コミッティによって行われるので、ユーザーの立場からすると、最終的にファイナライゼーション・コミッティに含まれるようになるためには、それ以上のアクションは必要ないということになります。

時間的制約についての詳細な説明

さらに知りたいというユーザーにとって、上記の説明では、全体の流れと各ステップでの待ち時間を知る情報の一部が欠けています。ここでは、チェーン上で発生するイベントとその待ち時間の図を提示し、各瞬間のノードの状態を示しています。

この説明は読者にとっては詳細すぎるかもしれませんし、一般的な流れを理解するためには必要ありません。

この図では、ベーカーになってステークを委任されるノードを示しています。エポック期間は100と仮定しています。

Lottery power(抽選力)Delegated stake(委任ステーク)に反映されている金額は方向性のあるものであり、絶対的な金額を意味するものではないことに注意してください。

図にあるように、ベイカーの変更が有効になるまでには、1エポックから2エポックかかります。これは、現在のベーカーが、直前のエポック終了時のステーク分布に基づいているからです。このように、トランザクションを含むブロックがエポックで起こるスロットタイムにベイクされた場合、エポックE+2を開始したときに変更が有効になります。

実際には、ユーザーは、通常の確定条件では、変更が有効になるまでに1エポック以上、多くても2エポックかかることを予測でき、また、ブロックベイクと確定時間に間がないことを予測することができます。

この仕組みには1つの例外があり、それはファイナライゼーション・コミッティの一部であることを占めているステークです。ステークが委任されて委任トランザクションが確定すると、ファイナライゼーション・コミッティが即座に更新され、ユーザーが十分なステークを持っていれば、そのユーザーがファイナライザーとなります。このように、 Delegated stake(委任されたステーク)のタイムラインは、トランザクションが確定した瞬間に、ファイナライゼーション・コミッティの一部であることを説明するステークが変更されることを示しています。

ステークをベーカーに委任する場合、ベーカーを登録したトランザクションが確定ブロックに入るまで待つことが重要であることに注意してください。その理由は、トランザクションが2つの異なるブランチに含まれている場合、勝ったブランチがステークを委任したいベーカーIDを持っていない可能性があるからです。これは、希望していたベーカーとは異なるベーカーにステークを委任してしまう可能性があることを意味します。

サポート&フィードバック

問題が発生した場合や提案がある場合は、Discordに質問やフィードバックを投稿するか、testnet@concordium.com までご連絡ください。

--

--