コンテンツにスキップ

ハーベスティング⚓︎

ハーベスティング
Symbol が新しい ブロック をチェーンに追加し、参加する アカウント に報酬を分配するプロセスです。 PoW におけるマイニング、または PoS におけるステーキングに相当する役割を持ちます。

各ブロックは単一のランダムな ノード により生成され、そのノードの「ハーベスタアカウント」によって署名されます。 このアカウントはノードのメインアカウント、またはその デリゲータ のいずれかであります。

ブロックに含まれる トランザクション からの手数料と、 一部の インフレーション は、ハーベスタアカウントおよび ノード運営者が指定した他のアカウントに分配されます。 これらにはノードのメインアカウントが含まれる場合もあれば、含まれない場合もあります。

参加資格⚓︎

PoW のマイニングと異なり、ハーベスティングには専用ハードウェアは不要です。

参加できるのは、次の条件を満たす アカウント です。

  • 少なくとも 10,000 XYM を保有していること。
  • ノード に直接または委任経由で接続していること。

この残高はアカウントの インポータンス スコアに寄与し、そのスコアがブロックをどれくらいの頻度でハーベストできるかを決定します。

ハーベスティングの仕組み⚓︎

Symbol には、次のブロックをどのノードがハーベストするかを決定する中央のコーディネーターは存在しません。 代わりに、すべてのノードが独立して新しいブロックの生成を試みます。

まず、「ヒット値」と呼ばれる乱数が、前のブロックのハッシュから計算されます。

次にノードは、自分のメインアカウントおよびリンクされたすべての デリゲータ アカウントを順に処理し、 それぞれについて主に インポータンス に基づく「ターゲット値」を計算します。 インポータンスが高いアカウントほど、ターゲット値も高くなります。

いずれかのアカウントでヒット値がターゲット値より小さい場合、 ノードは最初に条件を満たしたアカウントを使い、未承認トランザクションプール から トランザクションを収集してブロック候補を組み立て、ハーベスティング報酬を設定された受取人に割り当てます。

組み上がったブロックはネットワーク全体にアナウンスされ、他のノードがそれを検証し、次を確認します。

  • ブロックの署名が、主張されているハーベスタによるものであること。
  • トランザクションが有効であること。
  • ターゲット値およびヒット値が正しく計算されていること。
  • ヒット値が実際にターゲット値より小さいこと。

これらのいずれかが満たされない場合、他のノードは新しいブロックを単に無視します。 コンセンサス の仕組みにより、ネットワークの大多数が合意するブロックが最終的に採用されます。

ブロックが有効であれば、他のノードはそれをチェーンの一部として受け入れ、自身のコピーに追加します。 このプロセスは次のブロック高でも繰り返されます。

同時ブロック生成

特定のブロック高で複数のノードが同時にブロックを生成することを防ぐ特別な仕組みは存在しません。 その場合、チェーン上の同じ位置に異なるブロックが現れるため、ネットワークは一時的に フォーク する可能性があります。

これらの競合は、ノード同士が互いのブロックを認識するにつれて コンセンサス によって解決されます。

ターゲット値とヒット値の計算
  • ターゲット値 は各ノードが独立して計算し、特定のアカウントで次のブロックを ハーベストできる見込みを表します。 主に次の3つの要素に依存します。

    • アカウントの インポータンス スコア: より活発で資金量の多いアカウントほど、より頻繁にハーベストできます。
    • ネットワーク全体の「難易度」: 直近のブロック生成時間に基づいて動的に調整され、一定の生成速度を維持します。
    • 直前のブロックから経過した「時間」: 時間が長いほど新しいブロックが生成される確率が高まります。
  • ヒット値 は、新しいブロックの内容とアカウントの VRFキー から導かれる乱数であり、事前に予測することはできません。

    VRF キーが無ければ、攻撃者は次にどのノードがブロックを生成しそうかを予測し、 例えば DoS 攻撃によってそのノードを検閲しようと試みる可能性があります。

ブロックが有効となるには、そのノードで計算されたターゲット値がヒット値よりも 大きい 必要があります。 インポータンスが高いほど、または前回のブロックからの経過時間が長いほど、 ターゲット値は大きくなり、この条件を満たしやすくなります。

ハーベスティング方法⚓︎

ノード運営者は、望むシンプルさとセキュリティのバランスに応じて ローカルハーベスティングまたは リモートハーベスティングを有効化して参加できます。 ノードを運営していないアカウントでも、残高要件を満たしていれば 委任ハーベスティング を通じてノードにリンクし、 報酬を分け合うことができます。

ローカルハーベスティング⚓︎

ローカルハーベスティング
ハーベスティングの一種で、報酬が直接ハーベスタアカウントに送られる方式。 ノードは運営者の「メインキー」を使って生成したブロックに署名します。 このキーはノードのマシン上に保管される必要があります。

ローカルハーベスティングでは秘密鍵をノードに保存します

ハーベスタアカウントは高い インポータンス スコアを保つために、 相応の残高を保持する必要があります。 常時オンラインのマシン上にその 秘密鍵 を保存すると、 何らかの不正アクセスがあった場合に、その残高全体が危険にさらされます。

ローカルハーベスティングは設定が分かりやすいが、上記のセキュリティリスクがあるため、 公開ノードにはあまり適していません。 そのため多くの運営者はリモートハーベスティングを採用します。

リモートハーベスティング⚓︎

リモートハーベスティング
ハーベスティングの一種で、ブロック署名を別の「リモートアカウント」に委任する方式です。 一方でノードの インポータンス と報酬は 依然として運営者の「メインキー」に結び付いたままです。

リモートアカウントは資産を保有せず、メインアカウントの代わりにブロックへ署名するためだけに存在します。 この 秘密鍵 は常時オンラインのマシン上にあるノード設定ファイルに保存されるため、 失っても構わないものとして設計されています。

リモートアカウントは、Account Key Link トランザクションに署名することで指定されます。 これによりメインアカウントとリンクされ、そのアカウントの インポータンス を用いてブロックに署名できるようになります。

メインアカウントは引き続きノードのインポータンスを決定し、ブロック報酬を受け取ります。 しかしそのキー自体はオフラインのままで、漏えいリスクを避けられます。 便宜上、ブロックに署名するのがリモートアカウントであっても、 メインアカウントはハーベスタアカウントと呼ばれます。

この役割分離により、ハーベスタの資産の安全性が確保されるため、 リモートハーベスティングは多くの運用者に選ばれる方式となっています。

委任ハーベスティング⚓︎

委任ハーベスティング
ノードを運営していないが条件を満たすアカウントが、外部のノードにハーベスティングを委任できる ハーベスティングの形態です。 アカウントの インポータンス スコアが使用され、 収集された手数料は、そのアカウントとノード側で設定された受取人との間で分配されます。

このようなアカウントは、実際のブロック署名はノードのリモートアカウントが行っていても、 「デリゲータ」または「委任ハーベスタ」と呼ばれます。

デリゲータ
委任ハーベスティング を通じて 自身のハーベスィングをサードパーティノードに委任しつつ、 自身の インポータンス を維持し、 ハーベスト報酬の一部を受け取るアカウント。 「委任ハーベスタ」とも呼ばれます。

実際に作業を行うのはノードであるが、ハーベスタとして扱われるのは依然としてデリゲータです。 この仕組みは双方に有益です。 アカウント側はノードを運営せずに報酬を得られ、 ノード側は自分自身のインポータンスだけに依存せずにブロック生成(および手数料収集)の機会を増やせます。

委任ハーベスティングはリモートハーベスティングと同じリモートアカウント方式を使用します。 デリゲータは暗号化メッセージ付きの 転送トランザクション に署名し、 ノードに対して自分の代わりにハーベストするよう依頼します。

ノードがその依頼を受け入れるかどうかは、ノード側の方針や他の競合する依頼内容によって決まります。

リモートハーベスティングと同様に、ブロック署名はデリゲータ本人とは別のアカウントが行うため、 デリゲータの 秘密鍵 は安全な保管場所から持ち出す必要がないです。

リモートハーベスティングと委任ハーベスティングの違い

どちらの方式も同じリモートアカウントの仕組みを使用します。 異なるのはノードを運営する主体だけです。リモートハーベスティングでは運営者が自分のノードでハーベストし、委任ハーベスティングではアカウントがサードパーティのノードを通じてハーベストします。

報酬の分配⚓︎

ブロックがハーベストされると、報酬はいくつかの参加者に分配されます。 報酬は次で構成されます。

総報酬は次の当事者間で分配される。

RewardDistributionBlockRewardsブロック報酬(手数料+インフレーション)T1BlockRewards->T1:sHarvesterハーベスタSinkネットワークシンクアカウントBeneficiaryノード指定の受取アカウントT1->Sink5%T2T1->T2:s95%T2->Harvester残りT2->Beneficiary25%

  • ネットワークシンクアカウント

    固定で5%の報酬を受け取るシステムアカウント。 ここに蓄積された分は、ネットワーク全体の報酬プログラムに利用できます。

  • ノード指定の受取アカウント(ベネフィシャリ)

    (ネットワークシンク分を差し引いた後の)報酬の固定25%を受け取るアカウント。

    ノード運営者はこの取り分を自分のものにすることができます。 デリゲータと共有するなど、自身の報酬プログラムとして再分配することもできます。

  • ハーベスタ

    ブロックを生成したアカウント。 これはノードの リモートハーベスティング 用アカウント、 またはその デリゲータ のいずれかです。

例えば報酬が100 XYM(手数料+インフレーション)で、ベネフィシャリアカウントが設定されている場合:

受取先 計算式 受取量
ネットワークシンクアカウント 100 XYM の5% 5 XYM
ベネフィシャリアカウント 残り95 XYM の25% 23.75 XYM
ハーベスタアカウント 残りの XYM 71.25 XYM
合計 100 XYM