"symbol-network"　複数 node が参加可能な network の作成 tool　の紹介と「使用してみた」

# symbol-network
https://github.com/fboucquez/symbol-network

https://dev.to/fboucquez/how-to-create-a-symbol-testnet-network-4hdd

symbol-network 命令一覧
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/0ec026b9-8bce-67ee-f8cb-6ef4fdd62ff7.png)
Google 翻訳
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/fc7fac92-c4c0-a602-b393-9ab15af1aabe.png)

これは Symbol node が動作する環境なら動きます
```docker```
```docker-compose```
```node.js```

以上が入っていれば良いです

まずは ```symbol-network``` の ｲﾝｽﾄｰﾙ

```
sudo npm install -g symbol-network
```
network 作成用の ﾃﾞｨﾚｸﾄﾘ を作成し　そこに入る

```
mkdir newnetwork
cd newnetwork
```
では始めましょう
# 1つ目の コマンド ```symbol-network init --ready```
```
symbol-network init --ready
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/c3cdce5d-921b-5346-5060-5ffaf57cd2f3.png)
新しい network を作りますか？と聞いています　"y" で
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/1e465550-8722-7b09-cf80-edfeee57b9d3.png)
```bootstrap```
```testnet```
```mainnet```
```既に持っている custom-network-preset.yml```
この4つから選べます　今回は testnet を選びます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/2980a4d0-0beb-2629-d6a1-711b0e724ecc.png)
ここは私が持っている domain ```dusan.gq```を使用する事にしましょうか
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/1afcfbc4-0bcf-6c2f-d5dc-414bc886bcc4.png)
建てる node の host名の先頭に```newnetwork```が付きます
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/cb615a3c-1aad-f4af-1a0a-600f634ea52d.png)
node の host名の付け方を決めます　ここは[enter]で
すると node の host名が```newnetwork-dual-001```となります
複数の node を作成した場合は 更に
```002``` ```003```と振られます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/c899af99-73d1-a182-a308-ace792f3f48a.png)
この作業が終わると```key-store.yml```と言う file が作成されますが
これを使用する作業をする際の password を設定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/f29c9449-e916-be58-dec5-d4518902f7fd.png)
作成する network type を決めます
これはおそらく　mainnet と testnet では 若干設定が違う（importance 反映にかかる時間とか）ので
これを選択します
```testnet```を選びますか
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/a11dc6d3-c196-002d-05ca-7048c57599d4.png)
これなんですが　良く判りません
とりあえず　ここは```newnetwork-1```とでも入れて置きます
この作業の後に出来る```custom-network-preset.yml```の 1行目と
この後の作業で作成される voting node の target/preset.yml の中が
```networkDescription: newnetwork-1```となるんですが...
まぁ次行きましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/e85db887-ba66-d325-45e8-8a9c9be38318.png)
generation hash ですね
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/05305d57-4e8b-f9cd-b903-e5a46dd290cd.png)
https://symbolnodes.org/nodes_testnet/
これですこれ ｼﾞｪﾈﾚｰｼｮﾝ ﾊｯｼｭ って言うやつです
これが同じ node 同士が繋がって　それぞれ network を作っているんですね
現在の　testnet nodeList 上には
49D6E1CE276A85B70EAFE52349A...（現 testnet "sainet"）
7FCCD304802016BEBBCD342A332...（旧 testnet）
8CB80B906770AF80B08FA3D901E...（だいさん作成の dainet）
を見る事が出来ます
そうです　これらは　別々の network なんです

ここは[enter]します　勝手に生成してくれます
今回生成された ｼﾞｪﾈﾚｰｼｮﾝ ﾊｯｼｭ は
```C6F3463BE66AFB4847DD925EE8F15D1897CB9430E9408D21E91C22B28536726E```です

ここを含めて6つの質問には[enter]しときましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/ae5edfaf-650e-306e-6c3d-9a7270814b10.png)
この質問の中に
```Enter the basename for the network aliases```
```Enter the alias for the Network Currency```
がありますが この2つの質問に[enter] で```symbol.xym```になります　ここで好きな通貨名を入れる事も出来ます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/5b44be64-2391-02f0-d7c9-ba6cec46853e.png)
faucet の account を作成します "y" にします　[enter] で "y" が入力されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/2b77c709-8540-cecf-b0f0-665668008c24.png)
ここから後の4つの質問には[enter]をします
この中に出てくる```Do you want to distribute coin xym to different accounts on the nemesis block?```なんですが
もしかしたら　ﾒｲﾝ通貨の他に　ｻﾌﾞ通貨を作れるんじゃないか？と思っていますが
やった事無いので判りません
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/a77ac3e2-8e1c-1236-29ec-42ccb53ff4c6.png)
なにやら file が作成された様な ﾒｯｾｰｼﾞ が表示されます
この時点で```custom-network-preset.yml```が作成されました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/5a83f688-30a9-822a-c5dd-8143286deb5a.png)
ここからは node 作成に入ります
今回は ```voting dual```1つだけ作成しましょう
```voting dual```を選択して[enter]します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/42c731a2-028d-ecf2-3a49-7a38bca84271.png)
voting dual を何個作りますか？って聞いて来ます
どうやら3つ作成出来るみたいですが　1つで充分です　"1" を入力[enter]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/d987ba09-cc1d-d2d1-ac25-96b1d1657e38.png)
```What's the initial xym balance for the Voting Dual nodes?```
voting dual node の main account に付与する通貨枚数を入れます[enter]で 300万枚が入ります
```The nick name of the these nodes```
voting dual node の名前を入れます　ここは[enter]します
これで voting node の host が "newnetwork-dual-001" になります
例えば　ここの名前を "a" と入れると
voting node の host が "newnetwork-a-001" になる筈です（試してません）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/129b72c3-ad02-a8c5-9b20-99536624218c.png)
え〜　ここは　よく判りませんでした　ちゃんと説明出来ませんすいません
「あなたの Rest Gateway の HTTP ﾌﾟﾛﾄｺﾙ を選んで下さい」って書いてありますね
ここは```HttpAndHttps```を選んどきますか

ここですね？今回は voting node 1つだけ作るんですけど
複数の node を作成する時は　その都度聞いて来るので　それぞれの node で選択出来るんですが
どういう事かは私には　よく判ってません
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/78fde375-4c89-6bf6-ba75-a7dee3b56c15.png)
```Do you want to create 1 nodes of type Voting Dual each with balance of 3000000?```って聞いて来るんですが
これは 「300万 xym が入った voting node を1つ作成します　いいですか？」つまり確認ですね
[enter]します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/fcd86932-d56b-4c8e-1501-45ec151759c1.png)
「もっと node を作成しますか？」って聞いて来ますが
今回は voting dual node 1つでもう必要十分なので "n" です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/abfe5667-ddd2-63eb-b312-f24a5be08715.png)
```network-input.yml```が作成されましたとの ﾒｯｾｰｼﾞが表示されます

ここでやっとこさ　1つ目の ｺﾏﾝﾄﾞは終了です
さて　作業 ﾃﾞｨﾚｸﾄﾘの内容を見てみましょうか
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/691d70ac-f8b0-49a8-45da-1e68ea36b137.png)
3つ　file が出来てますね

①```custom-network-preset.yml```
network の性格がこの中に入ってます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/74753868-5b0d-8d47-5126-53e3e453c144.png)
長いので上の方だけ見せます

②```network-input.yml```
作成した node の情報...みたいですね
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/487ef5c7-8620-7a0e-8a2a-e62ae90c0115.png)

③```key-store.yml```
各 ｱﾄﾞﾚｽ の秘密鍵が格納されています　これは暗号化されていて ```symbol-bootstrap decrypt```命令と 今回作った password で復号出来ます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/bc69a0f3-7a16-6e38-1a21-ededdd679889.png)

# 2つ目の コマンド ```symbol-network expandNodes```
```
symbol-network expandNodes
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/0d6b6a7a-1b23-fdc0-0abe-b266245922d2.png)

ﾒｯｾｰｼﾞ を直訳してみると
```
パスワードが設定されています

network.ymlが保存されました。

network-input.ymlを再確認してください。ホスト名やフレンドリー名など、ノードのプロパティを調整することができます。

また、以下の命令を実行することもできます。
$ symbol-network displayResolvedNetworkPreset
この命令は使用するネットワークプリセットを表示します。custom-network-preset.yml を更新することで調整可能です。

調整に満足したら以下の命令を実行して下さい
$ symbol-network generateNemesis
定義した初期ノードに基づき、nemesis ノードを生成します。ノードはブロック1から完全にリンクされ、資金が供給されるようになります!
```
何が起こったかと言いますと```network.yml```と言う file が作成されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/ebfbb154-7edb-10ea-95d0-d300775f6849.png)
file の中身は　こうです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/50c8456c-824d-fee6-9b98-8d4642b373fa.png)
1つだけ作成した voting dual node の事が書かれているのだけは判ります
node の customPreset らしき物も見えますね

ﾒｯｾｰｼﾞ に出ていた```symbol-network displayResolvedNetworkPreset```　実行してみました
長いので冒頭と末尾を見せます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/1578c43a-79b5-6e99-74b3-835246b6a24c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/85115793-cdfe-f20a-bd7d-4a4884b46a79.png)

ほぼほぼ```custom-network-preset.yml```の内容と同じみたいですって言うか
それを表示してるみたいです
この file を編集する事で network-properties 言わば network の性格ですね
これの変更が出来ます

例えば
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/4bbfdb16-95a1-435c-1685-c31fc8855f02.png)
10行目に voting node になる為の必要枚数が　ここに記述されてますが

ここを
```minVoterBalance: 3000000000000```
から
```minVoterBalance: 10000000000```
に変更すると
voting node の最低限必要な枚数が　10,000枚になります
```custom-network-preset.yml```の変更したい部分があれば　この時点で変更出来ると言う事です

# 3つ目の コマンド ```symbol-network generateNemesis```
```
symbol-network generateNemesis
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/6cbdd8e2-07c8-182e-655e-9a6e3fef18d6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/f842d873-afd1-40d8-b34e-f92108b906be.png)
この ｺﾏﾝﾄﾞ で　nemesis block の情報が格納された```nemesis-seed```と
起動可能な node が入っている```nemesis-target```が作成されました

ｺﾏﾝﾄﾞ で表示された　一番下の ﾒｯｾｰｼﾞ を見てみましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/372f0332-68f9-7a75-e454-73cd88ca5cdb.png)

```Once your network is running, other people can join your new network by sharing with them the 'custom-network-preset.yml' file and 'nemesis-seed' folder.```
と書かれてます

つまりこれ
```custom-network-preset.yml```と```nemesis-seed```を
他の ｻｰﾊﾞの作業 ﾃﾞｨﾚｸﾄﾘ に送って　そこで ```config```又は```start```で
この network に繋げる事が出来るんです
__複数 node による network が出来上がるんです__
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/73e038eb-21d2-708a-2dda-6f0cd58d7883.png)
この2つがあれば　出来るんです

とりあえず置いといて

起動してみましょう
```
symbol-bootstrap start -t nemesis-target --noPassword --detached --healthCheck --report --pullImages
```
いろいろ ﾒｯｾｰｼﾞ が出てきますが　ちょっとだけ待つと
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/750aaa71-3094-7f64-17f8-9e17810e0651.png)
こうなります

ちょっと　node の状態を見てみましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/65b67514-0380-893d-4a81-df6ce73432f8.png)
```curl localhost:3000/node/info|jq```
と```curl localhost:3000/chain/info|jq```ですね
もう block が進んでいるのが判ると思います　今は 3 block ですね

で　判る人は気付いたと思いますが　この node
先程作成した voting node じゃありません　ただの dual node です
そして
__このままだと block は進みますが　finalize は全く進みません__

あらかじめ domain "newnetwork-dual-001.dusan.gq" を作っておいたので
ﾌﾞﾗｳｻﾞ で```http://newnetwork-dual-001.dusan.gq:100```を見てみましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/7b3da49d-8bb7-0335-0e67-8773bdf5ae48.png)
faucet ですね

じゃあ```http://newnetwork-dual-001.dusan.gq:90```行ってみましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/629cd463-89ec-b620-63d5-005bb3bd8fbe.png)
...あ〜　上手く表示されませんね

まぁここは　だいさんの記事で 最新の symbol-explorer の構築方法があるので
放っときます

https://qiita.com/ishidad2/items/c5ddd290b09f9ccd2dcd

https://qiita.com/ishidad2/items/92746de12598c7c2bd89

faucet も別に建てる事は出来ますのでこれも放置しましょう

名残り惜しいですが　今動いている node を止めます
```
symbol-bootstrap stop -t nemesis-target
```
これで今動いていた node は停止しました explorer と faucet も止まりました
# 4つ目の コマンド ```symbol-network configureNodes```
```
symbol-network configureNodes
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/e3d31aca-19b1-7801-460b-1f1b6eeb5446.png)
最初に psaaword を聞いて来るんですが　これは
この命令で ①の ｺﾏﾝﾝﾄﾞ の時に作った voting node の password を新規に作成します
voting node の作業では　こちらの password を使用します
次に聞いて来るのが　symbol-network の password です　これまでにも何度も入力して来た password ですね

この ｺﾏﾝﾄﾞ で　ｺﾏﾝﾄﾞ②で作成された```network.yml```に追記がされます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/9c3e06b7-46be-86f2-ace6-1552392e740e.png)
赤枠の部分が追記された部分です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/ea0556e6-9327-c447-4ec1-828ff8f09f43.png)
また　新たに```nodes```ﾃﾞｨﾚｸﾄﾘが出来ました
入ってみます
```
cd nodes
ls
cd node-001
ls
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/c0649bea-dbc6-57b1-c59f-bb41a38aca79.png)
これが①の ｺﾏﾝﾄﾞ で作成した ```newnetwork-dual-001```の本体です
この node を起動すると voting が機能するので
finalize が進みます
あと　気付いたと思いますが
![43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/f712566e-933d-a47a-6557-1f53c6af6de1.png)
```custom-network-preset.yml```と```nemesis-seed```が　ここにもありますね

```custom-preset.yml```の内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/723388fe-5ba4-185f-f38c-550c34ee8bb4.png)
これはもう
```symbol-bootstrap run -d```で起動出来ます

では voting node ```newnetwork-dual-001```起動しましょう
```
symbol-bootstrap run -d
```
```curl localhost:3000/node/info|jq```
と```curl localhost:3000/chain/info|jq```で node の状態を見てみます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/b6a2b765-8bf5-ff6d-e66f-9382d8987fca.png)
```"host": "newnetwork-dual-001.dusan.gq"```
```"friendlyName": "newnetwork-dual-001"```
これです　これが 最初の ｺﾏﾝﾄﾞ① で作った voting node なんです
これが起動している事で finalaize が進みます
ちなみに block は 1 から　やり直しになります

# 別の ｻｰﾊﾞ から network に参加する
ここで　別の ｻｰﾊﾞに ﾛｸﾞｲﾝ して
作業 ﾃﾞｨﾚｸﾄﾘ```newnetwork```を作成
ﾃﾞｨﾚｸﾄﾘ```newnetwork```に　とりあえず scp ｺﾏﾝﾄﾞ で
```custom-network-preset.yml```と```nemesis-seed```を転送します
![47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/e53a41c8-8485-8229-73fd-e2deb970ba59.png)
node を 開始します
とりあえず host/friendlyName 等の設定は無しのまま起動してみましょう
```
symbol-bootstrap start -p custom-network-preset.yml -a dual -d
```
![48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/e482b4ce-3940-5a30-ac2c-2ff703570ead.png)
起動しました

これで peer に繋がって来れば　成功です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/d7c1959e-0ca9-d20b-b5a6-0fadbfcd8e3c.png)
繋がっています
お互いの node が peer で繋がっている事が判ります

# preset を symbol-bootstrap に組み込む
これは　どちらの ｻｰﾊﾞ でも構いません
```custom-network-preset.yml```と```nemesis-seed```が　あれば出来ます
①付けたい preset名を付けた ﾃﾞｨﾚｸﾄﾘを作成する
ここでは preset名を```newnet```として作業します
```
mkdir newnet
```
②この ﾃﾞｨﾚｸﾄﾘ```newnet```に
```custom-network-preset.yml```と```nemesis-seed```を ｺﾋﾟｰして
ﾃﾞｨﾚｸﾄﾘ 内に入ります
```
cp custom-network-preset.yml newnet/
cp -r nemesis-seed newnet/
cd newnet
```
③```custom-network-preset.yml```の名前を ```network.yml```に変更する
```
mv custom-network-preset.yml network.yml
```
④```network.yml```を編集する
```
vi network.yml
```
487行目の```nemesisSeedFolder: nemesis-seed```を注釈化する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/9605ec2a-7d79-8d8b-ac15-1a0d199e9204.png)
赤線の部分を
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/3c47fcbe-8878-6956-6fd1-c7cd3fa592fe.png)
の様に変更　保存する

⑤```nemesis-seed```の名前を```seed```に変更する
```
mv nemesis-seed seed
```
⑥```seed```の ﾊﾟｰﾐｯｼｮﾝ を変更する
このままだと symbol-bootstrap の本体に入れると ```seed```の内容が読めなくなるので
これを変更します
```
chmod -R 777 seed
```
⑦階層を1つ登って　symbol-bootstrap の本体へ ﾃﾞｨﾚｸﾄﾘ を ｺﾋﾟｰ する
```
cd ../
sudo cp -r newnet /usr/lib/node_modules/symbol-bootstrap/presets/
```
以上で preset の追加作業は完了です
これで 
```symbol-bootstrap config -p newnet -a dual```
または
```symbol-bootstrap start -p newnet -a dual.....```
の書き方で newnetwork の node を作成出来る様になりました

これも又　```newnet```ﾃﾞｨﾚｸﾄﾘを　他の ｻｰﾊﾞに転送して
```sudo cp -r newnet /usr/lib/node_modules/symbol-bootstrap/presets/```
とする事で　その ｻｰﾊﾞ上でも ```-p newnet```が有効になります
    ※symbol-bootstrap の preset 部分は```/usr/local/lib/node_modules/symbol-bootstrap/presets/```
に存在する ｹｰｽ もあります

-----俺様用しおり ここまで書いた-----
めりー🎅くりすます🎄