見出し画像

ここからはじめるPlasm Network:第二回:テストネットValidatorになる方法

みなさん、こんにちは。Fintertechのエンジニアの高橋です。
本日は「ここからはじめるPlasm Network」の第二回です。テストネットであるDustyでValidatorになる方法をご紹介します。

(1) Plasm Networkとは何か~ノード起動方法まで ☆前回
(2) テストネットValidatorになる方法 ★今回
(3) WASMベース(ink!)のスマートコントラクトの開発とデプロイ方法
(4) solidityをWASMに変換してスマートコントラクトをデプロイする方法
(5) EVMベース(Remix)でのスマートコントラクトの開発とデプロイ方法

はじめに

今回のValidatorの記事を執筆するにあたり、Plasm Teamの英語ドキュメントから部分的に引用をさせていただいております。この場を借りて御礼を申し上げます。ありがとうございます。
Core TeamのMaartenには特に御礼を言いたいです。

Validatorとは何か?

「バリデータ(Validator)とは、ブロックチェーンに記録されるデータの内容が正しいかどうかを検証するノードのこと。」です。※引用先:Pol
ブロックチェーンのメインネットでバリデーターの役割を果たすNodeは原則24時間365日起動状態を保つことが必要となりますが、その代わり報酬としてトークンを得ることが出来ます。
今回はテストネットですし、試しのため、このあたりを気にする必要はありません。

ローカルコンピュータのNodeをValidatorとして参加させてみる

それではまず手始めに、第一回でコンパイルしたPlasm NodeをValidatorノードとしてテストネットに参加させて見ましょう。
以下のコマンドを打ってみましょう。

./plasm-node --validator --name あなたのノード名 --rpc-cors all 

以下の私の例ではノード名に"TEST_TAKAHASHI"を指定しています。

画像1

ノードが起動できたら、ノードの一覧サイト「Polkadot Telemetry」から自分のノード名が存在することを確認して下さい。以下の画面のように確認出来ると思います。

画像2

実はこれだけです。あとはひたすら起動させ続ければOKです。
ただ、これだけではテストネットのバリデーターとしてPlasm Teamに認知して貰えません。認知されないということはバリデーター報酬(テストネットの場合は無価値のテストネットトークンが報酬です)は得られません。次節からはテストネットのバリデーターとして報酬を得られるようにするところまでをやっていきますが、テストネットバリデーターは基本24時間365日稼働させる必要があります。バリデーターとして参加したい方はクラウドサービスの仮想マシンで実施することをお勧めします。

テストネットのバリデーターになる

ここからは本格的にテストネットでバリデーターになる方法を説明させて頂きます。テストネットバリデーターとして参加するためにクラウドサービスの仮想マシンを用意して24時間365日稼働に耐えられる構成でやっていきたいと思います。
それでは早速やっていきましょう。
手順を概観すると以下のようになります。
(1)仮想マシンを用意する
(2)Plasm Nodeを用意する
(3)サービスファイルを用意して実行する
(4)nginxを立ててWSSアクセスを可能にする
(5)WEB UIからノードにアクセスし、SessionKeyを登録する
(6)Plasmチームへ連絡する

(1)仮想マシンを用意する

ベンダーは問いませんのでクラウドサービスにて仮想マシンの用意をお願い致します。
OSはUbuntuを選択するとスムーズです。私はUbuntu18.04を使用しています。
必要となるハードウェアスペックは以下の通りです。
- CPU:2CPU
- メモリ:8G
- ハードディスク:128G
Validatorノードを運用するために必要なインバウンドルールは以下の通りです。

画像3

(2)Plasm Nodeを用意する

第一回でご紹介した通り、仮想マシン上でコンパイルする方法もありますが、Plasm Teamが用意してくれた実行形式ファイルを使用する方法がありますので、今回はそちらの方法でやっていきます。バリデーターとして参加する場合、基本はPlasm Teamが用意してくれた実行形式ファイルを使用するのが良いと思います。対応OSがない、上手く動作しない等の事情がある場合は、コンパイルして使う検討をして下さい。
仮想マシンにログインした上で、以下のコマンドを実行してPlasm Nodeの実行形式ファイルを取得しましょう。
今回は1.7.0の実行形式ファイルを取得する場合を例にします。

wget https://github.com/staketechnologies/Plasm/releases/download/v1.7.0-dusty/plasm-node-ubuntu-1.7.0-x86_64.tar.xz

 解凍しましょう。

xz -dv plasm-node-ubuntu-1.7.0-x86_64.tar.xz
tar xvf plasm-node-ubuntu-1.7.0-x86_64.tar

カレントディレクトリに「plasm-node」が出来ていれば成功です。

(3)サービスファイルを用意して実行する

より実践的な運用を想定して、今回はサービスファイルを用意することにします。以下のコマンドでサービスファイルを作成して下さい。nohupコマンド等を使用してsystemdを使用しないで実行することも可能です。

sudo touch /etc/systemd/system/plasm.service

vimエディタなどで開き以下の内容で更新して下さい。

sudo vim  /etc/systemd/system/plasm.service

「ExecStart」のplasm-nodeの場所はご自身の環境に合わせて変更して下さい。「--name」は任意の値を設定して下さい。

[Unit]
Description = Plasm Node
After=network-online.target
[Service]
ExecStart=/home/azureuser/plasm-node --validator --name Takahasi_test --rpc-cors all
Restart=always
Type=simple
[Install]
WantedBy=multi-user.target

準備が出来たら実行して、稼働状態を確認して下さい。

sudo systemctl start plasm.service
systemctl status plasm.service

以下の画面のように「Active」になっていれば起動は成功です。

画像4

あとは2時間後くらいを目処にPolkadot Telemetryを確認してブロックナンバーが追いつけていることを確認しましょう。
一番右端の項目「Block Propagation Time」が「∞」ではなく、値が設定されていれば、あなたのノードが無事同期された証拠です。

画像5

(4)nginxを立ててWSSアクセスを可能にする

外部からノードにWebsocket通信をするためにノードを立てた仮想マシン上にNginxを立ててアクセスを可能にするようにします。
以下のコマンドでnginxをインストールして下さい。
※以下のコマンドや設定値はPlasm TeamのMaarten記事から引用させて頂きました。

sudo apt-get install nginx 

次にSSL証明書をインストールするためのライブラリのインストールと、Opensslを使用して証明書を作成していきます。

sudo apt-get install -y libssl-dev
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

次にnginxの設定ファイルを変更していきます。
nginxの設定ファイルは次の通りです。

/etc/nginx/nginx.conf

以下の内容を設定ファイルのHTTPの設定ブロックの最後に貼り付けます。(HTTPの設定ブロックの"}"(閉じカッコの直前))。上記手順で実施頂いている方はそのまま貼り付けて頂ければ動作します。

server {
         server_name SERVER_ADDRESS;
         root /var/www/html;
         index index.html;
         location / {
          try_files $uri $uri/ =404;
          proxy_pass http://localhost:9944;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
         }
         listen [::]:443 ssl ipv6only=on;
         listen 443 ssl;
         ssl_certificate CERT_LOCATION;
         ssl_certificate_key CERT_LOCATION_KEY;
         ssl_session_cache shared:cache_nginx_SSL:1m;
         ssl_session_timeout 1440m;
         ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
         ssl_prefer_server_ciphers on;
         ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS";
         ssl_dhparam CERT_DHPARAM;
}

そうしたらnginxを再起動します。再起動コマンドの後にステータスを確認して"active"になっていることを確認して下さい。

sudo systemctl restart nginx.service
sudo systemctl status nginx.service

nginxが起動したらブラウザを起動して、「https://自分の仮想サーバーのIP」にアクセスして下さい。以下のようなエラー画面が出ますので「[自分のIP]にアクセスする(安全ではありません)」をクリックして、アクセスを許可します。

画像6

次のメッセージ画面が出力されれば成功です。「WebSocket Protocol Error: Unable to parse WebSocket key.」
Macの人は証明書をインストールする必要があるので、このサイトを見て証明書をインストールして下さい。
準備が整いましたので、Dustyテストネットに参加させている自分のノードにアクセスします。
ここをクリックしてPlasmポータルにアクセスして下さい。
以下の画面のように自分のIPを設定して下さい。

画像7

(5)WEB UIからノードにアクセスし、SeesionKeyを登録する

以下の画面のように「アカウントの追加」メニューからValidator登録用のアカウントを一つ作成して下さい。アカウント作成の過程で出力される「ニーモニックキーワード」とjsonファイルは、このアカウントを復元するために必須なので必ず保管しておいて下さい。

画像8

次にチェーンにSession Keyを登録していきます。
Session Keyを登録するためにはDustyテストネットでトランザクションを実行する必要があります。トランザクションを実行するためにはテストネットのトークンが必要になるので、それを獲得します。

以下のリンク【Discordへ】からPlasm Networkに参加し、「faucet」チャンネルでテストネットトークンを依頼しましょう。以下のような要領です。
"YOUR ADDRESS"には上記で作成したアカウントのアドレスを入力して下さい。
そんなことはないと思いますが、上手く対応してもらえないような場合は、日本語チャンネルでご連絡下さい。私が対応させて頂きます。笑。
Please send me some token.My Address is "YOUR ADDRESS"
トークンが獲得出来ましたら、Session Keyを取得します。以下の画面のようにやってみて下さい。
「RPCコールを提出する」をクリックすると、鍵が表示されるので、コピーして下さい。

画像9

取得した鍵を登録していきましょう。以下の画面のようにやってみて下さい。
「keys」にはrotateKeysで出力された値を貼り付けて下さい。proofには"0x00"を設定して下さい。

画像10

(6) Plasm Teamに連絡する

Plasm Networkの公式サイトに従って、このGoogle Formから自分のノードの情報を登録しましょう!
なかなか長い道のりでしたが、第二回はこれにておしまいです。テストネットValidatorになったあなたは立派なコミュニティの一員だと思います。Welcome to Plasm Network!

まとめ

今回は第二回目として、Plasm NetworkのテストネットであるDustyにValidatorとして参加する方法について説明させて頂きました。次回、第三弾からはいよいよ彼らのネットワークの真髄の一つでもあるスマートコントラクトの開発とデプロイについてご紹介させて頂きますので、次回も宜しくお願い致します。
Plasm NetworkはこれからPolkadotに接続する段階であり、まだまだこれから成長するネットワークだと私は思っています。そして世界初のPolkadotパラチェーンテストネット接続成功、世界最大の暗号通貨取引所の一つであるバイナンスからの資金調達など、本当に世界の先頭を走っているスタートアップだと思います。是非彼らのニュースをフォローしてみて下さい。


興味を持って頂けた方は是非、Plasm Networkのコミュニティに参加して下さい。
Website | Twitter | Telegram | Discord | GitHub