关于区块链:FISCO-BCOS-搭建第一个区块链网络

46次阅读

共计 8649 个字符,预计需要花费 22 分钟才能阅读完成。

本章介绍 FISCO BCOS 所需的必要装置和配置。本章通过在单机上部署一条 4 节点的 FISCO BCOS 联盟链,帮忙用户把握 FISCO BCOS 部署流程。

1. 搭建单群组 FISCO BCOS 联盟链

本节以搭建单群组 FISCO BCOS 链为例操作。应用开发部署工具 build_chain.sh 脚本在本地搭建一条 4 节点的 FISCO BCOS 链,以 Ubuntu 16.04 64bit 零碎为例操作。

* 注解

  • 若需在已有区块链上进行降级,请转至版本及兼容章节。
  • 搭建多群组的链操作相似。
  • 本节应用预编译的动态 fisco-bcos 二进制文件,在 CentOS 7 和 Ubuntu 16.04 64bit 上通过测试。
  • 应用 docker 模式搭建,供有丰盛 docker 教训和容器化部署需要的用户参考。

第一步. 装置依赖

开发部署工具 build_chain.sh 脚本依赖于 openssl, curl,依据您应用的操作系统,应用以下命令装置依赖。

装置 macOS 依赖

最新 homebrew 默认下载的为 openssl@3,须要指定版本 openssl@1.1 下载
brew install openssl@1.1 curl

openssl version
OpenSSL 1.1.1n  15 Mar 2022

装置 ubuntu 依赖

sudo apt install -y openssl curl

装置 centos 依赖

sudo yum install -y openssl openssl-devel

第二步. 创立操作目录, 下载安装脚本

## 创立操作目录
cd ~ && mkdir -p fisco && cd fisco

## 下载脚本
curl -#LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v2.9.1/build_chain.sh && chmod u+x build_chain.sh

* 注解

  • 如果因为网络问题导致长时间无奈下载 build_chain.sh 脚本,请尝试:
    curl -#LO osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/… && chmod u+x build_chain.sh

第三步. 搭建单群组 4 节点联盟链

在 fisco 目录下执行上面的指令,生成一条单群组 4 节点的 FISCO 链。请确保机器的 3030030303,2020020203,8545~8548 端口没有被占用。

* 注解

  • 国密版本请执行:bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545 -g -G
  • 其中 - g 示意生成国密配置,- G 示意应用国密 SSL 连贯
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545

* 注解

  • 其中 - p 选项指定起始端口,别离是:p2p_port,channel_port,jsonrpc_port
  • 出于安全性和易用性思考,v2.3.0 版本最新配置将 listen_ip 拆分成 jsonrpc_listen_ip 和 channel_listen_ip,但仍保留对 listen_ip 的解析性能
  • 为便于开发和体验,channel_listen_ip 参考配置是 0.0.0.0,出于平安思考,请依据理论业务网络状况,批改为平安的监听地址,如:内网 IP 或特定的外网 IP

命令执行胜利会输入 All completed。如果执行出错,请查看 nodes/build.log 文件中的错误信息。

Checking fisco-bcos binary...Binary check passed.==============================================================Generating CA key...==============================================================Generating keys ...Processing IP:127.0.0.1 Total:4 Agency:agency Groups:1==============================================================Generating configurations...Processing IP:127.0.0.1 Total:4 Agency:agency Groups:1==============================================================[INFO] Execute the download_console.sh script in directory named by IP to get FISCO-BCOS console.e.g.  bash /home/ubuntu/fisco/nodes/127.0.0.1/download_console.sh==============================================================[INFO] FISCO-BCOS Path   : bin/fisco-bcos[INFO] Start Port        : 30300 20200 8545[INFO] Server IP         : 127.0.0.1:4[INFO] Output Dir        : /home/ubuntu/fisco/nodes[INFO] CA Key Path       : /home/ubuntu/fisco/nodes/cert/ca.key==============================================================[INFO] All completed. Files in /home/ubuntu/fisco/nodes

第四步. 启动 FISCO BCOS 链

  • 启动所有节点

bash nodes/127.0.0.1/start_all.sh

启动胜利会输入相似上面内容的响应。否则请应用 netstat -an | grep tcp 查看机器的 30300 ~ 30303,20200 ~ 20203,8545 ~ 8548 端口是否被占用。

try to start node0try to start node1try to start node2try to start node3 node1 start successfully node2 start successfully node0 start successfully node3 start successfully

第五步. 查看过程

  • 查看过程是否启动

ps -ef | grep -v grep | grep fisco-bcos

失常状况会有相似上面的输入;如果过程数不为 4,则过程没有启动(个别是端口被占用导致的)

fisco       5453     1  1 17:11 pts/0    00:00:02 /home/ubuntu/fisco/nodes/127.0.0.1/node0/../fisco-bcos -c config.inifisco       5459     1  1 17:11 pts/0    00:00:02 /home/ubuntu/fisco/nodes/127.0.0.1/node1/../fisco-bcos -c config.inifisco       5464     1  1 17:11 pts/0    00:00:02 /home/ubuntu/fisco/nodes/127.0.0.1/node2/../fisco-bcos -c config.inifisco       5476     1  1 17:11 pts/0    00:00:02 /home/ubuntu/fisco/nodes/127.0.0.1/node3/../fisco-bcos -c config.ini

第六步. 查看日志输入

如下,查看节点 node0 链接的节点数

tail -f nodes/127.0.0.1/node0/log/log*  | grep connected

失常状况会不停地输入连贯信息,从输入能够看出 node0 与另外 3 个节点有连贯。

info|2019-01-21 17:30:58.316769| [P2P][Service] heartBeat,connected count=3info|2019-01-21 17:31:08.316922| [P2P][Service] heartBeat,connected count=3info|2019-01-21 17:31:18.317105| [P2P][Service] heartBeat,connected count=3

执行上面指令,查看是否在共识

tail -f nodes/127.0.0.1/node0/log/log*  | grep +++

失常状况会不停输入 ++++Generating seal,示意共识失常。

info|2020-12-22 17:24:43.729402|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=1,hash=2e133146...info|2020-12-22 17:24:47.740603|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=1,hash=eb199760...

2. 配置及应用控制台

在控制台链接 FISCO BCOS 节点,实现查问区块链状态、部署调用合约等性能,可能疾速获取到所须要的信息。2.6 版本控制台指令具体介绍参考这里,1.x 版本控制台指令具体介绍参考这里。

第一步. 筹备依赖

  • 装置 java(举荐应用 java 14).
# ubuntu 零碎装置 java
sudo apt install -y default-jdk

#centos 零碎装置 java
sudo yum install -y java java-devel
  • 获取控制台并回到 fisco 目录
cd ~/fisco && curl -LO https://github.com/FISCO-BCOS/console/releases/download/v2.9.1/download_console.sh && bash download_console.sh

* 注解

  • 如果因为网络问题导致长时间无奈下载,请尝试:cd ~/fisco && curl -#LO gitee.com/FISCO-BCOS/… && bash download_console.sh
  • 拷贝控制台配置文件

若节点未采纳默认端口,请将文件中的 20200 替换成节点对应的 channel 端口。

# 最新版本控制台应用如下命令拷贝配置文件 cp -n console/conf/config-example.toml console/conf/config.toml
  • 配置控制台证书

* 注解
应用 1.x 版本控制台时:

  • 搭建国密版时,如果应用国密 SSL 请执行:
    cp nodes/127.0.0.1/sdk/gm/* console/conf/
  • 搭建国密版时,请批改 applicationContext.xml 中 encryptType 批改为 1
cp -r nodes/127.0.0.1/sdk/* console/conf/

第二步. 启动并应用控制台

  • 启动

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

输入下述信息表明启动胜利 否则请查看 conf/config.toml 中节点端口配置是否正确

=============================================================================================
Welcome to FISCO BCOS console(2.6.0)!Type 'help' or 'h' for help. Type 'quit' or 'q' to quit console.
 ________  ______   ______    ______    ______         _______    ______    ______    ______
|        |      \ /      \  /      \  /      \       |       \  /      \  /      \  /      
| $$$$$$$$ $$$$$$|  $$$$$$|  $$$$$$|  $$$$$$\      | $$$$$$$|  $$$$$$|  $$$$$$|  $$$$$$
| $$__      | $$  | $$___$$| $$   $$| $$  | $$      | $$__/ $$| $$   $$| $$  | $$| $$___$$
| $$  \     | $$   $$    \ | $$      | $$  | $$      | $$    $$| $$      | $$  | $$ $$    
| $$$$$     | $$   _$$$$$$| $$   __ | $$  | $$      | $$$$$$$| $$   __ | $$  | $$ _$$$$$$
| $$       _| $$_ |  __| $$| $$__/  | $$__/ $$      | $$__/ $$| $$__/  | $$__/ $$|  __| $$| $$      |   $$ 
\ $$    $$ $$    $$ $$    $$      | $$    $$ $$    $$ $$    $$ $$    $$ $$       $$$$$$  $$$$$$   $$$$$$   $$$$$$        $$$$$$$   $$$$$$   $$$$$$   $$$$$$

=============================================================================================

若 1.x 控制台启动失败,参考 Web3SDK 启动失败场景

  • 用控制台获取信息
# 获取客户端版本[group:1]> getNodeVersionClientVersion{version='2.6.0',    supportedVersion='2.6.0',    chainId='1',    buildTime='20200819 15:47:59',    buildType='Darwin/appleclang/RelWithDebInfo',    gitBranch='HEAD',    gitCommitHash='e4a5ef2ef64d1943fccc4ebc61467a91779fb1c0'}# 获取节点信息[group:1]> getPeers[PeerInfo{        nodeID='c1bd77e188cd0783256ee06838020f24a697f9af785438403d3620967a4a3612e3abc4bbe986d1e9dddf62d4236bff0b7d19a935a3cd44889f681409d5bf8692',        ipAndPort='127.0.0.1:30302',        agency='agency',        topic=[],        node='node2'    },    PeerInfo{nodeID='7f27f5d67f104eacf689790f09313e4343e7887a1a7b79c31cd151be33c7c8dd57c895a66086c3c8e0b54d2fa493407e0d9646b2bd9fc29a94fd3663a5332e6a',        ipAndPort='127.0.0.1:57266',        agency='agency',        topic=[            _block_notify_1],        node='node1'    },    PeerInfo{nodeID='862f26d9681ed4c12681bf81a50d0b8c66dd5b6ee7b0b42a4af12bb37b1ad2442f7dcfe8dac4e737ce9fa46aa94d904e8c474659eabf575d6715995553245be5',        ipAndPort='127.0.0.1:30303',        agency='agency',        topic=[],        node='node3'    }]
[group:1]>

3. 部署及调用 HelloWorld 合约

第一步. 编写 HelloWorld 合约
HelloWorld 合约提供两个接口,别离是 get() 和 set(),用于获取 / 设置合约变量 name。合约内容如下:

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;}}

第二步. 部署 HelloWorld 合约

为了不便用户疾速体验,HelloWorld 合约曾经内置于控制台中,位于控制台目录下 contracts/solidity/HelloWorld.sol,参考上面命令部署即可。

# 在控制台输出以下指令 部署胜利则返回合约地址[group:1]> deploy HelloWorldtransaction hash: 0xd0305411e36d2ca9c1a4df93e761c820f0a464367b8feb9e3fa40b0f68eb23facontract address:0xb3c223fc0bf6646959f254ac4e4a7e355b50a344

第三步. 调用 HelloWorld 合约

# 查看以后块高
[group:1]> getBlockNumber
1

# 调用 get 接口获取 name 变量 此处的合约地址是 deploy 指令返回的地址
[group:1]> call HelloWorld 0xb3c223fc0bf6646959f254ac4e4a7e355b50a344 get
---------------------------------------------------------------------------------------------
Return code: 0
description: transaction executed successfully
Return message: Success
---------------------------------------------------------------------------------------------
Return values:
["Hello,World!"]
---------------------------------------------------------------------------------------------

# 查看以后块高,块高不变,因为 get 接口不更改账本状态
[group:1]> getBlockNumber
1

# 调用 set 设置 name
[group:1]> call HelloWorld 0xb3c223fc0bf6646959f254ac4e4a7e355b50a344 set "Hello, FISCO BCOS"
transaction hash: 0x7e742c44091e0d6e4e1df666d957d123116622ab90b718699ce50f54ed791f6e
---------------------------------------------------------------------------------------------
transaction status: 0x0
description: transaction executed successfully
---------------------------------------------------------------------------------------------
Output
Receipt message: Success
Return message: Success
---------------------------------------------------------------------------------------------
Event logs
Event: {}

# 再次查看以后块高,块高减少示意已出块,账本状态已更改
[group:1]> getBlockNumber
2

# 调用 get 接口获取 name 变量,查看设置是否失效
[group:1]> call HelloWorld 0xb3c223fc0bf6646959f254ac4e4a7e355b50a344 get
---------------------------------------------------------------------------------------------
Return code: 0
description: transaction executed successfully
Return message: Success
---------------------------------------------------------------------------------------------
Return values:
["Hello,FISCO BCOS"]
---------------------------------------------------------------------------------------------

# 退出控制台
[group:1]> quit

文章起源:FISCO BCOS
文章原题目:《搭建第一个区块链网络》
如有侵权请与咱们分割删除。

正文完
 0