样题题目(任务1-2,1-3)
任务 1-2:区块链系统部署与运维
围绕区块链航班延误险平台1部署与运维需求,进行项目相关系统、节点以及管理工具的部署工作。通过监控工具完成对网络、节点服务的监控。最终利用业务需求规范,完成系统日志、网络参数、节点服务等系统结构的维护,具体要求如下:
- 根据参数与端口设置要求,部署区块链系统并验证;
- 根据参数与端口设置要求,部署区块链网络管理平台并验证;
- 基于区块链系统相关管理平台,按照任务指南实施系统运维工作并验证;
- 基于区块链系统相关监管工具,按照任务指南对区块链系统进行监管。
子任务 1-2-1:搭建区块链系统并验证
基于给定的虚拟机环境 M1-A、M1-B 以及链环境(地址“/root/tools”), 搭建如下图所示的双机、三机构、二群组、七节点的星形组网拓扑区块链系统。 其中,二群组名称分别为 group1、group2,三个机构名称为 agencyA、agencyB、 agencyC。p2p_port、channel_port、jsonrpc_port 起始端口分别为 30330、20230、 8545,确保搭建的区块链系统能正常运行。
具体工作内容如下:
(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的部分,因此只用到模块一的镜像。
笔者完成这些题目的过程中,除参考官方文档外(这部分参考会在后文中列出),部分地方还参考了其他作者的文章,这里一并感谢:
- 2023年区块链职业技能大赛——区块链应用技术(一)模块一
- 2023年全国职业院校技能大赛高职组“区块链技术应用”赛项赛卷(3卷)解析
- FISCO BCOS离线无网络部署安装系列教程之WeBase v1.4.1部署安装
最后,笔者完成题目过程中还受到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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
此时,在目录下能看到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
- 1
- 2
- 3
- 4
接下来使用脚本创建区块链网络配置数据。注意它提供的脚本有一点小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行的内容
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
现在可以使用脚本创建区块链网络配置了:
注:如果这一步遇到
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
- 1
- 2
看到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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
拷贝配置信息
每个节点的配置信息需要放到对应的机器上。使用scp
# 同步nodes信息到M1-B(另一台机器)上,用scp复制过去
scp -r nodes/ [email protected]:/root/tools/
- 1
- 2
此时,在M1-A和M1-B的/root/tools
目录下均可见nodes
目录:
# M1-A(本机)
ls # 可见nodes目录
# M1-B
ssh [email protected] "ls /root/tools" # 可见nodes目录
- 1
- 2
- 3
- 4
- 5
启动区块链网络
仍然在M1-A中,通过ssh启动区块链节点。
# 启动本机(M1-A)上的节点
bash /root/tools/nodes/192.168.157.129/start_all.sh
# 看到node0到node3共四个节点start successfully
# 启动M1-B上的节点
ssh [email protected] "bash /root/tools/nodes/192.168.157.128/start_all.sh"
# 看到node0到node2共四个节点start successfully
- 1
- 2
- 3
- 4
- 5
- 6
- 7
至此,区块链已经成功启动。子任务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
- 1
- 2
- 3
- 4
- 5
可见节点运行正常。
M1-B上运行情况:
$ ssh [email protected] "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
- 3
- 4
可见节点运行正常。
至此,完成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 18:13:26.764565|[P2P][Service] heartBeat,connected count=6
- 1
- 2
- 3
- 4
M1-B上节点网络连接状态:
$ ssh [email protected] "tail -f /root/tools/nodes/*/node0/log/* | grep -i connected --line-buffered"
[email protected]'s password:
info|2025-02-25 18:59:58.741809|[P2P][Service] heartBeat,connected count=6
info|2025-02-25 19:27:28.806986|[P2P][Service] heartBeat,connected count=6
- 1
- 2
- 3
- 4
注:这里加入了–line-buffered,用于实时输出匹配行,这样我们才能在M1-A的终端中看到M1-B那边运行的输出
检查共识状态日志输出
M1-A上的共识状态:
$ tail -f /root/tools/nodes/*/node0/log/* | grep -i +++
info|2025-02-25 19:31:03.465891|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=2,hash=0963a24c...
info|2025-02-25 19:31:08.506660|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=2,hash=87c142da...
info|2025-02-25 19:31:13.549160|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=2,hash=483b3058...
info|2025-02-25 19:31:18.585441|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=2,hash=91ab11b6...
- 1
- 2
- 3
- 4
- 5
不断输出日志,表明共识正常。
M1-B上的共识状态:
$ ssh [email protected] "tail -f /root/tools/nodes/*/node0/log/* | grep -i +++ --line-buffered"
[email protected]'s password:
info|2025-02-25 17:59:59.644878|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=1,hash=6fc779c5...
info|2025-02-25 17:59:59.665898|[g:2][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=1,hash=d9fd0c17...
info|2025-02-25 19:32:53.160984|[g:2][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=1,hash=644318d4...
info|2025-02-25 19:32:53.204610|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=1,hash=70c9fae5...
info|2025-02-25 19:32:58.190796|[g:2][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=1,hash=2a478a67...
info|2025-02-25 19:32:58.229968|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,nodeIdx=1,hash=db27c6a6...
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
不断输出日志,表明共识正常。
至此,完成1-2-1(3)。子任务1-2-1全部完成。
搭建控制台
要求在M1-A中搭建控制台,所以以下操作都是在M1-A中完成。
参考:控制台使用
sudo su
cd /root/tools
- 1
- 2
准备环境
控制台,不需要按照教程下载,因为虚拟机里已经下载好了。只需解压缩console.tar.gz
tar -xzvf console.tar.gz # 这样就多出了一个console目录
- 1
拷贝证书
cp -r nodes/192.168.157.12*/sdk-agency* ./console/conf
cd console/conf
cp sdk-agencyA/* . # 先拿agencyA的sdk配置来试一下
- 1
- 2
- 3
修改控制台配置
cp config-example.toml config.toml
sed -i 's/peers=\["127.0.0.1:20200", "127.0.0.1:20201"\]/peers=["192.168.157.129:20230", "192.168.157.129:20231", "192.168.157.129:20232", "192.168.157.129:20233", "192.168.157.128:20230", "192.168.157.128:20231", "192.168.157.128:20232"]/g' ./config.toml # 这里填入全部的7个节点的channel_port
- 1
- 2
启动控制台
cd ..
bash start.sh
- 1
- 2
看到
=============================================================================================
Welcome to FISCO BCOS console(2.8.0)!
Type 'help' or 'h' for help. Type 'quit' or 'q' to quit console.
________ ______ ______ ______ ______ _______ ______ ______ ______
| | \/ \ / \ / \ | \ / \ / \ / \
| $$$$$$$$\$$$$$| $$$$$$| $$$$$$| $$$$$$\ | $$$$$$$| $$$$$$| $$$$$$| $$$$$$\
| $$__ | $$ | $$___\$| $$ \$| $$ | $$ | $$__/ $| $$ \$| $$ | $| $$___\$$
| $$ \ | $$ \$$ \| $$ | $$ | $$ | $$ $| $$ | $$ | $$\$$ \
| $$$$$ | $$ _\$$$$$$| $$ __| $$ | $$ | $$$$$$$| $$ __| $$ | $$_\$$$$$$\
| $$ _| $$_| \__| $| $$__/ | $$__/ $$ | $$__/ $| $$__/ | $$__/ $| \__| $$
| $$ | $$ \\$$ $$\$$ $$\$$ $$ | $$ $$\$$ $$\$$ $$\$$ $$
\$$ \$$$$$$ \$$$$$$ \$$$$$$ \$$$$$$ \$$$$$$$ \$$$$$$ \$$$$$$ \$$$$$$
=============================================================================================
[group:1]>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
说明控制台启动成功。要查看控制台用法,使用命令help。要退出控制台,使用命令quit或q。
控制台使用
参考:控制台使用
这里完成子任务1-2-2部分。连接agencyB中的节点并部署HelloWorld.sol合约;调用合约set和get方法;检查当前区块高度和部署合约的交易详情。
要使用agencyB中的节点,需要使用agencyB的sdk文件:
cp conf/sdk-agencyB/* conf
- 1
启动控制台。注意agencyB是在group2里,所以要启动group2(没有参数的化默认是启动group1)
./start.sh 2
- 1
部署HelloWorld合约
合约代码在contracts/solidity目录下
查看部署合约的用法:
[group:2]> deploy --help
Deploy a contract on blockchain.
Usage:
deploy contractNameOrPath
* contractNameOrPath -- The name of a contract or the path of a contract (Default load contract from the "contracts/solidity" path when using contractName).
- 1
- 2
- 3
- 4
- 5
- 6
部署合约:
[group:2]> deploy HelloWorld
transaction hash: 0x94a4942056acbcb685459fd30387209db291334fedf40a387ed013dee45265ef
contract address: 0x261793accf369b8392c6938b0f5fa4b47c528664
currentAccount: 0x3b4187a8b37f2050dc4d64a4653d5a390f311d13
- 1
- 2
- 3
- 4
调用合约get和set函数
[group:2]> call --help
Call a contract by a function and paramters.
Usage:
call contractNameOrPath contractAddress function parameters
* contractNameOrPath -- The name of a contract or the path of a contract, when set to "latest", the contract address is the latest contract address (Default load contract from the "contracts/solidity" path when using contractName).
* contractAddress -- 20 Bytes - The address of a contract.
* function -- The function of a contract.
* parameters -- The parameters(splited by a space) of a function.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
调用set,传入参数是一个string(可以在contracts/solidity/HelloWorld.sol中查看函数参数列表):
[group:2]> call HelloWorld 0x261793accf369b8392c6938b0f5fa4b47c528664 set "Bonjour!"
transaction hash: 0xc4549ba1c02838940e6928059cec37cea71b840600db1afa3b7ed02a7e85ad81
---------------------------------------------------------------------------------------------
transaction status: 0x0
description: transaction executed successfully
---------------------------------------------------------------------------------------------
Receipt message: Success
Return message: Success
Return values:[]
---------------------------------------------------------------------------------------------
Event logs
Event: {}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
调用get,看到return value是刚才set进去的"Bonjour!":
[group:2]> call HelloWorld 0x261793accf369b8392c6938b0f5fa4b47c528664 get
---------------------------------------------------------------------------------------------
Return code: 0
description: transaction executed successfully
Return message: Success
---------------------------------------------------------------------------------------------
Return value size:1
Return types: (STRING)
Return values:(Bonjour!)
---------------------------------------------------------------------------------------------
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
检查区块链中当前区块高度
[group:2]> getBlockNumber
2
- 1
- 2
查看部署合约的交易详情
从前面看到,部署合约交易的tx hash是0x94a4942056acbcb685459fd30387209db291334fedf40a387ed013dee45265ef
[group:2]> getTransactionByHash 0x94a4942056acbcb685459fd30387209db291334fedf40a387ed013dee45265ef
{
blockHash='0xcd6bd07753a8bbc363495a00b2343143ae6c48a1b649e5c984d25dc2570b6413',
blockNumber='0x1',
from='0x3b4187a8b37f2050dc4d64a4653d5a390f311d13',
gas='0x419ce0',
hash='0x94a4942056acbcb685459fd30387209db291334fedf40a387ed013dee45265ef',
input='0x608060405234801561001057600080fd5b506040805190810160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061005c929190610062565b50610107565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b61010491905b808211156101005760008160009055506001016100e8565b5090565b90565b6102d7806101166000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680634ed3885e146100515780636d4ce63c146100ba575b600080fd5b34801561005d57600080fd5b506100b8600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061014a565b005b3480156100c657600080fd5b506100cf610164565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010f5780820151818401526020810190506100f4565b50505050905090810190601f16801561013c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b8060009080519060200190610160929190610206565b5050565b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101fc5780601f106101d1576101008083540402835291602001916101fc565b820191906000526020600020905b8154815290600101906020018083116101df57829003601f168201915b5050505050905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061024757805160ff1916838001178555610275565b82800160010185558215610275579182015b82811115610274578251825591602001919060010190610259565b5b5090506102829190610286565b5090565b6102a891905b808211156102a457600081600090555060010161028c565b5090565b905600a165627a7a72305820e32c234959759785da20746da4dd6fd062f151034e74512bc1bc1c181c0c810f0029',
nonce='0x32945304be51967aac8cc31898034f291caba0ca2aea8ff75b406235410e906',
to='0x0000000000000000000000000000000000000000',
transactionIndex='0x0',
value='0x0',
gasPrice='0x51f4d5c00',
blockLimit='0x1f4',
chainId='0x1',
groupId='0x2',
extraData='0x',
signature={
r='0x65f0d3a8e73f76766fedc85ee2dd151af4a8a16a5c2ff2ecddb3ada2cddcbac1',
s='0x2a403f73c4a66e7aa1667d3e04feb011254441f85d8d87a043dc0b5a9e47076a',
v='0x1',
signature='0x65f0d3a8e73f76766fedc85ee2dd151af4a8a16a5c2ff2ecddb3ada2cddcbac12a403f73c4a66e7aa1667d3e04feb011254441f85d8d87a043dc0b5a9e47076a01'
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
区块链节点运维
这是子任务1-2-3部分。
参考:扩容一个新节点
在M1-B机器上操作
sudo su
cd /root/tools/
ls
- 1
- 2
- 3
这里的gen_node_cert.sh
脚本用于生成新节点的私钥证书。
配置新节点node7
要生成新的节点证书,需要明确该节点加入的机构(agency),并获取到agency的证书。这里我们设计新节点加入agencyC,且运行在M1-B上(是整个系统中的node.7,但在M1-B上是第四个节点,为美观起见,命名为node3)
$ bash gen_node_cert.sh -c ./nodes/cert/agencyC -o nodes/192.168.157.128/node3
==============================================================
[INFO] Cert Path : ./nodes/cert/agencyC
[INFO] Output Dir : nodes/192.168.157.128/node3
==============================================================
[INFO] All completed. Files in nodes/192.168.157.128/node3
- 1
- 2
- 3
- 4
- 5
- 6
准备节点的启动、停止脚本,节点配置文件和群组配置文件。
# 从已有的节点中复制启动、停止脚本和节点配置文件模板
# start.sh, stop.sh各个节点都是一样的,只有config.ini需要修改
cd nodes/192.168.157.128
cp node0/config.ini node0/start.sh node0/stop.sh node3
# 修改config.ini
cd node3
vim config.ini
### 修改的部分如下:[rpc]channel_listen_port, jsonrpc_listen_port, [p2p]listen_port需要修改。并且nodes to connect里面增加这个新节点node.7
[rpc]
channel_listen_ip=0.0.0.0
channel_listen_port=20233 # 改
jsonrpc_listen_ip=127.0.0.1
jsonrpc_listen_port=8548 # 改
[p2p]
listen_ip=0.0.0.0
listen_port=30333 # 改
; nodes to connect
node.0=192.168.157.129:30330
node.1=192.168.157.129:30331
node.2=192.168.157.129:30332
node.3=192.168.157.129:30333
node.4=192.168.157.128:30330
node.5=192.168.157.128:30331
node.6=192.168.157.128:30332
node.7=192.168.157.128:30333 # 新增
# 复制群组配置信息(这些信息对群组中所有节点都是一样的,不需要进一步修改)
# 题目要求加入群组1,所以只复制了group1的配置信息
cd ..
cp node0/conf/group.1.* node3/conf/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
启动新节点
cd nodes3
bash stop.sh
bash start.sh
node3 start successfully
- 1
- 2
- 3
- 4
检查新节点连接状况
$ ps aux | grep fisco | grep node3 | grep -v grep
root 141735 0.7 0.2 624188 25256 pts/0 Sl 17:02 0:01 /root/tools/nodes/192.168.157.128/node3/../fisco-bcos -c config.ini
- 1
- 2
可见node3进程正常运行
$ tail -f /root/tools/nodes/192.168.157.128/node3/log/* | grep -i connected
info|2025-02-26 17:08:07.120373|[P2P][Service] heartBeat,connected count=7
info|2025-02-26 17:08:17.121033|[P2P][Service] heartBeat,connected count=7
info|2025-02-26 17:08:27.121492|[P2P][Service] heartBeat,connected count=7
info|2025-02-26 17:08:37.121980|[P2P][Service] heartBeat,connected count=7
info|2025-02-26 17:08:47.122439|[P2P][Service] heartBeat,connected count=7
info|2025-02-26 17:08:57.122712|[P2P][Service] heartBeat,connected count=7
info|2025-02-26 17:09:07.122820|[P2P][Service] heartBeat,connected count=7
info|2025-02-26 17:09:17.122990|[P2P][Service] heartBeat,connected count=7
info|2025-02-26 17:09:27.123264|[P2P][Service] heartBeat,connected count=7
info|2025-02-26 17:09:37.123472|[P2P][Service] heartBeat,connected count=7
info|2025-02-26 17:09:47.123667|[P2P][Service] heartBeat,connected count=7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
可见新节点和其他7个节点都成功建立连接
将新节点加入group1
查看新节点的nodeid
$ cd /root/tools/
$ cat nodes/192.168.157.128/node3/conf/node.nodeid
e2eae9689694bfe17152a2c44d2d8cbef38d99e7222f9309d5fed0b6d24387ee5c63a418260679624e5b45f6bba93fc186648ce9ac1080c972ff39d197c25665
- 1
- 2
- 3
使用控制台把node3加入group1。首先配置控制台并启动
cd /root/tools/
tar -xzvf console.tar.gz
cp -r nodes/*/sdk-agency* console/conf
cd console/conf
cp sdk-agencyC/* .
cp config-example.toml config.toml
sed -i 's/peers=\["127.0.0.1:20200", "127.0.0.1:20201"\]/peers=["192.168.157.129:20230", "192.168.157.129:20231", "192.168.157.129:20232", "192.168.157.129:20233", "192.168.157.128:20230", "192.168.157.128:20231", "192.168.157.128:20232", "192.168.157.128:20233"]/g' ./config.toml # 全部8个节点
cd ..
./start.sh 1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
把新节点作为共识节点加入group1
[group:1]> getSealerList
[ 1e975b1c033129f1c03d001bf36827e19c7237fac920d4da9abe427c9d70ff4e7894ff23b406a0c1d857177a15502db9616727c158bfb46da83b48983796b98b, 52e266b8f78d73028bc44e3364d00ea832ab8c7b04042a912134195d8fc58b42ccfc6c0db8bf95cd9b2644bb909ebcc07076f8f0345f0910131abb45763a4b59, 54408730a1ad30885b49b5cd823865b9b7ee7c51ebe535a4e6a9132680ef8bfb285c34cffd125e9eb5e1a9283f9ca50807c87f4929d557f1ba5ac11dd80c7012, d9ee7c3a27d15594f59e9a4a20e125f31711804daf6559e2407c77ff6fd958f4fc853771f2a77c17a150ac53bfe352d0c6b830611691a13ab3469dd8b1c63901, f35d930a3777fe0d6d64c48d7bfc48108db2b61a7c2938f1b8c0c69e32a8c9b9e27cc9aef748785f18d3c8534009a999239c97c0fe6fcc7bed945cad095d4fdf
]
[group:1]> addSealer e2eae9689694bfe17152a2c44d2d8cbef38d99e7222f9309d5fed0b6d24387ee5c63a418260679624e5b45f6bba93fc186648ce9ac1080c972ff39d197c25665
{
"code":1,
"msg":"Success"
}
[group:1]> getSealerList
[ 1e975b1c033129f1c03d001bf36827e19c7237fac920d4da9abe427c9d70ff4e7894ff23b406a0c1d857177a15502db9616727c158bfb46da83b48983796b98b, 52e266b8f78d73028bc44e3364d00ea832ab8c7b04042a912134195d8fc58b42ccfc6c0db8bf95cd9b2644bb909ebcc07076f8f0345f0910131abb45763a4b59, 54408730a1ad30885b49b5cd823865b9b7ee7c51ebe535a4e6a9132680ef8bfb285c34cffd125e9eb5e1a9283f9ca50807c87f4929d557f1ba5ac11dd80c7012, d9ee7c3a27d15594f59e9a4a20e125f31711804daf6559e2407c77ff6fd958f4fc853771f2a77c17a150ac53bfe352d0c6b830611691a13ab3469dd8b1c63901, f35d930a3777fe0d6d64c48d7bfc48108db2b61a7c2938f1b8c0c69e32a8c9b9e27cc9aef748785f18d3c8534009a999239c97c0fe6fcc7bed945cad095d4fdf, e2eae9689694bfe17152a2c44d2d8cbef38d99e7222f9309d5fed0b6d24387ee5c63a418260679624e5b45f6bba93fc186648ce9ac1080c972ff39d197c25665
]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
可见新节点已经出现在sealer list里
查看新节点在group1中的共识状态
退出控制台。终端中运行:
tail -f /root/tools/nodes/192.168.157.128/node3/log/* | grep -i +++
info|2025-02-26 17:35:44.306183|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=2,tx=0,nodeIdx=4,hash=654daaca...
info|2025-02-26 17:35:50.344993|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=2,tx=0,nodeIdx=4,hash=d59572fd...
info|2025-02-26 17:35:56.388509|[g:1][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=2,tx=0,nodeIdx=4,hash=ba104013...
- 1
- 2
- 3
- 4
至此完成1-2-3(1)(2)
修改node3(M1-A)输出等级和日志存储阈值
vim scp://[email protected]//root/tools/nodes/192.168.157.129/node3/config.ini
[log]
enable=true
log_path=./log
; enable/disable the statistics function
enable_statistic=false
; network statistics interval, unit is second, default is 60s
stat_flush_interval=60
; info debug trace
level=warning
; MB
max_log_file_size=50
flush=true
### 修改这里的level和max_log_file_size字段
# 重启节点使配置生效
ssh [email protected] "cd /root/tools/nodes/192.168.157.129/node3/ && bash stop.sh && bash start.sh"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
至此完成了子任务1-2-3
区块链网络运维
为node7设置黑名单
首先检查当前node7和其他节点的连接情况:
$ tail -f /root/tools/nodes/192.168.157.128/node3/log/* | grep -i connected
info|2025-02-26 19:37:27.952123|[P2P][Service] heartBeat,connected count=7
info|2025-02-26 19:37:37.952512|[P2P][Service] heartBeat,connected count=7
info|2025-02-26 19:37:47.953641|[P2P][Service] heartBeat,connected count=7
- 1
- 2
- 3
- 4
可见它和其他7个节点都连接正常。现在我们在node7(M1-B node3)中把node3(M1-A)设为黑名单。
获取node3(M1-A)的nodeid
$ cat /root/tools/nodes/192.168.157.129/node3/conf/node.nodeid
fd06a62d520fd3e214b1fca5990b71ae65a3c1801d73fda1b3a5d0f9d8711fe2aea84c13f5364ec4de141c9777f1c11067f60154431f305618c9cedd327cda71
- 1
- 2
修改node7(即当前M1-B上的node3)配置,把node3(M1-A中的node3)设为黑名单
$ cd /root/tools/nodes/192.168.157.128/node3
vim config.ini
[certificate_blacklist]
; crl.0 should be nodeid, nodeid's length is 128
crl.0=fd06a62d520fd3e214b1fca5990b71ae65a3c1801d73fda1b3a5d0f9d8711fe2aea84c13f5364ec4de141c9777f1c11067f60154431f305618c9cedd327cda71
### 修改这个字段,把node3(M1-A)加入到黑名单
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
重启node7(M1-B node3)
bash stop.sh && bash start.sh
- 1
通过命令行检查
$ tail -f /root/tools/nodes/192.168.157.128/node3/log/* | grep -i connected
info|2025-02-26 19:42:39.719245|[P2P][Service] heartBeat,connected count=6
info|2025-02-26 19:42:49.719813|[P2P][Service] heartBeat,connected count=6
- 1
- 2
- 3
可见只有6个节点连接,已经屏蔽了node3的连接
至此完成了1-2-4(1)。接下来的1-2-4(2)(3)在M1-A机器上进行。
在M1-A机器上。
sudo su
cd /root/tools/console
vim conf/config.toml
### 修改peers部分为:
[network]
peers=["192.168.157.129:20230", "192.168.157.129:20231", "192.168.157.129:20232", "192.168.157.129:20233", "192.168.157.128:20230", "192.168.157.128:20231", "192.168.157.128:20232", "192.168.157.128:20233"] # The peer list to connect
cp conf/sdk-agencyB/* ./conf
./start.sh 2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
修改group2的最大交易数量为3000
[group:2]> setSystemConfigByKey --help
Set a system config.
Usage:
setSystemConfigByKey key value
* key -- The name of system config(tx_count_limit/tx_gas_limit/rpbft_epoch_block_num/rpbft_epoch_sealer_num/consensus_timeout supported currently).
* value -- The value of system config to be set.
-- The value of tx_count_limit from 1 to 2147483647(default 1000).
-- the value of tx_gas_limit from 100000 to 2147483647(default 300000000).
-- the value of rpbft_epoch_block_num from 1 to 2147483647(default 1000).
-- the value of rpbft_epoch_sealer_num from 1 to 2147483647
-- the value of consensus_timeout (seconds)from 3 seconds to 2147482 seconds(default 3s).
[group:2]> getSystemConfigByKey tx_count_limit
1000
[group:2]> setSystemConfigByKey tx_count_limit 3000
{
"code":1,
"msg":"Success"
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
检查group2的区块最大打包交易数量
[group:2]> getSystemConfigByKey tx_count_limit
3000
- 1
- 2
至此,完成任务1-2全部内容。
区块链系统测试(子任务1-3-1)
在M1-A上进行。
部署webase-node-manager平台
参考:离线部署webase服务
sudo su
cd /root/tools/webase-deploy/webase-node-mgr
mysql -u root -p
- 1
- 2
- 3
遇到报错:
mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
- 1
- 2
- 3
解决mysql问题
注:这里可能走了弯路,或许直接注册一个用户root并设置密码为456321就可以了。读者可以自己尝试这种方法是否可行
询问chatgpt和deepseek,解决办法如下:
# 在一个终端中(T1)
# 停止MySQL服务
sudo systemctl stop mysql
# 以安全模式启动 MySQL(权限验证,允许您无密码登录)
sudo mysqld_safe --skip-grant-tables &
# 如果报错如下:
[1] 5827
root@admin:~/tools# 2025-02-26T15:01:30.517807Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2025-02-26T15:01:30.518645Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
# 则说明没有/var/run/mysqld,手动创建一下:
mkdir /var/run/mysqld
chown mysql:mysql /var/run/mysqld/
# 然后再启动
sudo mysqld_safe --skip-grant-tables &
# 应该可以正确启动了
# 在另一个终端中(T2)
mysql -u root
# 进入了mysql中
mysql> USE mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
mysql> DROP USER 'root'@'localhost';
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE USER 'root'@'localhost' IDENTIFIED BY '456321';
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
这样,我们就创建了root@localhost用户,并设置密码为456321。现在可以退出安全模式用root@localhost登录了
在T1中回车,退出安全模式。
另外,要增加端口以支持tcp,具体如下:
vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 修改这里,port=3306
[mysqld]
port = 3306
systemctl restart mysql
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
检查端口是否配置成功
mysql -u root -p
Enter password:
Welcome to the MySQL monitor...
mysql> SHOW GLOBAL VARIABLES LIKE 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3306 |
+---------------+-------+
1 row in set (0.00 sec)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
可见配置好了3306端口
解决完mysql问题,现在回到webase-node-mgr
mysql -u root -p
Enter password:
Welcome to the MySQL monitor...
mysql> create database nodemgr;
Query OK, 1 row affected (0.01 sec)
mysql> exit
Bye
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
修改webase.sh配置文件
sudo su
cd /root/tools/webase-deploy/webase-node-mgr/script
vim webase.sh
# 修改这一部分
#dbUser
DBUSER="root"
#dbPass
PASSWD="456321"
#dbName
DBNAME="nodemgr"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
执行脚本
$ bash webase.sh 127.0.0.1 3306
init start....
mysql: [Warning] Using a password on the command line interface can be insecure.
init success...
- 1
- 2
- 3
- 4
- 5
- 6
修改application.yml配置文件
cd ..
vim conf/application.yml
# 修改数据库连接部分的配置(IP,端口,数据库名,用户名,密码),另外修改isUseSecurity部分为false,这样默认用admin用户登录,之后就不需要每次使用webase-node-mgr服务都登录了
# database connection configuration
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/nodemgr?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false
username: "root"
password: "456321"
initialSize: 10
minIdle: 5
maxActive: 30
#constants
constant:
###http request
# login's authorization whether enable, if false, default login as `admin` account
isUseSecurity: false
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
启动webase-node-manager服务
cd /root/tools/webase-deploy/webase-node-mgr
bash start.sh
===============================================================================================
Server com.webank.webase.node.mgr.Application Port 5001 ...PID(17296) [Starting]. Please message check through the log file (default path:./log/).
===============================================================================================
- 1
- 2
- 3
- 4
- 5
- 6
检查节点管理是否正常启动
bash status.sh
===============================================================================================
Server com.webank.webase.node.mgr.Application Port 5001 is running PID(17296)
===============================================================================================
- 1
- 2
- 3
- 4
- 5
节点管理服务的API接口(创建front对象)测试
这里没搞懂什么意思。所以问deepseek,后面的操作在他指导下完成的。
因为webase-node-mgr没有前端,所以我们在浏览器中打开http://localhost:5001是会看到404的。我们使用curl命令来和webase-node-mgr服务交互
先测试一下服务是否通畅
# 应该返回节点信息(我们还没有节点接入到webase-node-mgr服务中,所以现在什么信息都没有)
$ curl http://localhost:5001/WeBASE-Node-Manager/front/find
{"code":0,"message":"success","data":[],"totalCount":0}
# 另外检查服务的log,看到没有报错信息,据此判断服务运行正常
# 注:这里现在报not found any group是正常的,因为我们的节点还没注册到服务中
$ tail -f log/WeBASE-Node-Manager.log
2025-02-27 15:55:56.149 [node-mgr-task-12] WARN TransMonitorTask() - monitor jump over, not found any group
2025-02-27 15:55:56.345 [node-mgr-task-29] INFO NodeStatusMonitorTask() - start checkAllNodeStatusForAlert startTime:1740642956345
2025-02-27 15:55:56.347 [node-mgr-task-29] WARN NodeStatusMonitorTask() - checkNodeStatusForAlert jump over: not found any group
2025-02-27 15:55:56.349 [node-mgr-task-19] WARN PullBlockTransTask() - pullBlock jump over: not found any group
2025-02-27 15:56:00.001 [node-mgr-task-28] WARN DeleteInfoTask() - DeleteInfoTask jump over, not found any group
2025-02-27 15:56:00.002 [node-mgr-task-11] WARN StatisticsTransdailyTask() - updateTransdailyData jump over: no group information exists
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
启动webase-front服务
创建front对象要求webase-front服务已经启动,因此我们还要先启动webase-front服务才行。
sudo su
cd /root/tools/webase-deploy/webase-front
cp -r ../../nodes/*/sdk-agency* ./conf
# 先用agencyA的节点node0搞一下
cp ./conf/sdk-agencyA/* ./conf
vim conf/application.yml
# 修改sdk里的ip和channelPort;constant里的nodePath和monitorDisk
sdk:
corePoolSize: 50
maxPoolSize: 100
queueCapacity: 100
ip: 192.168.157.129
channelPort: 20230
certPath: conf # cert path of relative or absolute
constant:
keyServer: 127.0.0.1:5004 # webase-sign服务的IP:Port(单个)
nodePath: /root/tools/webase-deploy/nodes/192.168.157.129/node0 # node's absolute path to read configuration and monitor node's log
aesKey: EfdsW23D23d3df43
transMaxWait: 30
monitorDisk: /root/tools/webase-deploy/nodes/192.168.158.129
# 启动
bash start.sh
===============================================================================================
Server com.webank.webase.front.Application Port 5002 ...PID(14866) [Starting]. Please check message through the log file (default path:./log/).
===============================================================================================
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
创建front对象
我们这里用agencyA的node0来创建
$ curl -X POST "http://localhost:5001/WeBASE-Node-Manager/front/new" -H "Content-Type: application/json" -d '{
> "groupId": 1,
> "nodeId": "node0",
> "nodeIp": "192.168.157.129",
> "nodePort": 20230,
> "frontIp": "127.0.0.1",
> "frontPort": "5002",
> "agency": "agencyA",
> "frontPeerName": "frontPeer-M1-A-node0",
> "description": "This is a front peer for node0 on M1-A"
> }'
{"code":0,"message":"success","data":{"frontId":1,"nodeId":"52e266b8f78d73028bc44e3364d00ea832ab8c7b04042a912134195d8fc58b42ccfc6c0db8bf95cd9b2644bb909ebcc07076f8f0345f0910131abb45763a4b59","frontIp":"127.0.0.1","frontPort":5002,"agency":"agencyA","groupList":null,"clientVersion":"2.8.0","supportVersion":"2.8.0","frontVersion":null,"signVersion":null,"createTime":null,"modifyTime":null,"status":1,"runType":0,"agencyId":null,"agencyName":null,"hostId":null,"hostIndex":null,"imageTag":null,"containerName":null,"jsonrpcPort":null,"p2pPort":null,"channelPort":null,"chainId":0,"chainName":"default"},"attachment":null}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
注意这里必须已经启动好前端(webase-front)服务,否则它会报错{"code":202051,"message":"wrong host ip or wrong port: connect failed","data":null,"attachment":null}
看到上述命令的结果是"message":"success"
,说明front启动成功。
压力测试(子任务1-3-2)
这部分在虚拟机中没有找到任何benchmarks, Caliper, fisco-bcos.json相关的文件(如下所示),因此没做(偷懒了哈哈哈哈)
root@admin:~# cd /root
root@admin:~# ls
Desktop project snap tools
root@admin:~# find . -name benchmarks
root@admin:~# find . -name benchmark
root@admin:~# find . -name Caliper
root@admin:~# find . -name caliper
root@admin:~# find . -name fisco-bcos.json
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
补充
网上找到了Caliper安装和使用的教程。如果比赛环境中机器可以连接外网,那么还是可以做的。请感兴趣的读者自行参考。
或者其他什么平台,根据样题不同而不同。但区块链操作的部分(即本文内容部分)是一样的 ↩︎
评论记录:
回复评论: