2024.08.10 改訂版　symbol-shoestringで nodeを ｺﾏﾝﾄﾞで建てる！

symbol-shoestringの ver.は 0.1.3です

最初に、nodeを格納する 作業ﾃﾞｨﾚｸﾄﾘを作成し、作業ﾃﾞｨﾚｸﾄﾘに入ります
```
mkdir testNode
cd testNode
```
# mainAccountの作成
mainAccountを作成します
```
openssl genpkey -algorithm ed25519 -outform PEM -out ca.key.pem
```
# configFileの作成
https://qiita.com/dusanjp/items/90a1fca9bddd56ef79a1

↑以前の記事では、作業ﾃﾞｨﾚｸﾄﾘに直接
`sai.ini` `overrides.ini` `metadata.json`
以上の 3つの configFileを作成しましたが、
**これだと shoestring.wizardで作成した nodeと ﾃﾞｨﾚｸﾄﾘ構造が違ってしまい、命令の書き方に統一が取れないので**
作業ﾃﾞｨﾚｸﾄﾘの下に shoestringﾃﾞｨﾚｸﾄﾘを作成し、この中に
`sai.ini`→`shoestring/shoestring.ini`
`overrides.ini`→`shoestring/overrides.ini`
`metadata.json`→`shoestring/node_metadata.json`
以上の file名変更も込みで、配置を shoestring.wizardに合わせた構成で nodeを作成して行きます

**shoestringﾃﾞｨﾚｸﾄﾘを作成する**
```
mkdir shoestring
```
# configFile① shoestring.iniの作成
shoestringﾃﾞｨﾚｸﾄﾘ内に `shoestring.ini`を作成します
mainnetの場合は、命令の中の`--package sai`は
`--package mainnet`　又は無しにして下さい
```
python3 -m shoestring init --package sai shoestring/shoestring.ini
```

**実行画面**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/63e14ad2-ecbb-7ebf-1be3-8e3ba4a26577.png)

shoestringﾃﾞｨﾚｸﾄﾘに作成された shoestring.iniを編集します
```
vi shoestring/shoestring.ini
```
今回は
network: testnet
roles: roles7 votingNode
friendlyName: testNode
host: 6t.dusanjp.com
https: 無し
にします

**変更前の shoestring.ini**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/5185bded-e588-1d0d-3eff-2e66fe5e73fc.png)

①②③④を編集します

① rolesを決定します
通常の roles:3 dualNodeでは`features = API | HARVESTER`
roles:7の votingNodeなら`features = API | HARVESTER | VOTER`つまりこのままです

② httpsにするかの可否を決定します
symbol-shoestringでは、**httpか　httpsかのどちらかしか選べません**
ﾃﾞﾌｫﾙﾄでは有効の `true`になっていますが、今回は無効の `false`にします

③`CA nodeの friendlyName`
今回は`caCommonName = CA testNode`とします

④`friendlyName host`
今回は`nodeCommonName = testNode 6t.dusanjp.com`とします

**変更後の shoestring.ini**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/ec573dce-6d84-741a-6d55-4c148f694e27.png)

変更した shoestring.iniを保存します

# configFile② overrides.iniの作成
shoestringﾃﾞｨﾚｸﾄﾘに `overrides.ini`を作成します
```
vi shoestring/overrides.ini
```
以下の ﾃﾝﾌﾟﾚを ｺﾋﾟｰ& ﾍﾟｰｽﾄします
```
[user.account]
enableDelegatedHarvestersAutoDetection = true

[harvesting.harvesting]
maxUnlockedAccounts = 5
beneficiaryAddress = 

[node.node]
minFeeMultiplier = 100

[node.localnode]
host = 
friendlyName = 
```
今回作成する nodeは
friendlyName: testNode
host: 6t.dusanjp.com
なので
**編集後の overrides.ini**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/ab9fbb23-772a-bf64-fe5c-273dc43ec292.png)
以上の様になります。これを保存します

# （任意）configFile③ node_metadata.jsonの作成
shoestringﾃﾞｨﾚｸﾄﾘに `node_metadata.json`を作成します

`host:3000/node/metadata`で表示される内容を編集します
```
vi shoestring/node_metadata.json
```
**node_metadata.jsonの内容**
```
{"shoestring":"testNode"}
```
書式はこれ以外にもある様です。これを保存します

# setup命令で nodeを作成する
```
python3 -m shoestring setup --config shoestring/shoestring.ini --ca-key-path ca.key.pem --directory . --overrides shoestring/overrides.ini --package sai --metadata shoestring/node_metadata.json
```
`--package sai`は　testnet指定を意味します
ここは、mainnetなら `--package mainnet`又は、この部分は無しで良いです

`--metadata shoestring/node_metadata.json`
ここは、configFile③で作成する`shoestring/node_metadata.json`が無い場合は、外します。無しにします

**その他**
`--config`　initで作成した configFile① `shoestring/shoestring.ini`の ﾊﾟｽ
`--ca-key-path`　mainAccount `ca.key.pem`の ﾊﾟｽ
`--directory`　nodeを作成する場所　nodeの作業ﾃﾞｨﾚｸﾄﾘなら `.`　他の任意の場所ならその場所のﾊﾟｽ
`--overrides`　configFile③ `shoestring/overrides.ini`の ﾊﾟｽ

**実行画面**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/01f7f9ce-eb97-171d-5867-946b43d5ab17.png)

# 作成した nodeを起動する
作業ﾃﾞｨﾚｸﾄﾘ内は、この様になっています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/c25be069-1997-b0f3-ee43-08bf87ffaa9a.png)


nodeを起動します
```
docker-compose up -d
```
上記命令で、以前に bootstrapNodeを動作させていた事がある場合は
↓の様な errorが出ます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/d83e9307-2cc5-a11a-8b39-acad4874d444.png)

この様な時は
```
docker system prune
```
↑を実行して下さい

**実行画面１**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/627267e6-77b4-4175-fb2f-12e5959b3e22.png)
'y'[ENTER]で続きます
**実行画面２**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/3de21b33-f7fb-abcf-ec07-98a44a65f5e0.png)

もう一度起動させましょう
```
docker-compose up -d
```
**node起動画面**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/02f2a0ea-529b-47ce-a173-dc1977d8b4d5.png)

**host:3000/node/infoと host:3000/chain/info**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/eb84b9b2-c188-10d3-494b-bbfcf003e46f.png)

**healthCheck**
```
python3 -m shoestring health --config shoestring/shoestring.ini --directory .
```
**実行画面**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/82553a3c-1ec8-24df-f27a-3d27167647d2.png)

# nodeの停止
nodeを停止させます
```
docker-compose down
```
**実行画面**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/0e08532d-89b5-7622-393f-5cc283627eaa.png)

# resetData
blockDataを消去します。nodeを起動させると block 1から起動します
```
python3 -m shoestring reset-data --config shoestring/shoestring.ini --directory .
```
**実行画面**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/5e6526f1-4da8-e4bd-1b21-b0f391077e37.png)