開発用 Casper v2.0 ローカルネットワークの設定

Casper Condorは、Casper Networkにおける大幅アップグレードの一つです。このガイドでは、 Dockerized NCTLとRust Casper Clientを用いたテストと開発用のローカル Casper v2.0環境の構築方法の一連をお伝えします。

事前準備

  • PCにDocker(Rancher Desktopでも動作しました)をインストール済みかつ動作可能な状態である

Part 1: The Dockerized NCTL (Network Control Tool)

NCTLは、Casper Networkを管理するツールです。セットアップをより簡単にするため、Dockerizedバージョンを使用します。

  1. リポジトリをクローンします:
git clone https://github.com/make-software/casper-nctl-docker.git
cd casper-nctl-docker
  1. Condor ブランチに切り替えます:
git checkout feat-2.0

※casper-nctl-condor.Dockerfileファイル内のcasper-node branchをv2.0.0に修正します。

RUN git clone -b v2.0.0 https://github.com/casper-network/casper-node.git ~/casper-node
  1. casper-nodeのリポジトリをクローンします:
git clone https://github.com/casper-network/casper-node.git
cd casper-node
git checkout v2.0.0
  1. casper-nctl-dockerディレクトリ下にいることを確認した上で、このコマンドを実行してください
  2. Docker Imageをビルドします:
docker build -f casper-nctl-condor.Dockerfile -t casper-nctl:v2.0.0 .
  1. 暫く待ちます
  2. Imageを確認します:
docker image ls
  1. 出力された中に、casper-nctl:v2.0.0 イメージがあるはずです
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
casper-nctl   v2.0.0    decdc9495181   3 minutes ago   442MB
  1. NCTL Docker Containerを起動します:
    • Docker Compose (推奨): docker-compose.ymlファイルを使用している場合は、casper-nctlサービスにあるイメージが作成したイメージ(casper-nctl:v2.0.0)に向いていることを確認してください。その上で、docker-compose upを実行します。
    • docker-compose.yml:
...
services:
casper-nctl:
   image: casper-nctl:v2.0.0
   container_name: casper-nctl
...

コンテナを起動します。これにより、NCTL containerとNCTL Explorer containerが起動します。

docker-compose up

casper-nctl-docker ディレクトリ下にいることを確認した上でこのコマンドを実行してください。

  • Manual Docker Command:

mynctlという名前のNCTL コンテナを起動するコマンドは以下です。

docker run -d --name mynctl -p 11101:11101 casper-nctl:v2.0.0

7. nctl-* コマンドのアクティベート:

Linux もしくは macOS ターミナルにて以下を実行(WSL Ubuntuでも実行できました):

source nctl-activate.sh

Powershellターミナルでは以下を実行:

. .\nctl-activate.ps1

casper-nctl-docker ディレクトリ下にいることを確認した上でこのコマンドを実行してください。

8. NCTLの状態確認

nctl-status

起動後、nctl-statusコマンドを実行すると5つのノードと5つのsidecar(サイドカー)が起動しており、他5つのノードと5つのsidecarが非アクティブ状態であることが確認できます:

casper-nctl  | validators-1:casper-net-1-node-1       RUNNING   pid 996, uptime 0:00:03

casper-nctl  | validators-1:casper-net-1-node-2       RUNNING   pid 998, uptime 0:00:03
casper-nctl  | validators-1:casper-net-1-node-3       RUNNING   pid 1002, uptime 0:00:03
casper-nctl  | validators-1:casper-net-1-sidecar-1    RUNNING   pid 997, uptime 0:00:03
casper-nctl  | validators-1:casper-net-1-sidecar-2    RUNNING   pid 1000, uptime 0:00:03
casper-nctl  | validators-1:casper-net-1-sidecar-3    RUNNING   pid 1011, uptime 0:00:03
casper-nctl  | validators-2:casper-net-1-node-4       RUNNING   pid 1082, uptime 0:00:02
casper-nctl  | validators-2:casper-net-1-node-5       RUNNING   pid 1084, uptime 0:00:02
casper-nctl  | validators-2:casper-net-1-sidecar-4    RUNNING   pid 1083, uptime 0:00:02
casper-nctl  | validators-2:casper-net-1-sidecar-5    RUNNING   pid 1085, uptime 0:00:02
casper-nctl  | validators-3:casper-net-1-node-10      STOPPED   Not started
casper-nctl  | validators-3:casper-net-1-node-6       STOPPED   Not started
casper-nctl  | validators-3:casper-net-1-node-7       STOPPED   Not started
casper-nctl  | validators-3:casper-net-1-node-8       STOPPED   Not started
casper-nctl  | validators-3:casper-net-1-node-9       STOPPED   Not started
casper-nctl  | validators-3:casper-net-1-sidecar-10   STOPPED   Not started
casper-nctl  | validators-3:casper-net-1-sidecar-6    STOPPED   Not started
casper-nctl  | validators-3:casper-net-1-sidecar-7    STOPPED   Not started
casper-nctl  | validators-3:casper-net-1-sidecar-8    STOPPED   Not started
casper-nctl  | validators-3:casper-net-1-sidecar-9    STOPPED   Not started

Part 2: Casper Client (Rust)

ローカルのCasper v2.0ネットワークと疎通する為には、Casper Clientを使用します。Casper Clientを使用するには、2つの選択肢(Option)があります。

Option 1: Docker Imageを使ったCasper Clientの使用

Option 2: ローカルのCasper Clientの使用

  1. リポジトリのクローン(任意):
git clone https://github.com/casper-ecosystem/casper-client-rs.git
cd casper-client-rs
  1. Casper 2.0と互換性のあるブランチに切り替えます(任意):
git checkout v3.0.1
  1. casper-clientのビルド:
    事前準備としてRustのインストールを行います
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Casper Clientのビルドを行います

cargo build --release

4 設定の確認(テスト):
Option1:

casper-client get-block --node-address http://127.0.0.1:11101

Option2:

cargo run --release get-block --node-address http://127.0.0.1:11101

このコマンドを実行することで、ローカルネットワークで実行中のノード全ての状態が返され、設定が成功していることが表示されるはずです。出力は下記のようになります。

{
   "jsonrpc": "2.0",
   "id": -2049464589362040719,
   "result": {
      "api_version": "2.0.0",
      "block_with_signatures": {
            "block": {
               "Version2": {
                  "hash": "9e7c32760b6fefcd4e1a579a9dce0835e1d564e5a5aedaf06911d76f64af9e0c",
                  "header": {
                        "parent_hash": "ecd94fd34417032d4e7b77b0dce3c48164398d1946d95a57b50c73eaee59cf90",
                        "state_root_hash": "ad53786aed35ef7e5a608552329ff0ab33055c4e4bf6764124a3603fce49990a",
                        "body_hash": "18937e8cf4338b5f5fdc2581f8d7d6a47de736d2799e3f3bc9b0ff9f1e7cf106",
                        "random_bit": false,
                        "accumulated_seed": "1ce9cae18eccdea58c1a6b22474c6f98e4a4bf17d53a306390f528a18d264f59",
                        "era_end": null,
                        "timestamp": "2025-04-23T03:41:03.130Z",
                        "era_id": 94,
                        "height": 1028,
                        "protocol_version": "2.0.0",
                        "proposer": "0190664e16a17594ed2d0e3c279c4cf5894e8db0da15e3b91c938562a1caae32ab",
                        "current_gas_price": 1,
                        "last_switch_block_hash": "db222beace01c5c624cbd84a62c92feb0a23f3e0c3372dd5cba9e7ce51db63cf"
                  },
                  "body": {
                        "transactions": {},
                        "rewarded_signatures": [
                           [
                              248
                           ],
                           [
                              0
                           ],
                           [
                              0
                           ]
                        ]
                  }
               }
            },
            "proofs": [
               {
                  "public_key": "01509254f22690fbe7fb6134be574c4fbdb060dfa699964653b99753485e518ea6",
                  "signature": "01fbe5ca7584cd517b51cc2ee1c79c055eaccb523470b5f460f23c365d476dabf40d62d753b0f1c1003568dd555b64848cda2029d3f31bf9ee548ea6aefca72506"
               },
               {
                  "public_key": "0190664e16a17594ed2d0e3c279c4cf5894e8db0da15e3b91c938562a1caae32ab",
                  "signature": "014ebd115e50169c79dd469f6118df18869232839bc07c3cff079837657ba9d31d913d367da886442f1532fbef66e86985d693346037b4863ef0ec90c1476e3403"
               },
               {
                  "public_key": "01c867ff3cf1d4e4e68fc00922fdcb740304def196e223091dee62012f444b9eba",
                  "signature": "01d183f46c1a0af713c2f0629ea0436cb37c04ef300f8c25f84384607a91817e869956ccf47a4902f9d51c173cb8c3f6949391c792e343bc93968274b4c692e50c"
               },
               {
                  "public_key": "01f58b94526d280881f79744effebc555426190950d5dfdd2f8aaf10ceaec010c6",
                  "signature": "01308ad12b69bc92497ad3b9d169d685a436ee4194a0e291a14e022bc0e70e5ee881a2f0be5301752ad9888a790bd9c4a7cbff1481df472166f3dce29df9ec9d00"
               },
               {
                  "public_key": "01fed662dc7f1f7af43ad785ba07a8cc05b7a96f9ee69613cfde43bc56bec1140b",
                  "signature": "01bac3f6529816492daaa019a4ecf5bd3ef68757a266e4b4a0382a56268fdbc86a65ec037feb87cda554e244f25c3c9e525961a1a660b39ebd6f1aee2e64ce0006"
               }
            ]
      }
   }
}

トラブルシューティング

sidecar(サイドカー)もしくはノードが走っている状態にて、nctl-view-node-statusの出力に各ノードの値がnullとなっている場合は、casper-sidecarのバージョンがcasper-nodeに互換性がないことを意味しています。

解決策:

  1. casper-node/ci/ci.json ファイルに移動してください
  2. external_depsの配下にあるcasper-sidecarブランチを下記から:
"branch": "xxx"

下記へ変更してください:

"branch": "v1.0.4" 

casper-sidecarとcasper-nodeの互換性は適宜ご確認ください。

  1. NCTLイメージの再ビルド: docker build -f casper-nctl-condor.Dockerfile -t casper-nctl:v2.0.0 .

Casper Clientの使い方

  • Command Format(ローカルのcasper-clientを使用): cargo run –release [command] –node-address http://127.0.0.1:11101
  • Command Format(Dockerイメージのcasper-clientを使用): casper-client [command] –node-address http://127.0.0.1:11101

NCTL Block Web Explorerへのアクセス

NCTL Dockerセットアップには、ウェブ版のブロックエクスプローラーが含まれています。ブラウザーにてアクセス可能となっています:

http://127.0.0.1:8080

これにより、ブロックやトランザクション、その他、自身のローカルネットワークの詳細を可視化できます。

Important Notes

  • 対応中:Condorの互換性については、現在開発中につき、いくつかの機能が不安定もしくは不完全であるかもしれません。

追加事項