食品溯源有多难?手把手教你写一个区块链+物联网的溯源系统
用什么来证明区块链有多火呢?
大概是,区块链被搬上“两会”桌面上讨论、相关职位需求一年内增长400%、某上市公司在公司名称中加入“区块链”后股价暴涨500%之类的表现吧。
区块链(blockchain)和物联网(Internet of Things,IoT)已被证明是当下最受欢迎的技术,虽然其使用也才刚刚开始。目前,区块链和物联网的整合已是一些大公司的优先事项之一,且少数公司已开始在一些项目中使用它来实施计划、制定解决方案。
就在这个“人人皆链”的时候,我们需要认真思考几个严肃的问题: 除了数字货币之外,区块链技术对于实体经济有哪些有价值的场景?在技术嫁接实践中如何遵循行业规律和需求?区块链如何与物联网、云计算、大数据结合达到真正理想的效果?
本文将针对如今的 食品安全运输难题 ,为大家深度介绍如何设计解决方案架构,即如何使用区块链支持分布式账本网络和物联网设备需求,并实现过程跟踪等内容。
想要知道食物进入你的胃之前,都经历了什么?话不多说,看干货吧。
- 业务方面: 将回顾业务组件构成和主要参与者,以及生产和消费者之间的交易过程
- 技术方面: 将展示我们技术解决方案的架构
- 软件方面: 将展示解决方案细节
现代食品链大而复杂,参与者们直接或间接地影响着食品的生产和运输。
我们首先了解一下现代食品生产过程,现代食品链面临哪些挑战,并提出一种基于区块链和物联网技术的解决方案:
对于我们的应用案例,我们将设法从产品交付给生产商时起对其进行说明。产品任选,这里以鸡腿为例。
假设我们管理的资产是一个装满鸡腿的盒子,另一个资产是一个装满装着鸡腿的盒子的搬运托盘。 在食品链中,我们将关注以下参与者流程:生产商、配送中心和零售商。
如前所述,现代食品链中有许多参与者,但我们遵循的是一个更简单的流程,而不一定是现实生活中所遵循的实际流程,目标是了解物联网和区块链如何帮助食品链中的各方解决实际问题。
a) 食品生态系统的挑战
我们选择关注的食品链中有许多挑战,在这里简单列示如下:
农民面临的挑战: 确保有关原材料关键信息的安全可靠,包括产品说明、检查日期、库存信息等。
生产商面临的挑战: 确保产品来源安全;产品能够安全交付和接收;尽量用电子装置包装产品,减少人工参与;使用条形码和二维码为监管者和消费者提供信息标签。
零售商面临的挑战: 检查包装的完整性,保证产品运输过程的可视化,对产品生产日期、仓库检验和质量控制等方面进行管理。
消费者面临的挑战: 对产品的原产地等包装中的信息充分信任,可迅速识别产品,且必要时能够排除可疑产品。
b) 食品加工环节
下面从我们的目标开始。案例中,产品原料到达工厂后,被切割、打包、装盒、储存,在交货前将盒子放在搬运托盘上。
搬运托盘是用于运输货物的木制、金属或塑料平台,我们在下图中可以看到:
产品在加工环节必须进行登记的重要数据包括:
- 库存量单位(Stock Keeping Unit,SKU)
- 动物来源
- 生产厂家名称
- 动物信息
- 质量控制
- 减排日期
- 是否冷藏
- 技术主管信息
- 发货日期
- 温度和物流信息
- 库存量单位
- 日期
- 厂家地址
- 冷藏温度
- 质量记录
- 搬运托盘代码
我们来看下一个环节:
c) 食品配送环节
经过切割、包装和运输后,产品到达配送中心,那里负责接收货物并检查产品储存情况。根据实际运输需求,产品可能会被放在一个更大的搬运托盘中,以便更适合火车或卡车运输。
为了避免产品出现任何问题,配送中心会检查工厂发送的数据。如果有任何额外变化,如搬运托盘转移,都需要在产品信息包中添加相应信息。
对于产品来讲,要记录如下信息:
- 收货日期
- 搬运托盘号
- 收货温度
- 储存温度
- 运输公司名称
- 密封情况
- 目的地代码
- 搬运托盘代码
- 日期
- 分销环节温度
- 运输公司名称
d) 食品零售环节
商店收到产品后需要查货物是否符合要求,拆开搬运托盘,打开盒子,产品检查过程结束:
- 收货日期
- 搬运托盘号
- 收货温度
- 储存温度
- 运输公司名称
- 密封情况
6.2 技术方案
现在我们已经了解了食品链的整个过程以及每个环节的潜在问题,下面我们来看看区块链和物联网技术在此如何发挥作用。下图为标准的区块链Hyperledger Fabric架构图示:
上图向我们展示了区块链的三层架构,包括前端应用(左侧)、API/SDK (中间)、Hyperledger Fabric 和物联网平台(右侧)。
下面对每层架构进行解读:
a) 前端应用
好吧,我知道每层架构都有很多工具,这里只用了我比较熟悉的工具。
这种前端架构使得我们可以将服务从单个接口中分离出来,这样我们就可以将用户体验(User eXperience,UX)扩展到其他平台,而不用重新构建服务内容。
b) 基于物联网的资产跟踪技术
食品链的主要挑战来自运输环节。许多食品的运输需要特定环境,因为一些食品易腐烂,而温度控制对于预防食品污染和腐烂至关重要。
下面看一下如何使用物联网设备来解决这个问题。粒子电子资产跟踪器(The Particle Electron Asset Tracker,如下图所示)可用于收集温度和环境数据,识别GPS定位,并进行蜂窝三角测量等:
这个跟踪器允许我们连接u-blox M8 GNSS GPS接收器和Adafruit LIS3DH三轴加速器。我们也可以将Grove传感器与其连接。
下面让我来看一下这种物联网平台的架构:
上图向我们展示了解决方案的重要组件,包括:
消息队列遥测传输 (Message Queuing Telemetry Transport,MQTT): 这是指一个基于TCP的可发布–订阅消息的传递协议;专门用于远程连接,需要少量代码占用,或者对网络带宽有要求;发布–订阅消息传递模式需要消息代理。
Node-RED: 这是一个编程工具,利用可以创建JavaScript函数的流编辑器将硬件设备、API和在线服务以一种简单的方式连接起来。
IBM Cloud: 这是一组云计算服务。
Bosch IoT Rollouts: 这是博世物联网套件中的一项云服务,使用户能够管理边缘设备、控制器和网关的软件更新。
那么,这些组件是如何结合在一起来帮助食品链运转的呢?
- Node-RED 控制面板仪表盘使我们能够选择一个资产跟踪器,并检查位置、数据、设备状态和其他信息
- 资产跟踪器可以在移动网络上激活或更新
- 地理位置数据可以定期传输,通过 Node-RED 仪表盘进行跟踪
- 资产跟踪器设备查询温度数据,然后查询位置或速度数据
- Node-Red 可以将温度、位置和速度数据写入 Hyperledger Fabric 中
- Node-Red 仪表盘查询 Hyperledger 结构中的各种任务信息,例如交易历史记录、日期和时间数据以及地理传感器数据
c) API/SDK
有关如何使用API/SDK将应用程序与区块链网络集成,可以参考此链接:
https:/hyperledger-fabric.readthedocs.io/en/release-1.3/fabric-sdks.html
下图展示了一个与API/SDK集成且与Hyperledger Fabric交互的应用:
Composer Java Script SDK是从Node.js派生的,它允许开发人员将应用程序与他们的业务网络集成起来。 包括两个npm模块:
Composer-client: 此模块通常作为应用程序的本地必安装项。它提供API,用来将业务应用程序连接到业务网络,目的是访问资产和参与者并提交交易。对于生产商来讲,这是应用程序唯一需要添加的模块。
Composer-admin: 此模块通常作为管理应用的本地必安装项。这个API允许创建和定义业务网络。
现在让我们继续讨论解决方案中的最后一层。
d) Hyperledger Composer—高级概述
在较高级别上,Hyperledger Composer由以下组件组成:
- 执行runtime
- JavaScript SDK
- 命令行接口(CLI)
- REST服务器
- 环回连接器
- Playground 网络用户界面
- Yeoman代码生成器
- VS Code和Atom编辑器插件
6.3 软件组件
首先,我们探究最重要的组件之一:身份验证过程。
如何保证食品链中的每个成员在前端应用中都有正确的访问权限?在回答了这个问题之后,我们将深入研究Hyperledger Composer最重要的组件: 建模语言和交易处理器功能。
a) Composer REST服务器
要验证客户端,我们需要设置一个REST服务器。有了这个选项,在允许客户端在REST API中进行调用之前,应该对其进行身份验证。
REST服务器使用一个名为PASSPORT的开源软件,它是Node.js的身份验证中间件。它灵活且模块化,支持通过用户名和密码、Facebook、Twitter、Google和轻量级目录访问协议(Lightweight Directory Access Protocol,LDAP)等进行身份验证。在第7章中,我们将就此进行详细说明。现在,让我们回顾一下组件将如何工作。
下图中,我们可以看到使用Composer REST服务器的高级身份验证架构:
如果正在进行测试,或者需要快速创建身份证明,建议使用Facebook、Google或Twitter进行身份验证,这将比其他方法更容易、更快。
要使用前面的方法,并利用Composer REST服务器,我们需要进行一些定制,这需要执行下列步骤:
1) 下面一行是composer-rest-server安装时,需要在行之前执行的命令:
apk del make gcc g++ python git
2) 若要自定义Composer REST服务器Dockerfile,请在Run语句中添加以下命令:
su -c "npm install -g passport-ldapauth" - composer && \
5) 检查钱包中是否有API:
身份验证要求composer-rest-server的每个API调用都必须包括access_token。想了解更多相关内容,请访问:
https://hyperledger.github.io/composer/v0.16/integrating/enabling-rest-authentication
使用curl的一些示例包括:
6) 这是设置composer-rest-server的最后一步: 使用Cloudant创建名片。
利用接下来的几个属性创建成员卡片:
b) Hyperledger Composer模型
识别区块链应用案例的方法有很多,让我们记住第3章中讲到的一些好的应用案例的重要指标。
- 是否涉及业务网络?
- 如果是,是否存在需要验证且可审计的事务?
- 数据透明度以及数据更改是否重要?
使用Hyperledger Composer建模语言可以很容易地定义资源结构,该结构将作为交易处理,并记录在账本上。
CTO文件使用三个主要元素为业务网络定义创建域模型:
- 包含文件中所有资源声明的单个命名空间
- 包含资产、事务、参与者和事件的一组资源定义
- 从其他命名空间导入资源的可选导入声明
交易过程函数在使用业务网络连接API提交交易时由运行库自动调用;
- https://hyperledger.github.io/composer/v0.16/reference/cto_language.html
- https://hyperledger.github.io/composer/v0.16/reference/js_scripts.html
c) Hyperledger Composer访问控制语言
Hyperledger Composer有一个访问控制文件(.acl),可以用它来对业务访问控制和网络访问控制进行编程。业务访问控制用于业务网络中的资源,而网络访问控制是指对管理网络更改的控制。
下面是授予网络访问控制的一个示例:
又例如:
通过访问以下链接,可以获得有关Hyperledger Composer访问控制语言的更多信息:
https://hyperledger.github.io/composer/v0.16/reference/acl_language.html。
d) Hyperledger Composer交易处理函数
下面是一个交易执行脚本文件的样例:
如我们所见,在使用BusinessNetworkConnection API提交交易时,交易处理器函数由runtime自动调用。文档中的Decorators用于注释runtime处理所需的元数据函数,并且每个交易类型都有一个用于存储交易的关联注册表。
小结
例如: 增加成员之间信息透明度,使它们能够更有效地控制数据;提高数据安全性;使流程更加自动化;尽量减少中间环节;使链条整体更加简化。
我们还看到物联网设备、传感器功能的扩展,它们能够在需要最少人工或不需要人工的情况下实现机器间的交互。这些技术组件带来了前所未有的自动化,既降低供应成本,也节约能源。
区块链与物联网的集成将使边缘设备(如传感器、条形码和二维码扫描事件)和基于视频识别的资产之间的数据交换成为可能。与传感器连接的资产将能够记录敏感信息,如特定仓库的位置和温度,并且可以在区块链上自动记录或更新这些信息。
随着对架构及其技术组件的更好理解,我们将能够为现代食品链充分实现一个使用物联网和区块链的解决方案。
在下一章中,我们将学习如何用物联网创建自己的区块链。
来源 | 《基于区块链的物联网项目开发》
作者 | 马克西米利亚诺·桑托斯、 埃尼奥·莫拉
责编 | Carol
出品 | 区块链大本营(blockchain_camp)