区块链国赛题--食品溯源(模块二)

“区块链技术应用”赛项赛卷(食品溯源)

背景描述

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

模块二:智能合约开发与测试

任务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

猜你喜欢

转载自blog.csdn.net/2401_84837659/article/details/143218712