arm架构上搭建第一个区块链网络FISCO BCOS
文章目录
- 1. 搭建单群组FISCO BCOS联盟链
- 一、 环境
- 二、 安装依赖
- 三、 创建操作目录,并下载安装脚本
- 四、 搭建单群组4节点联盟链
- 五、 启动FISCO BCOS链
- 六、 检查进程
- 七、 检查日志输出
- 2. 配置及使用控制台
- 一、 准备依赖
- 二、 启动并使用控制台
- 3. 部署及调用HelloWorld合约
- 工作目录
1. 搭建单群组FISCO BCOS联盟链
一、 环境
arm架构ubuntu18.04
二、 安装依赖
sudo apt install -y openssl curl
三、 创建操作目录,并下载安装脚本
## 创建操作目录
cd ~ && mkdir -p fisco && cd fisco## 下载脚本
curl -#LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v2.11.0/build_chain.sh && chmod u+x build_chain.sh

可以看到脚本已经下载完成
四、 搭建单群组4节点联盟链
在fisco目录下执行命生成一条单组群4节点的FISCO链
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545
-l:是指从命令行输入ip,其中127.0.0.1是ip,:4表示生成4个节点-p:是端口
执行上述命令得到的结果,这里面有一个报错是openssl在生成证书的时候需要随机数,尝试从/home/zc/.rnd文件中读取随机数,而这个文件不存在,但openssl比较智能会从其他地方读取能生成随机数的文件。
可以看到All completed Files in /home/zc/fisco/nodes,这代表已经成功。

可以看到fisco目录下多了一个nodes文件,其由三部分组成
127.0.0.1:这是我们创建FISCO链时命令中指定的ip地址,这个文件中存放了所有计划部署在这台机器上的节点文件,如下图中由于命令中我们创建了4个节点,所以有node0、node1、node2、node3这三个节点文件,start_all.sh (一键启动这4个节点的脚本),stop_all.sh (一键停止这4个节点的脚本)、sdk/ (存放供 SDK/Console 连接用的证书和配置)、download_console.sh (下载控制台的脚本)cert:这是证书颁发中心存放这条联盟链的根证书,里面最重要的文件是 ca.crt (CA证书) 和 ca.key (CA私钥),之后所有节点的证书都是由这个ca.cert签发的。cerf.cnf:证书配置文件,一个openssl使用的配置模版文件,定义了build_chain.sh 脚本在生成证书时应该遵循的规则。
nodes/
├── 127.0.0.1/ <-- “本地战区”
│ ├── node0/ <-- 节点0 (配置文件, 数据, 日志...)
│ ├── node1/ <-- 节点1
│ ├── node2/ <-- 节点2
│ ├── node3/ <-- 节点3
│ ├── sdk/ <-- SDK/控制台连接用的证书
│ ├── fisco-bcos <-- 这是区块链的可执行文件 ,运行这个程序,区块链节点就启动了
│ └── start_all.sh <-- 启动脚本
│
├── cert/ <-- “公安部”(根证书存放处)
│ ├── ca.crt
│ └── ca.key
│
└── cert.cnf <-- “身份证填写规范”


五、 启动FISCO BCOS链
运行启动命令
bash nodes/127.0.0.1/start_all.sh
这里出了点问题,arm64架构的需要自己编译源码获取fisco-bcos可执行程序。

这里先安装所需要的依赖
sudo apt install -y g++ libssl-dev openssl cmake git build-essential autoconf texinfo flex patch bison libgmp-dev zlib1g-dev
然后克隆源码
git clone https://gitee.com/FISCO-BCOS/FISCO-BCOS.git
对源码进行编译,很幸运又遇到cmake版本太久了。解决转安装新版本cmake

cd FISCO-BCOS
git checkout master-2.0
mkdir -p build && cd build
然后执行
cmake ..

可以看到在更新完cmake后编译成功了,并也build file放在了我们执行编译命令的目录下。
最后执行
make
emmm这里太新的cmake也是不行的会报下面错误,接着换cmake版本换成3.x版本的

换完之后需要先清除之前版本cmake生成的东西,也就是在build目录下执行下面命令
rm -rf *
重新执行
cmake ..
make
执行make的时候还会遇到一些问题:
第一个问题:
automake版本不匹配,automake-1.15太低了,要求automake-1.16,但是unbuntu的软件源只有1.15的源,所以需要手动下载automake1.16
下载完之后进入mhd文件中
cd /home/zc/FISCO-BCOS/deps/src/mhd/
清理旧的配置
make clean
执行自动刷新命令
autoreconf -fvi
这个问题解决之后有遇到了boost下载不下来的问题,这个问题可能是网络原因导致的,网络原因导致boost库总是下载一半就中断,然后sha256去用这个库hash得到的结果不对,这个问题通过手动下载然后放到/home/zc/FISCO-BCOS/deps/src/目录下解决,链接在下面
https://jaist.dl.sourceforge.net/project/boost/boost/1.85.0/boost_1_85_0.tar.bz2
编译太慢放到晚上睡前编译,早上看到下面的错误,这说明之前的编译指令make -j8不行,开了太多进程,而我的设备内存又太小,只有4g,导致C++编译器直接把进程杀死了,进而导致编译失败了,这里把编译指令换乘make -j4就好了。
c++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-7/README.Bugs> for instructions.
libconsensus/CMakeFiles/consensus.dir/build.make:134: recipe for target 'libconsensus/CMakeFiles/consensus.dir/pbft/PBFTSealer.cpp.o' failed
make[2]: *** [libconsensus/CMakeFiles/consensus.dir/pbft/PBFTSealer.cpp.o] Error 4
make[2]: *** Waiting for unfinished jobs....
CMakeFiles/Makefile2:2187: recipe for target 'libconsensus/CMakeFiles/consensus.dir/all' failed
make[1]: *** [libconsensus/CMakeFiles/consensus.dir/all] Error 2
Makefile:135: recipe for target 'all' failed
make: *** [all] Error 2
历尽千辛万苦终于编译成功了

编译fisco-bcos链接参考编译步骤链接
编译成功后,需要将~/fisco/nodes/127.0.0.1/fisco-bcos这个可执行文件替换成我们刚才编译的二进制文件。
刚才的二进制文件在build/bin中,在linux中可执行文件是绿色

重新执行本节开始的时候的命令,这次可以看到四个node start successfully

六、 检查进程
ps -ef | grep -v grep | grep fisco-bcos
ps:显示当前正在运行进程状态 -e显示所有用户进程 -f是现实进程的完整信息。| grep -v grep:这是grep用法的一个技巧,-v是将搜索到的内容排除,这里是排除grep程序本身| grep fisco-bcos:将排除后的内容通过管道传递给grep搜索包含fisco-bcos的内容

七、 检查日志输出
tail -f nodes/127.0.0.1/node0/log/log* | grep connected
tail命令用于查看文件尾部的内容,-f会持续关注,如果文件被追加内容会立即被tail发现- 通过管道传递给grep,查找connected中相关的内容。
可以看到node0和另外三个节点有链接

检查是否存在共识
tail -f /nodes/127.0.0.1/node0/log/log* | grep +++
看到下面Generating seal on,表示共识正常。

2. 配置及使用控制台
一、 准备依赖
安装jdk
sudo apt install -y default-jdk

获取下载控制台的脚本,同时执行这个安装控制台的脚本
cd ~/fisco && curl -#LO https://gitee.com/FISCO-BCOS/console/raw/master-2.0/tools/download_console.sh && bash download_console.sh
拷贝控制台配置文件,可以看到执行cp命令后console/conf中多了一个文件
# 最新版本控制台使用如下命令拷贝配置文件
cp -n console/conf/config-example.toml console/conf/config.toml

配置控制台证书
cp -r nodes/127.0.0.1/sdk/* console/conf/
可以看到执行上面命令后该文件夹下多了ca.crt 、cert.cnf、 sdk.crt 、sdk.key这几个文件

二、 启动并使用控制台
启动控制台
cd ~/fisco/console && bash start.sh
执行控制台的启动脚本

尝试用控制台获取信息

3. 部署及调用HelloWorld合约
这是HelloWorld合约的内容,主要就是提供了两个方法get()和set()用于获取和设置合约变量。
pragma solidity ^0.4.24;contract HelloWorld {string name;function HelloWorld() {name = "Hello, World!";}function get()constant returns(string) {return name;}function set(string n) {name = n;}
}
其实console已经把HelloWorld.sol这份合约写好了放在console/contracts/solidity路径下面,我们直接去调用这份合约就好了。

先部署合约,在控制台deploy,部署成功返回了合约地址
deploy HelloWorld

调用合约中的方法
call HelloWorld contract address get

由于get接口不更改账本状态,所以块高不变,但是set方法会改变账本状态,改变之后块高增加了一
call HelloWorld contract address set "Hello, FISCO BCOS"

退出控制台命令,没有clear命令。
quit

至此单机上的区块链网络就搭建完毕了
工作目录
fisco目录下面有:
- console:这是 FISCO BCOS 的控制台目录,是一个基于 Java 的客户端工具,是开发者或管理员与区块链进行交互的入口。通过运行这个目录下的 start.sh 脚本来启动一个命令行界面,然后可以在里面:部署和调用智能合约、查询区块高度、查询交易回执、管理节点状态等。
- FISCO-BCOS:存放的是 FISCO BCOS 的核心可执行文件
- nodes
- webase-deploy:这个目录与 WeBase (WeBank Blockchain Application Software Stack) 相关,WeBase 是一个为 FISCO BCOS 打造的区块链中间件平台,提供了图形化的管理界面。可以使用它来更方便地监控节点状态、管理私钥、部署合约、查看交易等。这个目录包含了部署 WeBase 平台所需的脚本和配置文件。
- build_chain.sh:用来从零开始”搭建整条区块链的入口脚本
- download_console.sh:控制台下载脚本
- ipconf:IP 配置文件
