コンテンツにスキップ

スーパーノードプログラム⚓︎

スーパーノードプログラムは、ネットワークの安全性確保とアプリケーションへの信頼性の高いデータアクセス提供に貢献する、公開 NEM ノードに報酬を与えます。 すべての XEM はネメシスブロックで発行されたため、NEM には新規発行によるブロック報酬がありません。 スーパーノードプログラム用に XEM の一部が確保されています。

報酬の資格は毎日 4 ラウンドで確認され、6 時間ごとに 1 ラウンド実施されます。 その日の報酬を受け取るには、参加ノードが各ラウンドのすべてのテストに合格する必要があります。

テストは、中央で管理される コントローラー というスーパーノード監視サービスによって実施されます。 一部のテストでは、参加ノードと信頼できる 参照ノード を比較します。

参加ノードでは、NIS1 クライアントと同じマシン上で軽量アプリケーションの Node Servant も実行します。 Servant はスーパーノードプログラムのテストを実行し、その一部で使われる /nr/... エンドポイントを公開します。

資格テスト⚓︎

各テストラウンドには、次の確認が含まれます。

  • チェーン高:ノードは /chain/height GET API を通じて現在の高さを報告します。 高さが参照ノードより 4 ブロック以内の遅れであれば、テストに合格します。

  • チェーン部分:ノードは、最近のブロック 60 ~ 100 個からなるランダムなグループを /local/chain/blocks-after POST API を通じて提供します。 コントローラーはブロックの署名を検証し、そのブロックから計算した複合ハッシュを、参照ノードから同じ方法で計算したハッシュと比較します。

  • 残高:ノードのメインアカウントには少なくとも 10,000 XEM が必要です。 コントローラーは参照ノードを経由して、/account/get/forwarded GET API でこれを確認します。

  • 計算能力:ノードは、ランダムなハッシュから公開鍵導出を 10,000 回繰り返し実行します。 最終的な公開鍵がコントローラーの結果と一致し、ラウンドトリップ全体が 5 秒以内であれば、テストに合格します。

  • バージョン:ノードは /node/info GET API を通じて NIS クライアントのバージョンを報告します。 バージョンが参照ノードのバージョンと同じか、それより新しければ、テストに合格します。

  • Ping:コントローラーは /nr/task/ping API を通じて、ランダムなパートナーノードを 5 つ Servant に渡します。 Servant は各パートナーの /nr/ping API を 5 回呼び出します。 失敗する Ping が 1 回以下で、成功したラウンドトリップ時間の平均が 200 ms 未満であれば、テストに合格します。

  • 帯域幅:コントローラーは Ping テストで最速だったパートナーとランダムなハッシュシードを、/nr/task/bandwidth API を通じて Servant に渡します。 Servant とパートナーは同じ 30,000 ハッシュ計算を実行します。 両方のハッシュ結果が一致し、測定された転送速度が少なくとも 5 Mbit/s であれば、テストに合格します。

  • 応答性:コントローラーは /chain/height GET API に 10 件のリクエストを送信します。 少なくとも 9 件のリクエストが成功し、すべてのリクエストが 1 秒以内に完了すれば、テストに合格します。 時間制限だけが不合格の理由である場合、コントローラーはこのテストを最大 4 回再試行します。

プログラムへの登録⚓︎

登録する前に、次の準備ができていることを確認してください。

  • NEM NanoWallet がインストールされていること。

  • 少なくとも 10,010 XEM がある NEM アカウント。 プログラムへの参加には 10,000 XEM が必要で、これに加えて委任ハーベスティングと登録トランザクションの手数料として約 10 XEM が必要です。

  • メインアカウントで委任ハーベスティングが有効になっていること。 リモートアカウントは約 360 ブロック、つまり約 6 時間後に使用可能になります。 リモートアカウントの秘密鍵が使用可能になり次第、登録を開始できます。

  • 同期済みのパブリックノード。 まだ持っていない場合は、ノードのインストールガイドに従ってください。

    nis.shouldAutoHarvestOnBoot プロパティが true に設定されているか、設定されていないことを確認してください。

  • 安定したパブリック IP アドレスまたはドメイン名がノードに付与されていること。

リモートアカウントの秘密鍵を使用する

ノードと Servant の設定にはリモートアカウントの秘密鍵を使用します。 メインアカウントの秘密鍵は使用しないでください。

メイン秘密鍵はアカウントの資金を管理します。 リモートアカウントの秘密鍵は委任ハーベスティングだけを管理し、漏えいした場合は置き換えられます。

NEM NanoWallet でリモートアカウントの秘密鍵を見つけるには、ServicesDelegated HarvestingManage Delegated Account の順に開きます。 Show delegated account keys を選択し、ウォレットのパスワードを入力してリモートアカウントの秘密鍵を表示します。

手動で行う⚓︎

Servant を設定する⚓︎

  1. Node Servant をダウンロードします。

  2. Servant のインストールフォルダーになるフォルダーにファイルを解凍します。 NIS1 のインストールフォルダーと同じである必要はありません。 servant フォルダーを開きます。

  3. Servant の config-user.properties ファイルを開きます。

  4. nem.host をノードの静的 IP アドレスまたはドメイン名に設定します。 コントローラーが同じノードをテストできるよう、この値は安定していなければなりません。

  5. servant.key をリモートアカウントの秘密鍵に設定します。

  6. ファイルを保存します。

  7. Servant がスーパーノードプログラムのテストを受信できるよう、受信接続と送信接続用に TCP ポート 7880 を開きます。

Servant を起動する⚓︎

NIS を起動して同期させてから、次のコマンドで Servant を起動します。

runservant.bat
sh startservant.sh

screennohup などのツールを使って、Servant をバックグラウンドで実行します。

Docker を使用する⚓︎

これらの手順は、Windows Subsystem for Linux を含む Linux システムでのみ動作します。

Servant を設定する⚓︎

ノードをDocker 用のインストールガイドの説明どおりに Docker でインストールした場合、Servant はすでにインストールされているため、設定するだけで済みます。

ノードを制御するの説明どおりに、実行中であれば NIS1 クライアントを停止します。

custom-configs フォルダー内で、次の操作を行います。

  • servant.config.properties.sample ファイルを servant.config.properties にコピーして編集します。 少なくとも nem.hostservant.key プロパティの値を指定します。
  • supervisord.conf.sample ファイルを supervisord.conf にコピーして編集します。 [program:nis] セクションと [program:servant] セクションの両方で autostart=true を設定します。

Servant を起動する⚓︎

これで、NIS1 クライアントを起動するたびに Servant も起動します。

./boot.sh

次のコマンドで確認できます。

./service.sh status

登録を送信する⚓︎

毎月の登録アドレスは、NEM コミュニティの各種チャンネルで告知されます。

NEM NanoWallet で登録する⚓︎

  1. Services を開きます。

  2. SuperNode Program を開きます。

  3. Check & Enroll in Program を開きます。

  4. Enroll in Program を選択します。

  5. 現在の登録アドレスとノードホストを入力します。

    ホストは、ノードの /node/info GET エンドポイントが返すホストと一致していなければなりません。

  6. 登録トランザクションを送信します。

手動で登録する⚓︎

手動で登録するには、現在の登録アドレスへ、次の暗号化されていないメッセージを含む転送トランザクションを送信します。

enroll <NODE_HOST> <CODEWORD_HASH>
  • <NODE_HOST> はノードの /node/info GET エンドポイントが返す値です。
  • <CODEWORD_HASH> は次のクエリが返す値です。

    https://nem.io/supernode/api/codeword/<MAIN_PUBLIC_KEY>
    

    公開鍵を使用する

    • コードワード API の URL には、秘密鍵 ではなくメインの 公開鍵 を使用します。

    • ノードでハーベストするために使う リモートキー ではなく、プログラムに登録したアカウントの メイン公開鍵 を使用します。

      /node/info GET が返すのはリモートキーであることに注意してください。

テスト結果を確認する⚓︎

スーパーノードプログラムのページでノードのテスト結果を確認します。 登録直後には結果が表示されません。

スーパーノードホストを編集する⚓︎

ノードの IP アドレスまたはドメイン名が変わった場合は、ノードと Servant の設定を更新します。 その後、変更したホストで新しい登録トランザクションを送信します。

毎月再登録する⚓︎

スーパーノードプログラムでは、毎月の再登録が必要です。 毎月新しい登録アドレスがあり、NEM コミュニティの各種チャンネルで告知されます。

次の月の登録は、現在の月の終了 4 日前に開始されます。 新しい登録アドレスを使って、毎月登録プロセスを繰り返します。