AWSでPolkadotノードを立ち上げてValidatorに俺はなる[3/3] ブロック検証とノミネートしていく

###1. [AWSで環境構築](https://qiita.com/MasakiBerlin/items/0d2dd0c07d30a7bc802d#1-aws%E3%81%A7%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89)
###2. [ノードを立てる](https://qiita.com/MasakiBerlin/items/1cb4b31106365d33d202)
###3. [Polkadotでアカウント作成 Validatorになる](https://qiita.com/MasakiBerlin/items/9c139ffee38763c2a1e0)◀︎今回


##今回やることは以下の通り。
・アカウント作成
・ノードとアカウントの紐付け
・ブロック検証（同期必須）
・ノミネート

多分まだ同期中だよって方がいると思いますが、同期できてなくてもアカウント作ったりノミネートしたり準備したりできるので同期を待ちきれない方はやって見ましょう。

##アカウント作成
１）[Polkadot UI](https://polkadot.js.org/apps/#/accounts)でアカウントを**２つ**作ってください。それぞれにControllerとStashの役割を持たせます。簡単にいうと、ControllerはValidatorやNominatorになるアカウントで、Stashは掛け金をロックして置くところです。Controllerのシードはノードと紐づける時に必要なので無くさないように。

２）アカウントにdotsを送金して下さい。それぞれ100mili dots以上が必要です。手数料考えて150milli dotsくらいは欲しい。

[faucet](https://faucets.blockxlabs.com/polkadot)から送ってもらえます。
足りない方は[Polkadot Watercooler](https://matrix.to/#/!fOOzymDEHiIIUtmlBE:matrix.org?via=matrix.parity.io&via=matrix.org&via=sibnsk.net)でお願いしたら優しい人が送ってくれると思います。

３）ExtrinsicsからControllerアカウントを選び、`session::setKey`を実行。
![３.png](https://qiita-image-store.s3.amazonaws.com/0/380311/a6f232ed-2b80-9c72-b4fc-f2c98d6f50bd.png)

４）Stashで`staking::bond`、ターゲットをControllerに選択して実行。DotsはStashの持つ手数料を考えてほとんどを入力。payeeはもらえる報酬をどう扱われるかです。以下の３つを確認しています。

`0x00`: Stashに振込, したがってステイク量も増やす。
`0x01`: Stashに振込, ステイク量は増やさない。
`0x02`: Controllerに振込
![４.png](https://qiita-image-store.s3.amazonaws.com/0/380311/2fe4a611-94b4-ae4f-1294-7c9858e0ba7e.png)

これで下準備は整いました！
あとはノードと紐付けをしてValidatorになるか、このままNominatorになるかです。
ノミネーターはノードなくてもできますので、同期まだの人は[ノードとアカウントの紐付け](https://qiita.com/MasakiBerlin/items/9c139ffee38763c2a1e0)まで飛ばして下さい。

##ノードとアカウントの紐付け
VPSの方はSSHでアクセス後、以下を実行。

説明：
`--validator`　バリデータになる
`--key` 後ろにさっきのControllerアカウントの英単語でできたシードを入力して下さい。

```terminal:ubuntu@<YourIP>
$ sudo docker run --restart=unless-stopped -d -it -p 30333:30333 -p 9933:9933 -v /path-to/polkadot-data/:/data chevdor/polkadot:0.3.21 polkadot --validator --key “<your-raw-seed>"--chain alex --name <your-node-name> -d /data
```
長いのでaliasおすすめ

```
$ alias polkadocker="sudo docker run --rm -d -it -p 30333:30333 -p 9933:9933 -v /home/ubuntu/polkadot-data/:/data chevdor/polkadot:0.3.21 polkadot --chain alex --name <your-node-name> -d /data"

$ polkadocker --validator --key "<your-raw-seed>"
```
紐付けできるとTelemetryのノード名の隣にアカウント情報が表示されます。

##ブロック検証（同期必須）
いよいよブロック検証です。

ExtrinsicsからControllerで`staking::validate(pref)`を選択。Prefsには`0x0c00`を入力してサブミット。これでステイクできたら、Intention（Validatorの意思表示した人のレコード）に追加されます。次のEra（１Eraは大体１時間くらい）からValidatorになれるはずです。
![５.png](https://qiita-image-store.s3.amazonaws.com/0/380311/a520171a-63f1-47ab-e5a3-7d49a10587de.png)

Validatorになれないよーって人は左タブのStaking＞Account Actionsに行き、ControllerでValidateを押してサブミットして下さい。それでもダメならまたSessionKeyの設定から行ってみるか、Riotで聞いて下さい。


Eraが更新されるとValidatorsに自分のアドレスが追加されています。上の人から順番にブロックを検証していくようです。![Screen Shot 2019-03-31 at 14.57.52.png](https://qiita-image-store.s3.amazonaws.com/0/380311/14430cf8-7369-6977-b6cd-68e53317ca37.png)

Explorerからは実際に自分が検証したブロック情報をみることができます。約6秒毎にブロックが生成されます。いつまででも見ていられますね。Era毎にアカウント設定時に指定した宛先に報酬が振込まれるはずです。なぜか貰えていなかったのでGavinに聞いたら、「システムはあるけどまだ報酬はとても低い。報酬は一番低いStakeに比例して変動する。」とのこと。今は100milliでValidatorになれるので低すぎてmilliDotの単位では確認できなかったのかもしれないですね。今後のアップデート待ちです。

![Screen Shot 2019-03-31 at 15.01.10 (2).png](https://qiita-image-store.s3.amazonaws.com/0/380311/24e3a4e2-c0dd-3e75-a04f-71d9eeb38cef.png)

##ノミネートしてみる
上で説明したように、ノミネーターはノードを動かさなくてもできる役割です。ノミネートしているValidatorが悪いことせずにちゃんと仕事していれば自分も報酬が貰えます。逆に悪いことすると、自分の掛け金も没収されることがあるのでValidator選びは慎重に。

やり方A:
1) Staking多分からAccount Actionsに行き、ControllerでNominateを選択。
2) Nominate先には好きなValidatorアドレスを入力。

**誰をノミネートすればいいかわからないって方は以下僕のアドレスなのでぜひノミネートして下さい。
`5CM4g11mmZDNDHVFByrZmChVyjVuiZvYQJqbpa3nF1s24U17 `**

やり方B：Extrinsicsの`staking::nominate`でも同じことができます。
![５.png](https://qiita-image-store.s3.amazonaws.com/0/380311/c76f302b-7d0e-38b7-42ef-d5b4ea1fffe4.png)

##ノミネートをやめる
ノミネートに使っているControllerで`staking::chill`を実行。

##掛け金を取り戻す
１）Controllerで`staking::unbond`でやめたい掛け金の額を入力。
２）次のEraまで待つ。（600ブロック）
３）Controllerで`staking::withdraw_unbonded`を実行。

StashアカウントにロックしたDotsを動かせるようになったはずです。

#まとめ
今回はAWSでPolkadotノードを立ち上げて実際にValidatorかNominatorになるところまでを解説しました。
実際にメインネットに移行した場合はこのチュートリに正直に従わないで下さい。これはあくまでPOC３のAlexテストチェーンなので、メインネットでValidatorになるにはEthereumなどでも同じですが、セキュリティ面の詳しい知識が必須です。

今後はSubstrateのRuntimeをいじってカスタムチェーン作っていければなと思います。
もっと詳しくPolkadotについて知りたい方は、ぜひ[ホワイトペーパー](https://polkadot.network/PolkaDotPaper.pdf)を読んで見て下さい。現在[日本語訳](https://github.com/stakedtechnologies/PolkadotWP)を作っているところなので絶賛協力者募集しています。

resource:
・https://hackmd.io/5Vr3CvSPS0KS8JrJN_r58A