项目介绍
欢迎你来到了企业级智能合约模块的实训练习!你已经具备了扎实的 Solidity 编程和去中心化应用的开发能力,未来的你一定希望自己可以根据需求从0到1实现一款解决企业级问题的应用。
想要实现这一目标,我们先从一个供应链中的小问题入手来进行练习,为未来解决真实供应链的问题打下基础。
项目背景
你所在公司的部门主要销售不同种类的袋装五常大米,公司的销售网络已经普遍了全国各地。部门主管需要你帮他解决如何让所有门店销售五常大米的记录能够上链,从而在区块链保证不可篡改的情况下,了解各门店的真实销售情况。
你接到这个任务后,思考一袋五常大米的哪些数据可以被记录下来进行跟踪。
1.公司是否已经发货
2.门店是否收到该五常大米
3.该五常大米是否上架出售
4.该五常大米是否已经出售
5.该五常大米的价格
6.该五常大米的买方(用户)
7.该五常大米的卖方(门店)
8.该五常大米的SKU编码
9.该五常大米的买方是否收收到
SKU 全称库存进出计量的基本单元,可以是以件,盒,托盘等为单位。 SKU这是对于大型连锁超市DC(配送中心)物流管理的一个必要的方法。现在已经被引申为产品统一编号的简称,每种产品均对应有唯一的SKU号。
合约结构
在了解到需要跟踪的数据后,我们开始对合约结构进行设计来定义一个五常大米供应链的合约 “WuChangRice"。合约的编译器版本为:^0.6.0;
1.状态变量
首先需要考虑两个状态变量。一个表示合约的拥有者,也默认代表卖方的地址;另一个被定义用来专门跟踪最近的sku编号。
2.枚举
跟踪商品的状态可以通过枚举来实现,通过将状态限制为只有几个预定义值来标示五常大米所处的状态。
3.结构体
一袋五常大米拥有非常多的信息。包括名字name,编号sku,价格price,状态state,卖方seller,买方buyer。通过使用结构体可以将这些不同类型的信息都包含在内。
4.映射
我们需要一个映射来使sku编号与商品及其信息对应起来,方便各方查询。
5.事件
通过事件我们可以监听商品的状态,无论它是正在出售、已售出、运输中或已签收。
6.修饰符
因为项目的复杂性,我们需要定义多个修饰符来发挥不同场合的限制作用。
1、定义一个函数修饰符,在调用某函数时检查合约的调用者是否为合约的所有者,若不是则报错 “只有所有者可以调用此函数”。
2、定义一个函数修饰符,在调用某函数时检查调用者是否为合约的调用者,若不是则报错 “只有经过验证的参与者才能调用此功能”。
3、定义一个函数修饰符,在调用某函数时检查调用者是否为合约的调用者,若是则报错 “此调用者不能执行此函数”。
4、定义一个函数修饰符,在调用某函数时检查转账金额是否大于预设金额,若小于则报错 “你没有足够的钱来购买”。
5、定义一个函数修饰符,在调用某函数时检查支付金额,若买家想要退款则在规则下执行退款。
6、定义一个函数修饰符,在调用某函数时检查商品状态,若商品当前的状态和其sku编号不对应,则报错 “该商品正在出售中”。
7.构造函数
我们需要定义一个构造函数来初始化之前定义的两个状态变量,赋予它们初始值。
8.函数
最后,定义相关的函数实现添加商品、购买商品、运输商品以及接收商品的功能。

