文档介绍:该【2024年广西职业院校技能大赛高职组《区块链技术应用》赛项样卷 】是由【书籍1243595614】上传分享,文档一共【30】页,该文档可以免费在线阅读,需要了解更多关于【2024年广西职业院校技能大赛高职组《区块链技术应用》赛项样卷 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。 : .
模块一 区块链产品方案设计与系统运维(35 分)
选手完成本模块的任务后,将任务中设计结果、运行代码、运行
结果等截图粘贴至客户端桌面【区块链技术应用赛\重命名为工位号\
】中对应的任务序号下。
任务 1-1:区块链产品需求分析与方案设计
本任务需要依据项目背景完成需求分析与方案设计,具体要求如
下:
,对考题进行业务
分析,尽可能全面的考虑一个业务系统所需要的模块,使用 Visio 或
思维导图工具展现本系统的基本设计概念和处理流程,要求分为区块
链食品溯源业务平台和支撑平台两个部分;
,在系统中分别包括用户管理以及订单
追溯功能,在订单追溯中需要包括生产商、分销商、经销商订单的追
溯管理功能。根据描述,设计区块链系统的总体功能概览图;
,完善“区块链食品溯源系统概要设计说明
”,具体工作内容如下:
(1)将设计内容根据说明书中模块需求进行补充,并完善概要
设计说明书中的“需求概要”;
(2)完善说明书中接口说明部分内容。
完成后提交“”文档至
【区块链技术应用赛\重命名为工位号】下。
2 : .
任务 1-2:区块链系统部署与运维
围绕食品安全溯源区块链平台部署与运维需求,进行项目相关系
统、节点以及管理工具的部署工作。通过监控工具完成对网络、节点
服务的监控。最终根据业务需求规范,完成系统日志、网络参数、节
点服务等系统结构的维护,具体要求如下:
,部署区块链系统并验证;
,部署区块链网络管理平台并验证;
,按照任务指南实施系统运维工
作并验证;
,按照任务指南对区块链系统进
行监管。
子任务 1-2-1:搭建区块链系统并验证
基于给定服务器环境以及软件(地址“/root/tools”),搭建一
条 4 节点的区块链系统并验证,具体工作内容如下:
(1)采用默认配置搭建区块链网络;
(2)通过命令验证区块链节点进程运行状况;
(3)通过命令验证区块链连接状态和共识状态日志输出。
子任务 1-2-2:搭建区块链系统管理平台并验证
基于给定服务器环境以及软件(地址“/root/tools”),搭建区
块链控制台并开展相关运维工作,具体工作内容如下:
(1)配置控制台,管理相关证书并启动;
(2)使用控制台安装 HelloWorld 智能合约;
(3)使用控制台完成 HelloWorld 智能合约的 set 与 get 操作;
(4)使用控制台查看区块链中区块高度。
3 : .
子任务 1-2-3:区块链节点运维
基于已完成的区块链系统与管理平台搭建工作,开展区块链节点
的加入与退出运维工作,具体内容如下:
(1)获取指定区块链节点输出等级为警告级,并设置日志存储
阈值位 100MB 并验证;
(2)通过给定工具(地址/root/tools)完成新节点(node4)
配置;
(3)启动新节点加入区块链系统并验证。
子任务 1-2-4:区块链网络运维
根据任务描述要求,完成网络配置与管理运维操作,具体内容如
下:
(1)设置区块链系统黑名单,将 node3 设为黑名单禁止连接,
并验证;
(2)设置系统中区块打包最大交易数量设为 2000;
(3)验证区块最大打包交易数量情况。
任务 1-3:区块链系统测试
设计对区块链系统的测试流程;结合实际业务需求,调用部署的
智能合约进行系统测试、性能测试等;根据业务需求,分析并且修复
给定智能合约中的安全漏洞。利用模拟业务和测试工具来完成对区块
链系统服务数据的测试。
;
(Producer)、经销商
(distributor)、零售商(retailer)账户,并将账户以 p12 加密形式
导出后倒入指定前置可视化平台,验证地址一致性;
4 : .
Postman 对上述功能接口进行验证,并将验证结果截图提
交工程文档。对食品溯源系统服务端“添加食品”(/produce)功能接
口进行验证。
请求路由: /produce
请求方法: POST
输 入 项 说
输入项 类型 说明
明:
traceNumber String 追踪编号
foodName String 食品名称
traceName String 存证人地址
quality Integer 食品质量
输 出 项 说
输出项 类型 说明
明:
ret Integer 返回值
返回消息,
msg String "Success"表示
操作成功
(地址:“/root/projects”)使用 Caliper 测试
工具对食品安全溯源系统智能合约生成新食品(newFood)功能进行压
力测试。具体要求如下:
(1) 提供核心测试代码;
(2) 设置 txNumber=10,tps=1,所有测试通过率为 100%。
。
有如下问题智能合约:
5 : .
pragmasolidity>=;
contractEtherStore{
mapping(address=>uint)publicbalances;
functiondeposit()publicpayable{
balances[]+=;
emitBalance(balances[]);
}
functionwithdraw()public{
uintbal=balances[];
require(bal>0);
(boolsent,)={value:bal}("");
require(sent,"FailedtosendEther");
balances[]=0;
}
//Helperfunctiontocheckthebalanceofthiscontract
functiongetBalance()publicviewreturns(uint){
returnaddress(this).balance;
}
}
contractAttack{
EtherStorepublicetherStore;
6 : .
constructor(address_etherStoreAddress){
etherStore=EtherStore(_etherStoreAddress);
}
//FallbackiscalledwhenEtherStoresendsEthertothiscontract.
fallback()externalpayable{
if(address(etherStore).balance>=1){
();
}
}
functionattack()externalpayable{
require(>=1);
{value:1}();
();
}
//Helperfunctiontocheckthebalanceofthiscontract
functiongetBalance()publicviewreturns(uint){
returnaddress(this).balance;
}
}
(1)分析智能合约中存在问题,并说明危害;
(2)根据测试工具中的代码文件,编写测试用例,复现智能合
约中存在的漏洞;
(3)创建新的智能合约,修复其中问题,说明修复内容并测试。
7 : .
模块二 智能合约开发与测试(30 分)
选手完成本模块的任务后,将任务中设计结果、运行代码、运行
结果等截图粘贴至客户端桌面【区块链技术应用赛\重命名为工位号\
】中对应的任务序号下。
任务 2-1:智能合约设计
根据区块链食品溯源应用需求分析和方案设计文档的描述,编写
该区块链产品的智能合约功能需求文档,以及设计该智能合约 UML 图。
具体要求如下:
根据区块链食品溯源产品项目背景和需求分析,编写该区块链食
品溯源产品的智能合约功能需求文档。
设计区块链食品溯源智能合约接口,画出区块链食品溯源智能合
约的角色 UML 用例图,以及画出区块链食品溯源各智能合约关系的时
序图。
任务 2-2:智能合约开发
使用 Solidity 语言完成智能合约开发、部署和调用,要求如下:
(FoodInfoItem)的接口编码
(1)编写食品信息实体的接口,完成可溯源食品信息初始化,
实现可追溯的原始生产商食品信息上链功能;
名称 类型 说明
_currentTraceName string 当前用户名
_name string 食品名称
8 : .
_owner address 合约的创建者
_quality uint8 质量
_status uint8 状态
_traceName string[] 用户名
_timestamp uint[] 流转时间戳
_traceAddress address[] 用户地址
_traceQuality uint8[] 食品质量
contractFoodInfoItem{
//①保存食品流转过程中各个阶段的时间戳
//②保存食品流转过程各个阶段的用户名
//③保存食品流转过程各个阶段的用户地址信息(和用户一一对应)
//④保存食品流转过程中各个阶段的质量
//⑤食品名称
//⑥当前用户名称
//⑦质量(0=优质 1=合格 2=不合格)
//⑧状态(0:生产 1:分销 2:出售)
//⑨初始化 owner
(2)编写分销商食品上链信息接口,根据食品溯源智能合约地
址获取分销商上链食品的信息;
functionaddTraceInfoByDistributor(①,uint8quality)publicreturns(b
ool){
require(_status==0,"statusmustbeproducing");
//②
(now);
(traceName);
9 : .
_currentTraceName=traceName;
//③
//④
(_quality);
_status=1;
returntrue;