PokladotのMainnetに繋いでみた。


# はじめに

筆者は、Polkadotの技術調査を行っている。
Polkadotのブロックチェーンはどのような情報を保持しているか確認したい背景がある。
手始めにPolkadotのRelay-chainのClient NodeとしてMainnetに繋いでみた。
接続する過程をまとめ、筆者が忘れてしまった時に確認するためのドキュメント（備忘録）を残すこととした。

本記事は以下の流れでPolkadotのMainnetに接続する。
1.Rustをインストールを行いPolkadotのソースコードが実行可能な環境整備をする。
2.Polkadotのオープンソースコードを取得する。
3.PolkadotのMainnetの接続を行う。
4.その後PolkadotのMainnetに接続できたか確認。

<!--
# Polkadotについて
Polkadotについてまとめた記事を以下に記載している。\
Polkadotはどのようなブロックチェーンシステムなのか、確認したい場合は以下を参照して頂きたい。\
-->

# Rustのインストール(環境構築)
- 実行環境
   - OS : Ubuntu20.04.4 LTS

以下の公式のインストール方法を参考にインストールを行う。

https://www.rust-lang.org/ja/tools/install

```terminal:Rustのインストール
@username:~$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
```terminal: terminal_出力
Welcome to Rust!

This will download and install the official compiler for the Rust
programming language, and its package manager, Cargo.

Rustup metadata and toolchains will be installed into the Rustup
home directory, located at:

  /home/username/.rustup

This can be modified with the RUSTUP_HOME environment variable.

The Cargo home directory located at:

  /home/username/.cargo

This can be modified with the CARGO_HOME environment variable.

The cargo, rustc, rustup and other commands will be added to
Cargo's bin directory, located at:

  /home/username/.cargo/bin

This path will then be added to your PATH environment variable by
modifying the profile files located at:

  /home/username/.profile
  /home/username/.bashrc

You can uninstall at any time with rustup self uninstall and
these changes will be reverted.

Current installation options:


   default host triple: x86_64-unknown-linux-gnu
     default toolchain: stable (default)
               profile: default
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>
```
\> 1を入力
```terminal:1を入力した後
info: profile set to 'default'
info: default host triple is x86_64-unknown-linux-gnu
info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
info: latest update on YYYY-MM-DD, rust version 1.61.0 (fe5b13d68 YYYY-MM-DD)
info: downloading component 'cargo'
info: downloading component 'clippy'
info: downloading component 'rust-docs'
 19.7 MiB /  19.7 MiB (100 %)  11.2 MiB/s in  2s ETA:  0s
info: downloading component 'rust-std'
 26.9 MiB /  26.9 MiB (100 %)  11.2 MiB/s in  2s ETA:  0s
info: downloading component 'rustc'
 55.4 MiB /  55.4 MiB (100 %)  10.8 MiB/s in  5s ETA:  0s
info: downloading component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
 19.7 MiB /  19.7 MiB (100 %)   8.7 MiB/s in  2s ETA:  0s
info: installing component 'rust-std'
 26.9 MiB /  26.9 MiB (100 %)  11.4 MiB/s in  3s ETA:  0s
info: installing component 'rustc'
 55.4 MiB /  55.4 MiB (100 %)  13.6 MiB/s in  4s ETA:  0s
info: installing component 'rustfmt'
info: default toolchain set to 'stable-x86_64-unknown-linux-gnu'

  stable-x86_64-unknown-linux-gnu installed - rustc 1.61.0 (fe5b13d68 YYYY-MM-DD)


Rust is installed now. Great!

To get started you may need to restart your current shell.
This would reload your PATH environment variable to include
Cargo's bin directory ($HOME/.cargo/bin).

To configure your current shell, run:
source $HOME/.cargo/env

```

```terminal:Versionの確認（正しくインストールができたかの確認）
@username:~$ rustc --version
rustc 1.61.0 (fe5b13d68 YYYY-MM-DD)
```
　[](
空白有り
)
Versionの確認がうまくできない場合はPATH設定を行う。
　[](
空白有り
)
```terminal
@username:~$ cat $HOME/.cargo/env
#!/bin/sh
# rustup shell setup
# affix colons on either side of $PATH to simplify matching
case ":${PATH}:" in
    *:"$HOME/.cargo/bin":*)
        ;;
    *)
        # Prepending path in case a system-installed rustc needs to be overridden
        export PATH="$HOME/.cargo/bin:$PATH"
        ;;
esac
```
```terminal
@username:~$ source $HOME/.cargo/env
```
　[](
空白有り
)
改めてバージョン確認
　[](
空白有り
)
```terminal:正常な出力
@username:~$ rustc --version
rustc 1.61.0 (fe5b13d68 YYYY-MM-DD)
```

# Polkadotのソースコードを取得してくる
実際にPolkadotをソースコードから実行する場合は、ソースコードを入手してビルドします。
またRustとサポートソフトウェアがインストールされていることを確認してください。

https://github.com/paritytech/polkadot

Polkadotのソースコードはオープンソースで公開されている。
GitHubからソースコードを取得し確認する。
確認段階では次のような手順になる。

```terminal
@username:$ curl https://getsubstrate.io -sSf | bash -s -- --fast
```
次に、Polkadotのソースコードを入手します。
今回はgit cloneしてソースコードを入手する。
（GitHubのwebページからzipファイルをダウンロードをしてくることも可）
```: git clone
@username:$ git clone https://github.com/paritytech/polkadot.git
```
```terminal:git clone ログ
ch/polkadot.git
Cloning into 'polkadot'...
remote: Enumerating objects: 1431987, done.
remote: Counting objects: 100% (1720/1720), done.
remote: Compressing objects: 100% (609/609), done.
remote: Total 1431987 (delta 1165), reused 1617 (delta 1103), pack-reused 1430267
Receiving objects: 100% (1431987/1431987), 1.70 GiB | 10.95 MiB/s, done.
Resolving deltas: 100% (1298717/1298717), done.
```
取得したソースコードの/polkadot/ディレクトリに移動する。
シェルスクリプトは、Rustをインストールまたは更新し、必要な依存関係をインストールします。
```terminal:WebAssemblyをインストールとRustの更新
@username:$ cd polkadot
@username:$./scripts/init.sh   
```
次に、コードをビルドします。


:::note warn
警告
Mainnetに接続する場合は、``リリースモード（--release）``でビルドする必要があります。
（PCの性能にもよるが、数十分はかかる）
:::
```terminal:リリースモードでビルド
@username:$ cargo build --release
```

```terminal:実行環境下ではビルドに20分程度かかった。
@username:~/polkadot$ cargo build --release
   Compiling log v0.4.17
   Compiling proc-macro2 v1.0.39
   (中略)
   Compiling polkadot v0.9.23 (/home/noname/ドキュメント/polkadot)
    Finished release [optimized] target(s) in 20m 29s
```

:::note info
info
必要に応じてテストモードを実行してみましょう。
（PCの性能にもよるが、数十分はかかる）
:::
```terminal: 必要に応じて、テストを実行
@username:$ cargo test --all --release
```




# Polakadot-mainnetに接続
カスタムネームを設定する場合は``--name "カスタムネーム"``が必要（今回はNo_nameと設定した）
```terminal: Mainnetに接続
@username:~/polkadot$ ./target/release/polkadot --chain=polkadot --name "No_name"
```

```terminal: Mainnetに接続時の出力
@username:~/polkadot$ ./target/release/polkadot --chain=polkadot --name "No_name"
YYYY-MM-DD 13:00:38 Parity Polkadot    
YYYY-MM-DD 13:00:38 ✌️  version 0.9.23-016dc729710    
YYYY-MM-DD 13:00:38 ❤️  by Parity Technologies <admin@parity.io>, 2017-2022    
YYYY-MM-DD 13:00:38 📋 Chain specification: Polkadot    
YYYY-MM-DD 13:00:38 🏷  Node name: No_name    # 起動時に設定したノード名前が表示される.
YYYY-MM-DD 13:00:38 👤 Role: FULL    
YYYY-MM-DD 13:00:38 💾 Database: RocksDb at /home/noname/.local/share/polkadot/chains/polkadot/db/full    
YYYY-MM-DD 13:00:38 ⛓  Native runtime: polkadot-9230 (parity-polkadot-0.tx12.au0)    
YYYY-MM-DD 13:00:49 🏷  Local node identity is: XXXXXXXXXXXXXXXXXXXXXXxxxxxxxxxxxxXXXXXXXXXXXX    
YYYY-MM-DD 13:00:50 💻 Operating system: linux    
2022-06-10 13:00:50 💻 CPU architecture: x86_64    
2022-06-10 13:00:50 💻 Target environment: gnu    
2022-06-10 13:00:50 💻 CPU: Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz    
2022-06-10 13:00:50 💻 CPU cores: 6
2022-06-10 13:00:50 💻 Memory: 15881MB    
2022-06-10 13:00:50 💻 Kernel: 5.13.0-48-generic    
2022-06-10 13:00:50 💻 Linux distribution: Ubuntu 20.04.4 LTS    
2022-06-10 13:00:50 💻 Virtual machine: no    
2022-06-10 13:00:50 📦 Highest known block at #28217    
2022-06-10 13:00:50 〽️ Prometheus exporter started at 127.0.0.1:9615    
2022-06-10 13:00:50 Running JSON-RPC HTTP server: addr=127.0.0.1:9933, allowed origins=Some(["http://localhost:*", "http://127.0.0.1:*", "https://localhost:*", "https://127.0.0.1:*", "https://polkadot.js.org"])    
2022-06-10 13:00:50 Running JSON-RPC WS server: addr=127.0.0.1:9944, allowed origins=Some(["http://localhost:*", "http://127.0.0.1:*", "https://localhost:*", "https://127.0.0.1:*", "https://polkadot.js.org"])    
2022-06-10 13:00:50 🏁 CPU score: 578MB/s    
2022-06-10 13:00:50 🏁 Memory score: 8230MB/s    
2022-06-10 13:00:50 🏁 Disk score (seq. writes): 114MB/s    
2022-06-10 13:00:50 🏁 Disk score (rand. writes): 51MB/s    
```
このあとPolkadotブロックチェーンの同期が始まる。

# Mainnetに接続したノードの確認（カスタムネームで検索）
webブラウザで[Polkadot Teremetry](https://telemetry.polkadot.io/#list/Polkadot "Polkadot Teremetry")にアクセスすると以下の画像の通りになる。
Polkadot Teremetryには、リアルタイムでpolkadot Mainnetに接続されているすべてのノードを観測することができる。
![Screenshot from 2022-06-10 13-54-34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569374/eb109cc0-13ba-56ee-9538-82019a78cfc3.png)

この画面の状態からキーボード入力を行うと自ノードの名前（カスタムネーム）を検索することができる。

![Screenshot from 2022-06-10 13-00-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569374/11a85ba3-1b0e-dae9-fc94-c2f4be52b358.png)

# おわりに

PolkadotにMainnetに接続を行ってみました。

また筆者は今後Rustを勉強中であり、Polkadotのソースコードを読んでいく予定である。
ソースコードを読んでいく上で気付いた点や発見をしたらまた新たな記事を書いていきたいと思う。


# 参考サイト

#### Polkadot公式

https://polkadot.network/


#### Polkadotのオープンソースコード

https://github.com/paritytech/polkadot

#### Rust公式

https://www.rust-lang.org/ja