手動による Symbnol ノードの立ち上げ

このガイドでは Symbol Bootstrap を 使用せず に Symbol のネットワークへ参加するために、ノードをセットアップする方法を説明します。

Symbol Bootstrap は Symbol ノードを 素早く立ち上げる のにとても便利なツールです。しかし、すべてのシナリオで有効 (または許可) されるとは限らない、 Dockernode.js の技術に依存しています。 このガイドでは遠回りをして Symbol ノードを 手動 で立ち上げる方法を示します。Symbol Bootstrap を使用する場合は こちらのガイド を参照してください。

次のセクションでは Peer ノード を構築する方法について説明し、その次のセクションではノードを拡張して API ノード に変更します。

注釈

以下の手順は Linux でのみ動作確認をしています。

Peer ノードのビルド

サーバのビルド

Catapult server のバイナリを ビルド するために、 手動 または Conan を使用したインストラクションに従います。

キーの生成

Symbol ノードは正しく機能するために、複数の キー を必要とします。これらのキーは通常では ランダムに生成 されるので、次の手順では、使用するものをいくつか作成していきます。

この手順はセキュリティを強化するためにオフラインマシンで実行します。

Main, Remote, VRF

前セクションで作成した _build ディレクトリ内から、次のコマンドを実行します:

./bin/catapult.tools.addressgen --count 3 --network public

これにより、次のような 3つの キーペア が出力されます:

address (public): NDPPBHSMLVEU75DNUMFX6GWPTGB6PP6AFQU7WSY
   address decoded: 68DEF09E4C5D494FF46DA30B7F1ACF9983E7BFC02C29FB4B
      public key: 1E886BA00B4F85DBC0B31DBB78DADFAA29945DF7290DB7A4243D94864483C627
      private key: 3DDDC333029BC8ACDB460435BBC71041D460B911725B03D6F93805521AAD60CB

各ブロック (上記で示したブロック) は 秘密鍵公開鍵 で構成されるキーペアと アドレス です。

後で使用するために 一時テキストファイルへそれら全てをコピーして キーペア Main, Remote ,**VRF** にラベルを付けます。

注釈

If you already have any of these keys, you can use them instead of the randomly-generated ones.

The most relevant scenario is when using a main account opted-in from a NIS1 account. In this case you can directly use the key obtained in the opt-in process as your Main key instead of the randomly-generated one.

投票

If your node is to be a voting node it must have linked a voting key for the period in which you intend to vote. This is interesting as voting nodes receive voting rewards.

The generation of the voting key, though, is a bit more complex than the previous ones:

  1. Still from within the _build directory create another directory called votingkeys.
  1. 投票キーの作成

    Voting keys are different from the other keys in that they have a period of validity, for example. They are only valid from a Start Epoch to an End Epoch (see side box).

    Nodes are only eligible as voters if they are linked to a valid voting key for the current blockchain epoch, so remember to renew your voting key periodically.

    To help you with that task, you can have up to 3 linked voting keys, with different periods, so you can easily renew one key while there’s still another one active (you will need to unlink an older key to be able to link more than 3 keys).

    A voting key is created using catapult.tools.votingkey and providing its period of validity (note you do not use catapult.tools.addressgen as before):

    bin/catapult.tools.votingkey --output votingkeys/private_key_tree1.dat \
                                 --startEpoch 100 --endEpoch 460
    

    This creates a file named votingkeys/private_key_tree1.dat and prints the voting key on the terminal. As your voting keys expire and you create new ones, increase the number on the file name.

    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: ****************
    

    Copy the voting key public key into the temporary text file where you keep the rest of the keys, label it Voting and save it for later.

設定

Symbol is highly customizable and this means there are a lot of parameters that can be adjusted to suit your node’s needs. Some of these parameters are network-related and must match the rest of nodes in the network (for example currencyMosaicId) whereas some others are node-related and you can set freely (for example friendlyName).

You can edit these files manually (Take a look at these templates to know how they look) but it is more convenient to use the Symbol Node Configurator tool as shown next.

The Configuration step can be performed on an offline machine for added security.

  1. 「」前提条件」「

    • Python 3 のインストール
    • OpenSSL (Linux での例 sudo apt install openssl) のインストール
  2. symbol-node-configurator のインストール

    • symbol-node-configurator.zip をダウンロードして展開します。他にも GitHub リポジトリ をクローンすることもできます。

    • Move into the symbol-node-configurator directory and install the tool’s requirements by running:

      python3 -m pip install -r requirements.txt
      
  3. 証明書の作成

    • certificates フォルダを作成して、そこへ移動します。
    • Create a text file named private.main.txt and put the Main account private key inside.
    • 証明書生成スクリプト をダウンロードして実行します。
    • private.main.txt の削除
    • 親フォルダへ戻る

    You should now have at least the following files in the certificates folder: ca.pubkey.pem, ca.crt.pem, node.full.crt.pem, node.crt.pem and node.key.pem.

  4. ハーベスタ と VRF キーファイルの作成

    • Create a file named private.harvesting.txt and put the Remote private key inside.
    • Create a file named private.vrf.txt and put the VRF private key inside.
  5. 設定ツールの実行

    The node configurator tool is called generator.py and it accepts a number of parameters depending on the kind of node you want:

    パラメタ 説明
    --mode (必須) ノードタイプ。 api, peer, dual のみ許可されます。
    --harvesting (Optional) To create a harvesting node. The Remote key will automatically be used so that リモートハーベスティング is enabled by default.
    --voting (Optional) To create a voting node. If you enable this copy the private_key_tree1.dat file you created above into this directory.
    --output (オプション) 設定を保存するフォルダ。

    例:

    python3 generator.py --mode dual --harvesting --voting --output settings
      i     | extracting nemesis seed
      i     | preparing base settings
      i     | turning on harvesting
      i     | turning on voting
      i     | extracting mongo scripts
      i     | copying certificates
      i     | moving private_key_tree1.dat
    

    This command will produce all the required node configuration files in the settings directory and you need to copy them to _build, in the machine where your node will run:

    • settings/resources_build/resources へコピーします。
    • settings/certificates_build/certificates へコピーします。
    • Copy settings/nemesis/seed to _build/seed (Omit the nemesis part).
  6. config-user.properties を編集

    • _build ディレクトリへ戻ります。

    • Edit resources/config-user.properties so that it points to the right places:

      [storage]
      
      seedDirectory = ../seed
      certificateDirectory = ../certificates
      dataDirectory = ../data
      pluginsDirectory = ../lib
      votingKeysDirectory = ../votingkeys
      
  7. config-node.properties を編集

    Edit resources/config-node.properties to customize the node. Learn more about the available properties in the ノードのプロパティ設定 guide.

    The most common ones are in the [localnode] section:

    プロパティ 説明
    host IP アドレスまたはノードのドメインネーム
    friendlyName 表示用のノード名
    version ノードで使用されている catapult-server のバージョン。現在のものを使用するには、空のままにします。
    roles 次の値のコンマ区切りのリスト: Peer, Api, Voting, IPv4, IPv6

    例:

    [localnode]
    host = <YOUR_NODE_IP>
    friendlyName = myPeerNode
    version = 1.0.0.0
    roles = IPv4,Peer
    

サーバを起動

Create one last folder:

mkdir data

最後に、サーバに火入れします!

cd bin
./catapult.server

You should see a lot of debug output while the node starts synchronizing with the rest of the network:

... peer returned 42 blocks (heights 2 - 43)

The node can be stopped by pressing Ctrl-C and restarted simply by running catapult.server again.

If you see no error messages, your server is up and running and you can continue with this guide.

API ノードのビルド

Catapult サーバーを実行したら 追加サービス を追加して API ノードに変えることができます:

../../_images/rest-detail1.png

As shown in the diagram above, besides the Catapult Server you will also need:

  • データベース は REST データを保持します。
  • A Catapult Broker serializing accesses to the database.
  • A REST gateway accepting client requests and turning them into server commands or database queries.

次のセクションでは、各サービスのインストール方法について説明します。それらのすべてが必要になります。

Move to the _build folder created while building the server and create any additional folders requested in the next steps inside _build.

データベースの実行

  1. インストール MongoDB (バージョン 4.4 以上)

    It is recommended to follow the program’s own installation instructions, and NOT install from your distro’s packages.

  2. データファイルを保存するディレクトリを作成して **データベースを実行**します:

    mkdir dbfiles
    mongod --dbpath=dbfiles --wiredTigerCacheSizeGB 2 --bind_ip 127.0.0.1
    

    ノードが実行されている限り、 mongod を実行し続けます。

  3. データベースアクセスの最適化のために インデックス構築 をします。

    The catapult-server repository you cloned to build the server in the first step contains a folder with mongo scripts. Run this one:

    mongo 127.0.0.1/catapult < ../scripts/mongo/mongoDbPrepare.js
    

    この手順を実施しないと、データベースのパフォーマンスが許容できないほど遅くなります。

ブローカーの起動

  1. resources/config-database.properties編集 して databaseUri127.0.0.1:27017 に向けます:

    [database]
    
    databaseUri = mongodb://127.0.0.1:27017
    databaseName = catapult
    
  2. ブローカーの起動:

    bin ディレクトリへ移動して実行します:

    ./catapult.broker ..
    

    ノードが実行されている限り、ブローカーを実行し続けます。

REST ゲートウェイのビルドと実行

  1. catapult-rest リポジトリを クローン して 依存関係をインストール します:

    (Going back to the _build directory first)

    cd ..
    git clone https://github.com/nemtech/catapult-rest.git
    cd catapult-rest
    npm install -g yarn
    ./yarn_setup.sh
    
  2. REST ゲートウェイの ビルド :

    cd rest
    yarn build
    
  3. REST ゲートウェイの 設定 :

    すべての設定は resources/rest.json ファイルに記述されます。

    このファイルを編集 して、次のプロパティが正しいファイルを指していることを確認します。

    プロパティ ファイル デフォルトの場所
    tlsClientCertificatePath node.crt.pem _build/certificate/
    tlsClientKeyPath node.key.pem _build/certificate/
    tlsCaCertificatePath ca.crt.pem _build/certificate/
    networkPropertyFilePath config-network.properties _build/resources/
    nodePropertyFilePath config-node.properties _build/resources/

    絶対パスの使用 例:

    {
       "host": "127.0.0.1",
       "port": 7900,
       "timeout": 1000,
       "tlsClientCertificatePath":
             "/home/symbol/catapult-server/_build/certificate/node.crt.pem",
       "tlsClientKeyPath":
             "/home/symbol/catapult-server/_build/certificate/node.key.pem",
       "tlsCaCertificatePath":
             "/home/symbol/catapult-server/_build/certificate/ca.crt.pem",
       "networkPropertyFilePath":
             "/home/symbol/catapult-server/_build/resources/config-network.properties",
       "nodePropertyFilePath":
             "/home/symbol/catapult-server/_build/resources/config-node.properties"
    }
    
  4. REST ゲートウェイの実行:

    node _build/index.js resources/rest.json
    

    ノードが実行されている限り、REST ゲートウェイを実行し続けます。

確認

REST ゲートウェイが正しく機能している場合はポート 3000 でクエリを実行できます。 Catapult サーバー、ブローカー、MongoDB が正しく機能している場合、 REST が返却する値は他のブロックチェーンと正しく同期されたものになります。

ブラウザで次の URL を指定し、戻り値が期待される値と一致していることを確認します。

  • http://localhost:3000/node/info: サービスの状態

    {
       "status":{
          "apiNode":"up",
          "db":"up"
       }
    }
    
  • http://localhost:3000/chain/info: ネットワークへのノード接続

    {
       "scoreHigh": "0",
       "scoreLow": "11485261672816562840",
       "height": "161138",
       "latestFinalizedBlock": {
          "finalizationEpoch": 224,
          "finalizationPoint": 44,
          "height": "160560",
          "hash": "52D3B01920C695B9194FABD869804E4D2A18D9B5509E47B2C70B0E6C3E275E33"
       }
    }
    

    height フィールドは実際のブロックチェーン高と一致しなければなりませんが、ノードの初回起動時には、同期に時間がかかる場合があります。

最後に Symbol Explorer ページ を訪れて、あなたのノードが一覧 (30 秒毎に更新) に表示されていることを確認してください。