(全国职业技能比赛:高职)GZ036区块链技术应用赛项赛题第6套.docx

上传人:gj****cr 文档编号:30849216 上传时间:2024-02-15 格式:DOCX 页数:30 大小:447.35KB
下载 相关 举报
(全国职业技能比赛:高职)GZ036区块链技术应用赛项赛题第6套.docx_第1页
第1页 / 共30页
(全国职业技能比赛:高职)GZ036区块链技术应用赛项赛题第6套.docx_第2页
第2页 / 共30页
(全国职业技能比赛:高职)GZ036区块链技术应用赛项赛题第6套.docx_第3页
第3页 / 共30页
(全国职业技能比赛:高职)GZ036区块链技术应用赛项赛题第6套.docx_第4页
第4页 / 共30页
(全国职业技能比赛:高职)GZ036区块链技术应用赛项赛题第6套.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

(全国职业技能比赛:高职)GZ036区块链技术应用赛项赛题第6套.docx

《(全国职业技能比赛:高职)GZ036区块链技术应用赛项赛题第6套.docx》由会员分享,可在线阅读,更多相关《(全国职业技能比赛:高职)GZ036区块链技术应用赛项赛题第6套.docx(30页珍藏版)》请在冰豆网上搜索。

(全国职业技能比赛:高职)GZ036区块链技术应用赛项赛题第6套.docx

2023年全国职业院校技能大赛

高职组

“区块链技术应用”

赛项赛卷(6卷)

参赛队编号:

背景描述

近年来,食品安全问题层出不穷,涉及到各种食品类别,如肉类、水果、蔬菜等。

食品安全事故不仅影响消费者的身体健康,还会导致社会恐慌,进而影响国家经济的稳定发展。

随着全球化进程的加速,食品生产、加工、运输等环节变得更加复杂,食品安全溯源变得愈发困难。

在这种背景下,采用先进的技术手段来保障食品安全,提高食品质量,已成为迫切的需求。

区块链技术为食品安全溯源提供了一种创新的解决方案。

区块链技术能够实现数据的不可篡改、可追溯、透明共享等特性。

这些特性使得区块链技术在食品安全溯源方面具有很大的潜力。

通过建立基于区块链技术的食品安全溯源平台,我们可以将食品安全溯源相关信息(如生产日期、产地、生产商和流通企业等)以去中心化的方式存储在区块链上,确保数据的真实性和不可篡改性。

另外,利用区块链的智能合约技术,可以在保证数据安全的同时实现透明公开的食品安全溯源业务流程设计。

在此基础上,引入监管机制有助于确保业务的健康发展。

模块一:

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

选手完成本模块的任务后,将任务中设计结果、运行代码、运行结果等截图粘贴至客户端桌面【区块链技术应用赛\重命名为工位号\模块一提交结果.docx】中对应的任务序号下。

任务1-1:

区块链产品需求分析与方案设计(10分)

子任务1-1-1食品安全溯源区块链产品需求分析(6分)

1.根据项目背景描述,请设计一款基于区块链技术的食品溯源系统。

请至少包括以下内容:

(4分)

(1)用户群体及需求分析

(2)区块链技术分析

(3)需求总结和优先级排序

2.根据设计的食品溯源区块链系统,进行功能性与非功能性需求分析(2分)

子任务1-1-2食品安全溯源区块链产品设计方案(4分)

设计一个基于区块链技术的食品安全溯源系统,满足以下需求:

l食品溯源:

通过系统可以追溯到每一个食品的生产、加工、运输、销售等环节,并能够记录和管理每一环节的数据和信息。

l数据共享:

系统应支持数据共享,各参与方可以通过系统实现数据的实时共享,提高数据的透明度和可信度,加强食品安全监管。

l用户权限管理:

系统应支持用户权限管理,各参与方可以根据自身权限进行数据的访问和管理,保障数据的安全和隐私。

l防篡改性:

系统应具备数据防篡改性,防止数据被篡改和伪造,确保数据的真实性和可信度。

请你根据以上需求设计一个食品安全溯源区块链系统,并给出系统的架构、数据结构、功能模块和技术方案。

任务1-2:

区块链系统部署与运维(15分)

围绕食品安全溯源区块链平台部署与运维需求,进行项目相关系统、节点以及管理工具的部署工作。

通过监控工具完成对网络、节点服务的监控。

最终利用业务需求规范,完成系统日志、网络参数、节点服务等系统结构的维护,具体要求如下:

1.根据参数与端口设置要求,部署区块链系统并验证。

2.根据参数与端口设置要求,部署区块链网络管理平台并验证。

3.基于区块链系统相关管理平台,按照任务指南实施系统运维工作并验证。

4.基于区块链系统相关监管工具,按照任务指南对区块链系统进行监管。

子任务1-2-1:

搭建区块链系统并验证(4分)

基于给定服务器环境以及软件(地址“/root/tools”),使用Docker配置单机4节点的区块链系统,具体要求如下:

P2P起始端口

30500

channel起始端口

20500

JSONRPC

8945

完成任务如下:

1.完成系统搭建配置。

2.完成单机4节点区块链平台搭建,成功运行区块链系统。

3.使用基于Docker命令查看区块链系统状态。

4.检查区块链系统节点node0连接状态输出。

子任务1-2-2:

搭建区块链系统管理平台并运维(4分)

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

1.配置控制台,管理相关证书并启动。

2.使用控制台查询区块链中区块高度。

3.使用控制台查询区块链中创世区块信息。

4.使用控制台查询区块链中共识状态。

子任务1-2-3:

区块链系统权限管理(4分)

基于给定服务器环境以及软件(地址“/root/tools”),对区块链进行权限管理,具体工作如下:

1.使用控制台,分别创建Account1、Account2、Account3用户并形成委员会。

2.使用控制台,修改Account1的投票权重为2。

3.使用控制台,将Account2从委员会中剔除,并赋予普通用户权限。

子任务1-2-4:

区块链系统监控(3分)

基于搭建完成的区块链系统,编写监控脚本,检测区块链程序的运行情况,最后将执行结果截图保存。

具体要求:

1.编写脚本1,每隔1秒检查一次区块链节点进程数量,若为4则打印正常信息,否则打印错误信息。

2.编写脚本2,每隔3秒检查一次区块链节点进程占用的端口数量,若为12则打印正常信息,否则打印错误信息。

任务1-3:

区块链系统测试(10分)

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

利用模拟业务和测试工具完成区块链系统服务数据的测试。

1.使用命令启动区块链系统可视化一体平台并验证启动情况(1分)

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

3.使用Postman对上述功能接口进行验证,并将验证结果截图提交工程文档。

l使用Postman对食品溯源系统服务端“获取食品”(/food)功能接口进行验证,并将验证结果截图。

(1分)

请求路由:

/food

请求方法:

GET

输入项说明:

输入项

类型

说明

traceNumber

String

食品编号

输出项说明:

输出项

类型

说明

current

String

食品当前所处用户地址

name

String

食品名称

produce

String

食品生产者地址

timestamp

Timestamp

食品生产时间戳

quality

Integer

食品质量

4.参照工程项目(地址:

“/root/projects”)使用Caliper测试工具对食品安全溯源系统智能合约获取食品信息(getFood)功能进行压力测试。

具体要求如下:

l提供核心测试代码。

(2分)

l设置txNumber=10,tps=1,所有测试通过率为100%。

(1分)

5.智能合约安全漏洞测试。

(4分)

有如下问题智能合约:

pragmasolidity^0.7.6;

contractTimeLock{

mapping(address=>uint)publicbalances;

mapping(address=>uint)publiclockTime;

functiondeposit()externalpayable{

balances[msg.sender]+=msg.value;

lockTime[msg.sender]=block.timestamp+1weeks;

}

functionincreaseLockTime(uint_secondsToIncrease)public{

lockTime[msg.sender]+=_secondsToIncrease;

}

functionwithdraw()public{

require(balances[msg.sender]>0,"Insufficientfunds");

require(block.timestamp>lockTime[msg.sender],"Locktimenotexpired");

uintamount=balances[msg.sender];

balances[msg.sender]=0;

(boolsent,)=msg.sender.call{value:

amount}("");

require(sent,"FailedtosendEther");

}

}

contractAttack{

TimeLocktimeLock;

constructor(TimeLock_timeLock){

timeLock=TimeLock(_timeLock);

}

fallback()externalpayable{}

functionattack()publicpayable{

timeLock.deposit{value:

msg.value}();

timeLock.increaseLockTime(

type(uint).max+1-timeLock.lockTime(address(this))

);

timeLock.withdraw();

}

}

l分析智能合约中存在问题,并说明危害。

(1分)

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

(1分)

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

(2分)

模块二:

智能合约开发与测试(30分)

任务2-1:

智能合约设计5分)

根据区块链食品溯源应用需求分析和方案设计文档的描述,完成以下工作要求:

1.根据区块链食品溯源应用需求分析和方案设计文档的描述,设计智能合约功能。

(2分)

2.设计智能合约中各角色应具备的功能。

(1分)

3.设计智能合约中食品安全溯源功能。

(2分)

任务2-2:

智能合约开发(20分)

1.食品信息(Food)、成员信息(Member)、生产订单信息(Productions)的结构体功能编码(6分)

(1)编写食品信息实体功能。

(2分)

表2.2.1Food实体说明

名称

类型

说明

id

uint

食品编号

name

string

食品名称

foodType

string

食品类型

quality

string

质量

spec

string

规格

other

string

其他信息

updateTime

uint

更新时间

structFood{

//①食品编号id

//②食品名称name

//③食品类型foodType

//④质量quality

//⑤规格spec

//⑥其他信息other

//⑦更新时间updateTime

(2)完善智能合约中用户结构体内容(2分)

名称

类型

说明

company

string

公司名称

location

string

地址

tel

string

电话

incharge

string

负责人

mainBusiness

string

主营业务

credit

uint

信誉分

businessType

uint

成员类型(1:

生产商2:

收购商3:

运输商4:

销售商)

userAddress

address

创建用户地址

updateTime

uint

更新时间

structMember{

//①公司名称

stringlocation;//地址

//②电话

stringincharge;//负责人

stringmainBusiness;//主营业务

uintcredit;//信誉值

//③成员类型(1:

生产商2:

收购商3:

运输商4:

销售商)

//④创建用户地址;

uintupdateTime;

}

(3)编写生产订单(Productions)结构体信息。

(2分)

表2.2.2生产订单Productios结构体信息

名称

类型

说明

orderNo

uint

溯源订单号

produceNo

uint

生产订单号

orderType

uint

订单类型(1:

直接付款2:

凭证付款)

foodId

uint

食品编号

price

uint

单价

num

uint

生产数量

updateTime

uint

更新时间

createUser

address

订单创建人

structProductions{

//①总订单号

//②食品订单号

uintorderType;//订单类型(1:

直接付款2:

凭证)

uintfoodId;//产品编号

uintprice;//单价

uintnum;//生产数量

//③更新时间;

//④订单创建人

}

2.食品溯源(Trace)的接口编码(6分)

(1)根据食品信息结构体,完成食品信息添加相应功能(2分)

functioncreateFood(①,②,③,④,⑤,stringmemoryother)publicreturns(⑥){

foodMap[⑦]=Food(foodId,name,foodType,quality,spec,other,⑧);

emitCreateFood(foodId,name);

returnfoodId;

}

(2)编写食品溯源收购商创建收购订单功能。

functionBuy(uintorderNo,①,uintorderType,uintfoodId,uintprice,uintnum)publicreturns(②){

require(userRoleMap[msg.sender]==③||msg.sender==owner);

buyMap[buyNo]=Buys(orderNo,buyNo,orderType,foodId,price,num,now,④);

returnbuyNo;

}

(3)编写食品溯源创建运输订单功能。

functionTransport(uintorderNo,①,uintorderType,uintnum,stringmemoryfrom_place,stringmemoryto_place)publicreturns(②){

require(userRoleMap[msg.sender]==③||msg.sender==owner);

transportMap[transportNo]=Transports(orderNo,transportNo,orderType,num,from_place,to_place,now,④);

returntransportNo;

}

3.角色(Role)管理的接口编码(4分)

(1)编写食品溯源增加角色接口,实现添加角色的功能。

(1分)

functionaddRole(addressuserAddress,uintrole)public①{

userRoleMap[②]=role;

}

(2)编写食品溯源获取角色功能。

(1分)

functiongetUserRole(addressuserAddress)publicviewreturns(①){

uintrole=userRoleMap[②];

returnrole;

}

(3)编写食品溯源修改角色功能。

(2分)

functionchangeRole(addressuserAddress,uintnewrole)public①{

userRoleMap[userAddress]=newrole;

Memberstorage②=memberMap[userAddress];

member.businessType=③;

memberMap[userAddress]=④;

}

4.合约编译、部署和调用(4分)

(1)解决代码错误和警告,正确编译并部署合约,成功获取部署的合约地址和abi。

(1分)

(2)调用食品溯源智能合约的接口,完整验证业务流程。

(3分)

任务2-3:

智能合约测试(5分)

1.配置区块链网络(1分)

启动区块链网络,创建新的Workspace,配置对外访问的RPC接口为7545,配置项目的配置文件config.js实现与新建Workspace的连接。

2.设置producerId和sellederId两个变量(1分)

基于VSCODE加载的测试项目,补全位于test文件夹中foodTraceNew.js文件预操作的方法。

在测试文件中添加预定义的方法(在其他方法启动前使用),在方法中分别设置producerId和sellederId两个变量,具体要求如下:

(1)producerId设置为1

(2)sellderId设置为4

3.补全createMember和getMember方法(1分)

基于VSCODE加载的测试项目,补全位于test文件夹中foodTraceNew.js文件,添加测试用例,测试智能合约的createMember和getMember方法。

4.测试createOrder和getOrder方法(1分)

基于VSCODE加载的测试项目,补全位于test文件夹中foodTraceNew.js文件,添加测试用例,测试智能合约的createOrder和getOrder方法。

5.测试createFood和getFood方法(1分)

基于VSCODE加载的测试项目,补全位于test文件夹中foodTraceNew.js文件,添加测试用例,测试智能合约的createFood和getFood方法。

模块三:

区块链应用系统开发(30分)

任务3-1:

前端功能开发(10分)

1.请基于前端系统的开发模板,在组件main.js中添加对应的逻辑代码,实现角色生产商的部分功能,并测试功能完整性。

(3分)

示例页面:

本任务具体要求如下:

(1)生产商首页展示已有的食品列表,若没有食品则显示暂无数据,展示列有溯源码、食品名称、生产商、生产时间;

(2)生产商首页有“退出”按钮,可以退出登录返回首页;

(3)生产商页面可以新建食品,弹出框中需要用户输入溯源码、视频名称、生产商、质检情况等,单击取消关闭弹出框,单击确定则根据操作反馈进行提示;

(4)生产商首页展示的食品列表可根据生产时间排序。

Main.js

代码片段1:

--创建蔬菜按钮-->

选手填写部分

--退出按钮-->

选手填写部分

代码片段2:

--食品信息列表-->

:

data="renderList"

style="width:

100%"

:

default-sort=选手填写部分

>

prop="traceNumber"

label=选手填写部分

>

prop="foodName"

label=选手填写部分

>

prop="traceName"

label=选手填写部分

>

prop="date"

label=选手填写部分

选手填写部分

>

代码片段3:

.then(ret=>{

if(ret.data.ret!

==1){

//已有溯源码校验

if(ret.data.ret===0&&ret.data.msg==='traceNumberalreadyexist'){

this.$message({

message:

'该溯源码已存在,请重新创建',

type:

选手填写部分,

center:

true

});

}else{

this.$message({

message:

选手填写部分,

type:

选手填写部分,

center:

true

});

}

return

}

this.$message({

message:

选手填写部分,

type:

选手填写部分,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 中职中专

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1