区块链系列教程(8)
Fisco Bcos 国密版本的部署、控制台搭建、合约的部署、sdk 调用
哈希科技作为一家区块链技术服务商,有责任也有义务为推广区块链贡献一份力量。计划连续推出区块链教程,欢迎大家交流。
哈希科技拥有全面的区块链能力,支持Hyperledger Fabric、Ethereum、FISCO BCOS及腾讯Trust SQL等主流框架。
FISCO BCOS是微众银行、腾讯等联合推出的,安全可控、适用于金融行业且开源的区块链底层平台。哈希科技与微众区块链团队进行过深度对接合作,也得到了微众团队童鞋们的鼎力支持和帮助,在此一并感谢!
本教程作者为哈希科技CTO林滨,这是一位才华在线颜值担当的90后有为青年,推荐大家关注。
参考资料
证书说明:https://mp.weixin.qq.com/s/nRwHxt2E1TJiopJqLSvMOQ
参考资料:https://blog.csdn.net/FISCO_BCOS/article/details/95496272 (国密版本部署,很不错)
准备工作
1、机构A ,作为创世区块的服务器
148.70.170.96 (公)
172.27.16.14 (内)
2、机构B,联盟链机构
148.70.71.251 (公)
172.27.16.17 (内)
一、下载安装 企业版部署工具
1、下载
cd ~/ && git clone https://github.com/FISCO-BCOS/generator.git
2、安装
此操作要求用户具有sudo权限。
cd generator && bash ./scripts/install.sh
3、检查是否安装成功,若成功,输出 usage: generator xxx
查看版本
> INFO | v1.0.0
4、拉取节点二进制
拉取最新fisco-bcos二进制文件到meta中 这里要修改
下载国密版本(源程序)
./generator --download_fisco ./meta -g
-g参数表示国密,去掉-g则下载的是普通版FISCO BCOS,执行完该命令,国密版FISCO BCOS会下载到generator/meta/下。
5、检查二进制版本
若成功,输出 FISCO-BCOS Version : x.x.x-x
显示国密版本
正常操作流程
1、创建链证书
FISCO BCOS国密版的链证书和机构证书需要
两套,分别为国密证书和普通版证书
。
证书支持自建、CA公司申请,企业级部署工具底层使用
openssl
工具自建生成,如果要用CA公司申请的证书,可直接把证书文件的名称改为规定的名称即可。
链证书普通版
ca.crt
,对应的私钥
ca.key
。链证书国密版
gmca.crt
,对应的私钥
gmca.key
。
机构证书普通版
agency.crt
,对应的私钥
agency.key
,机构证书国密版
gmagency.crt
,对应的私钥
gmagency.key
./generator --generate_chain_certificate ./dir_chain_ca
使用FISCO BCOS企业级部署工具时,所有需要证书的操作都需要将链证书和机构证书(.crt文件)放置在
generator/meta/
下。
#创建一个专用于放置证书的目录(该目录位置及名称均可自定义,只要保证后续使用企业级部署工具需要提供证书目录时,目录路径正确即可)
#在generator/dir_agency_ca下生成普通版链证书:
./generator --generate_chain_certificate ./dir_chain_ca/chain
#在generator/dir_agency_ca/chain-g下生成普通版链证书:
./generator --generate_chain_certificate ./dir_chain_ca/chain-g -g
#-g参数表示国密
#按照企业级部署工具的使用要求将证书放在generator/meta/目录下
cp ./dir_chain_ca/chain-g/gmca.crt ./meta/gmca.crt
cp ./dir_chain_ca/chain/ca.crt ./meta/ca.crt
2、机构向联盟委员会申请机构证书
生成国密和普通的版本的机构证书
机构A
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca/chain agencyA
./generator --generate_agency_certificate ./dir_g_agency_ca ./dir_chain_ca/chain-g agencyA -g
机构B(前提:将机构A中生成dir_chain_ca 目录 copy 到机构B的目录中)
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca/chain agencyB
./generator --generate_agency_certificate ./dir_g_agency_ca ./dir_chain_ca/chain-g agencyB -g
#按照企业级部署工具的使用要求将证书放在generator/meta/目录
采用手动copy 的模式
其他机构也同时如此操作
并且将dir_chain_ca 下面的链证书 copy 给其他机构
普通版本:ca.crt、agency.crt、agency.key
国密版本:gmagency.crt、gmagency.key
如果只是为了测试验证,可以直接将dir_chain_ca 目录copy 给其他机构
3、创世区块所处的机构,修改配置文件 node_deployment.ini
生成并发节点证书
机构A
./generator --generate_all_certificates ./agencyA_node_info -g
机构B
(机构B也要修改node_deployment.ini)
./generator --generate_all_certificates ./agencyB_node_info -g
备注:这里/dir_chain_ca/chain、/dir_chain_ca/chain-g 、./dir_g_agency_ca/agency-B、/dir_g_agency_ca/agencyB
内容都要copy 给自己机构的meta文件夹中
将机构B生成的 gmcert_127.0.0.1_30300.crt、gmcert_127.0.0.1_30301.crt、peers.txt 发送到机构A的meta 目录下
其中peers.txt 改名为peersB.txt;
将机构A的peers.txt copy给机构Bmeta文件夹下,如果还有其他机构都要相互copy,这个是p2p节点通信地址的配置。
4、机构A修改conf文件夹下的group_genesis.ini,并生成群组创世区块
备注:这一步需要其他参与群组机构的节点证书和p2p连接信息。群组组成之后,
已有节点的退出和新节点的加入都不要再修改创世区块(创世区块一经创建不可再修改)。
./generator --create_group_genesis ./group -g
(同时也在generator/meta下放置了一份)
同时将group.1.genesis copy 给其他机构meta
5、机构生成所属节点
机构A
./generator --build_install_package ./meta/peersB.txt ./nodeA -g
机构B
./generator --build_install_package ./meta/peersA.txt ./nodeB -g
备注:
上面的操作,机构A已经把群组1的创世区块文件分发给了机构B,
并放置在了机构B的generator/meta/下。按照企业级部署工具生成机构下属节点部署程序的条件,
机构B还需要知道群组1内除机构B外其它所有机构的所有下属节点的p2p连接信息,
且需要放置在需要放置在generator/meta下。节点连接信息的收集过程,实际部署的时候,
由负责生成群组创世区块的机构分发给群组的下属机构比较好,因为在生成群组创世区块的时候就收集了这些信息,
避免了群组的机构之间冗余的交流成本。
6、启动节点
机构A
bash ./nodeA/start_all.sh
机构B
bash ./nodeB/start_all.sh
控制台操作
1、下载控制台
在generator 目录下,可以在一个机构中下载控制台,配置多个连接配置,
使用switch 2 (表示切换为群组2) 等命令切换
#下载控制台,该命令意为下载并执行链接中的shell脚本,运行的结果是目录下载了控制台程序的压缩包,并解压为console文件夹
2、替换国密版本的编译包
跳转到指定的控制台目录下:
#将国密版合约编译包下载到/console/目录下
curl -LO https://github.com/FISCO-BCOS/LargeFiles/raw/master/tools/solcj/solcJ-all-0.4.25-gm.jar
#将默认的合约编译包替换为国密版编译包
./replace_solc_jar.sh solcJ-all-0.4.25-gm.jar
备注:这里的编译包需要配合适合的版本,如果遇到权限 要进行权限赋予 chmod -R 777 ./
3、修改console 的配置
conf/applicationContext.xml(新增)
可以通过conf/applicationContext-sample.xml 修改名字,再修改配置操作
备注:实际部署控制台时,不一定要将控制台放在节点的部署程序里,控制台程序的目录位置不受限制,
甚至可以部署在非节点服务器上,只要将控制台的配置文件中的节点channel连接地址配置正确,
保证控制台能连接到链即可。
4、为控制台配置sdk证书
控制台在某种意义上也是一种节点,是可以查看和操作链的节点,控制台本身不参与链的运行,
但是连接链也需要认证(事实上FISCO BCOS系统中所有连接链的行为都需要认证,如使用web3sdk的业务系统等),
即sdk证书。sdk证书在证书链中与节点证书是同一级别的证书,都是由机构颁发,
因此联盟各成员机构经过联盟委员会同意后实际控制着联盟链的准入
(注意:sdk证书在FISCO BCOS链中标志着身份,同一个证书理论上可以被不同场景使用,如控制台,web3sdk项目等,但是FISCO BCOS会认为是同一个身份,所以sdk证书最好不要复用)。本次测试,各机构模拟颁发sdk证书(均是自建的证书)的操作如下:
机构A
普通版本
./generator --generate_sdk_certificate ./dir_sdk_ca ./dir_agency_ca/agencyA/
国密版本
./generator --generate_sdk_certificate ./dir_g_sdk_ca ./dir_g_agency_ca/agencyA/ -g
将控制台的国密版本配置打开
控制台的applicationContext.xml 修改配置,说明:配置文件只会在切换群组时会动态加载一次,如果控制台已经开启,这个时候修改配置文件,需要退出控制台重新加入。
指定节点证书目录,机构证书及私钥存放目录和节点名称
./dir_sdk_ca是要生成sdk 证书的位置
./dir_agency_ca 是原有机构证书等位置
将生成的sdk 证书copy 到控制台的conf目录中
5、启动控制台
cd ~/generator/console && bash ./start.sh 1