ハーベスティング⚓︎
新しいブロックはそれぞれ、1つの ハーベスターアカウント に代わって単一の ノード が生成します。 ノードが次のブロックを生成する確率は、そのノードのハーベスターアカウントのインポータンスの合計によって重み付けされます。
- ハーベスターアカウント
- ハーベスティングに参加するアカウントです。 インポータンスがブロックを生成する確率を決め、ハーベストした各ブロックの報酬を受け取ります。
ブロックに含まれる トランザクション の手数料は、そのブロックを生成したインポータンスを持つ単一のハーベスターアカウントに全額支払われます。
資格⚓︎
PoW のマイニングとは異なり、ハーベスティングに専用ハードウェアは必要ありません。
次の条件を満たす アカウント はハーベスティングに参加できます。
アカウントの インポータンス スコアが、ハーベストできる頻度を決定します。
ハーベスティングのプロセス⚓︎
NEM には、次のブロックをハーベストするノードを決める中央のコーディネーターは存在しません。 代わりに、すべての ノード が、それぞれの ハーベスターアカウント について同じ決定論的な資格確認を実行し、独立して競争します。
このため、主に各アカウントの インポータンス に基づいて ターゲット 値を計算します。 インポータンスが高いほど、ターゲットも高くなります。
ノードは各ハーベスターアカウントについて、候補ブロックの 生成ハッシュ から ヒット と呼ばれる数値を計算します。
いずれかのハーベスターアカウントがターゲット値未満のヒットを生成すると、ノードは 未承認トランザクションプール から候補ブロックを組み立て、ネットワークの他のノードにアナウンスします。
他のノードはブロックを検証し、次を確認します。
- ブロックの署名が、主張されたハーベスターによるものである。
- トランザクション が有効である。
- ヒットが実際にターゲットより低い。
どれかの確認に失敗すると、他のノードは新しいブロックを無視します。 コンセンサス メカニズムにより、ノードは最終的にネットワークの他のノードが合意するブロックを採用します。
ブロックが有効なら、他のノードはそれを受け入れ、自分のチェーンのコピーに含めます。 次のブロック高でこのサイクルが繰り返されます。
同時ブロック作成
複数のノードが同じ高さでブロックを生成することを防ぐ特別な仕組みはありません。 この場合、異なるノードがチェーン上の同じ高さで異なるブロックを採用するため、ネットワークが一時的に フォーク することがあります。
コンセンサス メカニズムは、ノードが競合するブロックを認識すると、これらの競合を解決します。
ターゲットとヒットの計算
-
ターゲット は各ノードが独立して計算し、特定のアカウントを使って次のブロックをハーベストする可能性を表します。 次の3つの要素に依存します。
- アカウントの インポータンス スコア。活動量が多いアカウントや資金の多いアカウントは、より頻繁にハーベストします。
- ネットワーク全体の 難易度。最近のブロック生成時間に応じて動的に調整され、一定のブロック生成レートを維持します。
- 最後のブロックからの 経過時間。遅延が長いほど、新しいブロックが生成される可能性が高くなります。
-
ヒット はブロックの 生成ハッシュ から決定論的に導出されます。 この生成ハッシュは、前のブロックの生成ハッシュとハーベスターの 公開鍵 を組み合わせて計算されたハッシュです。 したがってヒットは、過去のハーベスターの完全なチェーンと、現在ハーベストを試みる者に依存します。
ブロックを有効にするには、ノードのターゲットがヒットより 大きく なければなりません。 インポータンスが高いほど、また遅延が長いほどターゲットは増加し、難易度が高いほどターゲットは減少します。
ハーベスティングの方法⚓︎
ノード所有者は、簡単さとセキュリティのどちらを優先するかに応じて、ローカル または リモート ハーベスティングを有効にして参加できます。 ノードを運用していなくても残高要件を満たすアカウントは、委任ハーベスティング によってノードへリンクしてハーベストできます。
ローカルハーベスティング⚓︎
- ローカルハーベスティング
- 報酬がハーベスターアカウントに直接送られる ハーベスティング 方法です。 ノード は、マシンに保存したオペレーターの メインキー を使って生成した ブロック に署名します。
Warning
ハーベスターアカウントは、高い インポータンス スコアを維持するために相当な残高を保有する必要があります。 秘密鍵を常時オンラインのマシンに保存すると、不正アクセス時に全残高が危険にさらされます。
ローカルハーベスティングは設定が簡単ですが、これらのセキュリティリスクにより、公開ノードには適していません。 ほとんどのオペレーターは代わりにリモートハーベスティングを選びます。
リモートハーベスティング⚓︎
- リモートハーベスティング
- ブロック署名を別の リモートキー(リモートアカウント)に委任しながら、ノードの インポータンス スコアと報酬をオペレーターの メインキー に結び付ける ハーベスティング の方法です。
リモートアカウントは資金を持たず、ハーベスターのメインアカウントに代わってブロックに署名するためだけに存在します。 その秘密鍵は常時オンラインのマシン上のノード設定ファイルに保存されるため、使い捨てを前提としています。
リモートアカウントは Account Key Link トランザクションに署名することで指定され、メインアカウントの インポータンス がリモートアカウントへ移ります。 リモートアカウントは360ブロック(約6時間)の待機期間後にブロックへの署名を開始し、別の Account Key Link トランザクションで削除できますが、同じ待機期間が必要です。
メインアカウントは引き続きノードのインポータンスを決定し、すべてのブロック報酬を受け取ります。 ただし、その鍵はオフラインのままで、侵害から守られます。 簡単にするため、ブロックにはリモートアカウントが署名していても、メインアカウントをハーベスターアカウントと呼びます。
この役割分担はハーベスターの資金を強力に保護するため、ほとんどのオペレーターにとってリモートハーベスティングが推奨される方法です。
委任ハーベスティング⚓︎
- 委任ハーベスティング
- ノードを運用していない資格のあるアカウントが、第三者のノードにハーベスティングを委任できる ハーベスティング の方法です。 委任するアカウントの インポータンス スコアが使われ、ハーベスト報酬は全額そのアカウントが受け取ります。
このようなアカウントを 委任者 または 委任ハーベスター と呼びます。
- 委任者
- 自身の インポータンス を保持しながら第三者のノードへ 委任ハーベスティング を委任し、ハーベスト報酬を受け取るアカウントです。 委任ハーベスター とも呼ばれます。
ノードが作業を行っても、委任者は引き続きハーベスターとみなされ、NEM はブロック報酬を全額委任者に支払います。 この仕組みにより、アカウントは自分のノードを運用せずに報酬を得られます。
委任ハーベスティングはリモートハーベスティングと同じリモートアカウント構成を使います。 委任者はリモートアカウントの 秘密鍵 を第三者のノードに渡し、ノードはそのアカウントをハーベスト対象に追加して委任者に代わってブロックに署名します。
ノードがリモートアカウントを受け入れるかどうかはオペレーターの方針によります。 委任者はリンクする鍵を変更して、いつでもこの関係を取り消せます。
リモートハーベスティングと同様に、ブロック署名は委任者以外のアカウントが行うため、委任者の秘密鍵を安全な保管場所から出す必要はありません。
リモートハーベスティングと委任ハーベスティングの違い
どちらの方法も同じリモートアカウント構成を使います。 違いは誰がノードを運用するかだけです。リモートハーベスティングではオペレーターが自身のノードを通じてハーベストし、委任ハーベスティングではアカウントが第三者のノードを通じてハーベストします。
報酬の分配⚓︎
ブロック がハーベストされると、ハーベスターはブロック内のすべての トランザクション の手数料合計を受け取ります。
ローカルハーベスティング では、ハーベスターが自分のブロックに署名し、報酬を直接受け取ります。 リモートハーベスティング と 委任ハーベスティング ではリモートアカウントがブロックに署名しますが、報酬はメインアカウントに流れ、リモートアカウントやそれをホストするノードオペレーターには流れません。
NEM はハーベスターとノードオペレーターの間でブロック報酬を分割しません。 他の人のリモートアカウントをホストするノードは、そのブロックから何も受け取りません。 プロトコルはハーベスターに全額を支払います。
委任ハーベスターのホスティングに対してノードオペレーターが補償を受けるかどうかはプロトコルの範囲外で、当事者間の取り決めに委ねられます。