あなたのアカウントのインポータンスを安全にノードと共有します
デリゲートハーベスティング によってノードを運用せずにブロック報酬をアカウントで得ることができます。同時にノードはアカウントの (おそらくはより高い) インポータンススコア の恩恵を受けることができます。
アカウントの 秘密鍵 はノードと決して共有されないため、この方法は、すべてのノードは公にアクセス可能であり、攻撃を受ける可能性がある ローカルハーベスティング よりも本質的に安全です。このため、ローカルハーベスティング用のノード設定は簡単ですが、ノード所有者もデリゲートハーベスティングの使用を推奨します。
必要な手順の概要:
リクエストに応じるのは完全にノード次第であることに注意してください。一部のノードは現在のデリゲートハーベスタの一覧を要求できますが、この情報が常に利用できるとは限りません。 (以下の 有効化の確認 を参照)
デリゲートハーベスティングを有効にするには、次のアイテムが必要です:
symbol.xym
が必要で、さらにトランザクション手数料を支払います。これはハーベスト手数料を受け取るアカウントです。その秘密鍵は常に秘密にしてください。オプション:
symbol.xym
を持つ アナウンサーアカウント (A) 。 M の代わりに、このアカウントを介して最終的なデリゲートハーベスティングリクエストをアナウンスすることで、M がデリゲートハーベスティングに関与しているという事実をネットワークから隠蔽します。プライバシーを強化するためにはこのアカウントを使用してください。必要であれば、新しいアカウントの作成ついて、 アカウントの作成 ガイドを参照してください。
注釈
bash コードスニペットは symbol-cli で メインアカウント (M) が デフォルト プロファイルとして設定されていることを前提としています。そうでない場合は ‑‑profile
パラメタを使用してください。
M のインポータンスを R へ委譲 するための AccountKeyLinkTransaction を作成します。 M でトランザクションに署名し、ネットワークにアナウンスします。
const accountLinkTransaction = AccountKeyLinkTransaction.create(
Deadline.create(epochAdjustment),
remoteAccount.publicKey,
LinkAction.Link,
networkType,
UInt64.fromUint(2000000),
);
M を VRF キーへリンク するための VrfKeyLinkTransaction を作成します。 M でトランザクションに署名し、ネットワークにアナウンスします。
const vrfLinkTransaction = VrfKeyLinkTransaction.create(
Deadline.create(epochAdjustment),
vrfAccount.publicKey,
LinkAction.Link,
networkType,
UInt64.fromUint(2000000),
); // Absolute number
M をノードの TLS キーへリンク するための NodeKeyLinkTransaction を作成します。 M で NodeKeyLinkTransaction に署名し、ネットワークにアナウンスします。
注釈
ノードの公開 TLS キーは通常、ノードの所有者によって提供されます。しかし、Dual ノード (Peer と API ノードの両方) を実行している、バージョン 2.2.0 以上の REST ゲートウェイ はその情報を REST エンドポイント node/info
の nodePublicKey
フィールドで提供します。
const nodeLinkTransaction = NodeKeyLinkTransaction.create(
Deadline.create(epochAdjustment),
nodeAccount.publicKey,
LinkAction.Link,
networkType,
UInt64.fromUint(2000000),
); // Absolute number
トランザクションが確認されたら、次のステップで R の秘密鍵をノードと共有 します。これはノードの所有者であり、ノードの構成にアクセスできるかどうかに応じて、2 つの方法があります。
ノード所有者 の場合は、フィールドにリモートアカウントの秘密署名鍵を ハーベスティング設定 の harvesterSigningPrivateKey
設定するだけです。
それ以外の場合 PersistentDelegationRequestTransaction を使用しなければなりません。秘密鍵は 暗号化メッセージ で共有されるため、ノードだけが平文を確認できます。さらに R はモザイクを保有していません。
ハーベスティング手数料は NodeKeyLinkTransaction を介してノードとリンクを確立しているので、M へ送られます
M (または前述の通りプライバシーのために A) PersistentDelegationRequestTransaction で署名して、ネットワークへアナウンスします。
const persistentDelegationRequestTransaction = PersistentDelegationRequestTransaction.createPersistentDelegationRequestTransaction(
Deadline.create(epochAdjustment),
remoteAccount.privateKey,
vrfAccount.privateKey,
nodeAccount.publicKey,
networkType,
UInt64.fromUint(2000000),
);
注釈
上記すべてのトランザクションは、単一の アグリゲートトランザクション でまとめてアナウンスできます。
すべてが成功すると、ノードは WebSockets を使用して暗号化メッセージを受信します。ノードがデリゲートハーベスティングをする秘密鍵を復号すると、次の条件を満たす場合、ノードの所有者は デリゲートハーベスターとして R を追加 できます。
リモート秘密鍵はノードごとに ディスクに保存されている ため、ノードが一時的に切断された場合でも、ノードがネットワークに再接続すると、永続的にデリゲートハーベスタが再確立されます。
さらに、暗号化メッセージを使用すると、ノード情報の バックアップ が作成されます。デリゲートキーを含むディスクが破損や破壊された場合でも、ノード所有者はブロックチェーンを照会してデータを取得できます。
ノードを構成するのではなく PersistentDelegationRequestTransaction を介して委任をリクエストする場合、ノードがデリゲートハーベスティングを有効にしているかどうかは、 ネットワークではなく ノードに依存しています。要求に応じるか、その状態について嘘をつくかは、完全にノードによります。
したがって、アカウントがハーベスターになったかどうかを知るための 信頼できる 方法は (ブロックチェーンにリモートアカウントが署名したブロックが表示され、メインアカウントがハーベスト手数料の受け取りが始まるのを待つ以外に) ありません。
とはいえ、 Dual ノードとして構成したノード (Peer と API ノードの両方) は現在のデリゲートハーベスタのリストを照会できます。繰り返しますが、この情報はノードから取得されるものであり、ブロックチェーンにバックアップされないので、あまり信頼しないでください。
このリストは getUnlockedAccount
API エンドポイントを使用して取得できます (例として REST API or the Typescript SDK を使用) これにはノードに登録されているすべてのデリゲートハーベスタの公開鍵が含まれています。
デフォルトでは、ノードは最大 5 つのデリゲートハーベスタ (ハーベスティングスロット) を持ち、ノードが適切と判断した場合、過剰な要求に優先順位を付けることがあります。これは ハーベスティング設定 の maxUnlockedAccounts
と delegatePrioritizationPolicy
で設定できます。
importanceGrouping
プロパティを参照してください。お探しのものは見つかりましたか? フィードバックをください。