【手把手教程】职业学校技能大赛“区块链技术应用”赛项-样题-区块链部署&运维&测试部分(任务1-2,1-3)

发布于:2025-04-03 ⋅ 阅读:(16) ⋅ 点赞:(0)

文章目录

样题题目(任务1-2,1-3)

任务 1-2:区块链系统部署与运维

围绕区块链航班延误险平台1部署与运维需求,进行项目相关系统、节点以及管理工具的部署工作。通过监控工具完成对网络、节点服务的监控。最终利用业务需求规范,完成系统日志、网络参数、节点服务等系统结构的维护,具体要求如下:

  1. 根据参数与端口设置要求,部署区块链系统并验证;
  2. 根据参数与端口设置要求,部署区块链网络管理平台并验证;
  3. 基于区块链系统相关管理平台,按照任务指南实施系统运维工作并验证;
  4. 基于区块链系统相关监管工具,按照任务指南对区块链系统进行监管。

子任务 1-2-1:搭建区块链系统并验证

基于给定的虚拟机环境 M1-A、M1-B 以及链环境(地址“/root/tools”), 搭建如下图所示的双机、三机构、二群组、七节点的星形组网拓扑区块链系统。 其中,二群组名称分别为 group1、group2,三个机构名称为 agencyA、agencyB、 agencyC。p2p_port、channel_port、jsonrpc_port 起始端口分别为 30330、20230、 8545,确保搭建的区块链系统能正常运行。

img

具体工作内容如下:

(1)采用默认配置分别搭建双主机区块链网络;

(2)通过命令分别在 M1-A 和 M1-B 上验证区块链节点进程运行状况;

(3)通过命令分别在 M1-A 和 M1-B 上验证区块链连接状态和共识状态日志 输出。

子任务 1-2-2:搭建区块链系统管理平台并验证

基于给定服务器环境以及软件(地址“/root/tools”),搭建区块链控制 台并开展相关运维工作,具体工作内容如下:

(1)在 M1-A 主机上面配置控制台,修改配置信息,使用 Console 连接 agencyB 中节点,部署 HelloWorld.sol 智能合约;

(3)使用控制台完成 HelloWorld.sol 智能合约中的 set 与 get 方法操作;

(3)使用机器 M1-A 控制台检查区块链中的当前区块高度以及查看部署合约 的交易详情。

子任务 1-2-3:区块链节点运维

基于已完成的区块链系统与管理平台搭建工作,开展区块链节点的加入与退 出运维工作,具体内容如下:

(1)基于服务器中的扩容工具,在机器(M1-B)上进行新节点(Node7)扩 容并加入群组 Group1;

(2)使用机器(M1-B)检查扩容完成的区块链节点(Node7)的连接状况以 及新节点在群组(Group1)中的共识状态;

(3)修改配置文件,指定 node3 输出等级为警告级,并设置日志存储阈值 为 50MB。

子任务 1-2-4:区块链网络运维

根据任务描述要求,完成网络配置与管理运维操作,具体内容如下:

(1) 设置区块链系统黑名单,修改 M1-B 的 node7 配置将 node3 设为黑名 单,并通过命令检查;

(2) 在 M1-A 上将区块链网络中群组 2 的最大交易数量设为 3000;

(3) 在 M1-A 上通过控制台检查群组 2 的区块最大打包交易数量。

任务 1-3:区块链系统测试

设计对区块链系统的测试流程;结合实际业务需求,调用部署的智能合约进 行系统测试、性能测试等; 根据业务需求,分析并且修复给定智能合约中的安全 漏洞。利用模拟业务和测试工具来完成对区块链系统服务数据的测试。

子任务 1-3-1:系统测试

在 M1-A 登录 linux 服务器,进入指定操作目录(/root/tools/webase)中 完成区块链节点管理器的配置部署,并进行节点接口测试,具体操作任务如下:

(1)完成 webase-node-manager 数据库初始化操作;

(2)修改 application.yml 配置文件,进行 webase-node-manager 服务配 置,包括数据库名称,数据库用户,数据库密码等;

(3)使用命令启动 webase-node-manager 管理平台服务,并检查节点管理 是否正常启动;

(4)进行节点管理服务的 API 接口(创建 front 对象)测试。

子任务 1-3-2:压力测试

基于 M1-A 虚拟机,使用提供的 caliper 素材,进入/root/tools/benchmarks 目录下使用 Caliper 测试工具对 HelloWorld.sol 中 set 和 get 功能进行压力测 试,具体操作任务如下:

(1)修改 fisco-bcos.json 文件,配置连接节点为 agencyA 的 node0 节点, 测试合约为 HelloWorld.sol;

(2)配置进行压测的 js 信息,设置 txNumber=100,tps=1;

(3)提供 set 功能核心测试代码;

(4)提供 get 功能核心测试代码;

(5)执行压测,所有测试通过率为 100%。

教程和答案说明

本文档是笔者完成这些题目时的实录,因此可能琐碎并附有个人理解。文中含有对每一步操作的解释。读者可以跟随本文操作完成题目,同时能够理解每一步操作的原理。笔者认为“理解”比“做完”更为重要。

笔者手中的材料包括:样题的题目(word文档)、样题的虚拟机镜像文件(模块一、模块二、模块三分别有一份)。操作环境为一台windows台式机,装有vmware workstation。样题的虚拟机镜像导入vmware中可创建虚拟机。本文只包含任务1-2和1-3的部分,因此只用到模块一的镜像。

笔者完成这些题目的过程中,除参考官方文档外(这部分参考会在后文中列出),部分地方还参考了其他作者的文章,这里一并感谢:

最后,笔者完成题目过程中还受到deepseek的很多帮助,在这里向deepseek开发团队致敬。事实上如ChatGPT, deepseek这些AI大模型具有很强的能力,善用这些工具能够极大提高我们的学习工作效率。

下面是操作流程实录和解析。

区块链系统部署与运维(任务1-2)

环境准备

虚拟机创建

因为要搭建双机的网络,所以需要两台虚拟机。在vmware workstation里“文件–打开–选择模块一的镜像文件”,创建虚拟机,命名为M1-A。重复一次,再创建一个虚拟机,命名为M1-B

网络配置

需要两台虚拟机能够在同一个子网内,从而可以通信。右击M1-A,“设置–网络适配器”,在网路连接部分,选择“NAT模式”。这样,虚拟机就可以通过主机的网络联网,并且虚拟机在子网中被分配了一个IP地址,这个地址将用于虚拟机之间的通信。

打开虚拟机M1-A,命令行中输入ifconfig,看到ens33字段内网络IP为192.168.157.129(我们的环境如此。请以实际情况为准)。

对M1-B重复上述网络设置,看到M1-B的IP为192.168.157.128

至此我们知道,在子网192.168.157/24中,IP分别为:

  • 虚拟机M1-A:192.168.157.129
  • 虚拟机M1-B:192.168.157.128

可以在一台机器上ping另一台机器检查网络连接情况。例如,在M1-A中,ping 192.168.157.128(M1-B的地址),收到回复,说明M1-A请求M1-B可以连通。

检查两台虚拟机可以互相连通后,进入下一步。

区块链搭建

创建配置信息

参考:

多群组部署

多机部署

这里将逐步介绍操作流程。

首先需要启动M1-A和M1-B两个虚拟机。

进入M1-A虚拟机。我们在M1-A虚拟机上进行各种配置和区块链网络启动操作。

sudo su		# 进入root
cd /root/tools

# 创建配置信息
# 格式为 ip:num agency_name group_list
# ip是机器IP,num是节点数量,agency_name是机构名称,group_list是该机构所在的群组列表
cat >> ipconf << EOF
> 192.168.157.129:2 agencyA 1
> 192.168.157.129:2 agencyB 2
> 192.168.157.128:3 agencyC 1,2
> EOF

此时,在目录下能看到ipconf配置文件:

$ cat ipconf
192.168.157.129:2 agencyA 1
192.168.157.129:2 agencyB 2
192.168.157.128:3 agencyC 1,2

接下来使用脚本创建区块链网络配置数据。注意它提供的脚本有一点小bug,这里需要先修改一下脚本:

这里需要修改build_chain.sh,否则它一个ip只会生成一个sdk文件,那么在M1-A中生成了agencyA的sdk文件后,再尝试agencyB的sdk时会发现sdk目录已经存在,于是就跳过了agencyB的sdk文件生成!

cp build_chain.sh build_chain.sh.bak		# 先备份一下,方便日后找回原版脚本
vim build_chain.sh	# 这里我是用vim,也可以使用其他你们熟悉的文本编辑工具
# 在第1715行(vim中要查看行号,可以使用命令`:set nu`),修改如下:
...
1714     [ -z "$(get_value "${ip//[\.:]/_}_count")" ] && set_value "${ip//[\.:]/     _}_count" 0
1715 #    sdk_path="${output_dir}/${ip}/sdk"
1716     sdk_path="${output_dir}/${ip}/sdk-${agency_array[${server_count}]}"
1717     local agency_gm_path="${output_dir}/gmcert/${agency_array[${server_coun     t}]}-gm"
...
# 左侧1715,1716是行号,即把原本1715行注释掉,加入1716行的内容

现在可以使用脚本创建区块链网络配置了:

注:如果这一步遇到curl: (6) Could not recolve host: github.com,说明是环境没有外网连接。考虑到比赛环境中确实是没有外网的,我补充了一个离线使用build_chain.sh的方案,见此文:【手把手教程】职业学校技能大赛“区块链技术应用”赛项-解决离线环境下build_chain.sh无法连接到github问题

# -p后三个参数分别是p2p_port, channel_port, jsonrpc_port
bash build_chain.sh -f ipconf -p 30330,20230,8545

看到All completed提示信息,说明配置生成完成。所有配置数据都在./nodes目录下。查看:

$ tree nodes
nodes
├── 192.168.157.128
│   ├── download_bin.sh
│   ├── download_console.sh
│   ├── fisco-bcos
│   ├── node0
│   │   ├── conf
│   │   │   ├── ca.crt
│   │   │   ├── group.1.genesis
│   │   │   ├── group.1.ini
│   │   │   ├── group.2.genesis
│   │   │   ├── group.2.ini
│   │   │   ├── node.crt
│   │   │   ├── node.key
│   │   │   └── node.nodeid
│   │   ├── config.ini
│   │   ├── scripts
│   │   │   ├── load_new_groups.sh
│   │   │   ├── monitor.sh
│   │   │   ├── reload_sdk_allowlist.sh
│   │   │   └── reload_whitelist.sh
│   │   ├── start.sh
│   │   └── stop.sh
│   ├── node1
│   │   ├── conf
│   │   │   ├── ca.crt
│   │   │   ├── group.1.genesis
│   │   │   ├── group.1.ini
│   │   │   ├── group.2.genesis
│   │   │   ├── group.2.ini
│   │   │   ├── node.crt
│   │   │   ├── node.key
│   │   │   └── node.nodeid
│   │   ├── config.ini
│   │   ├── scripts
│   │   │   ├── load_new_groups.sh
│   │   │   ├── monitor.sh
│   │   │   ├── reload_sdk_allowlist.sh
│   │   │   └── reload_whitelist.sh
│   │   ├── start.sh
│   │   └── stop.sh
│   ├── node2
│   │   ├── conf
│   │   │   ├── ca.crt
│   │   │   ├── group.1.genesis
│   │   │   ├── group.1.ini
│   │   │   ├── group.2.genesis
│   │   │   ├── group.2.ini
│   │   │   ├── node.crt
│   │   │   ├── node.key
│   │   │   └── node.nodeid
│   │   ├── config.ini
│   │   ├── scripts
│   │   │   ├── load_new_groups.sh
│   │   │   ├── monitor.sh
│   │   │   ├── reload_sdk_allowlist.sh
│   │   │   └── reload_whitelist.sh
│   │   ├── start.sh
│   │   └── stop.sh
│   ├── sdk-agencyC
│   │   ├── ca.crt
│   │   ├── sdk.crt
│   │   ├── sdk.key
│   │   └── sdk.publickey
│   ├── start_all.sh
│   └── stop_all.sh
├── 192.168.157.129
│   ├── download_bin.sh
│   ├── download_console.sh
│   ├── fisco-bcos
│   ├── node0
│   │   ├── conf
│   │   │   ├── ca.crt
│   │   │   ├── group.1.genesis
│   │   │   ├── group.1.ini
│   │   │   ├── node.crt
│   │   │   ├── node.key
│   │   │   └── node.nodeid
│   │   ├── config.ini
│   │   ├── scripts
│   │   │   ├── load_new_groups.sh
│   │   │   ├── monitor.sh
│   │   │   ├── reload_sdk_allowlist.sh
│   │   │   └── reload_whitelist.sh
│   │   ├── start.sh
│   │   └── stop.sh
│   ├── node1
│   │   ├── conf
│   │   │   ├── ca.crt
│   │   │   ├── group.1.genesis
│   │   │   ├── group.1.ini
│   │   │   ├── node.crt
│   │   │   ├── node.key
│   │   │   └── node.nodeid
│   │   ├── config.ini
│   │   ├── scripts
│   │   │   ├── load_new_groups.sh
│   │   │   ├── monitor.sh
│   │   │   ├── reload_sdk_allowlist.sh
│   │   │   └── reload_whitelist.sh
│   │   ├── start.sh
│   │   └── stop.sh
│   ├── node2
│   │   ├── conf
│   │   │   ├── ca.crt
│   │   │   ├── group.2.genesis
│   │   │   ├── group.2.ini
│   │   │   ├── node.crt
│   │   │   ├── node.key
│   │   │   └── node.nodeid
│   │   ├── config.ini
│   │   ├── scripts
│   │   │   ├── load_new_groups.sh
│   │   │   ├── monitor.sh
│   │   │   ├── reload_sdk_allowlist.sh
│   │   │   └── reload_whitelist.sh
│   │   ├── start.sh
│   │   └── stop.sh
│   ├── node3
│   │   ├── conf
│   │   │   ├── ca.crt
│   │   │   ├── group.2.genesis
│   │   │   ├── group.2.ini
│   │   │   ├── node.crt
│   │   │   ├── node.key
│   │   │   └── node.nodeid
│   │   ├── config.ini
│   │   ├── scripts
│   │   │   ├── load_new_groups.sh
│   │   │   ├── monitor.sh
│   │   │   ├── reload_sdk_allowlist.sh
│   │   │   └── reload_whitelist.sh
│   │   ├── start.sh
│   │   └── stop.sh
│   ├── sdk-agencyA
│   │   ├── ca.crt
│   │   ├── sdk.crt
│   │   ├── sdk.key
│   │   └── sdk.publickey
│   ├── sdk-agencyB
│   │   ├── ca.crt
│   │   ├── sdk.crt
│   │   ├── sdk.key
│   │   └── sdk.publickey
│   ├── start_all.sh
│   └── stop_all.sh
└── cert
    ├── agencyA
    │   ├── agency.crt
    │   ├── agency.key
    │   ├── agency.srl
    │   ├── ca.crt
    │   └── cert.cnf
    ├── agencyB
    │   ├── agency.crt
    │   ├── agency.key
    │   ├── agency.srl
    │   ├── ca.crt
    │   └── cert.cnf
    ├── agencyC
    │   ├── agency.crt
    │   ├── agency.key
    │   ├── agency.srl
    │   ├── ca.crt
    │   └── cert.cnf
    ├── ca.crt
    ├── ca.key
    ├── ca.srl
    └── cert.cnf

30 directories, 138 files

拷贝配置信息

每个节点的配置信息需要放到对应的机器上。使用scp

# 同步nodes信息到M1-B(另一台机器)上,用scp复制过去
scp -r nodes/ root@192.168.157.128:/root/tools/

此时,在M1-A和M1-B的/root/tools目录下均可见nodes目录:

# M1-A(本机)
ls		# 可见nodes目录

# M1-B
ssh root@192.168.157.128 "ls /root/tools"	# 可见nodes目录

启动区块链网络

仍然在M1-A中,通过ssh启动区块链节点。

# 启动本机(M1-A)上的节点
bash /root/tools/nodes/192.168.157.129/start_all.sh
# 看到node0到node3共四个节点start successfully

# 启动M1-B上的节点
ssh root@192.168.157.128 "bash /root/tools/nodes/192.168.157.128/start_all.sh"
# 看到node0到node2共四个节点start successfully

至此,区块链已经成功启动。子任务1-2-1(1)完成

检查节点和链状态

我们仍然在M1-A上,通过命令行检查各个机器上的节点和链状态

检查节点进程运行情况

M1-A上运行情况:

$ ps aux | grep fisco | grep -v grep
root        8274  0.6  0.2 627644 25984 pts/0    Sl   17:57   0:02 /root/tools/192.168.157.129/node0/../fisco-bcos -c config.ini
root        8276  0.6  0.2 627640 28060 pts/0    Sl   17:57   0:02 /root/tools/192.168.157.129/node1/../fisco-bcos -c config.ini
root        8279  0.5  0.2 627644 28188 pts/0    Sl   17:57   0:02 /root/tools/192.168.157.129/node2/../fisco-bcos -c config.ini
root        8281  0.5  0.2 627640 26136 pts/0    Sl   17:57   0:02 /root/tools/192.168.157.129/node3/../fisco-bcos -c config.ini

可见节点运行正常。

M1-B上运行情况:

$ ssh root@192.168.157.128 "ps aux | grep fisco | grep -v grep"
root       58738  1.2  0.3 875564 30732 ?        Sl   17:59   0:06 /root/tools/192.168.157.128/node1/../fisco-bcos -c config.ini
root       58741  1.2  0.3 875568 31244 ?        Sl   17:59   0:06 /root/tools/192.168.157.128/node0/../fisco-bcos -c config.ini
root       58793  1.2  0.2 875568 29892 ?        Sl   17:59   0:06 /root/tools/192.168.157.128/node2/../fisco-bcos -c config.ini

可见节点运行正常。

至此,完成1-2-1(2)

检查连接状态

M1-A上节点网络连接状态:

$ tail -f /root/tools/nodes/*/node0/log/* | grep -i connected
info|2025-02-25 18:13:06.763500|[P2P][Service] heartBeat,connected count=6
info|2025-02-25 18:13:16.763991|[P2P][Service] heartBeat,connected count=6
info|2025-02-25 

网站公告

今日签到

点亮在社区的每一天
去签到