本文へスキップ
このページは英語からの機械翻訳を使用しており、誤りや不明瞭な表現が含まれている可能性があります。最も正確な情報については、オリジナルの英語版をご覧ください。頻繁な更新のため、一部のコンテンツはオリジナルの英語になっている可能性があります。Crowdinでの取り組みに参加して、このページの翻訳改善にご協力ください。 (Crowdin translation page, Contributing guide)

4ノードのサービスチェーンを設置する

このセクションでは、マルチノードServiceChainのセットアップ方法について説明します。 下図の青い枠で囲んだように、chainID 1002 で 4-consensus-node ServiceChain をセットアップする。

前提条件

  • Download から kscn, homi バイナリのパッケージをダウンロードする。
  • LinuxまたはMacOSサーバー4台
  • 最小ハードウェア要件
    • CPU: 4-core (Intel Xeon or equivalent), RAM: 16GB, HDD: 50GB
    • 詳しくは動作環境をご参照ください。

ステップ 0: 全ノードに SCN をインストール

インストールとは、ダウンロードしたパッケージを解凍することである。 各サーバで SCN アーカイブを展開します。


$ tar xvf kscn-vX.X.X-XXXXX-amd64.tar.gz
x kscn-XXXXX-amd64/
x kscn-XXXXX-amd64/conf/
x kscn-XXXXX-amd64/conf/kscnd.conf
x kscn-XXXXX-amd64/bin/
x kscn-XXXXX-amd64/bin/kscnd
x kscn-XXXXX-amd64/bin/kscn

便宜上、バイナリパスを $PATHに追加する。 ノードの実際のパスを使用してください。


$ export PATH=$PATH:~/path/to/kscn-XXXXX-amd64/bin

SCNはまた、RHEL、CentOS、Fedoraのような様々なRPMディストリビューションを提供している。 詳しくはインストールをご参照ください。


$ curl -o /etc/yum.repos.d/kaia.repo https://packages.kaia.io/config/rhel/7/prod.repo
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed
100 118 100 118 0 0 1113 0 --:--:-- --:--:-- --:--:-- 1102
$ yum list | grep kaia
packages-klaytn-prod 31 kB/s | 2.9 kB 00:00
homi.x86_64 v1.8.0-0.el7 packages-klaytn-prod
kbnd.x86_64 v1.8.0-0.el7 packages-klaytn-prod
kcnd.x86_64 v1.8.0-0.el7 packages-klaytn-prod
kcnd-baobab.x86_64 v1.8.0-0.el7 packages-klaytn-prod
kend.x86_64 v1.8.0-0.el7 packages-klaytn-prod
kend-baobab.x86_64 v1.8.0-0.el7 packages-klaytn-prod
kgen.x86_64 v1.8.0-0.el7 packages-klaytn-prod
kpnd.x86_64 v1.8.0-0.el7 packages-klaytn-prod
kpnd-baobab.x86_64 v1.8.0-0.el7 packages-klaytn-prod
kscnd.x86_64 v1.8.0-0.el7 packages-klaytn-prod
ksend.x86_64 v1.8.0-0.el7 packages-klaytn-prod
kspnd.x86_64 v1.8.0-0.el7 packages-klaytn-prod
$ yum install kscnd

ステップ1:genesis.jsonとnodekeysの作成

homiユーティリティを使って、必要なファイルを生成する。 homiは、Kaiaブロックチェーンの設定に必要なスクリプト、設定ファイル、秘密鍵を自動的に生成するユーティリティである。 homiはLinux/MacのどのPCからでも実行できる。

まず、ダウンロードしたhomiアーカイブを解凍する。


$ tar xvf homi-vX.X.X-XXXXX-amd64.tar.gz
x homi-XXXXX-amd64/
x homi-XXXXX-amd64/bin/
x homi-XXXXX-amd64/bin/homi

binフォルダに移動し、以下のオプションを指定してhomiを実行し、ファイルを生成する。 homi setup --gen-type local --cn-num 4 --test-num 1 --servicechain --chainID 1002 --p2p-port 22323 -o homi-output KairosのchainIDは1001なので、便宜上、この例で構築したServiceChainのchainIDは1002とする。 実際のサービスを立ち上げてブロックチェーンを運用する場合は、他のServiceChainとchainIDが重ならないように、https://chainlist.defillama.com/、新しいchainID値を登録してから利用することを推奨する。 ServiceChainのポートはデフォルトの22323に設定されている。


$ ./homi setup --gen-type local --cn-num 4 --test-num 1 --servicechain --chainID 1002 --p2p-port 22323 -o homi-output
Created : homi-output/keys/passwd1
Created : homi-output/keys/passwd2
Created : homi-output/keys/passwd3
Created : homi-output/keys/passwd4
Created : homi-output/scripts/genesis.json
Created : homi-output/keys/nodekey1
Created : homi-output/keys/validator1
Created : homi-output/keys/nodekey2
Created : homi-output/keys/validator2
Created : homi-output/keys/nodekey3
Created : homi-output/keys/validator3
Created : homi-output/keys/nodekey4
Created : homi-output/keys/validator4
Created : homi-output/scripts/static-nodes.json
Created : homi-output/keys_test/testkey1
Created : homi-output/keys_test/keystore1/0xdC7218621513f71d609653d22C39d79d558d9CDC
Created : homi-output/Kaia.json
Created : homi-output/Kaia_txpool.json

この後のステップでは、nodekey*genesis.jsonstatic-nodes.jsonを使用する。

ステップ2: static-nodes.jsonのカスタマイズ

homi-output/scripts/static-nodes.jsonをテキストエディタで開き、IPアドレスとポートをノードの実際の値で更新する。 この例では、ServiceChain内の各SCNノードのIPが下図のようになっているものとする。 ここで割り当てたポートは、後のステップ4で使用するので覚えておいてください。


[
"kni://38693ad4b17ff77...23153@192.168.0.1:22323?discport=0\u0026ntype=cn",
"kni://f36d969b16f7337...1329b@192.168.0.2:22323?discport=0\u0026ntype=cn",
"kni://16e55d8921ab034...b2bec@192.168.0.3:22323?discport=0\u0026ntype=cn",
"kni://0973e792a421c1d...bbd71@192.168.0.4:22323?discport=0\u0026ntype=cn"
]

static-nodes.jsonを更新したら、出力フォルダ(homi-output)をすべてのSCNにアップロードします。 この例では SCN-L2-01、SCN-L2-02、SCN-L2-03、SCN-L2-04 ノード。


$ scp -r path/to/homi-output/ user@192.168.0.1:~/
$ scp -r path/to/homi-output/ user@192.168.0.2:~/
$ scp -r path/to/homi-output/ user@192.168.0.3:~/
$ scp -r path/to/homi-output/ user@192.168.0.4:~/

ステップ3:ノードの初期化

次に、genesisファイルを使って各ノードを初期化する。 各ノードで以下のコマンドを実行する。 チェーンデータとログを保存するデータフォルダがホームディレクトリに作成されます。 データフォルダは --datadir ディレクティブを使って変更できる。 この例では、データフォルダを ~/data に設定する。


$ kscn --datadir ~/data init ~/homi-output/scripts/genesis.json
$ ls ~/data
keystore klay kscn

ステップ 4: nodekeystatic-nodes.json をインストールする。

SCNごとに static-nodes.json を data フォルダにコピーします。


$ cp ~/homi-output/scripts/static-nodes.json ~/data/

ステップ1では、4つのノードキーを生成した。 各ノードキーを SCN に割り当て、一致する nodekey を各 SCN のデータフォルダにコピーします。 例えば、SCN-L2-01(192.168.0.1) には nodekey1 を使用し、SCN-L2-02(192.168.0.2)、SCN-L2-03(192.168.0.3)、SCN-L2-04(192.168.0.4) にはそれぞれ nodekey2nodekey3nodekey4 を使用します。


$ cp ~/homi-output/keys/nodekey{1..4} ~/data/klay/nodekey

ステップ 5: ノードの設定

各 SCN で kscn のインストールフォルダに移動し、conf/kscnd.conf を以下のように編集します。 PORThomiをセットアップする際に使用するポートで、SC_SUB_BRIDGEは次のセクションでブリッジを接続する際に必要となる。 とりあえず、0にしておいてください。 DATA_DIR`には、ステップ3で使用したデータフォルダを入力する。


...
PORT=22323
...
SC_SUB_BRIDGE=0
...
DATA_DIR=~/data
...

ステップ 6: ノードの開始

すべての SCN ノードで以下のコマンドを実行します。


$ kscnd start
Starting kscnd: OK

ブロックの生成状況は kaia.blockNumber を見ることで確認できる。 この数値が0でなければ、ノードは正常に動作している。


$ kscn attach --datadir ~/data
> kaia.blockNumber
10

ノードを停止したい場合は、kscnd stopコマンドを使うことができる。

(例)価値移転取引の作成と確認

これで4ノードのServiceChainが稼働した。 インストールを確認するために、ServiceChainで価値移転トランザクションを実行します。

ステップ1:テストアカウントのインポート

testkey1はステップ1でhomiが自動生成したものである。 KAIAはhomiによって生成されたgenesis.jsonに記述されているようにテストアカウントに割り当てられる。


$ kscn account import --datadir ~/data ~/homi-output/keys_test/testkey1
Your new account is locked with a password. Please give a password. Do not forget this password.
Passphrase:
Repeat passphrase:
Address: {80119c31cdae67c42c8296929bb4f89b2a52cec4}

ステップ2:アカウントのロック解除

アカウントのロック解除は testkey1 をインポートした SCN ノードのコンソールからのみ可能です。


$ kscn attach --datadir ~/data
> personal.unlockAccount("80119c31cdae67c42c8296929bb4f89b2a52cec4")
Unlock account 80119c31cdae67c42c8296929bb4f89b2a52cec4
Passphrase:
true

ステップ3:取引を送信し、残高を確認する


> kaia.sendTransaction({from: "80119c31cdae67c42c8296929bb4f89b2a52cec4", to: "305c6cc464d5fe1e624679695a20d641a01688e1", value: 10})
"0xa0e7102e8f14200cec8d964aacc1c9ed7c22271078b2b213170c64333cbca8a3"
> kaia.getBalance("305c6cc464d5fe1e624679695a20d641a01688e1")
10

備考

ServiceChainの最も単純な形は、1つのSCNを持つことである。 このチュートリアルで説明するServiceChainは4ノードのServiceChainです。 ただし、シングルノードのServiceChainをセットアップすることも可能です。 ステップ1:genesis.jsonとnodekeysの作成」で、--cn-num 4の代わりに--cn-num 1をhomiに渡すだけです。

ビザンチン障害を許容するためには、少なくとも4ノードが必要である。 したがって、BFTアルゴリズムで高可用性を達成するためのSCNの最小数は4である。 2つのSCNノードがあるだけでは不十分で、1つのSCNが故障した場合、もう1つのSCNは単独でコンセンサスに達することができないからだ。

ページを改善してください。