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

こんにちは。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 のバリデーターに興味を持ち、立ち上げようときに最初は情報が散らばっていて
どれが本当の手順なのかよくわからない状態でした。

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

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

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

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

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


## ステップ１ - solv のインストール
![](https://storage.googleapis.com/zenn-user-upload/a22b0f8a1bf9-20231110.png)
まずはサーバーに SSH接続します。
各自の接続設定に変更してください。

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

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

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

```bash
$ sh -c "$(curl -sSfL "https://storage.googleapis.com/epics-bucket/resource/solv/v1.6.2/install")"
```
このコマンドで最初に solv ユーザーを作成するので、
パスワードを設定します。

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

## ステップ2 - 設定の更新

次に、ステップ２のコードを実行し、設定を反映させます。
```bash
$ cd ~ && source ~/.profile
```

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

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

```bash
$ solv setup
```
これで無事に Solana バリデーターが起動しました 🎊

## ログの確認
Solana バリデーターのログを確認します。
```bash
$ solv log
```

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

```bash
$ solv log -e
```

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

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

```bash
$ solv restart --snapshot
```

## バリデーターキーの交換（引越し・TDS用）
TDSプログラムに参加している方や、サーバーの引越しの方はすでに鍵をお持ちだと思います。
この場合、`solv setup` 後にサーバーを一度停止します。

```bash
$ solv stop
```

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

```bash
$ solv config
```

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

```bash
$ solv restart --snapshot
```

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

```bash
$ solana airdrop 1
```

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

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

## Solana Testnet バリデーターの報酬について
こちらのリンクにテストネットバリデーター報酬の詳細があります。
ざっくり サーバー代２倍分の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 に署名を行う必要があります。
(この辺の説明さがすのが大変でした。。)

インストール
```bash
$ sudo apt install libudev-dev
$ cargo install solana-foundation-delegation-program-cli
$ solana-foundation-delegation-program --version
```

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

```bash
$ solana -um balance
```

実行
```bash
$ 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