(全国职业技能比赛:高职)GZ036区块链技术应用赛项赛题第2套.docx
- 文档编号:18926132
- 上传时间:2024-02-15
- 格式:DOCX
- 页数:31
- 大小:137.13KB
(全国职业技能比赛:高职)GZ036区块链技术应用赛项赛题第2套.docx
《(全国职业技能比赛:高职)GZ036区块链技术应用赛项赛题第2套.docx》由会员分享,可在线阅读,更多相关《(全国职业技能比赛:高职)GZ036区块链技术应用赛项赛题第2套.docx(31页珍藏版)》请在冰点文库上搜索。
2023年全国职业院校技能大赛
高职组
“区块链技术应用”
赛项赛卷(2卷)
任
务
书
参赛队编号:
背景描述
在供应链金融这个万亿级市场中,区块链正在快速商业化落地,助力产业革新。
基于区块链的供应链金融业务的理念是:
以源自企业的应收账款为底层资产,通过区块链技术实现债券凭证的转让拆分。
其中,在原始资产上链时,通过对应收账款进行审核校验,确认贸易关系和身份真实有效,和保证上链资产的真实可信。
再者,债权凭证可基于供应链进行层层拆分与流转,都可完整追溯到最底层资产,以实现核心企业和金融机构对供应商的“信用穿透”。
某公司规划开发一个区块链供应链金融平台,包括核心企业、供应商、银行等角色,通过智能合约代码逐步构建区块链供应链金融平台的基本功能,实现银行向核心企业提供授信并发行数字凭证,企业与企业之间转让数字凭证。
此外需要完成区块链供应链金融平台的前后端,实现基本的业务逻辑。
模块一:
区块链产品方案设计及系统运维(35分)
选手完成本模块的任务后,将任务中设计结果、运行代码、运行结果等截图粘贴至客户端桌面【区块链技术应用赛\重命名为工位号\模块一提交结果.docx】中对应的任务序号下。
任务1-1:
区块链产品需求分析与方案设计(10分)
本环节需要依据项目背景完成需求分析与方案设计,具体要求如下:
1.依据给定供应链金融管理系统的业务架构图,对考题进行业务分析,尽可能全面的考虑一个业务系统所需要的模块,使用Visio或思维导图工具展现本系统的基本设计概念和处理流程,要求分为区块链供应链业务平台和支撑平台两个部分;(4分)
2.根据供应链系统设计,在系统中分别包括用户管理和凭证票据管理功能,在融资凭证上链过程中需要包括银行、核心企业、供应商公司的基本管理功能。
根据描述,设计区块链系统的总体功能概览图。
(3分)
3.整合上述设计内容,完善“供应链金融管理系统概要设计说明书.doc”,具体工作内容如下:
(1)将设计内容根据说明书中模块需求进行补充,并完善概要设计说明书中的“需求概要”。
(1分)
(2)完善说明书中接口说明部分内容。
(2分)
完成后提交“供应链金融管理系统概要设计说明书.doc”文档至【区块链技术应用赛\重命名为工位号】下
供应链金融管理系统概要设计说明书
1.引言
1.1编写目的
本概要说明书按照《需求规格说明书》的功能需求,设计本系统的软件结构,供后续软件过程(详细设计等)做依据,预期读者为后续软件过程的设计、开发人员。
2.总体设计
2.1需求规定
按照供应链金融系统的需求规定,用户可以通过本系统实现用户管理、凭证管理、银行信息管理、公司信息管理等功能。
2.1.2输入输出要求
参照需求文档的说明
2.2运行环境
本系统必须运行在局域网或互联网中
2.2.1硬件设备
Web服务器:
数量1台
数据库服务器:
数量1台
客户端PC机:
数量若干台,按需要增加
2.2.2支持软件
客户端
服务器端
后台数据库
2.3基本设计概念和处理流程
本系统软件部分可划分为浏览器页面、服务器端。
用户通过浏览器访问相关页面,输入业务请求,发送到服务器端,调用业务系统接口处理后,把业务处理应答发送给客户端用户。
系统框架图如下:
//将任务1-1第1小题结果复制至此;
2.4结构
2.4.1总体框图
//将任务1-1第2小题结果复制至此;
2.4.2功能模块接口及说明
由于在后续设计中,对各功能模块的每个子功能都要详细的加以描述,因此恰当的标识符将有助于文档的阅读和代码的编写。
命名规则:
1.数据库表名命名规则
由前缀和实际名字组成。
前缀:
使用小写字母tb,表示表。
实际名字采用其英文缩写,且首字母要大写。
2.数据库表中字段命名规则
根据其中文名称直接翻译成英文,其首字母要大写;若为多个词的组合,则每个词的首字母都要大写。
3.模块标识符命名规则
应本着便于理解和尽量简洁的原则来命名标识符。
在本系统中,各模块均以每个词英文的前几个字母来命名,模块下的子功能也以其英文简写来命名,且每个词首字母均为大写。
4.程序中变量命名规则
每个变量都要以其所在的模块的为前缀,该前缀可以是该模块标识符中大写字母的组合,前缀后面加下划线“_”。
后面的字母小写,并且不能包含JAVA的关键字,如果变量是两个单词组成,第二个单词的首字母要大写。
5.程序中函数命名规则
每个函数名都要以其所在的模块的为前缀,该前缀可以是该模块标识符中大写字母的组合,前缀后面加下划线“_”。
首字母小写,多个单词的函数名,从第二个单词开始单词首字母大写。
//补充填写请求参数、相应参数内容
2.4.2.1用户登录
1.功能描述
标识符
login
功能
用户登录接口
2.接口功能
请求路由
/login
请求方法
请求参数
参数名
类型
说明
响应参数
参数名
类型
说明
2.4.2.2用户注册
1.功能描述
标识符
register
功能
用户注册接口
2.接口功能
请求路由
/register
请求方法
请求参数
参数名
类型
说明
响应参数
参数名
类型
说明
3.系统出错处理设计
3.1出错信息
服务器端可能有Java的异常产生,可用Java中的异常处理方法try…catch处理,并记录日志,以备事后分析查找原因。
3.2补救措施
采用双服务器热备份的方法,一旦服务器崩溃,立即切换到另一台服务器运行。
3.3系统维护设计
保留本系统的一系列文档,加适当注释,以备维护者维护。
每次修改/维护,都做记录。
任务1-2:
区块链系统部署与运维(15分)
围绕供应链金融区块链平台部署与运维需求,进行项目相关系统、节点以及管理工具的部署工作。
通过监控工具完成对网络、节点服务的监控。
最终根据业务需求规范,完成系统日志、网络参数、节点服务等系统结构的维护。
1.根据参数与端口设置要求,部署区块链系统并验证;
2.根据参数与端口设置要求,部署区块链网络管理平台并验证;
3.基于区块链系统相关管理平台,按照任务指南实施系统运维工作并验证。
4.基于区块链系统相关监管工具,按照任务指南对区块链系统进行监管。
子任务1-2-1:
搭建区块链系统并验证(4分)
基于给定服务器环境以及软件(地址“/root/tools”),使用Docker以默认配置安装单机4节点的区块链系统,并完成控制台工具的部署:
(1)完成系统搭建配置与启动。
(1分)
(2)使用基于Docker命令查看区块链系统状态。
(1分)
(3)检查区块链系统节点node0连接状态输出。
(1分)
(4)配置控制台,管理相关证书并启动。
(1分)
子任务1-2-2:
区块链管理平台部署与验证(4分)
基于给定服务器环境以及软件(地址“/root/tools”),按要求部署区块链管理平台,具体工作如下:
(1)配置Mysql数据库(1分)
(2)配置管理平台连接区块链系统(1分)
(3)使用命令启动管理平台服务(1分)
(4)验证管理平台启动情况(1分)
子任务1-2-3:
区块链系统节点运维(3分)
基于已完成的区块链系统与管理平台搭建工作,开展相关节点运维工作:
(1)生成新节点(node4),启动并检查(1分)
(2)修改新节点配置,并查看节点的nodeid(1分)
(3)将新节点作为观察节点加入group1当中,并检查是否加入成功(1分)
子任务1-2-4:
区块链系统管理平台运维(4分)
基于已部署的区块链系统管理平台,进行系统相关运维工作:
(1)基于管理平台功能页面,添加新主机(2分)
(2)基于管理平台功能页面,修改新节点(node4)节点状态,并监控。
(2分)
任务1-3:
区块链系统测试(10分)
设计对区块链系统的测试流程;结合实际业务需求,调用部署的智能合约中进行系统测试、性能测试等;根据业务需求,分析并且修复给定智能合约中的安全漏洞。
利用模拟业务和测试工具来完成对区块链系统服务数据的测试。
1.基于区块链系统的中间件服务的部署脚本完成中间件服务环境搭建以及搭建结果验证,最后将执行结果截图保存。
(3分)
(1)实现区块链系统中间件服务平台部署。
(1分)
(2)实现区块链系统中间件服务签名功能启动情况验证。
(1分)
(3)区块链中间件服务节点管理进程启动情况验证和浏览器验证。
(1分)
2.智能合约安全漏洞测试。
(7分)
有如下智能合约:
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();
}
}
如上代码主要实现功能为规定了转账冻结时间,在冻结时间内用户不能提取存款的金额。
(1)分析智能合约中存在问题,并说明危害。
(2分)
(2)根据测试工具中的代码文件,编写测试用例,复现智能合约中存在的漏洞。
(3分)
(3)创建新的智能合约,修复其中问题,说明修复内容并测试。
(2分)
模块二:
智能合约开发与测试(30分)
选手完成本模块的任务后,将任务中设计结果、运行代码、运行结果等截图粘贴至客户端桌面【区块链技术应用赛\重命名为工位号\模块二提交结果.docx】中对应的任务序号下。
任务2-1:
智能合约设计(5分)
根据区块链供应链金融应用需求分析和方案设计文档的描述,编写该区块链产品的智能合约功能需求文档,以及设计该智能合约UML图,具体要求如下:
1.编写区块链供应链金融智能合约功能需求文档(2分)
根据区块链供应链金融产品项目背景和需求分析,编写该区块链供应链金融产品的智能合约功能需求文档;
2.完成区块链供应链金融智能合约的设计图(3分)
设计区块链供应链金融智能合约接口,画出区块链供应链金融智能合约的角色UML用例图,以及画出区块链供应链金融各角色智能合约关系的时序图。
任务2-2:
智能合约开发(20分)
使用Solidity语言完成智能合约开发、部署和调用,要求如下:
1.供应链金融实体信息编码(6分)
(1)编写供应链金融智能合约的实体接口,完成实体通用数据的初始化,实现企业和票据实体信息上链的功能;(2分)
表2.2.2.1SupplyChain实体说明
名称
类型
说明
companyName
string
公司名称
companyAddress
address
公司地址
creditAsset
uint
信用资产
acceptReceiptIndex
uint[]
接收的凭证
sendReceiptIndex
uint[]
发送的凭证
senderAddress
address
发送票据的地址
accepterAddress
address
接收票据的地址
receiptType
uint8
凭证类型
transferType
uint8
交易类型
amount
uint
交易数量
//公司信息结构体
structCompany{
//①公司名称
//②公司地址
//③信用资产
//④接收的凭证
//⑤发送的凭证
}
//数字发票收据信息
structReceipt{
//⑥发送票据的地址
//⑦接收票据的地址
//⑧凭证类型
//⑨交易类型
//⑩交易数量
}
(2)编写企业上链信息接口,实现供应链金融的企业信息上链;(2分)
functionaddCompany(stringname,addresscompanyAddress)returns(bool){
//①实例化公司
//②添加公司地址
//③将实例化的公司添加到公司映射
//④返回添加成功标识
}
(3)基于给定的智能合约代码以及注释,完成银行向企业交易的接口函数;(2分)
functionbankToCompanyReceipt(addresssenderAddress,addressaccepterAddress,uintamount,uint8receiptType)returns(uint){
①判断接收地址存在
②实例化银行
③实例化公司
if(keccak256(bank.bankName)==keccak256("")){
return404001;
}
//确认公司存在
if(keccak256(panyName)==④){
return404002;
}
if(bank.creditAsset return500001; } 2.供应链金融公司与公司接口编码(6分) (1)编写公司与公司之间进行交易的历史存证上链接口,实现公司与公司之间的交易功能;(2分) functioncompanyToCompanyReceipt(①,addressaccepterAddress,uintamount,uint8receiptType)returns(uint){ //②接收地址判断 CompanymemorysenderCompany=companyMap[③]; Companymemory④=companyMap[accepterAddress]; //确认发送公司存在 if(keccak256(senderCompany.⑤)==keccak256("")){ return404001; } //确认接收公司存在 if(keccak256(accepterCpanyName)==⑥){ return404002; } //如果存证接收的公司资产小于存证数额,那么就不能交易发送存证 if(accepterCompany.creditAsset⑦⑧){ return500001; } (2)编写创建存证的接口,实现创建存证的功能;(2分) ReceiptmemorynewReceipt=Receipt(①,accepterAddress,receiptType,2,amount); receiptIndex+=1; //记录存证(存证Map,公司Map对应地址的发送和接收存证列表) receiptMap[receiptIndex]=②; companyMap[③].sendReceiptIndex.push(receiptIndex); companyMap[accepterAddress].acceptReceiptIndex.push(④); (3)编写交易金额数量变化的接口,实现凭证交易双方资金的变化功能;(2分) companyMap[①].creditAsset②amount; companyMap[③].creditAsset④amount; return200; } 3.供应链金融公司与银行交易的接口编码(4分) (1)编写公司与银行之间进行交易的历史存证上链接口,实现公司与银行之间的交易功能;(2分) functioncompanyToBankReceipt(addresssenderAddress,①,uintamount,uint8receiptType)returns(uint){ ② Bankmemorybank=bankMap[senderAddress]; CompanymemoryaccepterCompany=companyMap[③]; //确认发送公司存在 if(keccak256(bank.bankName)==④){ return404001; } //确认接收公司存在 if(keccak256(accepterCpanyName)==keccak256("")){ return404002; } //如果存证接收的公司资产小于存证数额,那么就不能交易发送存证 if(accepterCompany.creditAsset return500001; } (2)编写创建存证的接口,实现创建存证的功能;(1分) //创建存证 ReceiptmemorynewReceipt=Receipt(senderAddress,accepterAddress,①,3,amount); receiptIndex②1; receiptMap[③]=newReceipt; bankMap[senderAddress].sendReceiptIndex.push(receiptIndex); companyMap[accepterAddress].④; (3)编写交易金额数量变化的接口,实现凭证交易双方资金的变化功能;(1分) bankMap[senderAddress].①②amount; companyMap[accepterAddress].③④amount; return200; } 4.合约编译、部署和调用(4分) (1)解决代码错误和警告,正确编译并部署合约,成功获取部署的合约地址和abi。 (1分) (2)调用食品溯源智能合约的接口,完整验证业务流程。 (3分) 任务2-3: 智能合约测试(5分) 编写智能合约单元测试代码并完成合约功能测试、性能测试,具体要求如下: 1.配置区块链网络(1分) 启动区块链网络,创建新的Workspace,配置对外访问的RPC接口为7545,配置项目的配置文件config.js实现与新建Workspace的连接。 2.补充给定基础代码中注释提示的部署逻辑(1分) 基于VSCODE加载的测试项目,补全位于test文件夹中HelloWorld.js文件预操作的方法。 在测试文件中添加预定义的方法(在其他方法启动前使用)。 3.补充代码中注释提示的测试逻辑(1分) 基于VSCODE加载的测试项目,补全位于test文件夹中HelloWorld.js文件,添加测试用例,测试智能合约的get方法。 4.测试hello.get()方法(1分) 基于VSCODE加载的测试项目,补全位于test文件夹中HelloWorld.js文件,添加测试用例,测试智能合约的hello.get()方法。 5.测试.should.equal进行对比判断(1分) 基于VSCODE加载的测试项目,补全位于test文件夹中HelloWorld.js文件,添加测试用例,测试智能合约的equal字符串比较方法。 l 模块三: 区块链应用系统开发(30分) 选手完成本模块的任务后,将任务中设计结果、运行代码、运行结果等截图粘贴至客户端桌面【区块链技术应用赛\重命名为工位号\模块三提交结果.do
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国 职业技能 比赛 高职 GZ036 区块 技术 应用 赛项赛题第
![提示](https://static.bingdoc.com/images/bang_tan.gif)