NEM Symbol テストノード構築で GoTo 大家

:::note alert
2022-01-01 こちらの記事は古くなっております。以下の記事が最新です。
:::

- https://qiita.com/curupo/items/b1ef2f67ddc037504ece

---

- 現在、検証中。勘違いも含まれていると思われます。。

- 本記事は symbol-bootstrap v1.0.0で確認しています。
- 【重要】2021/04/12 追記。
    - これまで私はノード側のメインウォレットに10,000XYMを入れておかないと入居者から賃料を徴収できない、という理解だったのでしたがこれは間違っておりました。
    - その後、ノードのメインウォレットは0XYMでも入居者のハーベストから手数料を徴収をできることを確認しました。づ～さん情報。
    - つまり、技術者は元手がなくても自作サーバーかVPSの1台を用意でき入居者さえ集まってくれば賃料を徴収できる、ということのようです。ノードがなければチェーンを維持できないことを考えると技術のあるエンジニアを優遇するのは当然かも知れません。
    - なお自身もハーベストしたい場合は10,000XYM保有については必須で、個人用のウォレットでどこかのノードに委託ハーベストするか、または、建てたノードのメインウォレットでハーベストするかの違いっぽいです。
    - 自身の建てたノードに、自身の個人ウォレットからハーベスト委任する、という方法も可能。
    - ノードを建てメインウォレットに10,000XYMを置いている状態は、メインウォレットで自身がハーベストをしつつ入居者からも賃料も頂く、ということのようです。
    - symbol-bootstrap link コマンド時にはエラーが、やはり10,000XYM必要。
    - ハーベスト委任費用（基本はハーベストの25%。~~NGLノードなど~~ 設定により0%としているノードも存在）
    - 自身のハーベストを、自身の構築したノードにて行うには、やはり10,000XYMと最低一度のXYM送信とリンクコマンドの実施が必要。もちろん別ノードに委任する選択も可能。そのへんは自由。

| 保有数 | 大家（入居者ハーベストからの賃料） | 自身のハーベスト | リンクコマンドの実施 |
|:-:|:-:|:-:|:-:|
| 0XYM | 可能 | 不可 | 不要 |
| 10,000XYM以上 | 可能 | 可能 | 必要 |

***

前回の記事ではテストノード構築までの手順を記載しました。本記事では実際にリモートハーベスティング設定の手順です。

※本記事は、[さくらのVPSでNEM Symbol のテストネットノードを起動](https://qiita.com/curupo/items/12357755b9ac0a23ae22) の続きです。

#### NEM Symbol のハーベスティングは3種類あります

* ノードを建て運用してハーベスティングする方式
    * ローカルハーベスティング（旧方式で非推奨）
    * リモートハーベスティング（新方式で推奨）
        * https://docs.symbolplatform.com/ja/concepts/harvesting.html#local-harvesting
* 委任ハーベスティング
    *  ハーベスティングしているノードに間借りする方式
        * https://docs.symbolplatform.com/ja/guides/accountlink/activating-delegated-harvesting.html

NEM/NIS1(XEM) では、スーパーノード以外はあまり儲かる報酬体系と額ではありませんでしたが、NEM/Symbol(XYM)は報酬体系が見直され、なかなかに儲かる、らしいです。

【参考】
NEM Catapultの新しいコンセンサスアルゴリズム「PoS+」とは何か？ 
https://www.cryptostream.jp/nem-catapult-posplus-10486/


ということで、サーバーエンジニアはどしどしノードを建てまっしょい。

ちなみに、2020/11/05時点で 1XEM = 約10円です。で、~~2020年12月~~ ~~2021年1月14日~~ 2021年3月12日にスナップショットされて 1万XEM を持ってたら、1万XYM をただで貰えるので、その1万XYMを、自身の建てたノードのウォレットに入れておけば、ま、要は10万円から大家をやれるってことですね。銀行に100万円寝かしておくくらいなら10台ぐらいノード建てちゃいましょう！　いや、3万XYMを3台のノードにしておくのが無難？　とまあ、妄想はこの辺にしておきましょう。

#### 手順概要

ブロックチェーンデータの同期が完了していないと symbol-bootstrap link コマンドでエラーになりますので、前提条件として同期が完了していること。そして、ノードに生成されたウォレットにて送金を実施済みになっている必要があります。

- VPS性能向上のためスワップ設定を2GB → 8GBに変更します
- fast-sync スクリプトを実施してデータを同期させます（テストネットのみ）
- テストネットがリセットされたようで、トランザクションデータが膨大になるまでは、このパートは実施しなくてもよいでしょう。
- 蛇口から 10,000XYM を2回、ノードのメインウォレットに送付します（もちろんテストネットのみ。メインネットでは取引所で手に入れてください）
- デスクトップウォレット等でアカウントログイン後、メインウォレットの秘密鍵をウォレットにアクセスし、20,000XYM が届いていることを確認、自身のアドレスに0XYMを送付します。トランザクションが承認され完了するまで待ちます。
- 最後に symbol-bootstrap link コマンドを実行します。

#### スワップ設定

VPSメモリ8GBプランでも基本設定だとデータ同期の動作が不安定になりました。
スワップ設定をノードの性能を向上させておきましょう。

```
$ sudo su -
# fallocate -l 8G /var/swapfile
# chmod 600 /var/swapfile
# mkswap /var/swapfile
# swapon /var/swapfile
# echo '/var/swapfile none swap defaults 0 0' >> /etc/fstab
# exit
```

参考
https://note.com/ooba8686/n/n19a05df6bf25?magazine_key=m6c64b6857010
https://nemlog.nem.social/blog/49345

#### fast-sync を実施（テストネットのみ）

現状、テストネットを通常の方法で同期をしようとしてもこれまでのテストデータが負荷試験など繰り返してきたため膨大なトランザクションデータ量となっております。そのためデータ同期がノードへかなりの負荷をかけていると思われます。そのためかスペックが低いとapi-brokerがエラーを起こすようになり、最終的に同期ができなくなる症状が発生します。（16GBのVPSなら回避できるかも？）

```
$ symbol-bootstrap healthCheck
2021-02-26T21:44:41.883Z warn     Container api-broker is NOT running YET.
```

よって、この症状を回避するため、以下のサイトを確認し実施してください。

有志の方が開発してくれた同期スクリプト
https://qiita.com/ryosasa/items/7313fc7d86c30e9c5d8f

```
$ symbol-bootstrap stop
(fast-sync を実施)
$ symbol-bootstrap run -d
```

自身のノードのIPアドレスがリストにあるか確認し、ブロック高が最新になっているか確認します。

メインネット　https://symbolnodes.org/nodes/
テストネット　https://symbolnodes.org/nodes_testnet/

#### ノードのウォレット設定は以下で確認

```
$ cd ~/symbol-bootstrap/target
$ symbol-bootstrap decrypt --password <秘密鍵を表示するため設定したパスワード> --source addresses.yml --destination plain-addresses.yml

$ less plain-addresses.yml
---
main:
    privateKey: <構築したノードのウォレットの秘密鍵（プライベートキー）>
    publicKey: <構築したノードのウォレットの公開鍵（パブリックキー）>
    address: <構築したノードのウォレットアドレス>
(後略)
---

$ rm plain-addresses.yml    # 秘密鍵の書かれたファィルは消しておきましょう
```

#### 蛇口からXYMを送付（テストネットのみ）

※メインネット上では当然蛇口はありません。スナップショット時にXEMを持っていればXYMを手に入れられているはずです。スナップショットに参加されていない方は取引所で手に入れてそちらから構築したノードのウォレットに送付することになります。

~~ローカルハーベスティング~~ リモートハーベスティングにはメインアカウントに10,000XYM保有しておく必要があります。また、そのアドレスで一度はXYMを送金しておかないといけないため、都合2回蛇口をひねり計20,000XYMをもらっておきましょう。送付先は<構築したノードのウォレットアドレス>宛です。

蛇口サイト
http://faucet.testnet.symboldev.network/


![clip03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50227/f46e9639-8597-9cdf-be48-bc1b34ad2ff1.jpeg)

エクスプローラー

- テストネット
    - http://explorer.testnet.symboldev.network/
    - アドレスの状況を確認方法
        - http://explorer.testnet.symboldev.network/accounts/<構築したノードのウォレットアドレス>
- メインネット
    - http://explorer.symbolblockchain.io/
    - アドレスの状況を確認方法
        - http://explorer.symbolblockchain.io/accounts/<構築したノードのウォレットアドレス>

トランザクション項目に、蛇口からひねった（XYMトークンを送信した）履歴が残っています。

#### 0XYMのテスト送金

デスクトップウォレットを利用して自分宛てにテスト送金します。
ごく少額の送金手数料が発生します。
これはウォレットが本当に生きているか確認するためのひと手間です。

デスクトップウォレットの入手先
https://docs.symbolplatform.com/ja/wallets.html

![clip003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50227/037c97b6-137e-d56c-bc28-3b5cd1b59f03.png)


※デスクトップウォレットはアカウントとウォレットが1対多の関係になっており、まずアカウント作成をしてログインし、ログイン後にウォレットを複数扱う方式を取っています。
その際に、ニーモニックや秘密鍵を入力しアカウントを追加します。

#### リンクコマンドを実行

最後にテストネットでもメインネットでもリンクコマンドを実施します。

```
$ symbol-bootstrap link
                            _               _           _                       _           _
  ___   _   _   _ __ ___   | |__     ___   | |         | |__     ___     ___   | |_   ___  | |_   _ __    __ _   _ __
 / __| | | | | | '_ ` _ \  | '_ \   / _ \  | |  _____  | '_ \   / _ \   / _ \  | __| / __| | __| | '__|  / _` | | '_ \
 \__ \ | |_| | | | | | | | | |_) | | (_) | | | |_____| | |_) | | (_) | | (_) | | |_  \__ \ | |_  | |    | (_| | | |_) |
 |___/  \__, | |_| |_| |_| |_.__/   \___/  |_|         |_.__/   \___/   \___/   \__| |___/  \__| |_|     \__,_| | .__/
        |___/                                                                                                   |_|
2021-03-02T05:32:53.027Z info     Linking nodes
2021-03-02T05:32:53.036Z info     Connecting to node http://localhost:3000
2021-03-02T05:32:55.485Z info     Node's minFeeMultiplier is 100
2021-03-02T05:32:55.513Z info
2021-03-02T05:32:55.513Z info     Creating transactions for node: api-node, ca/main account: TCFD4TXOX5LWP3PDZE3QN27NHWKJ7JXCYXKXROQ
2021-03-02T05:32:55.514Z info     Creating Link AccountKeyLinkTransaction from Node api-node to Remote public key 386A11883311DC152E7C74504B7B38C1ADCC04FBE2AF20A492C9A9BE05215769.
2021-03-02T05:32:55.514Z info     Creating Link VrfKeyLinkTransaction from Node api-node to VRF public key FEF998420A6C3A97DD2DEBB8A9CB86654CAE5BD20D6EE3BD0D4273A9F56B371D.
? Do you want to announce 2 transactions for node api-node Yes
2021-03-02T05:32:58.780Z info     Announcing Aggregate Complete Transaction hash CA69F30ABD1E073205CB8C46F27922C69F77F096536114B8AEBCD5AC0721A4D0
```


しばらく待つとデスクトップウォレットのダッシュボードに、アグリゲートコンプリートと表示されます。エラーが発生する場合は、以下を確認してみてください。

- ノードのブロック高が最新ブロックまで追いつき同期が完了しているか
- メインウォレットから一度は送金をしているか
- メインウォレットに 10,000XYM 保有している状態か（リンクコマンドが済んだら他のウォレットに移動させても問題はないようです）

![clip001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50227/059de457-6306-28a8-fdb1-bc90d8ff1663.jpeg)

エクスプローラーにも表示されています。

![clip002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50227/483e88b7-8672-24df-6ccb-a62642e16502.jpeg)


あとは、ハーベストされるのを待つのみ。果報は寝て待て。

エクスプローラー画面の最下部に「ハーベスト履歴」が表示される、はず。。
ツイッターで観測したところ、20,000XYM程度だと初ハーベストまで数日から1週間はかかる感触です。
当然ではありますがXYMの保有量が多いウォレットがハーベストしやすくなります。また、実際のメインネットワークがどれくらい使われるかといった部分も影響します。

~~【重要】bootstrap v0.4.4 での検証ここまで。~~

~~実は、この手順で symbol-bootstrap link コマンドまでは成功しているものの、いまだハーベストに成功していません。単にインポータンスが低いためなのか。引き続き調査しています。~~

一日一回、エクスプローラーで自身のアドレスをチェックしていたところ、、

![Screenshot_2021-03-08 Symbol Block Explorer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50227/4f3ee8e0-8adc-111c-f6f9-0cd998229c89.png)

おっしゃ！　8日目で初ハーベスト！
やはり数日から一週間程度かかるようですね。

ということで、ハーベストし始めましたヨ！
これであなたも GoTo 大家ァ！！

最後に。

ここまでたどり着けたかた、大変にお疲れさまでした。
ですがですが、ここはまだ大家としての運用のお仕事はなんとか始まったに過ぎません。
自身のノードに入居しハーベストの委託してくださっている入居者様は、今、何人なのだろう？　とか、入居者がハーベストしたらそこから賃料（ハーベストの委託報酬手数料）はどう徴収するの？　とか、様々な疑問が湧いてくるでしょう。
さぁこれからです。以下のサイトで、最新の技術情報を追っていきましょう～

- https://nem2.slack.com/
- https://tanuson.slack.com/
- https://nemlog.nem.social/
- https://docs.symbolplatform.com/
- https://forum.nem.io/

### 参考URL

【ローンチ直前版】Symbolテストネットノードで自前でハーベスティング
https://nemlog.nem.social/blog/57098

ローカルハーベスティング - 公式サイト
https://docs.symbolplatform.com/ja/concepts/harvesting.html