NCTLを使ったローカルネットワーク設定

NCTLは、ネットワーク/ノードコントロールの略です。NCTLは、CLIアプリケーションの1つでして、開発中に複数のローカルCasperネットワークのセットアップやコントロールが可能になります。多くの開発者は、ブロックチェーンへのデプロイ前に、比較的小さなテストネットワークを起動し、ローカルでテストを実施したいと考えます。コミュニティで標準化されたアプローチを採用することは、トラブルシューティングや問題の報告にも役立ちます。

前提条件

  1. Getting Started セクションに記載のある、CMake (version 3.1.4+)やCargo、そしてRustなどのツールのインストールを終え、開発環境が整っている
  2. オペレーティングシステムにPythonが入っていない場合は、Python3をインストール済みであることを確認してください
  3. NCTLの実行に必要なBash Shellも準備できている

仮想環境のインストール

ここでは、仮想環境にてNCTLを実行する方法を紹介します。システムレベルでのNCTLの実行も可能ですが、状況をよく理解している場合のみお勧めします。

まず、NCTLの実行に必要なツールを一通りインストールする必要があります。

Step 1. まず初めに、Pythonのパッケージマネージャーpipが必要となります。pipは、python.orgからPython3をインストールする際に付属しているものですが、まだお持ちでない場合は、以下の手順または全インストール手順に従ってインストールしてください。

MacOS用:

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ python3 get-pip.py

Linux用:

$ sudo apt install python3-pip

Step 2. 1つ以上のライブラリに対してコンパイルやリンクを行うプログラムpkg-configをインストールします。

MacOS用:

$ brew install pkg-config

Linux用:

$ sudo apt install pkg-config

Step 3. TLS(Transport Layer Security)やSSL(Secure Sockets Layer)プロトコルのツールキットであるlibssl-dev(Linux)またはopenssl(MacOS)をインストールしてください。これらのツールキットは、汎用の暗号ライブラリでもあります。

MacOS用:

$ brew install openssl

Linux用:

$ sudo apt install libssl-dev

Step 4. 開発者用コマンドラインツールとして提供されているgccおよびg++コンパイラも必要です(執筆時点でのバージョンは7.5.0)。

MacOS用:

$ xcode-select --install
$ gcc --version
$ g++ --version

Linux用:

$ sudo apt install build-essential
$ gcc --version
$ g++ --version

Step 5. 新しい仮想環境を構築し、アクティベートします。仮想環境に適用されるコマンドには、(env)というプレフィックス(接頭辞)が付きます。以下のコマンドを実行して設定してください。

MacOS と Linux 用:

$ python3 -m venv env
$ source env/bin/activate
(env) $

Step 6. 仮想環境内で、pipを最新バージョンにアップグレードします。

MacOS と Linux 用:

(env) $ pip install --upgrade pip

Step 7. コマンドラインJSONプロセッサであるjqをインストールします。

MacOS と Linux 用:

(env) $ pip install jq

Step 8. クロスプラットフォームのプロセスマネージャであるsupervisorをインストールします。

MacOS と Linux 用:

(env) $ pip install supervisor

Step 9. 設定用ファイルパーサであるtomlをインストールします。

MacOS と Linux 用:

(env) $ pip install toml


ネットワークの設定

これで、Casperノードのローカルネットワークのセットアップと実行の準備が整いました。

💡note

Github のウェブGUIにてダウンロードしたリポジトリでは、NCTLが正常に動作しない場合があります。CLI git clone コマンドを使用した上で機能をご利用ください。

Step 10. 作業ディレクトリ(WORKING_DIRECTORYと呼ぶ)に casper-nctl ソフトウェアをCloneします。

重要
NCTLツールは、パスが長すぎるとレポートしてくるため、作業ディレクトリのパスは短めなものを選んでください

MacOS と Linux 用:

$ cd <WORKING_DIRECTORY>
$ git clone https://github.com/casper-network/casper-nctl

Step 11. 次に、自分の作業ディレクトリにcasper-nodeソフトウェアをクローンします。

MacOS と Linux 用:

$ git clone https://github.com/casper-network/casper-node

Step 12. casper-client-rs ソフトウェアを自分のディレクトリにクローンします。

MacOS と Linux 用:

$ git clone https://github.com/casper-ecosystem/casper-client-rs

Step 13. casper-node-launcher ソフトウェアをworking directoryにCloneします。

MacOS と Linux 用:

$ git clone https://github.com/casper-network/casper-node-launcher

小規模なローカルネットワークを構築していることが前提ですが、nctl-assets-setupを実行する前に local config.tomldeploy_delay を減らすことで新しいブロック生成の処理スピードを速くすることができます。

Step 14. working directoryにcasper-sidecar ソフトウェアをCloneします。CasperのCondorリリースの仕様により、Casper ネットワークとの疎通、そしてAPIリクエストのやり取りにsidecarが必要となっています。

MacOS と Linux 用:

$ git clone https://github.com/casper-network/casper-sidecar

Step 15. ターミナルセッションからのNCTLコマンドを有効にする為には、 .bashrc ファイルを拡張する必要があるかもしれません。その場合は、下記コマンドで対応可能です。

cd YOUR_WORKING_DIRECTORY/casper-nctl

cat >> $HOME/.bashrc <<- EOM

# ----------------------------------------------------------------------
# CASPER - NCTL
# ----------------------------------------------------------------------

# Activate NCTL shell.
. $(pwd)/activate

EOM

次に、bashセッションをリフレッシュします。

. $HOME/.bashrc

Step 16. 下記コマンドを使用してNCTL環境をアクティベートします。

MacOS と Linux 用:

 $ source casper-node/utils/nctl/activate

Step 17. NCTLバイナリスクリプトをコンパイルします。下記コマンドが、casper-nodeとcasper-clientをリリースモードでコンパイルします。

MacOS と Linux 用:

(env) $ nctl-compile

Step 18. バイナリ、chainspec、config、faucet、keyなど、ローカルネットワークの起動に必要なアセット(資産)をすべてセットアップします。ネットワークもその直後に起動します。デフォルトでは、アクティブノードが5台、非アクティブノードが5台、計10台のノードがネットワークに存在します。

MacOS と Linux 用:

(env) $ nctl-assets-setup && nctl-start

ネットワークが一旦稼働すると、ネットワーク内の各ノードのコントロールや新しいノードのネットワークへの追加ができるようになります。

他にもいくつかエイリアス経由のNCTLコマンドがあり、ターミナルセッション内からの実行が可能となっています。これらのコマンドはすべてnctl-というプレフィックス(接頭辞)がついており、様々なタスクへの対応が可能になっています。

以下のような構造で、utils/nctl/assetsという新しいディレクトリが作成されているはずです。

Image showing the folders created by nctl.

下記の様な出力がコマンドライン上に得られるでしょう。

Image showing successful nctl output.


ネットワークの停止

Step 15. 必須ではないが、下記コマンドにてNCTLの停止とリセットも可能です。

MacOS と Linux 用:

(env) $ nctl-stop
(env) $ nctl-clean

Next Step

  1. 様々なNCTL commandsを試してみる
  2. NCTLの使用ガイドを進めてみる