AVA Labsがノード構築キャンペーンを開始しました。期間内にノードを建ててタスクをこなすことで最大2,000AVAトークンを獲得できるとのことで、早速試してみました。
■200万AVAトークンを報酬とするインセンティブテストネットを開始
AVA Labsのノード構築手順
今回は、初心者の方向けに、サーバのセキュリティ対策(最低限)もざっくりフォローしていきます。全行程で3-4時間(途中で同期作業に2時間待機します)で終わります。
(重要)インセンティブテストネットへの応募者が多かったため、参加資格者のみにメールが送付されたようです。今後、追加で募集があるか分かりませんが、念の為登録だけ済ませておくと良いと思います。
0. 事前準備
上記の日本語ブログの参加方法にあるとおり、「テストネットへの登録」「AVA Labs Discordに参加」「AVA Hub」を済ませておいてください。また、サーバへはSSHでアクセスすることになりますので、「Mac/Windows10(ご自身の利用環境) SSH 鍵認証」などで検索して、事前に鍵の作成をしておいてください。
1. ノードを建てるサーバと契約しよう
新規会員登録の方法についてはさすがに細かくは書きませんが、まずは会員登録と支払いのためのクレジットカード決済の情報を登録しておいてください。
以下のリンクから登録すると$10貰えるのでお得です。 :)
2. サーバの契約
会員登録などが終わったら早速サーバ契約に移ります。
ノード運用のマシンスペックが記載されていました。
必要なハードウェア:2GHz以上のCPU、3GBのRAM、250MBのハードディスク OS. Ubuntu >= 18.04 (Windows WSL) または Mac OS X >= Catalinaで作動
事前に作成した公開鍵を設定する必要があるのでご注意ください。※もちろん、あとから登録することもできます。
3. サーバにSSH接続する
サーバが無事にRunningに切り替わったら早速SSHでアクセスしてみます。
AVA_Labs_Node_01をダブルクリックするとサーバの情報が表示されます。
鍵の情報を設定しましたが、最初の段階ではroot/passwordの情報を使ってログインが可能です。Googleを頼りにsshで接続をしてみましょう(丸投げでごめんねw)。
何か返ってきたら「yes」とタイプしてEnterを押して先に進みます。もしSSHの鍵を登録せずにパスワードを求められた場合は、サーバに表示されているpasswordを入力してください。
4. サーバを最新の状態にアップデートする
apt-get update && apt-get upgrade
まずは、サーバを最新の状態にしましょう。なにか返ってきたら「y」とタイプしてEnterを押して先に進みます。すべて終わったら次に進みます。
5. 最低限のセキュリティ対策をする
■ユーザアカウントの作成
adduser アカウント名
gpasswd -a アカウント名 sudo
十分に長いパスワードを設定しておきましょう。設定完了後に「Full Name/Room Number / Work Phone / Home Phone / Other」の入力を求められますが、空白でも構いません。
次に、作成したアカウントでサーバに接続をし直します。「exit」でsshから接続を切って、今度は作成したアカウント名でssh接続を行います。
設定したパスワードで無事にログインできれば成功です。続いて管理者権限に切り替えます。
sudo -s
ログイン時と同じパスワードを入力するだけです。
ここで、サーバの再起動を求められていることに気づいたので、再起動します。
shutdown -r now
少し待って、再度ログイン→管理者権限への切り替えまで行ってください。続いて以下の3つを一気に設定します。
・ログイン時のポートの変更
・rootログインの不許可
・パスワードログインの不許可→鍵認証のみ有効
vimというテキストエディタを使うのですが、やり方についてはGoogleで事前に調べてください。
以下のように変えてみました。Before - Afterを見てみてください。
設定が終わったらsshdを再起動して反映します。
service sshd restart
今回の設定でパスワードを使ったらログインができなくなります。作成したアカウントにrootにある鍵情報をコピーします。
cp -rf /root/.ssh .
ファイルの作成者がrootで、このままだとssh接続時に.ssh内にある鍵にアクセスができないため、権限情報を変更します。
chown -R アカウント名: .ssh
以上でサーバ側の設定は完了です。一度、別のターミナルを開いて先ほどと同じ用にssh接続しようとしてもうまくログインできないことを確認してみてください。
-rw-------@
のようになっていないと、エラーが出るので要注意です。
■ファイアーウォールの設定
最後にファイアーウォールを設定していきます。あまり理解していない領域に入ってきました。
sudo ufw logging on
sudo ufw enable
sudo ufw allow 9650/tcp は、AVAの設定時にこのポートを利用していているっぽいので念の為空けておきました。
※追記: sudo ufw allow 9651/tcp はステーキングのためのポートで空けておく必要があります。
これで、一応セキュリティ対応は完了です。
6. AVA Labsのテストノードを構築する
ここからは手順通りに進めるだけなので意外と楽ちんです。
https://medium.com/avalabs/how-to-join-avas-denali-test-network-9bbfb353207b
6-1. AVAのインストールと実行
まずは、githubにある最新のDenali.tar.gzのダウンロードをします。
https://github.com/ava-labs/gecko/releases
wget https://github.com/ava-labs/gecko/releases/download/v0.5.0/gecko-linux-0.5.0.tar.gz
圧縮ファイルなので、ダウンロードが終わったら、以下のコマンドで解凍します。
次に解凍したディレクトリに移動します。
cd gecko-0.5.0
そして、以下のコマンドでAVAを実行します。マニュアルのコマンドとは少し違いますが、warningが出るのを回避するためのオプション(--public-ip)と、バックグラウンドでタスクを実行するためにコマンドの最後に「&」を付けています。
./ava --public-ip=表示されているIPアドレス &
バックグラウンドで実行していますが、一部デバッグのコメントが流れます :) 同期に2時間程度かかるようですので、珈琲でも飲みながら以下の流れに目を通しつつ時間を潰します。
6-2. AVAのステーキング
AVAネットワークのバリデータになるためにプラットフォームにAVAのstakeをする必要があります。こちらも手順通りに。
・ユーザ名: 任意のユーザ名
・パスワード: 任意のパスワード
を使い回すので、メモしておきましょう。
Step1. ユーザとアドレスの作成。
curl -X POST --data '{
"jsonrpc": "2.0",
"id": 1,
"method": "keystore.createUser",
"params": {
"username": "ユーザ名",
"password": "パスワード"
}
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/keystore
success: true のようなレスポンスが返ってきたら成功です。
curl -X POST --data '{
"jsonrpc":"2.0",
"id" :2,
"method" :"avm.createAddress",
"params" :{
"username":"ユーザ名",
"password":"パスワード"
}
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/bc/X
404 page not foundと返ってきたら、まだ ./ava の実行で同期が完了していません。
success: true のステータスが返ってきた場合は、レスポンスの中にX-Chainアドレスがありますのでこちらもこの先何度も必要になるのでメモしておきましょう。
{"jsonrpc":"2.0","result":{"address":"X-Chainアドレス"},"id":2}
続いて、P-Chainのアカウントも作成します。
curl -X POST --data '{
"jsonrpc": "2.0",
"method": "platform.createAccount",
"params": {
"username": "ユーザ名",
"password": "パスワード"
},
"id": 1
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/P
以下のようにP-Chainのアドレスが返ってくるのでメモしておきます。
{"jsonrpc":"2.0","result":{"address":"P-Chainアドレス"},"id":1}
Step2. 資金の獲得
Staking用の資金を獲得するための手順です。まずは以下のURLに飛んで、X-Chainアドレスを記入します。
すぐに着金しているので、以下のコマンドで確認します。
curl -X POST --data '{
"jsonrpc":"2.0",
"id" :7,
"method" :"avm.getBalance",
"params" :{
"address":"X-Chainアドレス",
"assetID" :"AVA"
}
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/bc/X
balanceが0の場合はまだ同期が完了していないかもしれませんので、続きを眺めつつ珈琲を飲んでいてください :)
{"jsonrpc":"2.0","result":{"balance":"20000","utxoIDs":[{"txID":"トランザクションID":0}]},"id":7}
balance: 20000が表示されたら成功です。
Step3. プラットフォームに送信する
X-ChainからP-ChainにAVAを転送します。
curl -X POST --data '{
"jsonrpc":"2.0",
"id" :1,
"method" :"avm.exportAVA",
"params" :{
"username": "ユーザ名",
"password": "パスワード",
"to":"P-Chainアドレス",
"amount": 10000
}
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/bc/X
トランザクションIDが返されたらOKです!
{"jsonrpc":"2.0","result":{"txID":"トランザクションID"},"id":1}
このトランザクションIDは特にメモする必要はないので次に進みます。
次にこの転送をP-Chainで受け入れるため、以下のコマンドを実行します。
curl -X POST --data '{
"jsonrpc": "2.0",
"method": "platform.importAVA",
"params": {
"username": "ユーザ名",
"password": "パスワード",
"to":"P-Chainアドレス",
"payerNonce":1
},
"id": 1
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/bc/P
ここで返ってくるトランザクションはメモしておきます。
{"jsonrpc":"2.0","result":{"tx":"トランザクション"},"id":1}
以下のAPIを呼びます。
curl -X POST --data '{
"jsonrpc": "2.0",
"method": "platform.issueTx",
"params": {
"tx":"トランザクション"
},
"id": 1
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/bc/P
これでP-Chainへの転送が完了です。以下のコマンドで、P-Chainのbalanceを確認してみましょう。
curl -X POST --data '{
"jsonrpc": "2.0",
"method": "platform.getAccount",
"params":{
"address":"P-Chainアドレス"
},
"id": 1
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/bc/P
balanceが10000なら成功です。
{"jsonrpc":"2.0","result":{"address":"P-Chainアドレス","nonce":"1","balance":"10000"},"id":1}
6-3. バリデーション
最後の工程です。バリデータとして登録するための作業を進めていきます。こちらも基本はコピペで大丈夫です。
curl -X POST --data '{
"jsonrpc": "2.0",
"method": "admin.getNodeID",
"params":{},
"id": 1
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/admin
ノードIDが返ってくるのでメモしておきましょう。
{"jsonrpc":"2.0","result":{"nodeID":"ノードID"},"id":1}
nodeIDをネットワークに追加するトランザクションを構築します。
curl -X POST --data '{
"jsonrpc": "2.0",
"method": "platform.addDefaultSubnetValidator",
"params": {
"id":"ノードID",
"payerNonce":2,
"destination":"P-Chainアドレス",
"startTime":'$(date --date="15 minutes" +%s)',
"endTime":1592265599,
"stakeAmount":10000
},
"id": 1
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/P
404 page not foundと返ってきたら、まだ ./ava の実行で同期が完了していません。未署名のトランザクションが返ってきたら成功です。
{"jsonrpc":"2.0","result":{"unsignedTx":"未署名のトランザクション"},"id":1}
署名します。
curl -X POST --data '{
"jsonrpc": "2.0",
"method": "platform.sign",
"params": {
"username": "ユーザ名",
"password": "パスワード",
"tx":"未署名のトランザクション",
"signer":"P-Chainアドレス"
},
"id": 2
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/P
無事に署名が成功していることを確認したら、この署名済みのトランザクションをメモしてください。
{"jsonrpc":"2.0","result":{"tx":"署名済みのトランザクション"},"id":2}
以下のコマンドでP-Chainに署名済みのトランザクションを発行することでDenaliネットワークのバリデータになります。
curl -X POST --data '{
"jsonrpc": "2.0",
"method": "platform.issueTx",
"params": {
"tx":"署名済みのトランザクション"
},
"id": 3
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/P
エラーが出なければ成功です。以下のコマンドでバリデーターの保留リストに自分の「P-Chainアドレス」が表示されていることが確認できます。
curl -X POST --data '{
"jsonrpc": "2.0",
"method": "platform.getPendingValidators",
"params": {},
"id": 4
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/P
約5分で保留リストからバリデータリストに移行するので、以下のコマンドで、自分の「P-Chainアドレス」が正式にバリデータとして登録されていることを確認してください。
curl -X POST --data '{
"jsonrpc": "2.0",
"method": "platform.getCurrentValidators",
"params": {},
"id": 1
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/P
やったね!
7.AVAテストネットのノード構築まとめ
今回は、サーバの契約から手動でノードを構築するまでの一連の流れを解説してみました。コマンドのみで進めていくため、初めての方はドキドキするかもしれません。
何かわからない点があれば気軽に aoi_jp までご相談ください。 :)