Symbol ノードの構築方法
目次
Symbol ノードについて
ノードの特徴とサーバの基本スペック
Symbol Node 構築手順
Tips
Symbol ノードについて
ブロックチェーンのノードは、取引データを時系列順に記録し、過去の内容を確認できます。分散型台帳として複数のノードが同じデータを共有しており、誰でも取引データなどを閲覧できます。Symbol のブロックチェーンは、世界中のノードネットワークによって構築・維持されています。ノードはトランザクションを実行し、検索を行い、そのデータをブロック単位で台帳に記録します。
ノードの特徴とサーバの基本スペック
Symbol の ノード は以下の3つの種別があります。順に説明します。
Peer Node
API Node
Voting Node
Peer Node
Harvester ノードとも呼ばれ、ネットワークを支えています。主にトランザクションを検証して、ブロックチェーンに新しいブロックを追加し、その過程で手数料を徴収します。
API Node
API ノードの主な役割は、データを MongoDB に読み取り可能な形式で保存することです。
API ノードは アグリゲートボンドトランザクション の連署名を集める役割も果たし、それが完成したときにだけ処理されます。
※ 1つのノードで Peer Node と API Node の両方を同時に稼働させることが出来ます。その場合はDual Node と表現されます。
Voting Node
Symbol では ファイナライズを実現する手段として Voting Node が用意されています。 Voting Node は 300万xym を保有したユーザーのみが構築できます。ブロックがファイナライズされるとブロックが確定されたとみなされます。Symbol におけるファイナライズは pBFT を元に実装され、 67% 以上の Voting Node による承認を経てそれが行われます。例えば金融機関がブロックチェーン上で決済処理を実装する場合、生成されたブロックが変更されない事を保証する必要があります。ファイナライズを活用する事で金融機関はブロックが確定された事を知る事ができ、決済処理を円滑に実装する事ができます。
なお、Symbol Blockchain において Voting Node はオプションです。新規にネットワークを構築する際にネットワークの設定にて OFF にする事ができ、1つのプラグインの位置付けとなっています。ファイナライズが停止されていても、PoS+ のロジックに基づきブロックは生成され続けます。ファイナライズのユースケースとして、Blockchain 上で事業を行いたい組織や業界は Voting Node を運用し、管理する事で、 堅牢なPoS+ チェーン上に更にファイナライズ機能を起動させ、業界内等でブロック確定タイミングの共通認識を用いる事ができ、運用し易いパブリック・コンソーシアムチェーンを実行する事ができます。
Symbol Node 構築手順
以下環境のサーバーを手配下さい。なお、サーバーの運用に不安がある場合は、 Allnode というサービスの利用を検討下さい。Linux OS は Debian 以外のディストリビューションも利用可能ですが、以下に記載するサンプルスクリプトは Debian の前提でサンプルコードを記述しております。
必須ハードウェアスペック以上のサーバー(別表)
Debian OS 10 以上
PORT 80, 443, 3000, 3001, 7900
(別表)必須ハードウェアスペック
以下に必須要件を示します。
Minimum Specs | Peer Node | API Node | Dual / Voting |
---|
CPU | 2 Core | 4 Core | 4 Core |
RAM | 8 GB | 16 GB | 16 GB |
Disk Size | 500 GB | 750 GB | 750 GB |
Disk IOPS | 1500 IOPS SSD | 1500 IOPS SSD | 1500 IOPS SSD |
次の表に推奨要件を示します。これらを使用すると、よりスムーズなエクスペリエンスが提供され、ある程度の将来的な保証が提供されます。
Recommended Specs | Peer Node | API Node | Dual / Voting |
---|
CPU | 4 Core | 8 Core | 8 Core |
RAM | 16 GB | 32 GB | 32 GB |
Disk Size | 500 GB | 750 GB | 750 GB |
Disk IOPS | 1500 IOPS SSD | 1500 IOPS SSD | 1500 IOPS SSD |
普段サーバーを構築されない方への注意点
必ず以下のセキュリティ対策を行ってからノード構築を行ってください。セキュリティ対策が不十分だと自分以外の人に勝手にアクセスされる可能性があります。
ファイアーウォールの設定
SSH通信の場合は root ログインの禁止し、かつ公開鍵での認証を行う
PORT は 22, 80, 3000, 3001, 7900 以外は原則閉じて下さい
ポートの用途
22: SSH 接続。作業用
80: Let’s Encrypt + Symbol Node List
3000: HTTP REST Gateway
3001: HTTPS REST Gateway
7900: catapult-client によるノード間の通信
サーバーの初期設定
サーバーに接続し、初めにサーバーに操作用のアカウントを作成します。
adduser symbol
usermod -aG sudo symbol
su - symbol
必要なソフトウェアのインストール
以下スクリプトを実行し、環境を構築します。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/ymuichiro/symbol-node-builder/main/scripts/install.sh)"
通常以下の作業を必要としますが、上記スクリプトにより自動的に設定を実施します。
nvm, node.js 16, npm のインストール
docker, docker-compose のインストール
npm による symbol-bootstrap のインストール
~/symbol-bootstrap/**
フォルダの作成
Symbol-Bootstrap の起動とセットアップ
以下のコマンドにより Symbol-bootstrap を起動します。
cd ~/symbol-bootstrap
symbol-bootstrap wizard
ネットワーク選択 どのネットワークでノードを建てるか選びます。
Select a network: (Use arrow keys)
❯ Mainnet Node
Testnet Node
Bootstrap Local Network
Custom Network Node ('custom-network-preset.yml' file and 'nemesis-seed' folder are required)
2. ノードの種類を選択 ノードの種類を選びます
Select an assembly: (Use arrow keys)
❯ Dual Node
Peer Node
Api Node
Demo Node. A dual node that includes a Faucet and Explorer.
3. 秘密鍵を扱うのでオフラインを推奨しています。VPSなどはインターネットと繋がっていないと使えないので、Yを押して進みます。
? Symbol Bootstrap is about to start working with sensitive information (private keys) so it is highly recommended that
you disconnect from the network before continuing. Say YES if you are offline or if you don't care. (Y/n)
4. Symbol bootstrap で使用するパスワードを入力します。
Enter the password used to encrypt and decrypt custom presets, addresses.yml, and preset.yml files. When providing a
password, private keys will be encrypted. Keep this password in a secure place!
5. ハーベスト設定を行うには4つのアカウントが必要です。そのうちの main アカウントを指定します。新しく作成するか、既存アカウントの秘密鍵を入力します。
? How do you want to create the Main account: (Use arrow keys)
❯ Generating a new account
Entering a private key
Enter the 64 HEX private key of the Main account (or press enter to select the option again).
6. 5 で秘密鍵を入力した場合、 アカウントのアドレスが表示されます。相違が無ければ y を選択します。
? Is this the expected address TCDNP*******************55KCQ to used as Main account? (y/N)
7. main と同じく Transport account も指定します。
? How do you want to create the Transport account: (Use arrow keys)
❯ Generating a new account
Entering a private key
8. VRF アカウントも同様です。
? How do you want to create the VRF account: (Use arrow keys)
❯ Generating a new account
Entering a private key
9. Remote アカウントも同様です。
? How do you want to create the Remote account: (Use arrow keys)
❯ Generating a new account
Entering a private key
10. HTTS の設定を行います。2番目の Automatic ~ を 選択すると自動でHTTPS設定が可能です。
Your REST Gateway should be running on HTTPS (which is a secure protocol) so that it can be recognized by the Symbol Explorer.
? Select your HTTPS setup method: (Use arrow keys)
❯ Native support, I have the SSL certificate and key.
Automatic, all of your keys and certs will be generated/renewed automatically, using letsencyrpt.
None
11. ホスト名を入力します。IP アドレス、もしくはドメインを指定します。
? Enter the public domain name(eg. node-01.mysymbolnodes.com) that's pointing to your outbound host IP This value is
required when you are running on HTTPS!
12. フレンドリーネームを入力します。
Enter the friendly name of your node.
13. 4種類あるアカウント(キー)のうち何種類暗号化するか選択します。
? Select the type of security you want to use: (Use arrow keys)
PROMPT_MAIN: Bootstrap may ask for the Main private key when doing certificates upgrades. Other keys are encrypted.
❯ PROMPT_MAIN_TRANSPORT: Bootstrap may ask for the Main and Transport private keys when regenerating certificates. Other
keys are encrypted. Recommended for most nodes
ENCRYPT: All keys are encrypted, only password would be asked
15. 投票ノードを登録するか選択します。 300万 xym を保有していなければ投票ノードになることはできません。
? Are you creating a Voting node? (y/N)
全ての質問に答えると ~/custom-preset.yml
が完成します。デフォルトでは beneficiaryAddress が指定されていません。ファイルを開き、正しい値を指定します。以下にサンプルを示します。
assembly: dual
preset: mainnet
privateKeySecurityMode: PROMPT_MAIN_TRANSPORT
nodes:
-
host: example.org
maxUnlockedAccounts: 30
beneficiaryAddress: ${your-symbol-address}
voting: false
friendlyName: ${your-name}
mainPrivateKey: ${your-node-main-privatekey}
vrfPrivateKey: ${your-node-vrf-privatekey}
remotePrivateKey: ${your-node-remote-privatekey}
transportPrivateKey: ${your-node-transport-privatekey}
httpsProxies:
-
excludeDockerService: false
host … ノードに割り当てているIPアドレス、もしくはドメインを入力します。
maxUnlockedAccounts … ノードへ委任可能なアドレス数の上限を指定します。
beneficiaryAddress … ノードが受け取ったハーベティング報酬の支払い先アドレスを指定します
friendlyName … 任意のノードの名前を指定します。
Symbol-Node の起動
以下のコマンドを実行し、~/custom-preset.yml
を読み込ませ、 symbol-bootstrap を起動します。
cd ~/symbol-bootstrap
symbol-bootstrap config -p mainnet -a dual -c custom-preset.yml
symbol-bootstrap start -d
symbol-bootstrap healthCheck
なお symbol-bootstrap による起動、停止コマンドの一覧を以下に記載します。
symbol-bootstrap start -d
初めて起動する際にのみ指定します。
symbol-bootstrap run -d
2回目以降の起動時に指定します。
symbol-bootstrap stop
一時停止する際に指定します。 run コマンドで再開できます。
※ -d
を指定するとバックエンドで起動させる事が出来るようになります。symbol-bootstrap がエラーとなり、debug をしなければならない時を除いて原則 -d
は付与下さい。
本作業により symbol-bootstrap の新規構築は完了となります。2023年3月時点では新規に symbol-bootstrap を起動し、ブロックの全ての同期が完了するまで約 1日半〜2日程必要とします。委任者の募集を行う場合は全てのブロックが同期された段階にて実施しましょう。
以降、各種 tips を記載致します。
Tips
ノード証明書の更新
ノード証明書はノードを建てて約1年後に期限切れになります。ノード証明書を更新しないノードは無効になるので注意してください。
healthCheck でノードSSL証明書の期限を確認する
symbol-bootstrap healthCheck
> he node.crt.pem certificate for node node will expire on Aug 2 14:30:34 2023 GMT. No need to renew it yet.
証明書を更新する
symbol-bootstrap renewCertificates
Symbol Node list で ノードの情報を表示する
手数料を支払っての登録(推奨)
コメント登録 ページへアクセスし、掲載情報を作成して、10xym(2023/03/09時点の手数料額)を支払う事で反映されます。
ノード上に nodeSetting.json を設置しての登録
手数料不要にて指定することができます。サーバーを自前で保有し、サーバー上で設定が可能な方は本方法を選択出来ます。以下の手順についてやり方に自身のない場合は 1 の手順をお勧め致します
設置方法
ノードの以下のパスへコンフィグファイルを設置します
symbol-bootstrap は稼働中 80, 443 ポートも listen されています。よって以下、もしくは同等の操作をする必要があります。
※ 本手順は symbol-bootstrap のアップデートや preset の更新時に docker-compose.yml
ファイルが上書きされてしまう為、都度再登録が必要となります。
※ Allnodes をご利用の方は 2 は利用できません
MongoDBのインデックス見直し
以下に参考記事を掲載します
custom-preset.yml を更新したとき
symbol-bootstrap を運用しているうちに、custom-preset.yml
を変更する事があります。その際にはファイルの更新後、以下のように実行し変更を反映する必要があります。
symbol-bootstrap stop
symbol-bootstrap config -p mainnet -a dual -c custom-preset.yml --upgrade
symbol-bootstrap compose --upgrade
symbol-bootstrap run -d
ノードのエラー発生時原因の確認方法
何らかの原因でノードがダウンしたとき、エラー原因を確認するには幾つかの方法があります。
symbol-bootstrap のログ出力を確認する
symbol-bootstrap を起動する際に、-d
オプションを除外する事でログを確認しつつ起動する事ができます。以下の通り実行する事でログを閲覧する事ができます。
symbol-bootstrap run
docker のログ機能を利用する
1 の手順は問題として全てのコンテナのログが出力される為、量が膨大です。以下のコマンドを実行する事で障害の発生しているコンテナを確認する事ができます。
symbol-bootstrap stop
symbol-bootstrap run -d
docker ps -a
なお、正常な場合は以下のような出力となります。サンプルとして記載します。
symbol@xxxxxxxxxxxxxxxxxxx:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8d44313c93d6 steveltn/https-portal:1.19 "/init" 40 hours ago Up 40 hours 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:3001->443/tcp, :::3001->443/tcp https-proxy
71fa6d455cf6 symbolplatform/symbol-server:gcc-1.0.3.5 "/bin/bash /symbol-c…" 40 hours ago Up 40 hours 0.0.0.0:7900->7900/tcp, :::7900->7900/tcp node
542ca6019607 symbolplatform/symbol-server:gcc-1.0.3.5 "/bin/bash /symbol-c…" 2 days ago Up 40 hours broker
5b6765426fd2 symbolplatform/symbol-rest:2.4.2 "docker-entrypoint.s…" 2 days ago Up 40 hours 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp rest-gateway
19c9ac8edce9 mongo:4.4.3-bionic "docker-entrypoint.s…" 2 days ago Up 40 hours 27017/tcp db
もし STATUS が Exec(0) となっているコンテナがある場合、そこでエラーが発生しています。該当コンテナのみログを確認する場合は以下の通り実行します。${CONTAINER ID} は Exec(0) と出力されたコンテナのIDを指定します。
docker logs ${CONTAINER ID}
リンク