FISCO BCOS区块链中的节点,只有被注册过,表示加入了网络,才能正常的运行。
多节点组网依赖系统合约,在进行多节点组网前,请确认:
(1)系统合约已经被正确的部署。
(2)所有节点的config.json的systemproxyaddress字段已经配置了相应的系统代理合约地址。
(3)节点在配置了systemproxyaddress字段后,已经重启使得系统合约生效。
(4)/mydata/FISCO-BCOS/systemcontractv2/下的config.js已经正确的配置了节点的RPC端口。
所有的节点注册流程都相同。在注册节点时,需先注册创世节点,再注册普通节点。
以注册创世节点为例。
cd /mydata/FISCO-BCOS/systemcontractv2/
vim node1.json
内容需要与节点config.json中NodeextraInfo字段的内容对应。若在不同机器上组网时,ip填写的是外网ip。编写好的注册配置文件如下:
{ "id":"24b98c6532ff05c2e9e637b3362ee4328c228fb4f6262c1c751f51952012cd68da2cbd8655de5072e49b950a503326942297cfaa9ca919b369be4359b4dccd56",
"ip":"127.0.0.1",
"port":30303,
"category":1,
"desc":"node1",
"CAhash":"",
"agencyinfo":"node1",
"idx":0
}
在注册前,请确认已注册的所有节点,都已经启动。
用编写好的注册配置文件(node1.json)注册节点。(创世节点在被注册时,应启动起来)
babel-node tool.js NodeAction registerNode node1.json
可看到注册信息
RPC=http://127.0.0.1:8545
Ouputpath=./output/
{ HttpProvider: 'http://127.0.0.1:8545',
Ouputpath: './output/',
privKey: 'bcec428d5205abe0f0cc8a734083908d9eb8563e31f943d760786edf42ad67dd',
account: '0x64fa644d2a694681bd6addd6c5e36cccd8dcdde3' }
Soc File :NodeAction
Func :registerNode
系统合约地址0x919868496524eedc26dbb81915fa1547a20f8998
node.json=node1.json
NodeAction合约地址0xa40c864c28ee8b07dc2eeab4711e3161fc87e1e2
发送交易成功: 0xd70d129a60f9ff355acb13acd7769e99442cc72fe0e1e8f2b49b64a96072b3d7
查看节点是否已经在节点列表中
babel-node tool.js NodeAction all
可看到被注册的节点信息,节点已经加入了网络
系统合约地址0x919868496524eedc26dbb81915fa1547a20f8998
NodeAction合约地址0xa40c864c28ee8b07dc2eeab4711e3161fc87e1e2
NodeIdsLength= 1
----------node 0---------
id=24b98c6532ff05c2e9e637b3362ee4328c228fb4f6262c1c751f51952012cd68da2cbd8655de5072e49b950a503326942297cfaa9ca919b369be4359b4dccd56
ip=127.0.0.1
port=30303
category=1
desc=node1
CAhash=
agencyinfo=node1
blocknumber=25
Idx=0
在注册更多的节点前,请确认创世节点是第一个被注册的,并且网络中所有被注册过的节点都已经启动。
重复上述过程,注册更多节点。待注册的普通节点先不要启动。
vim node2.json #修改内容与config.json内容对应
babel-node tool.js NodeAction registerNode node2.json
cd /mydata/nodedata-2/
./start.sh #将被注册的节点启动起来,此时节点已经被注册,可刷出打包信息
再次查看入网情况:
cd /mydata/FISCO-BCOS/systemcontractv2/
babel-node tool.js NodeAction all
可看到输出了节点信息(node1),节点加入网络
系统合约地址0x919868496524eedc26dbb81915fa1547a20f8998
NodeAction合约地址0xa40c864c28ee8b07dc2eeab4711e3161fc87e1e2
NodeIdsLength= 2
----------node 0---------
id=24b98c6532ff05c2e9e637b3362ee4328c228fb4f6262c1c751f51952012cd68da2cbd8655de5072e49b950a503326942297cfaa9ca919b369be4359b4dccd56
ip=127.0.0.1
port=30303
category=1
desc=node1
CAhash=
agencyinfo=node1
blocknumber=25
Idx=0
----------node 1---------
id=b5adf6440bb0fe7c337eccfda9259985ee42c1c94e0d357e813f905b6c0fa2049d45170b78367649dd0b8b5954ee919bf50c1398a373ca777e6329bd0c4b82e8
ip=127.0.0.1
port=30403
category=1
desc=node2
CAhash=
agencyinfo=node2
blocknumber=26
Idx=1
执行脚本
cd /mydata/FISCO-BCOS/systemcontractv2/
babel-node monitor.js
可看到不断刷出连接信息和块高。已连接节点数表示的是被查询的节点与其它节点连接的个数,即被注册的节点总数减1。此例子中,网络中有2个节点。被查询的节点是创世节点,与创世节点连接的节点只有一个,所以已连接节点数为1。
已连接节点数:1
...........Node 0.........
NodeId:b5adf6440bb0fe7c337eccfda9259985ee42c1c94e0d357e813f905b6c0fa2049d45170b78367649dd0b8b5954ee919bf50c1398a373ca777e6329bd0c4b82e8
Host:127.0.0.1:30403
当前块高26
--------------------------------------------------------------
要让某节点退出网络,需执行以下脚本。执行时,指定相应节点的注册配置文件。此处让node2退出为例。
babel-node tool.js NodeAction cancelNode node2.json
执行后有如下输出:
RPC=http://127.0.0.1:8545
Ouputpath=./output/
{ HttpProvider: 'http://127.0.0.1:8545',
Ouputpath: './output/',
privKey: 'bcec428d5205abe0f0cc8a734083908d9eb8563e31f943d760786edf42ad67dd',
account: '0x64fa644d2a694681bd6addd6c5e36cccd8dcdde3' }
Soc File :NodeAction
Func :cancelNode
系统合约地址0x919868496524eedc26dbb81915fa1547a20f8998
node.json=node2.json
NodeAction合约地址0xa40c864c28ee8b07dc2eeab4711e3161fc87e1e2
发送交易成功: 0xe3544a63bbcbd1234e48dfa8f228684617a993addfadefd0aeefe39b517354ab
查看节点连接,看不到相应节点的信息,表示节点已经退出了网络。
babel-node tool.js NodeAction all