区块链技术初学--FISCO BCOS

搭链 

1.搭链流程(使用Ubuntu系统)

利用build_chain.sh脚本快速搭链

步骤一:安装依赖

安装ubuntu依赖

sudo apt install -y curl openssl wget

步骤二:安装搭链脚本

# 下载建链脚本
curl -#LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v3.6.0/build_chain.sh 
# 并赋予权限
chmod u+x build_chain.sh
#备用节点
https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/releases/v3.6.0/build_chain.sh

 步骤三:搭建非国密联盟链

例如执行下面的指令,生成一条单群组4节点的FISCO链

bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200

在输出All completed时代表成功,进行下一步


步骤四:FISCO BCOS,启动!

 启动所有节点

bash nodes/127.0.0.1/start_all.sh

如出现以下代码则表示成功

node3 start successfully pid=36430
 node2 start successfully pid=36427
 node1 start successfully pid=36433
 node0 start successfully pid=36428

*若失败则检查20200与30300端口是否被占用


步骤五:检查节点进程

检查进程是否启动

ps aux |grep -v grep |grep fisco-bcos

如出现以下代码则表示成功

fisco        35249   7.1  0.2  5170924  57584 s003  S     2:25下午   0:31.63 /home/fisco/nodes/127.0.0.1/node1/../fisco-bcos -c config.ini -g config.genesis
fisco        35218   6.8  0.2  5301996  57708 s003  S     2:25下午   0:31.78 /home/fisco/nodes/127.0.0.1/node0/../fisco-bcos -c config.ini -g config.genesis
fisco        35277   6.7  0.2  5301996  57660 s003  S     2:25下午   0:31.85 /home/fisco/nodes/127.0.0.1/node2/../fisco-bcos -c config.ini -g config.genesis
fisco        35307   6.6  0.2  5301996  57568 s003  S     2:25下午   0:31.93 /home/fisco/nodes//127.0.0.1/node3/../fisco-bcos -c config.ini -g config.genesis

 *若进程数不为4为失败,同样检查端口是否被占用。


步骤六:检查日志输出

查看每个节点的网络连接数目(以node0为例)

tail -f nodes/127.0.0.1/node0/log/* |grep -i "heartBeat,connected count"

正常情况下会每间隔10秒输出连接信息,从输出日志可看出node0与另外3个节点均有连接,网络连接正常,如下图。

info|2022-08-15 19:38:59.270112|[P2PService][Service][METRIC]heartBeat,connected count=3
info|2022-08-15 19:39:09.270210|[P2PService][Service][METRIC]heartBeat,connected count=3
info|2022-08-15 19:39:19.270335|[P2PService][Service][METRIC]heartBeat,connected count=3
info|2022-08-15 19:39:29.270427|[P2PService][Service][METRIC]heartBeat,connected count=3

2.配置控制台 

控制台提供了向FISCO BCOS节点部署合约、发起合约调用、查询链状态等功能。


步骤一:安装java环境

# ubuntu系统安装java
sudo apt install -y default-jdk

步骤二:安装控制台 

cd ~/fisco && curl -LO https://github.com/FISCO-BCOS/console/releases/download/v3.6.0/download_console.sh && bash download_console.sh

#备用
cd ~/fisco && curl -#LO https://gitee.com/FISCO-BCOS/console/raw/master/tools/download_console.sh && bash download_console.sh

步骤三:配置 

拷贝控制台配置文件

cp -n console/conf/config-example.toml console/conf/config.toml
#若节点未采用默认端口,请将文件中的20200替换成节点对应的rpc端口,可通过节点config.ini的 ``[rpc].listen_port``配置项获取节点的rpc端口。

 配置控制台证书

控制台与节点之间默认开启SSL连接,控制台需要配置证书才可连接节点。开发建链脚本在生成节点的同时,生成了SDK证书,可直接拷贝生成的证书供控制台使用。

cp -r nodes/127.0.0.1/sdk/* console/conf

步骤四:启动并使用控制台 

启动!

cd ~/fisco/console && bash start.sh

输出FISCO BCOS时成功,否则请检查conf/config.toml中节点端口配置是否正确。

用控制台获取信息

# 获取节点列表信息
[group0]: /> getGroupPeers
peer0: 48fde62f1d2dc59a65bed2e3bb9bd199de26de6b9894e2201199726d6e9e98d090bb1d7e22c931b412728a832ffacdd2727b34fc808f5a755af6bc623c44aba6
peer1: 8e510d66644a8a6caa7e031f097f604501bc42a3851b817f65a18eede0c539f2d011349d470da74cb84a3cf88dbd64a4cc18369fa09b17dac4eec9f65975ecc2
peer2: 9d7ff3f0d3abd54054a99d17a6af27c839f8f7702a4335bdb502323c87a0d7978534a2479cfedb614e1548a869efe038fc49da442b5770aa52c0cc793ca13602
peer3: f0ffa45cee35dcc1bcf1e1ef7b7c3d96590c25ba75198a28ef5ceb89dc6bec310619cb6850231018c8d5a5d698eaf1e5669118e17ea79379211bd332896aa56a

# 获取共识节点列表信息
[group0]: /> getSealerList
[
    Sealer{
        nodeID='9d7ff3f0d3abd54054a99d17a6af27c839f8f7702a4335bdb502323c87a0d7978534a2479cfedb614e1548a869efe038fc49da442b5770aa52c0cc793ca13602',
        weight=1
    },
    Sealer{
        nodeID='f0ffa45cee35dcc1bcf1e1ef7b7c3d96590c25ba75198a28ef5ceb89dc6bec310619cb6850231018c8d5a5d698eaf1e5669118e17ea79379211bd332896aa56a',
        weight=1
    },
    Sealer{
        nodeID='8e510d66644a8a6caa7e031f097f604501bc42a3851b817f65a18eede0c539f2d011349d470da74cb84a3cf88dbd64a4cc18369fa09b17dac4eec9f65975ecc2',
        weight=1
    },
    Sealer{
        nodeID='48fde62f1d2dc59a65bed2e3bb9bd199de26de6b9894e2201199726d6e9e98d090bb1d7e22c931b412728a832ffacdd2727b34fc808f5a755af6bc623c44aba6',
        weight=1
    }
]

 3.部署和调用合约

步骤一:编写HelloWorld合约

HelloWorld合约提供了两个接口get()set(),用于获取/设置合约变量name,合约内容如下:

pragma solidity >=0.6.10 <0.8.20;
contract HelloWorld {
    string name;

    constructor() public {
        name = "Hello, World!";
    }

    function get() public view returns (string memory) {
        return name;
    }

    function set(string memory n) public {
        name = n;
    }
}

步骤二: 部署HelloWorld合约 

为了方便用户快速体验,HelloWorld合约已经内置于控制台中,位于控制台目录contracts/solidity/HelloWorld.sol,参考下面命令部署

# 在控制台输入以下指令 部署成功则返回合约地址
[group0]: /> deploy HelloWorld
transaction hash: 0x796b573aece250bba891b9251b8fb464d22f41cb36e7cae407b2bd0a870f5b72
contract address: 0x6849F21D1E455e9f0712b1e99Fa4FCD23758E8F1
currentAccount: 0x7b047472a4516e9697446576f8c7fcc064f967fa

# 查看当前块高
[group0]: /> getBlockNumber
1

 步骤三:调用HelloWorld合约

# 调用get接口获取name变量,此处的合约地址是deploy指令返回的地址
[group0]: /> call HelloWorld 0x6849F21D1E455e9f0712b1e99Fa4FCD23758E8F1 get
---------------------------------------------------------------------------------------------
Return code: 0
description: transaction executed successfully
Return message: Success
---------------------------------------------------------------------------------------------
Return value size:1
Return types: (string)
Return values:(Hello, World!)
---------------------------------------------------------------------------------------------

# 查看当前块高,块高不变,因为get接口不更改账本状态
[group0]: /> getBlockNumber
1

# 调用set方法设置name
[group0]: /> call HelloWorld 0x6849F21D1E455e9f0712b1e99Fa4FCD23758E8F1 set "Hello, FISCO BCOS"
transaction hash: 0x2f7c85c2c59a76ccaad85d95b09497ad05ca7983c5ec79c8f9d102d1c8dddc30
---------------------------------------------------------------------------------------------
transaction status: 0
description: transaction executed successfully
---------------------------------------------------------------------------------------------
Receipt message: Success
Return message: Success
Return value size:0
Return types: ()
Return values:()
---------------------------------------------------------------------------------------------
Event logs
Event: {}

# 查看当前块高,因为set接口修改了账本状态,块高增加到2
[group0]: /> getBlockNumber
2

# 退出控制台
[group0]: /> exit

完结! 


*bulid_chain.sh 脚本工具

FISCO BCOS提供了bulid_chain.sh脚本帮助用户快速搭建FISCO BCOS联盟链。

bulid_chain.sh脚本用于快速生成一条链中节点的配置文件。

已学习使用选项

-P

指定节点P2P和RPC服务的监听的起始端口,P2P服务默认以30300为起始端口,RPC服务默认以20200为起始端口。

# 两个节点的P2P服务分别占用30300和30301端口
# RPC服务分别占用20200和20201端口
$ bash build_chain.sh -p 30300,20200 -l 127.0.0.1:2

-l

生成节点的IP与对应IP上部署的区块链节点数目,参数格式为 ip1:nodeNum1, ip2:nodeNum2


-c

脚本的命令,支持 deploy 与 expand,默认为deploy:

  • deploy: 用于部署新节点。

  • expand 用于节点扩容。


-h

查看脚本使用用法。

节点配置文件组织结构

生成的节点配置主要如下:

  • 根证书和根证书私钥: 位于指定的配置生成目录的ca文件夹。

  • 节点连接证书: 每个节点conf目录下均存放节点的网络连接证书,非国密节点证书和私钥主要包括ca.crt, ssl.crt, sslkey,国密节点证书和私钥主要包括sm_ca.crt, sm_ssl.crt, sm_enssl.crt, sm_enssl.key, sm_ssl.key

  • 节点签名私钥: 节点conf目录下的node.pem,主要位于共识模块的签名。

  • SDK连接证书: 由build_chain.sh生成,客户端可拷贝该证书与节点建立SSL连接。

  • 节点配置文件: 节点目录下的config.iniconfig.genesis配置,前者主要配置链信息,后者主要配置创世块。

  • 启停脚本start.shstop.sh,用于启动和停止节点。

  • 启停监控脚本monitor/start_monitor.shmonitor/stop_monitor.sh,用于启动和停止节点监控。

列表如下

nodes/
├── monitor
│   ├── grafana # grafana配置文件
│   ├── prometheus # prometheus配置文件
│   ├── start_monitor.sh # 启动脚本,用于开启监控
│   ├── stop_monitor.sh # 停止脚本,用于停止监控
│   ├── compose.yaml # docker-compose配置文件
├── 127.0.0.1
│   ├── fisco-bcos # 二进制程序
│   ├── mtail # 二进制程序
│   ├── node0 # 节点0文件夹
│   │   ├── mtail # mtail配置文件夹
│   │   │   ├── start_mtail_monitor.sh  # 启动脚本,用于启动该节点mtail程序
│   │   │   ├── stop_mtail_monitor.sh   # 停止脚本,用于停止该节点mtail程序
│   │   │   ├── node.mtail # mtail配置文件
│   │   ├── conf # 配置文件夹
│   │   │   ├── ca.crt # 链根证书
│   │   │   ├── cert.cnf
│   │   │   ├── ssl.crt # ssl证书
│   │   │   ├── ssl.key # ssl连接证书私钥
│   │   │   ├── node.pem # 节点签名私钥文件
│   │   │   ├── node.nodeid # 节点id,公钥的16进制表示
│   │   ├── config.ini # 节点主配置文件,配置监听IP、端口、证书、日志等
│   │   ├── config.genesis # 创世配置文件,共识算法类型、共识超时时间和交易gas限制等
│   │   ├── nodes.json # 节点json信息,展示节点的ip和端口,示例:{"nodes": [127.0.0.1:30300]}
│   │   ├── start.sh # 启动脚本,用于启动节点
│   │   └── stop.sh # 停止脚本,用于停止节点
│   ├── node1 # 节点1文件夹
│   │.....
│   ├── node2 # 节点2文件夹
│   │.....
│   ├── node3 # 节点3文件夹
│   │.....
│   ├── sdk # SDK证书
│   │   ├── ca.crt # SSL连接根证书
│   │   ├── cert.cnf # 证书配置
│   │   ├── sdk.crt # SDK根证书
│   │   ├── sdk.key # SDK证书私钥
│   ├── start_all.sh # 启动脚本,用于启动所有节点
│   ├── stop_all.sh # 停止脚本,用于停止所有节点

容易遇到的问题 

在下载脚本时,如果网络不好会报错或者下载乱码/空文档,可以换下载源或者开加速器解决。 


4.WeBASE-Front搭建

步骤一:配置Java环境(jdk1.8)

解压到 /usr/local 下
改名 jdk1.8
如下配置 profile 文件

export JAVA_HOME=/usr/local/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile

步骤二:准备工作

(1)下载安装包

wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/v1.5.5/webase-front.zip

(2)解压

unzip webase-front.zip
cd webase-front

(3)拷贝sdk证书文件(build_chain的时候生成的)

将节点所在目录nodes/${ip}/sdk下的所有文件拷贝到当前conf目录,供SDK与节点建立连接时使用(SDK会自动判断是否为国密,且是否使用国密SSL)

  • 链的sdk目录包含了ca.crt, sdk.crt, sdk.keygm文件夹,gm文件夹包含了国密SSL所需的证书
  • 拷贝命令可使用cp -r nodes/${ip}/sdk/* ./conf/
  • 注,只有在建链时手动指定了-G(大写)时节点才会使用国密SSL

    步骤三:启动!

服务启停命令如下

启动: bash start.sh
停止: bash stop.sh
检查: bash status.sh 

启动成功将出现如下日志

Application() - main run success...

步骤四:状态检查

 成功部署后,可以根据以下步骤确认各个子服务是否启动成功

(1)检查各子系统进程

通过ps命令,检查节点与节点前置的进程是否存在

  • 包含:节点进程nodeXX,节点前置进程webase.front

检查方法如下,若无输出,则代表进程未启动,需要到webase-front/log中查看日志的错误信息,并根据错误提示或根据WeBASE-Front常见问题进行错误排查

检查节点进程

$ ps -ef | grep node

输出如下,此处部署了两个节点node0, node1

root     29977     1  1 17:24 pts/2    00:02:20 /root/fisco/webase/webase-deploy/nodes/127.0.0.1/node1/../fisco-bcos -c config.ini
root     29979     1  1 17:24 pts/2    00:02:23 /root/fisco/webase/webase-deploy/nodes/127.0.0.1/node0/../fisco-bcos -c config.ini

检查节点前置webase-front的进程

$ ps -ef | grep webase.front 

输出如下

root     31805     1  0 17:24 pts/2    00:01:30 /usr/local/jdk/bin/java -Djdk.tls.namedGroups=secp256k1 ... conf/:apps/*:lib/* com.webank.webase.front.Application

(2)检查进程端口

通过netstat命令,检查节点与节点前置的端口监听情况

检查方法如下,若无输出,则代表进程端口监听异常,需要到webase-front/log中查看日志的错误信息,并根据错误提示或根据WeBASE-Front常见问题进行错误排查

检查节点channel端口(默认为20200)是否已监听

$ netstat -anlp | grep 20200

输出如下

tcp        0      0 0.0.0.0:20200           0.0.0.0:*               LISTEN      29069/fisco-bcos

检查webase-front端口(默认为5002)是否已监听

$ netstat -anlp | grep 5002

输出如下

tcp6       0      0 :::5002                 :::*                    LISTEN      2909/java 

步骤五:访问

访问 http://{deployIP}:{frontPort}/WeBASE-Front,示例

http://localhost:5002/WeBASE-Front 

开放节点前置端口:如果希望通过浏览器(Chrome Safari或Firefox)直接访问webase-front节点前置的页面,则需要开放节点前置端口frontPort(默认5002)


                                                        容易遇到的问题 

==============      Starting WeBASE-Front      ==============
==============WeBASE-Front start fail. Please check through the log file (default path: ./webase-front/log/). ==============

==============      Starting WeBASE      ==============
==============WeBASE-Node-Manager start fail. Please check through the log file (default path: ./webase.deploy/log/). ==============

=======================================================
Server com.webank.webase.front.Application Port 5002.....................[Failed]. Please check message through the log file (default path:./log/)
======================================================= 
————————————————

              原因为5000端口未开放

解决如下

sudo apt-get install iptables

安装相应持续化规则扩展包,安装iptables-persistent后 开放端口需要root权限 

sudo apt-get install iptables-persistent

开放端口5000,5002

sudo iptables -I INPUT -p tcp --dport 5000 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 5002 -j ACCEPT

扩容节点

1.下载证书脚本

(在nodes/127.0.0.1下运行)

curl -#LO https://gitee.com/FISCO-BCOS/FISCO-BCOS/raw/master-2.0/tools/gen_node_cert.sh

     DLC-星型多群组部署

  1. 打开build_chain.sh可以修改默认共识算法和过期天数
  2. 多群组搭建可以通过复制BcosBuilder/pro/conf中的build-toml,按要求修改配置并重命名为config.toml。随后用-c指定配置文件。
  3. Init_auth_address=””获取:
    curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/tools/get_gm_account.sh && chmod u+x get_gm_account.sh && bash get_gm_account.sh

    在执行之后有以下输出,使用的init_auth_address就是使用下面的Account Address

    [INFO] Account Address   : 0xd5eff0641c2f69a8deed9510e374aa3e94066a66
    [INFO] Private Key (pem) : accounts/0xd5eff0641c2f69a8deed9510e374aa3e94066a66.pem
    [INFO] Public  Key (pem) : accounts/0xd5eff0641c2f69a8deed9510e374aa3e94066a66.pem.pub

  • 19
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值