GZ036 区块链技术应用赛项赛题第4套

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

高职组

“区块链技术应用”

赛项赛卷(4卷)

参赛队编号:             

背景描述

随着消费需求的不断变化,消费者对于食品安全的关注度越来越高,不仅要求生鲜肉品的肥瘦比例、脂肪含量等,更包括产品生产和物流管理过程。传统供应链(如农场、加工厂、配送商、零售商等)条件下这些数据的保存基本依靠纸张记录,具有一定的随意性,消费者无法识别这些数据的真伪。因此,供应链管理正面临着效率和安全透明的双重挑战,迫切需要进行有效变革,促进食品供应链管理更加高效透明和安全。

为了解决以上问题,使用新的高效率、高透明和真实性的新型供应链来打破传统食品供应链的研究迫在眉睫。使用区块链技术不仅能够开创食品溯源的新时代、为改善食品安全状况打下基础,还能够帮助企业提高食品追溯体系的运转效率,从而减少浪费,降低成本,促进可持续发展。如通过使用加密技术,写入区块链的数据在不被监测的情况下将无法被更改,提高了数据可信度,有效遏制食品造假问题。区块链与供应链相结合的一个最为重要的特点是使得商品信息在区块链上可追溯。同时,所有参与方的数据均上网可查,增加供应链各方的交互,提高了办事效率。用户在购买商品时,可通过扫描生成的二维码获取食品从源头到培育到运输以及最后摆上货架的所有相关信息。这种透明供应链系统一方面可以保障用户自身利益,也可以提高商店利润率,实现双赢。

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

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

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

本环节需要依据项目背景完成需求分析与方案设计,具体要求如下:

  1. 依据项目背景中食品供应链溯源系统的业务架构图,进行业务分析,使用工具编制所有的用户角色、用户用例以及相应的业务系统功能图;
  2. 设计区块链系统的架构,画出系统架构图,指明需要的节点个数、名称等信息;结合功能划分,列出表格说明各个主要模块功能;
  3. 根据需求分析、承诺集设计,完成区块链应用系统业务流程图;
  4. 整合所有内容,设计接口编写并形成概要设计说明书“01概要设计说明书.doc”,保存至【区块链技术应用赛\重命名为工位号\】目录下。

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

通过给定区块链项目需求,进行区块链系统部署,包括系统部署、控制台部署等。通过监控工具完成对网络、节点服务的监控。最终利用业务需求规范,完成系统日志、网络参数、节点服务等系统结构的维护。

  1. 部署区块链服务器,配置管理平台参数及访问端口;
  2. 部署项目节点,获取管理平台与节点服务的加密通信;
  3. 部署应用程序接口服务,应用工具完成接口部署;
  4. 部署区块链系统,对接应用服务器和数据库。

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

在本机搭建一条分布式存储的4节点区块链系统,其网络端口要求如下:

机构名称

节点数

P2P端口

channel端口

rpc端口

机构A

1

30100

20100

8010

机构B

1

30200

20200

8020

机构C

2

30300

20300

8030

搭建完区块链系统后,需检查每个节点的连接数和运行状态。

子任务1-2-2:控制台配置与使用

为区块链系统配置控制台,使用控制台与区块链系统进行简单交互(配置控制台相关工具和软件在 “/root/Desktop/src” 目录下),交互步骤如下:

(1)查询节点版本信息;

(2)部署HelloWorld合约;

(3)查看交回执,解释每个字段含义;

(4)查询部署合约的区块信息。

子任务1-2-3:区块链系统权限分配

为该区块链系统分配权限,大赛平台提供了机构 A、机构 B 和机构 C 管理员账号的私钥文件,现有任务如下:

(1)需要将这三个账号分别设置为委员账号;

(2)设置机构 A 账号的投票权重为2;

(3)新增运维账号D,并部署HelloWorld合约。

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

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

  1. 部署节点前置服务,实现基于浏览器测试启动情况验证;
  2. 将大赛平台中新建的material、logistics、user账户以p12的形式导出,并导入大赛平台,验证账户地址一致,并做接口测试;
  3. 分析最近一分钟的节点日志打印,收集日志关键错误打印信息,分析节点的共识消息处理、出块、交易数量等信息,判断节点的健康度。

模块二:智能合约开发与测试(30分)

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

任务2-1:智能合约设计

根据食品供应链溯源的功能需求,完成以下任务:

1.设计合约接口,画出各智能合约的UML图;

2.理解程序调用逻辑,画出各合约关系的时序图。

任务2-2:智能合约开发

使用Solidity编程语言开发智能合约,包括存储合约设计开发,接口合约设计开发,最终实现区块链溯源存证功能。针对Solidity智能合约进行代码检查和测试,验证函数执行结果是否与预期结果相符。

子任务2-2-1:原材料合约接口编码

1.编写原材料接口newMaterial,初始化原材料信息,返回合约地址,并实现原材料信息上链功能,合约部分代码如下:

contract Material {

    struct Material{

        address  owner;

        string  name;

        string  id;

        string  memo;

        uint  createdAt;

        bool exist;

    }

    mapping(string => Material) public materials;

    // 可自行添加形参和返回值

    function newMaterial (string memory _name, string memory _id,...) public {

        // TODO

        ***

    }

}

2.编写获取存原材料接口getMaterial,根据合约地址获取原材料信息,合约部分代码如下:

// 可自行添加形参和返回值

     function getMaterial(string memory id) public view returns  (...) {

        // TODO

        ***

  }

子任务2-2-2:食品物流接口编码

1.编写食品物流上链接口addLogistic,实现食品物流信息上链功能,合约部分代码如下:

pragma experimental ABIEncoderV2;

contract Logistics {

struct LogisticsData {

address cargo;

address orgin;

address destination;

string memo;

uint createdAt;

uint queryCount;

}

LogisticsData[] private _logisticsData;

uint public recordCount;

uint public queryCount;

    // 可自行添加形参和返回值

function addLogistics(address cargo, address orgin,...) public {

// TODO

***

}

2.编写获取食品物流信息的接口getLogistics,根据食品产品编号获取物流信息,合约部分代码如下:

// 可自行添加形参和返回值

function getLogistics(uint256 _id) public view returns (string memory, ***) {

// TODO

***

}

任务2-3:智能合约测试

消除合约代码错误和警告,成功编译智能合约并部署,通过调用合约接口,模拟实际业务流程检查合约状态和数据,发现可能存在的缺陷和漏洞,编写高质量、可复用的测试用例,从而提升开发效率。

子任务2-3-1:业务测试

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

2.调用食品和物流合约接口newMaterial、getMaterial、addLogistic和getLogistics,模拟完整验证业务流程。

将上述任务中的编写代码及运行截图保存至指定位置。

子任务2-3-2:用例测试

为食品原材料信息上链(newMateria)和获取食品信息(getMateria)编写测试用例,部分代码如下:

@Test

public void Materia() throws Exception {

    // deploy contract

    Materia materia = Materia.deploy();

    Assert.assertNotNull(logistic);

// TODO

***

}

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

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

任务3-1:区块链应用前端开发

子任务3-1-1:商品溯源前端开发

结合给定区块链业务需求和前端页面示例,完成前端首页页面,具有如下功能:

1.根据输入的食品编号或食品合约地址,查询食品的原材料信息和物流信息;

2.物流信息格式为【时间 日期 中转信息 备注信息】

部分示例代码如下:

<template>

  <div id="app">

    <div class="navs">

      <div class="navs_left">***溯源系统</div>

      <div class="navs_right">

        <el-menu background-color="#67992a"  text-color="#fff" :default-active="activeIndex" class="el-menu-demo" mode="horizontal" @select="handleSelect">

          <el-menu-item index="1">原材料</el-menu-item>

          <el-menu-item index="2">物流</el-menu-item>

          <el-menu-item index="3">用户</el-menu-item>

        

        </el-menu>

      </div>

    </div>

    < />

  </div>

</template>

//TODO

***

子任务3-1-2:商品页面前端开发

实现商品界面,具体展示内容有原材料地址、材料名称、备注信息

部分示例代码如下:

<template>

  <div id="app">

    <div class="navs">

      <div class="navs_left">***溯源系统</div>

      <div class="navs_right">

        <el-menu background-color="#67992a"  text-color="#fff" :default-active="activeIndex" class="el-menu-demo" mode="horizontal" @select="handleSelect">

          <el-menu-item index="1">原材料</el-menu-item>

          <el-menu-item index="2">物流</el-menu-item>

          <el-menu-item index="3">用户</el-menu-item>

        

        </el-menu>

      </div>

    </div>

    < />

  </div>

</template>

//TODO

***

任务3-2:区块链应用后端开发

使用Java-SDK与区块链进行交互,将Solidity智能合约转译为可供Java调用的文件,实现区块链编程。

子任务3-2-1:获取交易总量

使用Java语言编写后端代码进行交互,获取区块链的交易总量,要求如下:

1.函数返回十进制的整数;

2.函数有调用异常处理,若合约交互失败需返回失败原因。

部分代码如下:

@GetMapping("/txSum")

public String getTotalTransactionCount() {

    ApplicationContext context = new ClassPathXmlApplicationContext("**");

// TODO

***

}

任务3-2-2:获取区块信息

编写后端代码进行交互,获取区块链的最近10个区块的信息,包括时间戳、区块哈希、区块高度,要求如下:

1.函数返回最近十个区块的信息;

2.函数有调用异常处理,若合约交互失败需返回失败原因。

部分代码如下:

@GetMapping("/blockByNumber")

public ObjectNode getBlockByNumber() {

    ObjectNode result = new ObjectMapper().createObjectNode();

    try {

        ApplicationContext context = new ClassPathXmlApplicationContext("config.xml");

        //TODO

        ***

        }

}

任务3-2-3:区块链sdk保持连接

定义service用来保持与区块链的连接,减少与区块链的重复连接,加快访问速度,连接部分代码如下:

@Service

public class MyService {

private final Client client;

public MyService() {

}

//TODO

***

}

任务3-2-4:原材料智能合约交互

开发食品溯源系统中原材料的接口,根据系统中原有的代码补充produceMaterial接口,实现食品原材料的生产与查询,代码示例如下:

@PostMapping("/produceMaterial")

public ObjectNode produceMaterial(@RequestBody ObjectNode params) {

    ObjectNode result = new ObjectMapper().createObjectNode();

    //检查参数

    if (params == null || params.get("name") == null

            || params.get("id") == null || params.get("memo") == null) {

        result.put("status", "error");

        result.put("message", "请求参数错误");

        return result;

    }

    //TODO

}

任务3-2-5:供应链溯源合约交互

开发供应链合约中获取食品所有物流信息的后端接口,根据系统中原有的代码补充getLogistics接口,实现根据食品的id查询食品物流信息,示例代码如下:

@GetMapping("/getLogistics")

public ObjectNode getLogistics(String cargo) {

    ObjectNode result = new ObjectMapper().createObjectNode();

    try {

        ApplicationContext context = new ClassPathXmlApplicationContext("config.xml");

        // TODO

***

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/341387.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot+vue的网上点餐系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 背景和意…

什么是VUE 创建第一个VUE实例

一、什么是Vue 概念&#xff1a;Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套 构建用户界面 的 渐进式 框架 Vue2官网&#xff1a;Vue.js 1.什么是构建用户界面 基于数据渲染出用户可以看到的界面 2.什么是渐进式 所谓渐进式就是循序渐进&#xff0c;不一定非得把Vu…

【GoLang入门教程】Go语言工程结构详述

程序员裁员潮&#xff1a;技术变革下的职业危机 文章目录 程序员裁员潮&#xff1a;技术变革下的职业危机前言总结:专栏集锦强烈推荐写在最后 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网…

Viessmann Vitogate RCE漏洞复现(CVE-2023-45852)

0x01 产品简介 Viessmann Vitogate 300是用于将Viessmann LON连接到BACnet或Modbus的网关。 0x02 漏洞概述 Vitogate 300 组件/cgi-bin/vitogate.cgi中的一个问题允许未经身份验证的攻击者绕过身份验证&#xff0c;通过特制的请求执行任意命令&#xff0c;可导致服务器失陷。…

“libpng warning: iCCP: known incorrect sRGB profile” :图片或SVG加载不出来的问题,C++或Qt

加载图片时因为依赖第三方库缺失&#xff0c;报错&#xff01;&#xff01;&#xff01; ERROR或Warning : libpng warning: iCCP: known incorrect sRGB profile 然后我的解决办法也是网上大佬们的思路&#xff0c;在可执行同级目录下&#xff0c;放以下依赖库。 注意的地方…

Xcode查看APP文件目录

一、连接真机到MAC电脑上 二、打开Devices 点击window -> Devices and Simulatores 三、选中设备、选择app 四、选择下载内容 五、查看文件内容 得到的文件 右键显示包内容&#xff0c;获得APP内数据 六、分发证书无法下载 使用分发的证书无法下载文件内容&#xf…

Web 开发 1: Flask 框架介绍和使用

在 Web 开发中&#xff0c;Flask 是一个流行且灵活的 Python Web 框架&#xff0c;用于构建 Web 应用程序。它简洁而易于上手&#xff0c;适用于小型到中型的项目。在本篇博客中&#xff0c;我将为你介绍 Flask 框架的基础知识和常用技巧&#xff0c;帮助你更好地掌握 Web 开发…

基于扩散模型语音驱动人物头像说话模型:DreamTalk

1 DreamTalk介绍 DreamTalk&#xff1a;由清华大学、阿里巴巴和华中科大共同开发的一个基于扩散模型让人物头像说话的框架。 能够根据音频让人物头像照片说话、唱歌并保持嘴唇的同步和模仿表情变化。这一框架具有以下特点: DreamTalk能够生成高质量的动画&#xff0c;使人物脸…

在线测径仪 各行业可用

在线测径仪——外径检测设备&#xff0c;生产截面为圆形的产品&#xff0c;重点品质检测之一&#xff0c;目前越来越多的厂家也在积极采用在线测径仪进行产品的品质实时检测&#xff0c;以提高效率与品质&#xff0c;甚至有很多厂家进行复购&#xff0c;多产线应用&#xff0c;…

【软件测试】学习笔记-JMeter 的核心概念

这篇文章主要介绍 JMeter 的核心概念&#xff0c;完善对测试工具的认识。 为什么是 JMeter 性能测试有很多工具&#xff0c;JMeter、Loadrunner、Locust、nGrinder 都不乏粉丝。有人认为做性能测试重要的不是工具&#xff0c;是思想。但从学习实践的角度讲&#xff0c;工具在…

关于缓存 db redis local 取舍之道

文章目录 前言一、影响因素二、db or redis or local1.db2.redis3. local 三、redisson 和 CaffeineCache 封装3.1 redisson3.1.1 maven3.1.2 封装3.1.3 使用 3.2 CaffeineCache3.1.1 maven3.1.2 封装3.1.3 使用 总结 前言 让我们来聊一下数据缓存&#xff0c;它是如何为我们带…

React三大属性

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 知…

x-cmd pkg | hurl - HTTP 请求处理工具

目录 简介首次用户功能特点竞品和相关作品进一步探索 简介 Hurl 是 HTTP 请求处理工具&#xff0c;支持使用简单的纯文本格式定义的 HTTP 请求。它的用途非常广泛&#xff0c;既可以用于获取数据&#xff0c;也可以用于测试HTTP会话。 它可以链式处理请求&#xff0c;捕获数值…

微服务Spring Cloud架构详解

"Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具&#xff08;例如配置管理&#xff0c;服务发现&#xff0c;断路器&#xff0c;智能路由&#xff0c;微代理&#xff0c;控制总线&#xff09;。分布式系统的协调导致了样板模式, 使用Spring Cloud开…

如何通过系统命令排查账号安全?

如何通过系统命令排查账号安全 query user 查看当前登录账号 logoff id 注销用户id net user 查看用户 net user username 查看用户登录情况 lusrmgr.msc 查看隐藏账号 winR打开regedit注册表 找到计算机\HEKY_LOCAL_MACHINE\SAM\SAM\右键给与用户读写权限 刷新打开 HKEY…

BACnet路由器 BA101专为实现BACnet IP和BACnet MS/TP协议之间的相互转化而研发的。

随着通讯技术和控制技术的发展&#xff0c;为了实现楼宇的高效、智能化管理&#xff0c;集中监控管理已成为楼宇智能管理发展的必然趋势。在此背景下&#xff0c;高性能的楼宇暖通数据传输解决方案——协议转换网关应运而生&#xff0c;广泛应用于楼宇自控和暖通空调系统应用中…

opencv#28 图像卷积

图像卷积 图像卷积是图像处理中最为基础的操作之一&#xff0c;其常用在图像的边缘检测&#xff0c;图像的去噪声以及图像压缩等领域。 图像卷积主要步骤: Step1:将卷积模板旋转180。 Step2:卷积模板移动到对应位置。 Step3:模板内求和&#xff0c;保存求和结果。 Step4:滑…

vue封装接口

目录 封装接口前缀 配置逻辑 接口存放文件 配置代理 获取数据方法 封装接口前缀 config.js const serverConfig {baseURL: "https://xxx.xxxxxxxx.com/api", // 请求基础地址,可根据环境自定义useTokenAuthorization: false, // 是否开启 token 认证};export …

YOLOv8改进 | Conv篇 | 2024.1月最新成果可变形卷积DCNv4(适用检测、Seg、分类、Pose、OBB)

一、本文介绍 本文给大家带来的改进机制是2024-1月的最新成果DCNv4,其是DCNv3的升级版本,效果可以说是在目前的卷积中名列前茅了,同时该卷积具有轻量化的效果!一个DCNv4参数量下降越15Wparameters左右,。它主要通过两个方面对前一版本DCNv3进行改进:首先,它移除了空间聚…

Flutter底部导航栏插件persistent_bottom_nav_bar的使用

flutter 框架中的 persistent_bottom_nav_bar 插件可以让我们快速实现页面底部导航栏&#xff08;也就是 bottomNavigationBar &#xff09;的布局且能拥有多样的切换效果&#xff08;包括但不限于&#xff1a;动画切换效果、中间凸起按钮效果等&#xff09; 插件网址&#xf…