Fisco Bcos链

Li Guangqiao - 08/03/2024

blockchain bcos

Fisco Bcos

国密链部署

新机构接入已有链

新节点接入所需要的文件:

脚本执行步骤:

  1. 将已有链的证书拷贝到新机构的目录下,这里分别将非国密证书和国密证书文件夹命名为chain_cachain_ca_gm

  2. 利用链证书生成新机构的国密证书和私钥以及链证书。

    ./generator --generate_agency_certificate ./agency_ca ./chain_ca kingdom
    ./generator --generate_agency_certificate ./agency_ca_gm ./chain_ca_gm kingdom -g
    
    agency_ca/
    └── kingdom
        ├── agency.crt 机构非国密证书
        ├── agency.key 机构私钥
        └── ca.crt 链证书
    1 directory, 3 files
    
    agency_ca_gm/
    └── kingdom
        ├── gmagency.crt 机构非国密证书
        ├── gmagency.key 机构国密私钥
        └── gmca.crt 国密链证书
    1 directory, 3 files
    
  3. 拷贝到meta目录下:

    cp  ./agency_ca/kingdom/* ./meta
    cp  ./agency_ca_gm/kingdom/* ./meta
    
  4. 修改节点信息配置文件node_deployment.ini

    主要包含所在群组、机构的节点以及每个节点的p2p地址、jrpc地址和channel地址。

  5. 生成节点信息

     ./generator --generate_all_certificates ./node_info -g
    
    node_info/
    ├── gmcert_127.0.0.1_30300.crt 节点证书
    ├── gmcert_127.0.0.1_30301.crt 节点证书
    └── peers.txt 机构所有节点地址
    
  6. 拷贝群组创世文件到meta目录下

  7. 生成机构所属节点

    ./generator --build_install_package ./node_info/peers.txt ./nodes -g
    
  8. 修改节点配置文件config.ini中bcos的版本为2.8.0

    sed -i "s/2.9.0/2.8.0/g" nodes/node_127.
    0.0.1_3030*/config.ini
    
  9. 启动节点

     bash nodes/start_all.sh
    

注意:

异地组网实验

公网实验环境准备

  1. 两台异网设备(这里是为了真实模拟外网组网环境,实际上本机上把连接的节点地址都换成对应的本机公网地址也可以)。

  2. fiscobcos版本为2.8.0。本人本地链已经搭建完毕,本地链在设备1

  3. 从本地链的目录中找到certgmcert、二进制文件fisco-bcosstart.shstop.sh以及任意node目录下的config.ini以及node/conf下的group.1.genesisgroup.1.ini,拷贝备用,我这里拷贝到了设备2的backup目录·。

  4. 下载节点生成脚本gen_node_cert.sh参考官方文档,构建项目结构

    .
    ├── cert
    ├── fisco-bcos
    ├── gen_node_cert.sh
    ├── gmcert
    

    生成节点bash gen_node_cert.sh -c ./cert/agencyA -o node -g ../gmcert/agencyA-gm/

    .
    ├── cert
    ├── fisco-bcos
    ├── gen_node_cert.sh
    ├── gmcert
    └── node
    
  5. 拷贝文件到对应的目录

    cp ../backup/config.ini ./node
    cp ../backup/group.1.* ./node/conf/
    cp ../backup/*.sh ./node/
    
  6. 设备1的本地链选取至少一个节点服务基于cpolar做的内网穿透,获取穿透后的公网ip,得到的公网ip格式为{协议}://{ip}:{端口号}tcp://x.SSS.SSSSS.SS:xxxxx,ip是做过字符转换处理的,可以通过telnet {ip}{port}知道真实的ip:

    $ telnet x.SSS.SSSSS.SS xxxxx
    Trying xxx.xx.xx.xxx...
    Connected to x.SSS.SSSSS.SS.
    Escape character is '^]'.
    Connection closed by foreign host.
    

    说明:

    1. x代表数值
    2. S代表字符

    注意: xxx.xx.xx.xxx为真实ip,解释一下为什么需要获取真实ip:因为我的另一台实验设备运行fisco-bcos文件时,对于2.tcp.cpolar.top域名类型处理总是报错,而另一台设备则没有问题,初步判断是Ubuntu 22..04 和20版本在某些细节处理不一样,而bcos恰恰用了。需要真实错误原因,需要进行调试方可知晓。

  7. 配置config.ini

    [p2p]
        listen_ip=0.0.0.0
        listen_port=30306
        node.1=xxx.xx.xx.xxx:xxxxx
        node.4=127.0.0.1:30306
    

实验过程

  1. 启动设备1的本地链

  2. 启动设备2的节点bash start.sh

  3. 检查设备2的日志

    [P2P][Service] heartBeat,connected count=1
    

    说明节点已经与设备1本地链的节点建立了连接。

实验结果

只要公网通的情况下,组网肯定没问题。

其他问题

现在需要理解清楚handshakeClient和handshakeServer的意思,对于节点存在何种影响。

目前经常出现的错误就是handshakeClient失败

参考文档

  1. 扩容一个新节点 — FISCO BCOS 2.0 v2.9.0 文档 (fisco-bcos-documentation.readthedocs.io)
Li Guangqiao
Li Guangqiao

一个正在转rust的ExtJs前端工程师。迷信rust的整体发展,十分相信rust在各个领域都能发光发热,至少目前rust在很多领域上验证了其安全性、易维护性。但说实话对于我这种菜鸡也是真的难上手哈哈哈~~。 思路总结:

  • 万物诞生都会有一个需求来源,每一个改变都是为了解决某个问题,最后应该考虑如何去做
  • 学会掌握一些宏观的知识和理论:系统论、还原论
  • 工程化思想,如何描述整体,从整体架构到模块关联等 故学习东西应该像看地图一样,先看整体了解整体的结构,然后再聚焦每一个模块,对于模块的学习,思考三个问题,“是什么?”、“为什么?”、“怎么做?”;那么设计一个东西时也应该去考虑整体性和关联性。

有关于未来的发展,以下是鄙人的粗浅的观点:

  • 编程语言未来应该是每个人必备的工具
  • 未来的交互方式应该会以语言交互为主流
  • 下一个去中心化的技术方案出来之前,区块链依然是web3建立价值体系的基础技术方案,如何将现实价值和虚拟价值联通是进入数字世界的一个大难题。
  • 未来注定是AI的世界。AI的进化会伴随绝大部分人的退化,届时除了尖端人才,人们学习的重心会放在何处?