コンテンツにスキップ

ハーベスティング⚓︎

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

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

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

PoW のマイニングと異なり、ハーベスティングには専用ハードウェアは不要です。 参加条件は、少なくとも 10,000 XYM を保有し、ノードに直接または委任経由で接続しているアカウントであること。 この残高はアカウントの インポータンス スコアに寄与し、 そのスコアがブロックをどれくらいの頻度でハーベストできるかを決定します。

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

Symbol は次のブロックをどのノードがハーベストするかを明示的に選出する方式を使用しません。 代わりに、すべてのノードが自分のメインアカウントおよびリンクされた デリゲータ アカウントそれぞれについて、独立に新しいブロックの生成を試みます。

そのために、まず各アカウントの インポータンス を主な要素として 「ターゲット値」が計算される。 インポータンスが高いほどターゲット値も高くなります。

ノードは次に、未承認トランザクションプール から トランザクションを収集してブロック候補を組み立て、ハーベスティング報酬の送付先を設定された受取人に割り当てます。 ブロックが組み上がると、ノードはそのブロックにハッシュを計算し、 「ヒット値」と呼ばれる乱数を生成します。

ヒット値がターゲット値より小さい場合、そのブロックは有効とみなされ、ネットワーク全体にアナウンスされます。 他のノードはそのブロックを検証し、次を確認します。

  • 含まれるトランザクションが有効であること。
  • ターゲット値およびヒット値が正しく計算されていること。
  • ヒット値が実際にターゲット値より小さいこと。

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

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

同時ブロック生成

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

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

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

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

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

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

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

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

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

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

注意

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

報酬の分配⚓︎

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

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

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

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

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

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

    (ネットワークシンク分を差し引いた後の)報酬の一定割合を受け取るアカウント。 この割合はノード運営者が指定し、最大25%まで設定できます。

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

  • ハーベスタ

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

例えば報酬が100 XYM(手数料+インフレーション)で、ベネフィシャリの割合が20%の場合:

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

インポータンス⚓︎

インポータンス
アカウントの残高、支払ったトランザクション手数料、 そして新しいブロックの ハーベスティング への参加状況に基づき、 ネットワークへの貢献度を数値化したものです。 このスコアにより、ハーベスティングの優先度およびコンセンサス投票時の重みが決まります。

インポータンスは、PoW におけるハッシュレート、または PoS におけるステーク量に似た役割を持ちます。 値が高いほど、ブロックをハーベストして報酬を得られる可能性が高くなります。

インポータンスの計算

残高が少なくとも10,000 XYM あるすべてのアカウントは「高額アカウント」と呼ばれ、 インポータンス計算に参加します。

高額アカウントAのインポータンススコア \(I_A\) は、 その「ステークスコア」、「トランザクションスコア」、 および「ノードスコア」に基づきます。

  • ステークスコア \(S_A\): すべての高額アカウントが保有する通貨総量に対して、 アカウントAが保有する通貨の割合を示します。

  • トランザクションスコア \(T_A\): すべての高額アカウントが支払った手数料総額に対して、 アカウントAが支払った手数料の割合を示します。

  • ノードスコア \(N_A\): 同じ期間内において、ハーベスティング報酬の受取先として どれだけ頻繁に指定されたかを、 すべての高額アカウントの指定回数に対する割合として示します。

これらのスコアがどのように組み合わされてインポータンススコアになるかの詳細は、 Symbol ホワイトペーパー のセクション14.1を参照してください。

メモ

インポータンススコアは720ブロック(おおよそ6時間)ごとに再計算され、 ハーベスティング確率の算出には直近2回のスコアのうち小さい方が使用されます。 したがって、新規にアカウントへ資金を入れた場合でも、 実際にハーベスティングの確率が0より大きくなるまでには およそ12時間かかります