手動でSymbolノードアカウントのキーリンク


## symbol-cli のインストールと設定

```bash
npm i -g symbol-cli
```

プロファイルを設定します。

```bash
symbol-cli profile import --network TEST_NET --url http://localhost:3000 --default
```

```plaintext
✔ Enter a profile name: … TestNet
✔ Select an import type: › PrivateKey
✔ Enter your wallet password: … ********
✔ Enter your account private key: … ****************************************************************
```

- Enter a profile name: 任意のプロファイル名を入力
- Select an import type: PrivateKey を選択
- Enter your wallet password: プロファイル保護のためのパスワードを入力
- Enter your account private key: ノードのメインアカウントの**秘密鍵**を入力

プロファイルは`~/symbol-cli.config.json`に保存されます。

## ハーベストのためのリンク

### リモートキー

```bash
symbol-cli transaction accountkeylink --sync --action Link \
           --max-fee 100000 --mode normal
```

```plaintext
✔ Enter your wallet password: … ********
✔ Enter the public key of the remote account:  … ****************************************************************
```

- Enter your wallet password: プロファイルのパスワードを入力
- Enter the public key of the remote account: リモートアカウントの**公開鍵**を入力

リモートアカウントは、`resources/config-harvesting.properties`の harvesterSigningPrivateKey に設定しているアカウントです。

### VRF キー

```bash
symbol-cli transaction vrfkeylink --sync --action Link \
           --max-fee 100000 --mode normal
```

```plaintext
✔ Enter your wallet password: … ********
✔ Enter the public key to link:  … ****************************************************************
```

- Enter your wallet password: プロファイルのパスワードを入力
- Enter the public key to link: VRF アカウントの**公開鍵**を入力

VRF アカウントは、リモートアカウントは、`resources/config-harvesting.properties`の harvesterVrfPrivateKey に設定しているアカウントです。

## 投票キー

### ノード設定の変更

`resources/config-finalization.properties`を変更します。

- `enableVoting`を`true`に変更
- `unfinalizedBlocksDuration`を`0m`に変更

```properties:resources/config-finalization.properties
[finalization]

enableVoting = true
enableRevoteOnBoot = false

size = 10'000
threshold = 6'700
stepDuration = 4m

shortLivedCacheMessageDuration = 10m
messageSynchronizationMaxResponseSize = 20MB

maxHashesPerPoint = 256
prevoteBlocksMultiple = 4

unfinalizedBlocksDuration = 0m

treasuryReissuanceEpoch = 0

[treasury_reissuance_epoch_ineligible_voter_addresses]
```

`resources/config-node.proper`を変更します。

- `roles`に`Voting`を追加

```properties:resources/config-node.properties
[localnode]
...
roles = Peer,Api,Voting
...
```

`resources/config-user.properties`の`votingKeysDirectory`を確認。

```properties:resources/config-user.properties
[account]

enableDelegatedHarvestersAutoDetection = true

[storage]

seedDirectory = /opt/symbol-node/seed
certificateDirectory = /opt/symbol-node/certificates
dataDirectory = /opt/symbol-node/data
pluginsDirectory = /usr/local/catapult/lib
votingKeysDirectory = /opt/symbol-node/votingkeys
```

### 投票キーの生成

投票キーを保存するディレクトリを作成。

```bash
mkdir votingkeys
```

投票キー生成時に有効期間のエポックを設定します。最大は 360 です。
新しい投票キーを作成する場合は、別ファイル名で作成してください。

```bash
catapult.tools.votingkey --output votingkeys/private_key_tree1.dat \
                         --startEpoch 2730 --endEpoch 3090
```

```plaintext
Voting Key Tool
Copyright (c) Jaguar0625, gimre, BloodyRookie, Tech Bureau, Corp.
catapult version: 1.0.3.7 00387bf00 [HEAD]

Voting Key Tool Initializing Logging...

Initializing OpenSSL crypto functions
generating 361 keys, this might take a while
votingkeys/private_key_tree1.dat generated
verifying generated file
 saved voting public key: ****************************************************************
loaded voting public key: ****************************************************************
```

### 投票キーのリンク

```bash
symbol-cli transaction votingkeylink --sync --action Link \
           --max-fee 100000 --mode normal
```

```plaintext
✔ Enter your wallet password: … ********
✔ Enter the public key of the voting key account:  … ****************************************************************
✔ Enter the start point: … 2730
✔ Enter the end point: … 3090
```

- Enter your wallet password: プロファイルのパスワードを入力
- Enter the public key of the voting key account: 投票キー生成時に取得した投票公開鍵を入力
- Enter the start point: 投票キー生成時に設定した開始エポックを入力
- Enter the end point: 投票キー生成時に設定した終了エポックを入力

## ノードの起動

ノードの停止

```bash
sudo systemctl stop symbol
```

今までのデータは使用できないパターンが多い(原因は不明)ので、データ削除した方が無難です。

```bash
rm -rf data/*
rm -rf dbdata/*
cd mongo
sudo systemctl start symbol-db
mongosh catapult mongoDbPrepare.js
sudo systemctl stop symbol-db
```

ノードの開始

```bash
sudo systemctl start symbol
```