“区块链技术应用”赛项赛卷(食品溯源)
背景描述
随着消费需求的不断变化,消费者对于食品安全的关注度越来越高,不仅要求生鲜肉品的肥瘦比例、脂肪含量等,更包括产品生产和物流管理过程。传统供应链(如农场、加工厂、配送商、零售商等)条件下这些数据的保存基本依靠纸张记录,具有一定的随意性,消费者无法识别这些数据的真伪。因此,供应链管理正面临着效率和安全透明的双重挑战,迫切需要进行有效变革,促进食品供应链管理更加高效透明和安全。
模块二:智能合约开发与测试
任务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