2023年山东省高职组区块链技术任务书
目录
模块一:区块链产品方案设计及系统运维
任务1-1:区块链产品需求分析与方案设计
任务1-2:区块链系统部署与运维
任务1-3:区块链系统测试
模块二:智能合约开发与测试
任务2-1:智能合约设计
任务2-2:智能合约开发
任务2-3:智能合约测试
模块三:区块链应用系统开发
任务3-1:区块链应用前端功能开发
任务3-2:区块链应用后端功能开发
需要资料可私信博主
背景描述
随着异地务工人员的增多,房屋租赁成为一个广阔市场。目前,现有技术中的房屋租赁是由房主发布租赁信息,租赁信息发布在房屋中介或租赁软件,租客获取租赁信息后,现场看房,并签订纸质的房屋租赁合同,房屋租赁费用通过中介或直接给房主。另外,后期的房租还需房主收取。
区块链房屋租赁平台业务流程图
现在利用区块链技术实现房屋租赁平台,将房东、房屋、租客加入到区块链网络中,将发布、租赁、合同、房租等信息存储在区块链的分布式网络中,永久有效、无法篡改。在房屋租赁场景中, 房东将房屋租出后,无法有效控制房屋的使用权,比如租客未履行租赁合约相应内容时,房东无法及时有效限制租客对房屋的使用,造成租金或房屋使用权的回收困难。租赁合约履行过程中房东如果要求租客提前搬离,也会造成租客的利益损失。现有一基于区块链的房屋租赁平台S,房东L在S中出租一套房屋,S中可以调用该房屋的电子锁E的密码。L在S中发放租房合同给租客T,默认L会发放合同,不考虑其他情况。合同中规定,房租每个月的费用是3000元,交付形式是押一付一,每个月的16号交房租。默认T会签署合同,不考虑其他情况。在T签署合同后的24小时之内,T需要在S中预存3000元保证金、3000元租金(需要按照本顺序声明),如果T未预存,交易失败。如果T预存了保证金和一个月租金,L需要在24小时内在S中预存3000元保证金,如果L未在规定时间内预存保证金,S将T的保证金与租金退回,如果L预存保证金,本交易开始执行。S自动将T的一个月房租转账给L,并将房屋E的密码发送给T。在每月16日,E会自动更换密码,如果T按时缴纳房租,S将房屋密码重新更新给T;当T到期未缴纳,S将T的保证金转账给L代替一个月的租金,S仍会将密码更新给T;如果保证金已被扣除后的月份T仍然到期未缴纳,等待补缴,T不补缴房屋密码变更会导致T进不去房屋。当未到租期L提前终止合同,S将L的保证金转给T,如果T还有保证金将保证金一并退还给T。当未到租期T提前终止合同,如果还有保证金S将T的保证金转给L,T还需赔偿L一个月租金,如果T保证金已被扣除,T需赔偿L两个月租金,S将L的保证金退还给L。默认T会赔偿租金不考虑其他情况。当合同正常到期,S将L的保证金退还,T如果还有也退还。本案例只考虑违反合同日期的情况,不考虑其他情况。
区块链房屋租赁平台系统架构图
选手完成本模块的任务后,将任务中软件建模图、配置文件、运行结果等截图(截图内容清晰且完整)和文字内容粘贴至客户端桌面【工位号文件夹\模块一提交结果.docx】中对应的任务序号下。
房屋租赁平台中涉及到租客、房东、区块链租房平台、房屋等参与方,他们需要在区块链租房平台中完成账户注册、身份上链、出租房屋、生成合同等多种业务活动。通过对业务活动的功能分析,可以更好的服务系统的开发流程。基于房屋租赁平台系统架构,以区块链房屋租赁平台为背景,结合账户注册、登录服务、入驻上链、房屋出租、房租缴费等核心功能描述,撰写流程图/功能图、用例图等概要设计。
房屋租赁平台中涉及到租客、房东、区块链租房平台、房屋等参与方,他们需要在区块链租房平台中完成账户注册、身份上链、出租房屋、生成合同等多种业务活动。通过对业务活动的功能分析,可以更好的服务系统的开发流程。基于房屋租赁平台系统架构,以区块链房屋租赁平台为背景,结合账户注册、登录服务、入驻上链、房屋出租、房租缴费等核心功能描述,使用Visio绘制用例图、功能图、架构图等概要设计。
本任务需要依据项目背景完成需求分析与方案设计,具体要求如下:
表1-1-1 房屋租赁平台的核心流程
发布租房合同流程 |
房东起草租房合同协议,填写房屋信息、租期、房租等。使用房东的私钥对租房合同进行签名并广播到区块链中进行存证 |
签署合同流程 |
房东对租房合同进行签名 |
缴纳房租流程 |
区块链房屋租赁平台节点实时房屋到期时间 |
围绕区块链食品安全溯源平台部署与运维需求,进行项目相关系统、节点以及管理工具的部署工作。通过监控工具完成对网络、节点服务的监控。最终利用业务需求规范,完成系统日志、网络参数、节点服务等系统结构的维护,具体要求如下:
子任务1-2-1: 搭建区块链网络并验证
基于给定服务器环境以及软件(地址“/root/tools”),搭建单机、单机构、两群组、五节点的区块链系统并验证,具体工作内容如下:
机构 |
群组 |
节点 |
P2P端口 |
channel端口 |
rpc端口 |
agency |
group1 |
node0、node1、node2 |
30200 |
20200 |
8020 |
agency |
group2 |
node3、node4 |
30300 |
20300 |
8030 |
区块链网络搭建信息表
子任务1-2-2:搭建区块链控制台并验证
基于给定服务器环境以及软件(地址“/root/tools”),搭建区块链控制台并开展相关运维工作,具体工作内容如下:
子任务1-2-3:区块链账户权限控制
基于已完成的区块链系统与控制台搭建工作,开展区块链账户权限管理等运维工作,具体内容如下:
子任务1-2-4:区块链网络运维
根据任务描述要求,完成网络配置与管理运维操作,具体内容如下:
基于WeBASE的部署脚本完成WeBASE环境搭建以及搭建结果验证,最后将执行结果截图保存。
序号 |
中文 |
参数名 |
类型 |
必填 |
说明 |
1 |
开始日期 |
beginDate |
LocalDateTime |
是 |
|
2 |
结束日期 |
endDate |
LocalDateTime |
是 |
|
3 |
对比开始日期 |
contrastBeginDate |
LocalDateTime |
否 |
|
4 |
对比结束日期 |
contrastEndDate |
LocalDateTime |
否 |
|
5 |
间隔 |
gap |
int |
否 |
默认为1 |
机器历史性能查询参数表
选手完成本模块的任务后,将任务中设计结果、运行代码、运行结果等截图(截图内容清晰且完整)粘贴至客户端桌面【工位号文件夹\模块二提交结果.docx】中对应的任务序号下。
根据区块链房屋租赁平台产品需求分析和设计文档的描述,绘制智能合约UML时序图,编写该区块链产品的智能合约功能需求文档,具体要求如下:
使用Solidity语言进行智能合约开发,根据需求功能介绍在待补充源码中完成程序接口功能的编码,解决代码错误和警告,正确编译合约,功能调试正确,运行合约进行业务功能的验证,下列子任务中的合约编码表示合约中对应接口功能开发。
子任务2-2-1:ERC20智能合约
根据需求功能介绍在待补充源码中完成ERC20合约相关功能的编码,解决代码错误和警告,正确编译合约,功能调试正确,运行合约中的mint、approve和transferFrom函数。
子任务2-2-2:房屋信息智能合约
根据需求功能介绍在待补充源码中完成房屋信息合约的编码,解决代码错误和警告,正确编译合约,功能调试正确,运行合约中的mint和transfer函数。
子任务2-2-3:房屋租赁合约
根据需求功能介绍在待补充源码中完成房屋租赁合约的编码,解决代码错误和警告,正确编译合约,功能调试正确,运行合约中的创建租赁合同、房东签署合同、租客签署合同和房东解除合同的功能。
子任务2-3-1:基于Web前置平台的合约测试
子任务 2-3-2:漏洞测试
分析下面漏洞智能合约,使用WeBASE进行漏洞复现,修复漏洞并使用WeBASE进行验证。
如下有问题的合约代码:
contract SimpleERC20 {
address public owner;
uint public total;
mapping(address => uint) private balances;
event Mint(address,uint);
constructor() public {
owner = msg.sender;
}
//bytes(mint_d22vi9okr4w(address)) = 6D696E745F6432327669396F6B723477286164647265737329
function mint_d22vi9okr4w(address _account) public {
require(msg.sender == owner);
require(balances[_account]+1000 > balances[_account] && total+1000 > total);
balances[_account] +=1000;
total +=1000;
emit Mint(_account,balances[_account]);
}
//transfer(address,address,uint256) = 7472616E7366657228616464726573732C616464726573732C75696E7432353629
function transfer(address from,address to,uint amount) public {
require(msg.sender==owner);
require(balances[from] >= amount && balances[to] + amount > balances[to]);
balances[from] -=amount;
balances[to] +=amount;
}
function getBalance(address _account) public view returns(uint) {
return balances[_account];
}
}
contract factoryERC20{
address public owner;
constructor() public {
owner = msg.sender;
}
function mint(address _token,address _account)public returns(bool){
require(msg.sender == owner);
(bool success, ) = address(_token).call(abi.encodePacked(bytes4(0x00000000), abi.encode(_account)));
}
function createERC20() public returns (address){
SimpleERC20 erc = new SimpleERC20();
return address(erc);
}
function transfer(bytes memory _method ,address _token,address _to, uint _ammount) public returns(bool){
(bool success, ) = address(_token).call(abi.encodePacked(bytes4(keccak256(abi.encodePacked(_method))), abi.encode(msg.sender, _to, _ammount)));
return success;
}
function getBalance(address _token,address _account) public returns(uint){
SimpleERC20 erc = SimpleERC20(_token);
return erc.getBalance(_account);
}
}
选手完成本模块的任务后,将任务中添加代码、Web页面、运行结果等截图粘贴至客户端桌面【工位号文件夹\模块三提交结果.docx】中对应的任务序号下。
完成区块链应用系统的构建、服务器端(后端)与Web端(前端)的接口的联调。要求如下:
子任务3-2-1:区块链网络环境启动
区块链应用系统开发需要区块链底层网络进行支撑,完成和链上数据进行交互,与节点建立链接,完成链上信息查询。要求如下:
使用IntelliJ IDEA工具,打开(BlockDataProcessor.java)文件,在查询区块链信息接口中,使用Java-SDK获取区块链的最新高度和最新交易Hash,并将结果按十进制的整数和字符串类型返回,将代码和结果截图保存。
子任务3-2-2:编写通过私钥登录接口
(1)在IndexController类中registerUser里实现,通过16进制私钥进行登录,并且和账户地址进行验证,将声明代码结果截图保存并使用postman进行验证;
(2)请使用MySQL客户端创建test数据库,根据第一步中声明的实体类,在test库中创建一个名为" house_leasing_contract "的数据库表,包含以下字段,并给出建表语句截图保存:
子任务3-2-3:编写创建租赁合同接口
将房屋租赁合约部署至区块链,完成调用房东创建租赁合同的合约接口(addRentalContract方法),要求如下:
子任务3-2-4:编写房东签署租赁合同接口
将房屋租赁合约部署至区块链,完成调用房东签署租赁合同的合约接口(signContract方法),要求如下: