はじめに

ここでは、コンテナ化された環境でQuai Networkのローカルインスタンスをインストールして実行します。ローカルネットワークインスタンスには、1つのフルノード、9つのシャードそれぞれに対する1つのCPUマイナー、およびQuaiとQiの残高が事前にロードされた複数のアカウントが含まれています。コンテナ化されたローカルネットワークインスタンスは、ビルダー向けに簡単に設定可能で低オーバーヘッドの開発環境を提供するように設計されています。

依存関係のインストール

Quai Networkのローカルインスタンスを実行するには、いくつかの依存関係をインストールする必要があります。
1

Docker Composeのインストール

Docker Composeをインストールする方法は2つあります:
  1. Docker ComposeがバンドルされているDocker Desktopをインストールする(推奨
  2. CLI経由でDocker Composeプラグインをインストールする
どちらの方法が最適かわからない場合は、Docker Composeのインストールページで詳細を確認してください。
2

ローカルノードランナーのインストール

ローカルノードランナーをインストールするには、quai-local-nodeリポジトリをクローンして移動する必要があります。
git clone https://github.com/dominant-strategies/quai-local-node
cd quai-local-node

ローカルインスタンスの実行

Docker Composeをインストールし、quai-local-nodeリポジトリに移動したので、ローカルネットワークインスタンスを実行できます。

開始

Dockerコンテナでローカルネットワークインスタンスを開始するには、次を実行します:
bash docker-compose up -d
このコマンドを実行すると、各プロセスが起動するのが確認できます。1つのgo-quaiコンテナと、9つのquai-cpu-minerインスタンス(各シャードに1つ)が次のように初期化されます:
[+] Running 10/10
 Container quai-local-node-paxos2-quai-cpu-miner-1   Started
 Container quai-local-node-cyprus1-quai-cpu-miner-1  Started
 Container quai-local-node-cyprus2-quai-cpu-miner-1  Started
 Container quai-local-node-hydra2-quai-cpu-miner-1   Started
 Container quai-local-node-paxos1-quai-cpu-miner-1   Started
 Container quai-local-node-cyprus3-quai-cpu-miner-1  Started
 Container quai-local-node-go-quai-1                 Started
 Container quai-local-node-paxos3-quai-cpu-miner-1   Started
 Container quai-local-node-hydra1-quai-cpu-miner-1   Started
 Container quai-local-node-hydra3-quai-cpu-miner-1   Started

ログの表示

ターミナルからgo-quaiコンテナのログを表示するには、次を実行します:
## グローバルログを表示
docker logs quai-local-node-go-quai-1

## グローバルログをフォロー
docker logs -f --tail 0 quai-local-node-go-quai-1
特定のシャードのログにアクセスしたい場合は、quai-local-node-go-quai-1コンテナに移動して直接ログを表示する必要があります。
## go-quaiコンテナに移動
docker exec -it quai-local-node-go-quai-1 sh

## 特定のゾーンのログをフォロー
tail -f nodelogs/zone-0-0.log

## 特定のリージョンのログをフォロー
tail -f nodelogs/region-1.log

停止

ローカルネットワークインスタンスがバックグラウンドで実行されている場合は、次のコマンドを実行して停止します:
docker-compose down
ローカルネットワークインスタンスがフォアグラウンドで実行されている場合は、ターミナルを終了するか、CTRL+Cを使用してコンテナを停止できます。

カスタムネットワーク設定

以下の設定セクションはデフォルト以外の設定を実行する場合にのみ必要です。9つのスライスとマイナーのデフォルトネットワーク設定のみを実行したい場合は、このセクションをスキップできます。
quai-local-nodeは、デフォルトで9つのシャード(スライス)すべてと各シャード用のCPUマイナーを実行するように設定されています。ほとんどのユースケースではデフォルト設定を実行することをお勧めします。カスタムスライス設定を実行したい場合は、以下のセクションで詳細を説明します。 デフォルトのローカルネットワーク設定を変更するには、次の作業が必要です:
  • config.tomlファイルでローカルノードが実行しているスライスを編集する
  • docker-compose.ymlファイルでシャードの数に合わせてCPUマイナーの数を編集する
1

スライスの設定

スライス設定を開始するには、テキストエディタでノード設定ファイルを開きます:
vim config/go-quai/config.toml
このディレクトリ内にはconfig.tomlファイルがあります。設定ファイルには、デフォルト値として9つのスライスすべてを持つslices変数があります。
slices = '[0 0],[0 1],[0 2],[1 0],[1 1],[1 2],[2 0],[2 1],[2 2]'
実行したいシャードの数に合わせてslices変数を編集します。例えば、3つのシャードを実行したい場合は、slices変数を[0 0],[0 1],[0 2]に設定できます。
2

CPUマイナーの設定

CPUマイナーの設定を編集するには、docker-compose.ymlファイルを編集する必要があります。テキストエディタでdocker-compose.ymlファイルを開きます:
vim docker-compose.yml
設定ファイル内の各マイナーインスタンスには、デフォルトで1に設定されたreplica変数があります。この値が1に設定されている場合、そのチェーンのマイナーが起動時に開始され、値が0に設定されている場合、マイナーは起動時に開始されません。
cyprus1-quai-cpu-miner:
  image: quainetwork/quai-cpu-miner:0.1.0-test.4
  volumes:
    - ./config/quai-cpu-miner/cyprus1-config.yaml:/root/config/config.yaml
  deploy:
    resources:
      limits:
        cpus: '1'
    replicas: 1
  command: ['./build/bin/quai-cpu-miner']
  networks:
    - quainet
上記で設定したノードの各スライスに対してCPUマイナーが起動される(replica1に設定されている)ことを確認する必要があります。例えば、スライス[0 0],[0 1],[0 2]を実行している場合、cyprus1、cyprus2、cyprus3マイナーのreplica値を1に設定し、他のすべてを0に設定する必要があります。
cyprus1-quai-cpu-miner:
  ...
  replicas: 1

cyprus2-quai-cpu-miner:
  ...
  replicas: 1

cyprus3-quai-cpu-miner:
  ...
  replicas: 1

paxos1-quai-cpu-miner:
  ...
  replicas: 0

etc...
ノードが実行しているスライスをCPUマイナー設定と一致させた後、カスタムローカルネットワークインスタンスを起動できます。

ローカルネットワークとの対話

ローカルネットワークインスタンスと対話するには、Quais SDKまたはJSON RPC APIを使用できます。ネットワークはlocalhost上の特定のネットワーキングポートを介してアクセス可能です。
シャードHTTPポートWSポート
Prime90018001
Cyprus90028002
Paxos90038003
Hydra90048004
Cyprus 192008200
Cyprus 292018201
Cyprus 392028202
Paxos 192208220
Paxos 292218221
Paxos 392228222
Hydra 192408240
Hydra 292418241
Hydra 392428242

SDK

Quais SDKを使用して、ローカルネットワークインスタンスに接続されたプロバイダーを作成し、チェーンデータを取得してトランザクションを送信できます。
import { quais } from 'quais'

// ローカルプロバイダーを作成
const provider = new quais.JsonRpcProvider('http://localhost')

// cyprus 1のブロック番号を取得
const currentBlock = await provider.getBlockNumber('Cyprus1')

JSON RPC API

JSON RPC APIcURLを使用して、ローカルネットワークにリクエストを送信できます:
# paxos 3のガス価格を取得
curl --request POST \
  --url http://localhost:9222 \
  --header 'Content-Type: application/json' \
  --data '{
  "jsonrpc": "2.0",
  "method": "quai_gasPrice",
  "params": [],
  "id": 1
}'

アカウント

起動したローカルネットワークは、各シャードのQuaiとQiトークンが事前にロードされた多数のアカウントで開始されます。事前にロードされた残高を持つアカウントの完全なリストは、シャードと台帳別にソートされており、quai-local-nodeリポジトリのgenallocsディレクトリで確認できます。
これらのアカウントはローカルテスト目的のものであり、本番環境では使用しないでください。これらは安全ではなく、テストのみに使用する必要があります。
参考のために、各シャードと台帳の1つのアカウントを以下に示します:

Quaiアカウント

シャードアドレス秘密鍵残高
Cyprus10x000001273B55E9e5998328216dB1b130c231221C0xb3c87ca9645adcf75be5c4d6609fd257f897fd53849c7ecca81acae9966a6ec010000 Quai
Cyprus20x010001D025371794a6eDb5feE8aC2F384EdD74630xcea8ebb619f8e4ea11ee75cb72221a6f39591a99d7cf688de9f30832809fb75110000 Quai
Cyprus30x02000415996A1B0cFF4b2FD078c779cF6C3E9AaC0xfc86fae56f462d2ae43bca8f819b1137c9e3150ba3ff79d4d5068b6e39c1c97510000 Quai
Paxos10x10000197Ec7c3e6ce4D9a832c0641528c5e268A60x01d872f0bc5f94490c2ed9026d58a116656dcb3c997f42062d01799e5b45806210000 Quai
Paxos20x11000207A6723c18085c12F50F62929bb78932c40x1d7a3a668ac8b20bf538a6d1060de043f10b1db5f1df2140fa0e8d479820e76310000 Quai
Paxos30x120000833E752B14A00eBB2c00eF0FD7C90C21230xc0061e94c526e7d9d97a2874f129e72e4f821a8f78ca2fd8198c005bc14e2a9210000 Quai
Hydra10x2000011eCb5FDEA6Eb074cbe60b6Ad372948d99a0xc77fb4c5b1612f702ef097561f75ee5876987ef547977020a86528fbc9f7bbbc10000 Quai
Hydra20x2100042dEf9D880e029Ca948f97C180c202bd7430x44af4c54c44d96bbf3d9c602967822246381d2287fe544fd5480d05b25b80bb910000 Quai
Hydra30x2200035A5A89846AD708d8732B6c85dFAbE354890x8cd878d69b1b848b3c98c623e4e56e3b0ed1035984f6f721a99ef716637e338210000 Quai

Qiアカウント

シャードアドレス秘密鍵残高
Cyprus10x0080038f1C9a96b196914939301F9a46d7E27e7E0x5b18d340e2e5172a90dfcc43c800519cf4a77b82750b8964b3f421dc929eac53100000 Qi
Cyprus20x01800Daf0f10f7d0CceF2B77893d5a7f86D6D4060x4500c9cef91ac29479cf50a00c49d27ba14e84df83b8e332db34fa1cbdd799b7100000 Qi
Cyprus30x02800a7c404409166D903Dd3421595112f1DaF4D0xbc144acdd4d53488e4005d404f42450a879eb1015a6f4bbf80956b4810b5a068100000 Qi
Paxos10x1080049337283F6c3aDfD535835258a03CF2b9210x511930ce12cbf86325eb2652459b6a47b75ddc892a09549f094f0011062a11f4100000 Qi
Paxos20x1180008531658Aa78161D00689267725C771aD3d0x89086104efd789c7de9ee69beb44ad70818a772a90b6d3f3ec26da930a47a2da100000 Qi
Paxos30x12800163E05c66e107864D9c18067468cf79990f0xa7995e0942e6510a2fd3461c0dbe081fc8e79c6e891fd2fcde5897e41700789a100000 Qi
Hydra10x208000B3ED3a21D2018E72533D55679760C7a8d20x36f009591733e706085ba4b6c3c6bbc8e35fa5e9f075979650523c18f18dacec100000 Qi
Hydra20x218000a39174Db63f0047DC571CB2279d6D294340xf07d9c6d2ee5cd1f5661d87afea21cd21e4a52ff1ea4851b7507b4ef673c4311100000 Qi
Hydra30x228003fD91A5B55dBAfc95384e3A8DBf30B21AA80x2c1b28175b12d8fdeb8355918fcb7492fcbc7b118ecf301cd928477815084312100000 Qi