一带一路区块链赛项样题解析(中)

news2024/9/27 7:21:56

一带一路区块链赛项样题解析 (模块二)

标题任务一 按要求完成智能合约开发

1、学籍信息合约(Roll)接口编码(6分)

(1)编写学籍信息合约中的RollInfo 实体接口,完成RollInfo实体通用数据的初始化,实现可追溯的学籍信息上链功能;(2分)

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

// 学籍信息合约
contract Roll {
    // 学籍信息结构体
    struct RollInfo {
        uint256 studentId;    // 学生ID
        string studentName;    // 学生姓名
        string schoolName;     // 学校名称
        uint8 status;          // 学籍状态 (0: 离校, 1: 在籍)
        uint256 uploadTime;    // 上传时间
    }

    // 存储学籍信息的映射
    mapping(uint256 => RollInfo) public rollInfos;

(2)编写学籍信息RollInfo上链信息接口,在其构造函数中设置学籍状态为在籍,设置上传时间为当前时间;(2分)

// 构造函数,初始化学籍信息
    constructor(uint256 _studentId, string memory _studentName, string memory _schoolName) {
        rollInfos[_studentId] = RollInfo({
            studentId: _studentId,
            studentName: _studentName,
            schoolName: _schoolName,
            status: 1, // 默认状态为在籍
            uploadTime: block.timestamp // 当前时间
        });
    }

(3)编写学籍信息上链信息接口,实现学籍中就读学校信息的更新。(2分)

 // 更新学校名称
    function updateSchool(uint256 _studentId, string memory _newSchoolName) public {
        rollInfos[_studentId].schoolName = _newSchoolName;
    }
}

2、用户信息合约(User)接口编码(4分)

(1)编写用户信息合约接口,完善增加用户addUser()函数,实现学籍认证系统用户的添加;(2分)

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

// 用户信息合约
contract User {
    // 存储用户角色的映射
    mapping(address => bool) private operators;

    // 添加用户
    function addUser(address _user) public {
        operators[_user] = true; // 将用户设置为操作员
    }

(2)编写用户信息合约接口,完善用户角色判断isOperater()函数,实现信息获取的权限控制。(2分)

 // 判断用户是否为操作员
    function isOperater(address _user) public view returns (bool) {
        return operators[_user]; // 返回操作员状态
    }
}

3、学校学籍(SchoolRoll)接口编码(8分)

(1)编写学校学籍管理接口,完善removeRoll()函数实现学籍信息的删除;(2分)

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

// 导入 Roll 合约
import "./Roll.sol"; 

// 学校学籍管理合约
contract SchoolRoll {
    // 存储学籍信息的映射
    mapping(uint256 => Roll.RollInfo) public rollInfos;
function addRoll(uint256 _studentId, string memory _studentName, string memory _schoolName) public {
        rollInfos[_studentId] = Roll.RollInfo({
            studentId: _studentId,
            studentName: _studentName,
            schoolName: _schoolName,
            status: 1, // 在籍
            uploadTime: block.timestamp // 当前时间
        });
        rollCount++; // 更新学籍数量
    }

(2)编写学校学籍管理接口,完善queryRoll()函数实现学籍信息存在与否的验证;(2分)

  // 查询学籍信息是否存在
    function queryRoll(uint256 _studentId) public view returns (bool) {
        return rollInfos[_studentId].studentId != 0; // 检查学籍ID是否存在
    }

(3)编写学校学籍管理接口,完善transRoll()函数实现学籍的转移;(2分)

 // 转移学籍到新学校
    function transRoll(uint256 _studentId, string memory _newSchoolName) public {
        rollInfos[_studentId].schoolName = _newSchoolName; // 更新学校名称
    }

(4)编写学校学籍管理接口,完善updateStatus()函数实现学籍状态的更新。(2分)

 // 更新学籍状态
    function updateStatus(uint256 _studentId, uint8 _newStatus) public {
        rollInfos[_studentId].status = _newStatus; // 更新学籍状态
    }
}

任务二 按要求完成智能合约的编译、部署与调用

1、启动WeBASE-Front服务,使用浏览器登陆WeBASE-Front管理平台;(1分)

在这里插入图片描述

2、正确编译并部署上题中的智能合约,调用相关接口验证智能合约的业务流程。

要求如下:

(1)使用WeBASE-Front管理平台编译、部署“Roll.sol”、“User.sol”、“SchoolRoll.sol”合约,获取三个合约的abi;(1分)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(2)测试Roll.sol合约,先调用getRollInfo()获取学籍信息,再调用updateRollStatus()更新学籍状态为1并验证是否修改成功;(1分)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

(3)测试User.sol合约,先调用addUser()添加用户,再调用isOperater()判断其是否为管理人员;(1分)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

(4)测试SchoolRoll.sol合约,调用addRoll()添加学籍信息,调用转移学籍transroll()实现学籍信息的变更,并通过获取学籍信息getRoll()验证是否成功。(1分)

在这里插入图片描述

在这里插入图片描述

任务三 按要求完成智能合约的功能测试

1、在~/fisco目录下创建文件夹truffle_test1文件夹,在该文件夹下完成脚本编写与测试。启动ganache-cli环境,要求配置监听端口为7545,网络ID为5777。使用truffle 编写User、SchoolRoll合约的部署脚本并测试SchoolRoll.sol合约;(2分)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、编写第一个测试用例,通过校验学生账户表的长度来验证SchoolRoll.sol智能合约中addRoll()功能的正确性;在test目录中新建“SchoolRoll.js”文件,完成验证addRoll()功能的正确性;(2分)

// SPDX-License-Identifier: MIT
const {
    expect } = require("chai");
const {
    ethers } = require("hardhat");

describe("SchoolRoll Contract", function () {
   
    let SchoolRoll;
    let schoolRoll;

    // 部署合约前的设置
    before(async function () {
   
        SchoolRoll = await ethers.getContractFactory("SchoolRoll");
        schoolRoll = await SchoolRoll.deploy();
        await schoolRoll.deployed();
    });

    // 测试 addRoll() 方法
    it("should add a student roll and increase the roll count", async function () {
   
        const studentId = 1;
        const studentName = "Alice";
        const schoolName = "XYZ School";

        // 调用 addRoll 方法
        await schoolRoll.addRoll(studentId, studentName, schoolName);

        // 验证学生学籍信息的长度
        const rollInfo = await schoolRoll.rollInfos(studentId);
        expect(rollInfo.studentId).to.equal(studentId);
        expect(rollInfo.studentName).to.equal(studentName);
        expect(rollInfo.schoolName).to.equal(schoolName);
        expect(rollInfo.status).to.equal(1); // 在籍
        expect(rollInfo.uploadTime).to.be.above(0); // 上传时间应该是有效的时间戳
    

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA IP 和 开源 HDL 一般去哪找?

在FPGA开发的世界中,IP核和HDL模块是构建复杂数字系统的基石。它们如同乐高积木,让开发者能够快速搭建和重用经过验证的电路功能。但你是否曾感到迷茫,不知道从哪里寻找这些宝贵的资源?本文将为你揭开寻找FPGA IP核和HDL模块资源的…

探索MemGPT:AI界的新宠儿

文章目录 探索MemGPT:AI界的新宠儿1. 背景介绍2. MemGPT是什么?3. 如何安装MemGPT?4. 简单的库函数使用方法5. 场景应用场景一:创建持久聊天机器人场景二:文档分析场景三:多会话聊天互动 6. 常见Bug及解决方…

【2.使用VBA自动填充Excel工作表】

目录 前言什么是VBA如何使用Excel中的VBA简单基础入门控制台输出信息定义过程(功能)定义变量常用的数据类型Set循环For To 我的需求开发过程效果演示文件情况测试填充源文件测试填充目标文件 全部完整的代码sheet1中的代码,对应A公司工作表Us…

社区来稿丨一个真正意义上的实时多模态智能体框架,TEN Framework 为构建下一代 AI Agent 而生

本文由 RTE 开发者社区成员通过社区网站投稿提供,如果你也有与实时互动(Real-Time Engagement,RTE)相关的项目分享,欢迎访问网站 rtecommunity.dev 发布,优秀项目将会在公众号发布分享。 自从 OpenAI 展示了…

大数据毕业设计选题推荐-手机销售数据分析系统-Hive-Hadoop-Spark

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

PINN机器学习登上Science正刊!热门buff叠满!11个创新思路get到就能发

今天我们来聊聊物理信息机器学习PIML。PINN大家都熟悉吧,毕竟研究热度就没下去过,这个热点其实就是PIML的一种典型代表。 PIML是一种融合了物理学与机器学习的创新技术,通过引入物理学的先验知识,来改进和优化机器学习模型的性能…

换脸黑科技FaceFusion 3.0(Windows Mac整合包)震撼来袭!

换脸黑科技FaceFusion 3.0(Windows & Mac整合包)震撼来袭! 各位魔法师们,准备好迎接 FaceFusion 3.0 的强势登场了吗?这款 AI 换脸神器经历了全面升级,功能更强大,效果更惊艳,操…

C++(引用、窄化、输入)

1. 引用 reference&#xff08;重点&#xff09; 1.1 基础使用 引用就是某个变量或常量的别名&#xff0c;对引用进行操作与操作原变量或常量完全相同。 #include <iostream>using namespace std;int main() {int a 1;int& b a; // b是a的引用b;cout << a &…

基于单片机的汽车防酒驾控制系统设计

本设计基于STC12C5A60S2单片机的汽车防酒驾系统&#xff0c;主要包括主控制器、酒精检测模块、显示模块、声光报警模块和语音播报模块等共同组成&#xff0c;从而实现了对车内酒精浓度进行采集&#xff0c;预防酒驾的发生。利用酒精检测传感器对车辆内人员呼出的气体进行酒精浓…

C盘满了怎么清理_C盘满了深度清理详细操作步骤(多种方法)

最近有很多网友问我&#xff0c;我电脑C盘满了怎么清理&#xff1f;说自己不敢乱清理&#xff0c;怕清了系统文件无法正常开机&#xff0c;今天小编就教大家C盘满了清理的详细操作步骤&#xff0c;按教程来不怕系统进不了系统了。 C盘满了清理流程&#xff1a; 清理系统产生的…

vue-pdf 实现pdf预览、高亮、分页、定位功能

vue-pdf 实现pdf预览、高亮、分页、定位功能&#xff08;基于vue2.0&#xff01;&#xff01;&#xff01;&#xff09; 前言一、实现步骤1.引入库2.示例代码3.触发高亮事件4.分页高亮5.跳转指定页面并高亮&#xff08;不分页&#xff09; 参考笔记&#xff08;重要&#xff09…

C# 面对对象基础 枚举,Enum.TryParse的使用

代码&#xff1a; using System; using System.Collections.Generic; using System.Dynamic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks;namespace Student_c_ {enum Week : int{Mon,Tus,Wed,Thu,Fri,Sat,Sun,}public cla…

微服务之服务保护

Sentinel引入Java项目中 一&#xff1a;安装Sentinel 官网地址&#xff1a;https://github.com/alibaba/Sentinel/releases 二&#xff1a;安装好后在sentinel-dashboard.jar所在目录运行终端 三&#xff1a;运行命令&#xff0c;端口自己指定 java -Dserver.port8090 -Dcs…

iPhone16新机到手,,这些操作都要设置好

iPhone16新机首批机子已经发货&#xff0c;陆陆续续都几到了买家们手中了&#xff0c;iPhone 16到手后&#xff0c;虽然没有严格意义上的“必须”设置&#xff0c;但有一些推荐设置可以帮助您更好地使用和保护设备&#xff0c;同时提升安全性和使用体验&#xff0c;让你的新iPh…

栈的深度解析:链式队列的实现

引言 队列是一种广泛应用于计算机科学的数据结构&#xff0c;具有先进先出&#xff08;FIFO&#xff09;的特性。在许多实际应用中&#xff0c;例如任务调度、缓冲区管理等&#xff0c;队列扮演着重要角色。本文将详细介绍队列的基本概念&#xff0c;并通过链表实现一个简单的…

初识Jenkins持续集成系统

随着软件开发复杂度的不断提高&#xff0c;团队成员之间如何更好地协同工作以确保软件开发的质量&#xff0c;已经慢慢成为开发过程中不可回避的问题。Jenkins 自动化部署可以解决集成、测试、部署等重复性的工作&#xff0c;工具集成的效率明显高于人工操作;并且持续集成可以更…

网络原理3-应用层(HTTP/HTTPS)

目录 DNSHTTP/HTTPSHTTP协议报文HTTP的方法请求报头、响应报头(header)状态码构造HTTP请求HTTPS 应用层是我们日常开发中最常用的一层&#xff0c;因为其他层&#xff1a;传输层、网络层、数据链路层、物理层这些都是操作系统和硬件、驱动已经实现好的&#xff0c;我们只能使用…

【Python】的语言基础学习方法 快速掌握! 源码可分享!

python语言基础 第一章 你好python 1.1安装python https://www.python.org/downloads/release/python-3104/ 自定义安装&#xff0c;全选 配置python的安装路径 验证&#xff1a;cmd输入python 1.2python解释器 解释器主要做了两件事&#xff1a; 翻译代码提交给计算机去运…

Linux 下安装mysql

1.检查之前是否安装过mysql rpm -qa | grep mysql 如果之前安装过&#xff0c;删除之前的安装包 rpm -e 安装包 如果没有&#xff0c;进行后续安装 2. 下载 MySQL :: Download MySQL Community Server (Archived Versions)https://downloads.mysql.com/archives/community/ 3…

plt常用函数介绍二

目录 fig.add_subplot()ax.set()plt.legend()plt.subplots_adjust()plt.suptitle()plt.grid() fig.add_subplot() fig.add_subplot() 是 Matplotlib 中 Figure 对象的方法&#xff0c;用于在图形中添加子图&#xff08;subplot&#xff09;。 其语法为&#xff1a; subplot(…