作者:Mona Bärenfänger mona@lightcurve.io
动机
区块链可以把供应链和物流行业数据的透明度与响应能力带到一个新的高度,改善商业过程,吸引潜在客户。
另外,应用区块链技术到特定的供应链也会使得终端用户,主要生产商,和其它各方获益,对于货物的运势过程有更好的数据洞察能力。
例如:图中的用户Bill,通过区块链技术他可以知道他所购买的商品是怎么生产出来的。
构想
我们的目标是创建一个简单的去中心化供应链追踪系统。
整个过程中参与各方的行为包括发货,运输和收货。
对于包裹的运输,实现了一个简单的信任系统,使得发件人可以对包裹的承运人设置特定的要求。
包裹本身在运输过程中也是一个活跃的参与者,它会通过感应器在运输过程中发送追踪的信息。
区块链技术的应用,试数据在运输过程中不会被篡改。
成功完成运输后承运人会得到回报,如果因为某个原因失败了会得到惩罚(损失押金)
为了使用过程的方便,一个客户端程序会被提供,所有供应链追踪的相关信息都被可视化展现,用户也可以通过提交定制交易与系统互动。
基本过程
这张图展示了供应链追踪系统的基本工作流过程。
下面是每个步骤的详细描述。
初始化包裹账户
在区块链网络注册包裹之前,发件人需要给包裹创建一个新的账户,并把密钥存储在包裹中的物联网(IoT)设备中。
这是一个必要的过程,因为包裹需要给发送到区块链的交易签名,并与网络通讯。
注册包裹
由包裹发件人在区块链上注册包裹。
当创建 RegisterPacketTransaction
交易时, 发件人定义:
-
packetId
: 在上一步初始化过程中生成的包裹ID。 -
postage
: 运费,付给运输包裹的承运人。 -
security
: 当承运人从发件人收到包裹后,一定数量的Token作为押金被锁定。 -
minTrust
: 最小信用,运送这个包裹的承运人账户的信用值。 -
recipientId
: 包裹收件人的ID,只有收件人的签名可以发送FinishTransaction
, 并结束运输过程。
这个交易将:
- 把上述数据添加的包裹账户中;
- 设置包裹的状态
status
为pending
; - 把运费从发件人的账户转到包裹的账户;
开始运输
下一步,承运人从发件人这里收到包裹,并开始往收件人运送包裹。
承运人需要签发一条交易 StartTransportTransaction
, 证明包裹已经从发件人交给承运商。
当创建 StartTransportTransaction
时,承运商定义:
-
packetID
: 发件人所要运输包裹的ID;
这笔交易将会:
- 根据包裹中设置金额锁定
security
承运人账户中的保证金;除非成功完成运送包裹,承运人不能使用保证金; - 增加
carrier
到包裹账户; - 把包裹状态
status
从pending
改为ongoing
;
光感应警报
在包裹的运输过程中,包裹本身通过各种感应器发送追踪信息,检测是否被改动过。
如果包裹篡改被检测到,它将会给区块链网络发送自己签名的警告交易。
这个警告交易 LightAlarmTransaction
将:
- 把包裹的状态
status
改为alarm
- 把当前时间戳
timestamp
加入到asset.alarms.light
存放在包裹的账户中。
完成运送
当货物送到收件人,承运人交送包裹。收件人需要签署交易 FinishTransportTransaction
, 用于验证包裹已经收到。
当发送这笔交易是,收件人需要定义:
-
packetID
: 收件人所收到的包裹 ID ; -
status
: 运送包裹的状态有2个选项: 成功success
或者 失败fail
这笔交易将:
- 如果状态成功
status="success"
** 发送运费postage
到承运人账户;
** 解锁承运人账户中的保证金security
;
** 承运人的信用值trust
增加 +1
** 把包裹的状态status
改为success
- 如果状态失败
status="fail"
** 发送运费postage
到发件人账户;
** 把押金发security
转到发件人账户, 清除 承运人账户中的lockedSecurity
;
** 承运人的信用trust
减少 -1
** 包裹状态status
设置为fail
提供的硬件
- 树莓派,Raspberry Pi Zero W (running a headless Raspbian Buster lite)
- SD存储卡,16GB class 10 SDCard
- 光线感应,A generic analog light sensor based on an LDR
- 跳线,Jumper cables
- USB线USB -> Micro-USB cable