2. 搭建第一个区块链网络¶
标签:搭建区块链网络
区块链教程
HelloWorld
控制台调用合约
重要
相关软件和环境版本说明!请查看
本章介绍使用FISCO BCOS底层区块链系统所需要的必要安装和配置。本章通过在单机上部署一条4节点的FISCO BCOS联盟链,帮助用户掌握FISCO BCOS部署流程,请参考硬件和系统要求使用支持的硬件和平台操作。
注解
1. 搭建Air版本FISCO BCOS联盟链¶
本节以搭建单群组FISCO BCOS链为例操作,使用开发部署工具build_chain.sh
脚本在本地搭建一条Air版本的4节点的FISCO BCOS链,以Ubuntu 18.04 64bit系统为例操作。
第一步. 安装依赖¶
安装macOS依赖
# 最新homebrew默认下载的为openssl@3,需要指定版本openssl@1.1下载
brew install openssl@1.1 curl wget
安装ubuntu依赖
sudo apt install -y curl openssl wget
安装centos依赖
sudo yum install -y curl openssl openssl-devel wget
第二步. 创建操作目录,下载安装脚本¶
注解
如果因为网络问题导致长时间无法下载build_chain.sh脚本,请尝试 curl -#LO https://gitee.com/FISCO-BCOS/FISCO-BCOS/releases/download/v3.11.0/build_chain.sh && chmod u+x build_chain.sh
# 创建操作目录
cd ~ && mkdir -p fisco && cd fisco
# 下载建链脚本
curl -#LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v3.11.0/build_chain.sh && chmod u+x build_chain.sh
# Note: 若访问git网速太慢,可尝试如下命令下载建链脚本:
curl -#LO https://gitee.com/FISCO-BCOS/FISCO-BCOS/releases/download/v3.11.0/build_chain.sh && chmod u+x build_chain.sh
第三步. 搭建4节点非国密联盟链¶
注解
请确保机器的30300~30303,20200~20203端口没有被占用。
在fisco目录下执行下面的指令,生成一条单群组4节点的FISCO链:
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200
注解
若下载fisco-bcos二进制或get_account.sh脚本失败,建议手动访问github release页面获取最新二进制,并使用-e命令指定节点
注解
其中-p选项指定起始端口,分别是p2p监听端口、rpc监听端口
Air版搭建脚本build_chain.sh介绍文档 参考这里
命令成功后会输出All completed
:
[INFO] Generate ca cert successfully!
Processing IP:127.0.0.1 Total:4
writing RSA key
[INFO] Generate ./nodes/127.0.0.1/sdk cert successful!
writing RSA key
[INFO] Generate ./nodes/127.0.0.1/node0/conf cert successful!
writing RSA key
[INFO] Generate ./nodes/127.0.0.1/node1/conf cert successful!
writing RSA key
[INFO] Generate ./nodes/127.0.0.1/node2/conf cert successful!
writing RSA key
[INFO] Generate ./nodes/127.0.0.1/node3/conf cert successful!
[INFO] Downloading get_account.sh from https://gitee.com/FISCO-BCOS/console/raw/master/tools/get_account.sh...
############################################################################################################################################################### 100.0%
[INFO] Admin account: 0x4c7239cfef6d41b7322c1567f082bfc65c69acc5
[INFO] Generate uuid success: 167A2233-5444-4CA4-8792-C8E68130D5FC
[INFO] Generate uuid success: CC117CAF-224C-4940-B548-6DED31D24B18
[INFO] Generate uuid success: 16B5E4BD-51C1-416E-BF44-6D1BB05F7666
[INFO] Generate uuid success: 60DD77F2-F3A5-49F2-8C7F-8151E8823C6D
==============================================================
[INFO] GroupID : group0
[INFO] ChainID : chain0
[INFO] fisco-bcos path : bin/fisco-bcos
[INFO] Auth mode : false
[INFO] Start port : 30300 20200
[INFO] Server IP : 127.0.0.1:4
[INFO] SM model : false
[INFO] enable HSM : false
[INFO] Output dir : ./nodes
[INFO] All completed. Files in ./nodes
第四步. 启动FISCO BCOS链¶
启动所有节点
bash nodes/127.0.0.1/start_all.sh
启动成功会输出如下信息。否则请使用netstat -an |grep tcp
检查机器30300~30303, 20200~20203
端口是否被占用。
try to start node0
try to start node1
try to start node2
try to start node3
node3 start successfully pid=36430
node2 start successfully pid=36427
node1 start successfully pid=36433
node0 start successfully pid=36428
第五步. 检查节点进程¶
检查进程是否启动
ps aux |grep -v grep |grep fisco-bcos
正常情况会有类似下面的输出; 如果进程数不为4,则进程没有启动(一般是端口被占用导致的)
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
第六步. 检查日志输出¶
查看每个节点的网络连接数目
以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环境(推荐使用java 14),安装命令如下:
# ubuntu系统安装java
sudo apt install -y default-jdk
# centos系统安装java
sudo yum install -y java java-devel
第二步. 下载控制台¶
cd ~/fisco && curl -LO https://github.com/FISCO-BCOS/console/releases/download/v3.7.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
第四步. 启动并使用控制台¶
注解
请确保机器的30300~30303,20200~20203端口没有被占用。
控制台的配置方法和命令请参考 这里
启动
cd ~/fisco/console && bash start.sh
输出下述信息表明启动成功 否则请检查conf/config.toml中节点端口配置是否正确
=============================================================================================
Welcome to FISCO BCOS console(3.4.0)!
Type 'help' or 'h' for help. Type 'quit' or 'q' to quit console.
________ ______ ______ ______ ______ _______ ______ ______ ______
| | \/ \ / \ / \ | \ / \ / \ / \
| $$$$$$$$\$$$$$| $$$$$$| $$$$$$| $$$$$$\ | $$$$$$$| $$$$$$| $$$$$$| $$$$$$\
| $$__ | $$ | $$___\$| $$ \$| $$ | $$ | $$__/ $| $$ \$| $$ | $| $$___\$$
| $$ \ | $$ \$$ \| $$ | $$ | $$ | $$ $| $$ | $$ | $$\$$ \
| $$$$$ | $$ _\$$$$$$| $$ __| $$ | $$ | $$$$$$$| $$ __| $$ | $$_\$$$$$$\
| $$ _| $$_| \__| $| $$__/ | $$__/ $$ | $$__/ $| $$__/ | $$__/ $| \__| $$
| $$ | $$ \\$$ $$\$$ $$\$$ $$ | $$ $$\$$ $$\$$ $$\$$ $$
\$$ \$$$$$$ \$$$$$$ \$$$$$$ \$$$$$$ \$$$$$$$ \$$$$$$ \$$$$$$ \$$$$$$
=============================================================================================
用控制台获取信息
# 获取节点列表信息
[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
至此,我们完成了第一条FISCO-BCOS链的搭建、控制台的配置和使用,并部署和调用了第一个合约。关于Pro版本FISCO BCOS的搭建、配置和使用请参考这里。