symbol-shoestringで　nodeを ｺﾏﾝﾄﾞで作成する

symbol-shoestringを使用するにあたって
pythonの環境を整えて置く必要があります
こちらは　だいさんの紹介する方法
（ﾘﾝｸは pyenv環境の構築の項目に飛びます）

https://qiita.com/ishidad2/items/6de76f4186e12e5335d5#pyenv%E7%92%B0%E5%A2%83%E3%81%AE%E6%A7%8B%E7%AF%89

で　こちらは　僕が常用している方法

https://qiita.com/dusanjp/items/53d440fa38cb2fabab10

以上の環境を構築出来ていて、なおかつ　symbol-bootstrapが動作する環境でやりました
python3.9の環境なら symbol-shoestringの ｲﾝｽﾄｰﾙ及び動作は出来ます

さて今回は
**shoestring.wizardで作成された nodeを模倣（nodeAccountは全く別w）した nodeを　ｺﾏﾝﾄﾞだけで構築してみよう！って言う趣旨です**

今回は 2024/04/10時点で最新の　symbol-shoestring 0.1.2を使います
**symbol-shoestringの ｲﾝｽﾄｰﾙ**
```
pip install symbol-shoestring
```

# では始めます
最初に作業ﾃﾞｨﾚｸﾄﾘを作りましょうか

あらかじめ ss/1って ﾃﾞｨﾚｸﾄﾘに　shoestring.wizardで作った nodeがありますので
```
cd
cd ss
mkdir 2
cd 2
```
ssってのは('S'hoe'S'tring)って意味ですね
この下に'2'って ﾃﾞｨﾚｸﾄﾘを作って　そこで nodeを作ってみよう！
お隣には '1'って ﾃﾞｨﾚｸﾄﾘ（shoestring.wizardで作った node）があります
'1'に作成されてる ﾌｧｲﾙを参照しながら ｺﾏﾝﾄﾞ打って行こう！って企みです

# mainAccountを作成しよう！
**mainAccountを作成する `openssl genpkey`**
今 ss/2にいます
```
openssl genpkey -algorithm ed25519 -outform PEM -out ca.key.pem
```
`ca.key.pem`ってのが出来ます
これ　mainAccountですね
内容の見方は
```
openssl pkey -in ca.key.pem -text -noout
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/314b9cd3-6aae-05b8-94f1-148aedd4cefd.png)
上の priv:に文字列があるっしょ？これ　mainAccountの秘密鍵なんです
これから':'を取り除くと
4494736b31a7a3059fe7b22a627bfa17cf6eaaa30f2052af5ee7489b47238691
って　秘密鍵なるんです

# 基本設定ﾌｧｲﾙ　configﾌｧｲﾙを作成しよう！
**configﾌｧｲﾙを作成する `shoestring init`**
shoestring.wizardで nodeを作ると
shoestringって ﾃﾞｨﾚｸﾄﾘが出来て　その中に
`shoestring.ini`
`overrides.ini`
    
って ﾌｧｲﾙが出来るんですが　ｺﾏﾝﾄﾞでやるには
shoestring ﾃﾞｨﾚｸﾄﾘとか作る必要　ありません！
作業 ﾃﾞｨﾚｸﾄﾘに直接作っちゃいましょう
```
python3 -m shoestring init --package sai sai.ini
```
意味は「testnet用の configﾌｧｲﾙを　`sai.iniってﾌｧｲﾙ名で作れ`」ですね
`--package`ってのは　mainnetか　testnetかを指定してます
testnetNodeを作りたい場合は　`--package sai`って入れるんですね
mainnetNodeを作りたい時は　これ　要りません　まぁ `--package mainnet`って入れてもいいですが

今出来た`sai.ini`の内容が以下です
```
[network]

name = testnet
identifier = 152
epochAdjustment = 1667250467
generationHashSeed = 49D6E1CE276A85B70EAFE52349AACCA389302E7A9754BCF1221E79494FC665A4

[images]

client = symbolplatform/symbol-server:gcc-1.0.3.7
rest = symbolplatform/symbol-rest:2.4.4

[services]

nodewatch = https://nodewatch.symbol.tools/testnet

[transaction]

feeMultiplier = 200
timeoutHours = 1
minCosignaturesCount = 0
hashLockDuration = 1440
currencyMosaicId = 0x72C0212E67A08BCE
lockedFundsPerAggregate = 10000000

[imports]

harvester =
voter =

[node]

features = API | HARVESTER | VOTER
userId = 1000
groupId = 1000
caPassword =
apiHttps = true

caCommonName =
nodeCommonName =
```
一番下の方に
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/afb33281-1bd5-fe39-53b4-2613c79b7749.png)
ってなってますが
shoestring.wizardで作った方の`shoestring/shoestring.ini`（これが今作った sai.iniに相当するんです）を見ると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/4ea38771-7816-1341-c350-5a2924732e63.png)
`features = API|HARVESTER`
よくわかりません　APIがあって ﾊｰﾍﾞｽﾄをするって事でしょうか？
まぁいいです　後で調べれば判るっしょ

`apiHttps = false`
今回は httpsにしないので falseにしましたよ
`caCommonName = CA 1`
`nodeCommonName = 1 9.dusanjp.com`
え〜　'1'ってのは　friendlyNameで ﾃｷﾄｰに付けました
空いた ﾄﾞﾒｲﾝがあったので　これも ﾃｷﾄｰに付けました

...ってなってますんで　ここ　変更しましょうか
```
vi sai.ini
```
変えました！（下の方ですよ[node]ってﾄｺですよ）
```
[network]

name = testnet
identifier = 152
epochAdjustment = 1667250467
generationHashSeed = 49D6E1CE276A85B70EAFE52349AACCA389302E7A9754BCF1221E79494FC665A4

[images]

client = symbolplatform/symbol-server:gcc-1.0.3.7
rest = symbolplatform/symbol-rest:2.4.4

[services]

nodewatch = https://nodewatch.symbol.tools/testnet

[transaction]

feeMultiplier = 200
timeoutHours = 1
minCosignaturesCount = 0
hashLockDuration = 1440
currencyMosaicId = 0x72C0212E67A08BCE
lockedFundsPerAggregate = 10000000

[imports]

harvester =
voter =

[node]

features = API | HARVESTER
userId = 1000
groupId = 1000
caPassword =
apiHttps = false

caCommonName = CA 1
nodeCommonName = 1 9.dusanjp.com
```
features = API | HARVESTER
これなんですが
元の
features = API | HARVESTER | VOTER
から
 | VOTER
 を消しただけですw
 
 **...ふぅ**
 **いやいやまだまだ**

 
# 設定上書きﾌｧｲﾙ　overrides.ini を作ろうず
***overrides.iniを作成する `vi overrides.ini`**
overrides.iniってのは何だろう？って言うと
まぁｱﾚだ
例えば symbol-bootstrapだと
`symbol-bootstrap config -p testnet -a dual`
で nodeは建つけど
ｶｽﾀﾑﾌﾟﾘｾｯﾄも `-c ｶｽﾀﾑﾌﾟﾘｾｯﾄ`で指定して
host名とか friendly名とか後いろいろ設定入れるっしょ？

overrides.iniってのは　それに相当するもんだと思えばいいかな

じゃ　元になる　shoestring.wizardで建てた方のshoestring/overrides.ini　見てみましょ
```
[user.account]
enableDelegatedHarvestersAutoDetection = false

[harvesting.harvesting]
maxUnlockedAccounts = 5
beneficiaryAddress = 

[node.node]
minFeeMultiplier = 100

[node.localnode]
host = 9.dusanjp.com
friendlyName = 1
```
.......ふーん　なるほどなるほどなるｈ...
まいっか！これ　そのまま ｺﾋﾟﾍﾟしちまおう！
```
vi overrides.ini
```
（上に貼った shoestring/overridesの内容を ｺﾋﾟﾍﾟw　そして保存www）

...と　これで
configﾌｧｲﾙ`sai.ini`
overridesﾌｧｲﾙ`overrides.ini`
が出来上がった訳なんですが

# **※metadata**も入れたい場合
```
vi metadata.json
```
metadata.jsonの内容の例
```
{"shoestring":"node"}
```
この metadata.jsonは作らなくても nodeは建てられます

# **node建てるぞ！**
**nodeの ｾｯﾄｱｯﾌﾟ命令 `shoestring setup`**
```
python3 -m shoestring setup --config sai.ini --ca-key-path ca.key.pem --directory . --overrides overrides.ini --package sai
```
※ metadata.jsonを作成した時は↓で
```
python3 -m shoestring setup --config sai.ini --ca-key-path ca.key.pem --directory . --overrides overrides.ini --package sai --metadata metadata.json
```

命令の説明はっつーと

`--config`	initで作成した ﾌｧｲﾙ	`sai.ini`
`--ca-key-path`	mainAccountの ﾊﾟｽ	`ca.key.pem`
`--directory`	nodeを作成する場所	nodeの作業ﾃﾞｨﾚｸﾄﾘなら ` .`　他の任意の場所ならその場所のﾊﾟｽ 例：`~/ss/2`
`--overrides`	設定上書きﾌｧｲﾙ		`overrides.ini`
`--package`	mainnetなら不要	testnetならこれを記述する `sai`
`--metadata` metadataを入れたい時に使います `metadata.json`

[enter]ｱｱｱｱｱｰ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/f6b89a98-2f59-8fc4-53e3-717742432ffc.png)
はい　ｽﾞﾗﾗﾗﾗﾗﾗﾗｰっと出て来ました　なんかｴﾗｰは吐いて無いみたいなんで
良しとしましょうね

じゃ 作業ﾃﾞｨﾚｸﾄﾘの中身を見てみましょ
はい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/837031b0-07b9-bb8f-ca18-3f92754e98d3.png)

で　こっちは　shoestring.wizardで作った方の作業ﾃﾞｨﾚｸﾄﾘね
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/e3dea58d-1068-e868-f641-70a9a9344b70.png)
shoestring.wizardで作った方の nodeは
`sai.ini`と`overrides.ini`が無くて shoestringﾃﾞｨﾚｸﾄﾘがあるのね
でその shoestringﾃﾞｨﾚｸﾄﾘの中に
`sai,ini`に相当する`shoestring.ini`
`overrides.ini`
（ﾒﾀﾃﾞｰﾀを設定すると　ここに `node_metadata.json`も入る）
...が　入ってますって言うか

ｺﾏﾝﾄﾞで作るのと shoestring.wizardで作るかで構造が違うんですよ

# nodeを動かすぞ！
**nodeを起動する `docker-compose up -d`**
**nodeを停止する `docker-compose down`**

あっそうそう
symbol-bootstrapの nodeを回してた ｻｰﾊﾞで
いきなり
```
docker-compose up -d
```
ってやると　ｴﾗｰが出るから
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/56159599-1d1c-cc15-1b19-3891ba237bff.png)
↑こんなの
そんな時は
```
docker system prune
```
をやると動きますよ
止める時は
```
docker-compose down
```
なんか testnetの頃の nodeの動かし方思い出すは

# nodeの設定を変更するぞ！
**nodeの設定を変更する `shoestring upgrade`**
使い方は `setup`とよく似てますね
overridesの内容を　例えば　host名とか friendlyNameとか
minFeeMultiplierとか
maxUnlockedAccountsとか
beneficiaryAddressとか
ここに書いてある事はとりあえず変更出来ますね
```
vi overrides.ini
```
（overrides.iniの内容を変更して保存）
これを反映させます
```
python3 -m shoestring upgrade --config sai.ini --directory ~/ss/2 --overrides overrides.ini --package sai
```
はいはいまたまた命令の説明っす

`--config`	initで作成した ﾌｧｲﾙ	`sai.ini`
~~--ca-key-path	mainAccountの ﾊﾟｽ ca.key.pem~~
`--directory`	nodeを作成する場所　nodeの作業ﾃﾞｨﾚｸﾄﾘの ﾊﾟｽ　例：`~/ss/2`
`--overrides`	設定上書きﾌｧｲﾙ		`overrides.ini`
`--package`	mainnetなら不要	testnetならこれを記述する `sai`
`
こんなｶﾝｼﾞっすね

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/ee50b206-8d7f-7531-0436-08e5cc9cd2ad.png)

# nodeがちゃんと動いてるかな？見てみよう！
**nodeの healthを ﾁｪｯｸする `shoestring health`**
```
python3 -m shoestring health --config sai.ini --directory .
```
`--config` initで作成した ﾌｧｲﾙ `sai.ini`
`--directory` 作業ﾃﾞｨﾚｸﾄﾘの場所 ` .`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/a4947d4a-df40-dfdd-48c5-c82e5f886b24.png)
blockが進んだら 命令は終了しますんで　ちょっと待つ事もあるです

# block1から再同期するぞ！
**blockDataを ﾘｾｯﾄする `shoestring reset-data`**

```
python3 -m shoestring reset-data --config sai.ini --directory .
```
`--config` initで作成した ﾌｧｲﾙ `sai.ini`
`--directory` 作業ﾃﾞｨﾚｸﾄﾘの場所 ` .`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/1dec89cb-4c82-a774-d866-569f4d9eaf81.png)

言わずもがなの　resetDataですね　data全消しですよ

 # ...とりあえずおわり！ﾊﾗ減った！

さんこう
やっぱｼﾞｬﾊﾟﾆｰｽﾞ語で書いてある方がやりやすいっすね
翻訳でｱﾀﾏ熱くならんし

https://note.com/the_symbol_news/n/n650f49359bea