模块二:智能合约开发与测试
任务2-1:根据区块链食品溯源任务需求分析和方案设计文档的描述,编写该区块链产品的智能合约功能需求文档,以及设计该智能合约UML图;
具体要求如下:
子任务2-1-1:编写区块链食品溯源智能合约功能需求文档
根据区块链食品溯源产品项目背景和需求分析,编写该区块链食品溯源的智能合约功能需求文;
参考答案:
1.具备合约用户管理功能,包括创建用户以及查询用户信息的功能,与其相关联的需要具备用户权限功能.
2.具备生产订单管理功能,包括创建与查询订单功能,在创建生产订单功能中限制该功能只能具有生产权限的人员使用,并且加入订单创建时需要与产业链的总订单信息,从而与产业链的其他业务关联
子任务2-1-2:完成区块链食品溯源智能合约的设计图
设计区块链食品溯源智能合约接口,画出区块链食品溯源智能合约的角色UML用例图,以及画出区块链食品溯源各智能合约关系的时序图.
参考答案:
略
任务2-2:使用solidity语言进行智能合约开发,部署和调用
具体要求如下:
1.食品信息(FoodInfoItem)的接口编码
1.编写食品信息实体的接口,完成可溯源食品信息初始化,实现可追溯的原始生产商食品信息上链功能;
表2.2.2.1 FoodInfoItem实体说明
名称 |
类型 |
说明 |
_currentTraceName |
string |
当前用户名 |
_name |
string |
食品名称 |
_owner |
address |
合约的创建者 |
_quality |
uint8 |
质量 |
_status |
uint8 |
状态 |
_traceName |
string[] |
用户名 |
_timestamp |
uint[] |
流转时间戳 |
_traceAddress |
address[] |
用户地址 |
_traceQuality |
uint8[] |
食品质量 |
参考答案:
略
2.编写分销商食品上链信息接口,根据食品溯源智能合约地址获取分销商上链食品的信息;
参考答案:
略
3.编写超市进行食品上链信息的接口,根据食品溯源智能合约地址获取超市上链食品信息;
参考答案:
略
2.食品溯源(Trace)的接口编码
1.编写食品溯源智能合约生产商Producer添加食品接口,必须生产商才能添加可溯源的食品,实现溯源功能;
参考答案:
略
2.编写食品溯源智能合约分销商Distributor添加食品接口,必须分销商才能添加可溯源的食品,实现溯源功能;
参考答案:
略
3食品溯源智能合约超市Retailer添加食品接口,必须超市才能添加可溯源的食品,实现可溯源功能;
参考答案:
略
3.角色(Role)管理的接口编码
1.编写食品溯源增加角色接口,必须是未增加的角色才能被添加,实现添加角色的功能;
参考答案:
略
2.编写食品溯源移除角色接口,必须是已增加的角色才能被移除,实现移除角色的功能;
参考答案:
略
3.编写食品溯源角色授权接口,必须是授权的角色地址,实现角色权限管理功能;
参考答案:
略
4.合约编译,部署和调用
1.解决代码错误和警告,正确编译并部署合约,成功获取部署的合约地址和abi
参考答案:
2.调用食品溯源智能合约的接口,完整验证业务流程;
参考答案:
任务2-3:智能合约测试,使用Truffle进行智能合约代码测试;
根据给定的智能合约代码,加载进入Truffle项目,根据指定要求实现智能合约的单元测试;
1:配置区块链网络
启动Ganache软件,创建新的Wordspace,配置对外访问的RPC接口为7545,配置项目的truffle-config.js实现与新建Workspace连接.
参考答案:
2:设置ProducerId和sellederId两个变量
基于VSCODE加载的Truffle项目,补全位于test文件夹中的foodTraceNew.js文件预操作的方法.在测试文件中添加预定义的方法(在其他方法启动前使用),在方法中分别设置producerId和sellederId两个变量,具体要求如下:
(1).producerId设置为1
(2).sellederId设置为4
参考答案:
添加代码(beforeEach)如下:
3.补全createMember和getMember方法
基于VSCODE加载的Truffle项目,补全位于test文件夹中foodTraceNew.js文件,添加测试用例,测试智能合约的createMember和getMember方法.
参考答案:
在测试文件中编译代码如下:
执行成功将有如下显示内容:
4.测试createOrder和getOrder方法
基于VSCODE加载的Truffle项目,补全位于test文件夹中foodTraceNew.js文件,添加测试用例,测试智能合约的createOrder和getOrder方法.
参考答案:
具体测试用例代码如下:
执行结果如下:
5.测试createFood和getFood方法
基于VSCODE加载的Truffle项目,补全位于test文件夹中foodTraceNew.js文件,添加测试用例,测试智能合约的createFood和getFood方法.
参考答案:
结果如下: