🤖

Solana Validator のはじめかた。(お引越しも対応)

2023/08/20に公開

こんにちは。Kawasaki です。

私はアムステルダムソフトウェア研究所(ELSOUL LABO B.V.)
でソフトウェア研究の研究をしております。

今日は Solana Validator のノードの立て方を共有したいと思います。

🔴 YouTube:
https://www.youtube.com/watch?v=7nloPjyrk_8

📗 ドキュメント:
https://solv.epics.dev/ja
(*2023年11月10日更新)

📖 🌟 Solana バリデーターマスターガイド: 設定、保守、移転から収益のモニタリングまでの完全手引き 🚀
(※2023年12月本にまとめました🎉)

https://zenn.dev/fumisouls/books/971a5ba1212303

背景

最先端のテックには更新のスピードがとても早く、ドキュメントがなかったり、動かなかったりなどよくある話ですが、
私も Solana のバリデーターに興味を持ち、立ち上げようときに最初は情報が散らばっていて
どれが本当の手順なのかよくわからない状態でした。

現在はアムステルダム、東京、ニューヨークの3つのリージョンに Solana Testnet バリデーターサーバーを設置、運用しています。

Solana のテストネットバリデーターには報酬があり、
報酬を獲得するには定期的にアナウンスされるメンテナスを行わなければいけません。

毎回、3つのサーバーに同じスクリプトや設定をしているうちに更新するスクリプトを書くようになりました。
この作成からメンテ、更新作業に関するコードをオープンソース化することで、
多くのメリットがあるのではと思い、 Solv というパッケージ名で公開することにしました。

この取り組みの詳細は以下の記事で紹介しています👇
https://prtimes.jp/main/html/rd/p/000000072.000105962.html

ここでは「solv」を使用してSolanaバリデーターノードを構築する方法をご紹介します。この手順は3ステップで完了し、エンジニアだけでなく一般のユーザーにも実行可能です。真の分散型ネットワークは、技術的な背景に関わらず、誰もが簡単にバリデーターノードを設置できることが重要です。

ステップ1 - solv のインストール


まずはサーバーに SSH接続します。
各自の接続設定に変更してください。

$ ssh username@<your-server-ip-address>

そして solv ドキュメントページにあるステップ1のコードをコピー&ペーストして実行します。

Edgevana と Latitude 版があるので、使用するタイプをタブで選択して下さい。

$ sh -c "$(curl -sSfL "https://storage.googleapis.com/epics-bucket/resource/solv/v1.6.2/install")"

このコマンドで最初に solv ユーザーを作成するので、
パスワードを設定します。

インストール完了後、solv ユーザーに切り替えるためのパスワードを聞かれるので、
設定したパスワードを入力し、ユーザーを切り替えます。

ステップ2 - 設定の更新

次に、ステップ2のコードを実行し、設定を反映させます。

$ cd ~ && source ~/.profile

ステップ3 - solv セットアップ

最後にステップ3のコードを実行すれば完了です!

$ solv setup

これで無事に Solana バリデーターが起動しました 🎊

ログの確認

Solana バリデーターのログを確認します。

$ solv log

異常なログを出力するには

$ solv log -e

スナップショットのダウンロード

バリデーターノードを起動すると最初にスナップショットをダウンロードします。
ダウンロードまでネットワークの状態によって異なりますが、時間がかかることがあります。

なにか不具合が起きる場合、スナップショットが破損している場合がありますので、
以下のコマンドで再起動することで、スナップショットを再ダウンロードすることができます。

$ solv restart --snapshot

バリデーターキーの交換(引越し・TDS用)

TDSプログラムに参加している方や、サーバーの引越しの方はすでに鍵をお持ちだと思います。
この場合、solv setup 後にサーバーを一度停止します。

$ solv stop

その後、バリデーターキーを差し替え、サーバーを再起動します。
以下のコマンドで、バリデーターキーの場所を表示することができます。

$ solv config

鍵交換後の再起動には --snapshot をつけて再起動する必要があります。

$ solv restart --snapshot

テストネット SOLの準備

テストネットバリデーターで投票に参加するには、年間およそ315テストSOL必要になります。
その他に、自分のテストネットバリデーターにどのアカウントからでも数SOLで良いのでステーキングを行うと進行が早まります。

$ solana airdrop 1

上記のコマンドでテストネットのSOL を Airdropすることができますが、
ネットワークの状況により、手に入りにくいことがあります。

EpicsDAOのディスコードチャンネルで、在庫があれば配布しておりますので、
お気軽にお立ち寄りください!
https://discord.gg/bDKMfWRsnk

Solana Testnet バリデーターの報酬について

こちらのリンクにテストネットバリデーター報酬の詳細があります。
ざっくり サーバー代2倍分のSOLが報酬としてもらえるというものです。

Tour de Sun(TDS) プログラム
https://solana.org/tds22

サーバープログラム
https://solana.org/server-program

テストネットで報酬を得るには上記のプログラムで推奨されているサーバー会社から、
サーバーリソースを契約する必要があります。

Solana Delegation プログラム
https://solana.org/delegation-program

このプログラムに参加すると、財団から委任ステークを受取ることができるようです。

必要な条件
https://solana.org/delegation-criteria

さらに、以下のコマンドで Pubkey に署名を行う必要があります。
(この辺の説明さがすのが大変でした。。)

インストール

$ sudo apt install libudev-dev
$ cargo install solana-foundation-delegation-program-cli
$ solana-foundation-delegation-program --version

署名を行うのにはメインネットで行うため、
多少の SOL が必要です。

$ solana -um balance

実行

$ solana-foundation-delegation-program apply --mainnet mainnet-validator-keypair.json --testnet testnet-validator-keypair.json

これを行なっていないと以下のフォームで弾かれます
https://solana.org/delegation-program

推奨環境

Solana Validator に必要なコンピューターの要件は、
正直、他のどのブロックチェーンよりも圧倒的に求められてる要件が高いです。
Solana のトランザクションの速さの秘密のうちの一つですね!

最小なSOLの要件

要件 数値
合意参加に必要な投票アカウントのリザーブ 0.02685864 SOL
各ブロックごとの投票トランザクション送信のコスト 最大 1.1 SOL/日

CPU

  • 12コア / 24スレッド以上
  • ベースクロック速度: 2.8GHz以上

RAM

  • 256GB以上
  • 512GB以上のマザーボード容量推奨

ディスク

  • PCIe Gen3 x4 NVME SSDまたはそれ以上
  • アカウント用: 500GB以上、高いTBW(Total Bytes Written)対応
  • Ledger用: 1TB以上、高いTBW推奨
  • OS用(オプション): 500GB以上、SATAでも可

CPU

  • 16コア / 32スレッド以上

RAM

  • アカウントインデックスを使用する場合: 512GB以上

こちら詳細リンクになります。

必要最低条件
https://docs.solana.com/running-validator/validator-reqs

まとめ

SolanaのValidatorノードの起動自体は複雑ではありませんが、設定を個々に合わせる際にばらつきが生じることがあり、これが混乱を招くことがあります。
そこで、私はオープンソースのアプローチを採用し、コミュニティの発展に寄与したいと考えました。

EpicsDAO Discord Channel solv スレッド:https://discord.gg/Dbehhscxm5

Discussion