In this page, we will describe the steps of connecting a Service Chain to the Main Chain.
You should enable main-bridge by configuring kend.conf
.
The kend.conf
contains the following main-bridge properties.
Name | Description |
MAIN_BRIDGE | Enable bridge service as main bridge for service chain. 1 to enable. |
MAIN_BRIDGE_PORT | Bridge listen port. Default: 50505 |
MAIN_BRIDGE_INDEXING | Enable indexing of service chain transaction hash for fast access to the service chain data. 1 to enable. |
To enable main-bridge on EN, you should do like below.
define MAIN_BRIDGE
enable RPC/WS.
add mainbridge
API for RPC like the below example.
# Configuration file for the kend​...​# rpc options settingRPC_ENABLE=1 # if this is set, the following options will be usedRPC_API="klay,mainbridge" # available apis: admin,debug,klay,miner,net,personal,rpc,txpool,web3,mainbridge,subbridgeRPC_PORT=8551RPC_ADDR="0.0.0.0"RPC_CORSDOMAIN="*"RPC_VHOSTS="*"​# ws options settingWS_ENABLE=1 # if this is set, the following options will be usedWS_API="klay"WS_ADDR="0.0.0.0"WS_PORT=8552WS_ORIGINS="*"​...​# service chain options settingMAIN_BRIDGE=1MAIN_BRIDGE_PORT=50505MAIN_BRIDGE_INDEXING=1​...
You need to run an EN of the main chain as a main-bridge. And also you should determine which SCN (Service Chain Consensus Node) as a sub-bridge will connect with the EN.
There are different ways to attach to the EN process. You can check the usable commands on ken CLI commands. This page explains the way to attach to the process via IPC (inter-process communication). The IPC file klay.ipc
is located in the data directory on the node.
Please execute the following command and check out the result. (If you added mainbridge
API for RPC, you can check the bridge API like below. If there is no mainbridge
API, you should check EN Configuration - Enable Main-bridge again. )
$ ken attach ~/kend_home/klay.ipcWelcome to the Klaytn JavaScript console!​instance: Klaytn/vX.X.X/XXXX-XXXX/goX.X.Xat block: 11573551 (Wed, 13 Feb 2019 07:12:52 UTC)datadir: ~/kend_homemodules: admin:1.0 mainbridge:1.0 debug:1.0 istanbul:1.0 klay:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0>
After attaching to the process via IPC, you can check the EN's main-bridge KNI like below. You can refer to Service Chain API.
> mainbridge.nodeInfo{kni: "kni://08b99d2297e0a27ddeb33f3a81b59ea1c065b9adbaff9fefab0d16f65b1a8db22[email protected][::]:50505?discport=0",id: "08b99d2297e0a27ddeb33f3a81b59ea1c065b9adbaff9fefab0d16f65b1a8db22939a104c24447e9aca521c158922ca912476b544baf48995a382d88886e0a37",ip: "::",listenAddr: "[::]:50505",name: "-2",ports: {discovery: 0,listener: 50505},protocols: {servicechain: {config: {chainId: 2018,deriveShaImpl: 0,isBFT: true,istanbul: {...},unitPrice: 0},difficulty: 87860,genesis: "0x711ce9865492659977abb2758d29f68c2b0c82862d9376f25953579f64f95b58",head: "0x0d4b130731f1e7560e4531ac73d55ac8c6daccb178abd86af0d96b7aafded7c5",network: 1}}}
You should take note of the main-bridge kni
.
Attach to the SCN process like below. You should have enabled subbridge
API for RPC, you can find the subbridge module in the output. If there is no subbridge
API, you should check Configuration of the SCN again.
$ kscn attach ~/kscnd_home/klay.ipcWelcome to the Klaytn JavaScript console!​instance: Klaytn/vX.X.X/XXXX-XXXX/goX.X.X​datadir: ~/kscnd_homemodules: admin:1.0 subbridge:1.0 debug:1.0 governance:1.0 istanbul:1.0 klay:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 servicechain:1.0 txpool:1.0>
You can add the EN peer on SCN via IPC like below. The kni is EN's KNI which you noted previously.
> subbridge.addPeer("kni://08b99d2297e0a27ddeb33f3a81b59ea1c065b9adbaff9fefab0d16f65b1a8db22[email protected][::]:50505?discport=0")true
And then you can check the connected peers like below.
> subbridge.peers[{caps: ["servicechain/1"],id: "08b99d2297e0a27ddeb33f3a81b59ea1c065b9adbaff9fefab0d16f65b1a8db22939a104c24447e9aca521c158922ca912476b544baf48995a382d88886e0a37",name: "-1",networks: [{inbound: false,localAddress: "[::1]:56834",remoteAddress: "[::1]:50505",static: true,trusted: false}],protocols: {servicechain: {head: "0x47be444be87daaee2989998559049ee8a859540807824dd1db4a80ea6cb42293",version: 1}}}]