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.gzx kscn-XXXXX-amd64/x kscn-XXXXX-amd64/conf/x kscn-XXXXX-amd64/conf/kscnd.confx kscn-XXXXX-amd64/bin/x kscn-XXXXX-amd64/bin/kscndx 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.gzx 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-outputCreated : homi-output/keys/passwd1Created : homi-output/keys/passwd2Created : homi-output/keys/passwd3Created : homi-output/keys/passwd4Created : homi-output/scripts/genesis.jsonCreated : homi-output/keys/nodekey1Created : homi-output/keys/validator1Created : homi-output/keys/nodekey2Created : homi-output/keys/validator2Created : homi-output/keys/nodekey3Created : homi-output/keys/validator3Created : homi-output/keys/nodekey4Created : homi-output/keys/validator4Created : homi-output/scripts/static-nodes.jsonCreated : homi-output/keys_test/testkey1Created : homi-output/keys_test/keystore1/0xdC7218621513f71d609653d22C39d79d558d9CDCCreated : homi-output/Kaia.jsonCreated : homi-output/Kaia_txpool.json
この後のステップでは、nodekey*
、genesis.json
、static-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 ~/datakeystore klay kscn
ステップ 4: nodekey
と static-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) にはそれぞれ nodekey2
、nodekey3
、nodekey4
を使用します。
$ cp ~/homi-output/keys/nodekey{1..4} ~/data/klay/nodekey
ステップ 5: ノードの設定
各 SCN で kscn のインストールフォルダに移動し、conf/kscnd.conf
を以下のように編集します。 PORT
はhomi
をセットアップする際に使用するポートで、SC_SUB_BRIDGE
は次のセクションでブリッジを接続する際に必要となる。 とりあえず、0にしておいてください。 DATA_DIR`には、ステップ3で使用したデータフォルダを入力する。
...PORT=22323...SC_SUB_BRIDGE=0...DATA_DIR=~/data...
ステップ 6: ノードの開始
すべての SCN ノードで以下のコマンドを実行します。
$ kscnd startStarting kscnd: OK
ブロックの生成状 況は kaia.blockNumber
を見ることで確認できる。 この数値が0でなければ、ノードは正常に動作している。
$ kscn attach --datadir ~/data> kaia.blockNumber10
ノードを停止したい場合は、kscnd stop
コマンドを使うことができる。
(例)価値移転取引の作成と確認
これで4ノードのServiceChainが稼働した。 インストールを確認するために、ServiceChainで価値移転トランザクションを実行します。
ステップ1:テストアカウントのインポート
testkey1
はステップ1でhomi
が自動生成したものである。 KAIAはhomi
によって生成されたgenesis.json
に記述されているようにテストアカウントに割り当てられる。
$ kscn account import --datadir ~/data ~/homi-output/keys_test/testkey1Your 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 80119c31cdae67c42c8296929bb4f89b2a52cec4Passphrase: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は単独でコンセンサスに達することができないからだ。