示例六:物流供应链
功能描述
该 智能合约 实现了一个简单的供应链应用案例,针对物流行业的应用场景。由于将合约的协议公开,并且签收快递时需要签名,可以在很大程度上保证不被冒领,实现了一手交钱,一手交货,同时提高了效率,确保了透明。
该智能合约中三种角色如下:
物流公司(本案例中只有1位)
寄货方(本案例中有多位)
收货方(本案例中有多位)
业务流程如下:
1、寄货方填写寄货单,物流公司根据寄货单寄快递。
2、寄快递过程中物流公司各个快递点对快递进行扫描,描述目前快递进度,并更新货单状态。寄货方和收货方可以根据单号进行查询。
3、快递到达后,收货方检查商品,确认无误后,扫码并使用私钥签名,支付相关费用,更新订单状态。
在实际中,物流费的支付分为两类:
1、寄货方支付。收货方签收快递后先预付给物流公司。
2、收货方支付。收货方签收快递后支付给物流公司。
在本案例中暂不考虑货物损坏、收货方失联、货物保值等的相关问题。具体实现逻辑如下:
创建账户。为每个用户生成唯一的私钥与地址。
生成寄货单。寄货方填写纸质寄货单,物流公司根据此生成电子单。
更新寄货单。物流公司旗下快递点根据配送信息更新电子寄货单。
收货方签收确认。收货方收到货物后,使用自己的私钥进行签收,完成相应的付款。
账户私钥应该由安装在本地的客户端生成,本例中为了简便,使用模拟私钥和公钥。每位用户的私钥为guid+“1”,公钥为guid+“2”。用户签名为私钥+“1”
数据结构设计
寄货单
寄货单编号
寄货方地址
收货方地址
寄货方联系方式
收货方联系方式
物流费用
物流费用支付类型 //0:寄货方支付 1:收货方支付
寄货方预支付费用 //模拟实际预支付,寄货方支付物流费下值为物流费,否则为0
快递配送信息 // 快递运送状态,所经过快递分拨中心与快递点的数组
收货方签名
寄货方
姓名
所在地址
账户地址
账户公钥
联系方式
账户余额
收货方
姓名
所在地址
账户地址
账户公钥
账户私钥
联系方式
账户余额
物流公司
账户公钥
账户私钥
名称
地址
联系方式
账户余额
物流公司旗下分拨中心与快递点
快递点
名称
所在地址
联系方式
快递点公钥
快递点私钥
快递点账户地址
function及各自实现的功能
init初始化物流公司及其下相应快递点invoke调用合约内部的函数query查询相关的信息createUser创建用户 initcreateExpress创建物流公司 initcreateExpressPoint创建快递点 initcreateExpressOrder寄货方创建寄货单 initfinishExpressOrder收货方签收寄货单 invokeaddExpressPointer物流公司添加新的快递点 invokeupdateExpressOrder更新物流公司订单,添加快递点的信息 invokegetExpressOrderById查询订单状态 querygetExpress获取物流公司信息 querygetUserByAddress获取用户信息 querygetExpressPointByAddress获取快递点信息 querywriteExpress存储物流公司信息 (以物流公司账户地址进行存储)writeExpressOrder存储寄货单 (以“express”+id 进行存储)writeUser存储用户信息 (以地址进行存储)writeExpressPoint存储物流点信息 (以快递点账户地址进行存储)
接口设计
createUser
request参数
response参数
createExpressPointer
request参数
response参数
createExpress
request 参数
response 参数
addExpressPointer
request参数
response参数
createExpressOrder
request参数
response 参数
updateExpressOrder
request参数
response参数
finishExpressOrder
request参数
response参数
getExpressOrderById
request参数:
response参数:
getExpress
response参数:
getUserByAddress
request参数
response参数
getExpressPointerByAddress
request参数
response参数
测试
最后更新于