文章来源《基于区块链的物联网项目开发》
一、我们将从以下几个方面探讨食品链面临的主要挑战:
·食品链目前流程以及存在的问题。
·食品跟踪的重要性。
·政府和监管机构关注。
我们还将了解到为什么物联网和区块链技术是解决这些问题的关键,并对为确保整个食品链安全而正在实施的一些认证和相关条例进行回顾。
1现代食品链中的规则、挑战和问题
只用几小时的时间就可以从银行获得一张信用证,而且几分钟内就可以与你的伙伴分享信息,你能想象吗?
你是否可以从海关得到一份自己货物的最新物流信息,不用忍受任何官僚主义,且能够保证信息绝对安全?
答案是肯定的。
利用物联网和区块链技术可以采集这些信息(产品状态更新、信用证审批等),而且,区块链技术的优势远不止这些。
在探讨这些优势之前,我们先来看看食品行业面临的一些挑战,以及食品安全相关法律法规。
1.1 来自食品安全的挑战
美国疾病控制和预防中心(Center for Disease Control and prevention,CDC)预计,每年有4 800万人因食品传染而患病,其中12.8万人住院治疗,3000人死亡。
举一个真实的食品安全案例,2006年,美国在菠菜中发现了大肠杆菌,可是全国各地的每一家商店都有菠菜。
为了追踪问题菠菜的来源就花了两周时间,其实只是一个供应商的某1天的1批货有问题。
整起事件中,至少有199人染病,3人死亡。
最近的一起食品安全事件是在2017年3月,巴西最大的肉类加工公司发生了一起重大丑闻。
在巴西联邦警察的一次行动中,该公司被指控篡改肉制品保质期,在当地销售并且还出口。
该公司过了数周时间才对该指控做出回应,因为难以快速获得回应指控所必需的数据。
1.2 食品安全管理体系:ISO 22000
随着全球化的发展,不同国家食品来来往往。
食品安全问题会带来许多严重后果。
因此,有必要制定国际标准,以确保食品安全和食品链有序。
ISO食品安全管理认证可以有效预防食品安全事件。
ISO 22000食品安全认证通过制定食品安全标准,并保证所有食品都要经过此认证,以此来保证食品安全。
它列出了组织要达到食品安全所需要达到的标准,并确保食品达到这些要求。任何组织都可以使用该认证。
尽管人们已经采取了一些措施来提高产品标准、改善存储条件和提高产量,但近几年来能够真正有效解决食品链的现存问题并严格遵守ISO 22000等认证的有效举措寥寥无几。
解决复杂的食品链问题面临巨大挑战,但我们相信,物联网和区块链技术的结合将在很大程度上降低这些挑战的难度,并最终有效解决这一问题。
2 区块链和物联网如何在食品链中发挥作用
为了实现整个食品生态系统的透明,我们需要将生态系统中的所有实体都连接起来,包括零售商、制造商在内的系统中的每个人,还包括从农场到餐桌所涉及的每个人,最后到达食品链的最终消费者。
现在,很多公司都在采用物联网和区块链技术,它们已经意识到在整个食品链中的各种问题,但是以往大家都把重点放在业绩上,而不是困扰整个食品链的问题上。
任何解决方案,即使是部分解决,对于整个食品链也是有价值的。但是,仍然不能解决所有参与者的所有问题。
为了获取有效决方案,我们会回顾一组按照参与者划分的市场需求。
市场需求可以根据公司规模、地理位置等多个方面发生变化。
我们的目标是确保每个人都能看到物联网和区块链技术的价值,并因此对该领域产生兴趣。
这将帮助我们获得完整的数据,以提升整个食品生态系统端到端的透明度。
2.1 食品生态系统
在本节中,我们将深入研究食品链的参与者,了解他们的活动以及每个环节的规则,这些参与者包括:
·农民。
·食品生产商。
·仓库和配送中心。
·食品运输商。
·商场和超市
·消费者。
·监管者。
·认证机构及遵守的准则。
下图展示了复杂食品链中的所有参与者,本章主要目的是确定如何将物联网和区块链结合来为食品链提供解决方案,提升共享信息可信度,减少人为错误,并确保数据更改可记录。

高层次食品链流转过程
从技术角度来看,物联网是解决方案核心。
目前,有许多资产跟踪传感器可以通过蓝牙、超宽带(Ultra-Wide Band,UWB)、Wi-Fi、LPWA、LTE、NB-物联网、5G、卫星、红外、超声波、NFC和RFID来连接和传输数据。
这种组合允许提供资产即时信息跟踪。
利用物联网访问数据时,可考虑将这些数据存储在区块链网络中。
再来看区块链,区块链为我们保证了信息的可靠性以及成员之间的信任,而这种信任以前是不存在的;
现在有了区块链技术,我们能够在许多生态系统中共享多种类型的信息。
区块链技术保障成员之间的信任,使我们能够真正解决前面提到的问题,以便更好地为顾客服务。
此外,通过创建信任,区块链允许我们访问历史资产数据,这些数据代表了我们几十年来积累的数据和分析方式,包括认知、机器学习、预测、大数据等。
总之,区块链代表了将所有这些因素结合在一起的缺失的拼图。
我们的区块链解决方案需要实现的一些重要内容如下:
·在食品行业实现透明管理。
·建立可信赖的联系,让食品生态系统中的每一个人都能参与。
·提升互操作性,使业界能够推动系统可用性提升。
·实现系统对牲畜和谷物的监控。
·牲畜定位。
·室温监测(温度和灌溉)。
2.2 食品生态系统中的机遇与挑战
让我们探索这个系统的每一个部分,并确定如何应对每个部分的机遇和挑战。
1农民
技术和农业协同工作可能产生颠覆性的变化。
农民非常善于采用新的技术,特别是当它有助于提高生产效率和提升农业经营效率的时候。
这些改进是采用新技术的动力,原因很简单:粮农组织(Food and Agriculture Organization,FAO)预测到2050年地球上将有96亿人口,粮食产量将增加70%。
农业综合企业主要从事农业生产,重点是农产品的加工、仓储、分销、销售和零售。
农业综合企业是物联网解决方案的推动者,并将这种技术的应用提升到了新高度。
今天,农业综合企业有许多大公司,如陶氏农业科学公司、杜邦公司、孟山都公司、先正达公司、AB Agri公司(英联食品集团的一部分)、ADM公司、John Deere公司、优鲜沛公司以及Purina农场。
当今全球化世界中,要赢得市场份额和达成好的交易变得越来越困难。
当今世界,农民面临的生产压力比以往任何时候都大,他们需要关注的问题如下:
·产品产地跟踪。
·制定产品仓储计划。
·获取产品市场信息。
·以更快方式识别各类传染疾病。
·保证动物有良好的环境、日常生活和屠宰场,所有动物都得到良好的照顾。
以上是农民需要解决的问题。
他们主要依靠物联网设备来解决这些问题:
传感器,可以测量温度、时间和收获面积的数据采集装置;更快的收割机器;全球定位系统;
支持决策的预测模型;
以精确和透明的方式存储信息的区块链。
2.食品生产商
食品生产商在这个链条中扮演着重要角色,是整个过程的核心。
因为它们参与了从动物生命开始到结束(动物被宰杀)的每一件事,包括肉类加工和包装等。
以下是食品加工厂生产线:

我们总是听说与食品生产商有关的食品安全问题,特别是鸡、牛和猪等动物的问题。
这些问题往往与动物屠宰操作有关,动物屠宰流程在食品生产业中发生的事件最多。
此外,食品链及其内部的过程需要通过几个安全门,如温度分析、目测、包装机、存储和运输。
在这个复杂的市场中,没有任何生产商想让它们的产品与带来坏名声的件有关。
但在这个链条中有太多的人可以直接影响客户的看法。
食品生产商面临的挑战如下:
·食物加工处理需要进一步自动化,减少或完全消除手工操作,并确保在过程中保持较高卫生标准。
·为保证产品高质量的源头,要确保供应商的忠诚度。
·有效控制库存和货物配送。
·记录产品存储、物流数据、包装、搬运托盘等操作的数据。
业界已经意识到,无论在企业内部还是开展对外合作,通过物联网与区块链技术的结合才可以保证信息的透明、可追溯,快速解决问题,并达成共识。
3.监管者
对于食品生产业的监管者来讲,采用物联网和区块链技术,可以使得提供的数据更加透明、数据分析能够更快速响应,此外还能在许多方面进行改进,如食品原产地认证等。
2018年7月,英国食品标准局(Food Standards Agency,FSA)成功地完成了一项区块链试点,该机构是在英格兰、威尔士和北爱尔兰开展工作的独立政府部门,致力于保护公众健康和消费者食品安全。
FSA信息管理主管Sian Thomas说:
“这是一个非常令人兴奋的开发。我们认为区块链技术可能会为食品工业增加真正的价值,比如屠宰场,它的工作需要大量的检查和结果的整理。
我们的方法是与业界一起开发数据标准,这将使理论成为现实,我很高兴我们能够证明区块链确实在食品行业发挥了作用。
我认为,工业界和政府还有大量的机会,共同为推广和发展区块链技术而努力。”
在食品链中负责监管的政府机构及相关机构在监管过程中遇到了困难。
尽管采取了一些控制机制,例如要求生产者提供视觉分析和实验室数据,但检查仍然容易滋生腐败,而且没有食品整个生命周期的完整信息。
而且,食品链很长,以一种快速、客观的方式找出任何偏差的实际责任方并不是一件容易的事情。
此外,经常存在的腐败现象也影响到整个链条。
综上,我们可以判断这一链条需要应对以下挑战:
·保证产品配方符合相关规定。
·确保信息可靠和可审计。
下面我们转到下一个环节:运输。
4.食品运输商
当谈及食品运输时,我们首先应该谈论易腐产品,这些产品对温度和交付时间都有特殊要求。
此外,还有运输易腐货物的特别许可证、货物在目的地和出发地的特殊产品检验,以及包装和拆包,这些都需要控制和跟踪。
如今,运输公司拥有大量可以控制和跟踪产品的技术。
配送中心和仓库使用扫描仪、条形码、机器人来控制产品的收发货。
此外,还实现了解决方案分析和发票自动化跟踪,通过跟踪可以了解产品从何处订购、从何处供应、从何处发出、从何处发送、交付至何处及其到达日期。
例如,图像识别技术就可以帮助注册具有相似内容的项目。以物联网技术为基础的传感器给这些新技术提供了强大支撑。
这些传感器可以监测温度、湿度、对易腐食品和其他货物包装的篡改。
传感器一旦发现违反了设定条件,就会自动向供应链管理人员发出警报,以便立即对食品安全问题采取相应行动。
据此,区块链技术可以极大地帮助跟踪产品,并通过唯一的可跟踪共享账号,建立各方之间的信任。
5.商场和超市
在食品链中,当产品有问题时,一般商场和超市最先得到反馈。
商场和超市经常因产品问题而受到指责,因为它们也经常负责产品的存储、运输和加工。
这些问题可能发生在商店内部或运输过程中。
商场和超市的经营活动与食品加工厂的经营活动一样复杂,它们在食品加工和存储方面都肩负重任,有关变质食品问题也是屡见不鲜,问题是:
“这个产品是已经腐烂了,还是在这里腐烂了?”
通常,产品所有者在每个环节都有他们自己的质量控制过程,这使得事情变得更加复杂。
当出问题时,当事人可以提供证据,以免除他们自己的任何过失,但通常是其所在部门内部管理的相关证据,产品在商店内部部门之间交接过程则无迹可寻。
此外,我们还向较大的商店销售产品,那里也会出现同样问题,这些问题也很有可能是由于商店内部部门之间交接不当导致的。
综上所述,当前超市面临的挑战有如下几个方面:
·管理和控制产品的收发环节。
·有效控制库存和货物在商店之间的物流。
·收集产品定位和储存的数据。
·将产品拆封并摆放到货架上。
·控制产品的保质期。
大多数大中型超市都有电子商务网络。
这使得这些超市在日常经营中对技术和软件的使用比较普及,例如库存控制,使用物联网来控制包装和搬运托盘,使用二维码、集成数据系统来处理库存和销售数据,采用预测模型,跟踪客户忠诚度等。
这些都向我们展示了技术在这个领域越来越多的应用。
6.顾客
在激烈市场竞争中,顾客始终是主角。
他们从市场挑选产品时,除了看质量,还会考虑购买地点和生产厂家。
现在,商店的商品除了包装外,陈列布局也要完美,并提供易于阅读的产品说明。
此外,产品来源地、是否符合相关标准以及它是否有必要的认证信息对于顾客来说也是非常重要的。
客户选择产品时,可以轻松地访问所有这些信息,读取二维码,并能够使用增强现实解决方案(augmented reality solution)收听产品细节。
两位未来学家在2018年7月的美国商会活动中表示,顾客在购买食品前,有很多机会与产品互动,如果想更多地了解食物对他们身体的影响,可访问如下网站:https://www.fooddive.com/news/what-will-grocery-shopping-look-like-in-the-future/447503/。
食品链上的一系列挑战并不容易解决。
这些现存问题可能带来的影响不仅会导致经济损失,还会引起顾客的健康问题,甚至死亡。
技术可以成为解决这些问题的关键。
可以肯定的是,物联网和区块链技术的组合可以增强该链条上成员之间信息的透明度,使他们能够更有效地控制数据,提高安全性,使整个流程更加自动化,链条不再那么复杂。
我们还可以看到,食品链中的所有成员都面临着巨大的挑战,使用物联网和区块链技术还可以为顾客提供更好的产品或品牌,这对顾客来讲更重要,可以让他们对正在消费的商品有更深刻的认识。
2.3 食品链是物联网和区块链技术应用的经典案例吗
以下问题可以作为辨别是否是好的区块链应用案例的判断标准:
1.是否是业务网络?
是的,食品链网络涉及食品种植者、生产者、运输公司和零售商店。
2.是否存在需要验证或协商一致的事宜?
是的,食品链需要记录产品的所有者、在供应链中的流转信息。
3.审计跟踪是否重要(显示出处)?
是的,食品链中顾客和监管机构有此要求。
4.数据更改是否需要跟踪(数据不可变性)?
是的,食品链中数据更改涉及不同公司之间资产控制权的转移。
综上,我们的食品链案例满足了成为一个良好的区块链应用案例的所有要求。
但是食品链中涉及的物联网的特点是什么呢?
例如,由于物联网技术涉及范围从化肥使用数量到用于收割的农用车里程数,所以基于物联网的智能农场有助于种植者和农民减少不必要的浪费,提高生产力,此外食品污染及其可能产生的后果也可通过事前发现问题苗头来预防。
此外,由于传感器允许维修工程师关注设备实时情况,因此物联网技术还提供实时监控功能,不仅可检查历史数据,而且还节省成本。
3 小结 综上所述,食品链极其复杂,许多因素高度相互依存。 食品产业链存在诸多挑战,任何一个环节出问题,都会给顾客带来风险。 以往,我们需要工人亲自在场监督食品流转的每个环节,现在通过联网设备可视化,运维工程师可以更好地了解设备、库存和人员情况。 这主要是由于区块链技术可以为食品链参与者(包括顾客)提供共享信息。 物联网技术在食品工业中主要通过传感器、条形码读取器和QR码等核心技术实现,而物联网与区块链技术的集成不仅可以解决许多问题,而且可以带来食品行业的变革。 具体来讲,安装在设备上的联网的传感器,通过系统实时生成的警报等信息监测食品安全。 运维工程师可以通过智能手机或平板电脑从任何地方访问这些实时数据。 用于食品安全的物联网系统功能包括: 实时了解食品加工设备状况,一旦出现任何问题就自动发送警报,并提供下一步故障排除和解决问题的建议。 |
二、设计解决方案架构
·业务方面:将回顾业务组件构成和主要参与者,以及生产和消费者之间的交易过程。
·技术方面:将展示我们技术解决方案的架构。
·软件方面:将展示解决方案细节。
1 食品产业
现代食品链大而复杂,参与者们直接或间接地影响着食品的生产和运输。
我们首先了解一下现代食品生产过程,现代食品链面临哪些挑战,并提出一种基于区块链和物联网技术的解决方案:

上图是现代食品链业务流程的简化版,实际链条要比上图庞大得多。
例如,很多超市都有它们自己的销售中心,所以这里也没有涵盖例如港口和海关等其他参与者。
对于我们的应用案例,我们将设法从产品交付给生产商时起对其进行说明。
产品任选,这里以鸡腿为例。
假设我们管理的资产是一个装满鸡腿的盒子,另一个资产是一个装满装着鸡腿的盒子的搬运托盘。
在食品链中,我们将关注以下参与者流程:生产商、配送中心和零售商。
如前所述,现代食品链中有许多参与者,但我们遵循的是一个更简单的流程,而不一定是现实生活中所遵循的实际流程,目标是了解物联网和区块链如何帮助食品链中的各方解决实际问题。
1.1 食品生态系统的挑战
我们选择关注的食品链中有许多挑战,在这里简单列示如下:
·农民面临的挑战:
确保有关原材料关键信息的安全可靠,包括产品说明、检查日期、库存信息等。
·生产商面临的挑战:
确保产品来源安全;
产品能够安全交付和接收;
尽量用电子装置包装产品,减少人工参与;
使用条形码和二维码为监管者和消费者提供信息标签。
·零售商面临的挑战:
检查包装的完整性,保证产品运输过程的可视化,对产品生产日期、仓库检验和质量控制等方面进行管理。
·消费者面临的挑战:
对产品的原产地等包装中的信息充分信任,可迅速识别产品,且必要时能够排除可疑产品。
1.2 食品加工环节
下面从我们的目标开始。案例中,产品原料到达工厂后,被切割、打包、装盒、储存,在交货前将盒子放在搬运托盘上。
搬运托盘是用于运输货物的木制、金属或塑料平台,我们在下图中可以看到:

产品在加工环节必须进行登记的重要数据包括:
·库存量单位(Stock Keeping Unit,SKU)。
·动物来源。
·生产厂家名称。
·动物信息。
·质量控制。
·减排日期。
·是否冷藏。
·技术主管信息。
·发货日期。
·温度和物流信息。
在登记盒子或搬运托盘时记录下列详细信息:
·库存量单位。
·日期。
·厂家地址。
·冷藏温度。
·质量记录。
·搬运托盘代码。
1.3 食品配送环节
经过切割、包装和运输后,产品到达配送中心,那里负责接收货物并检查产品储存情况。
根据实际运输需求,产品可能会被放在一个更大的搬运托盘中,以便更适合火车或卡车运输。

为了避免产品出现任何问题,配送中心会检查工厂发送的数据。
如果有任何额外变化,如搬运托盘转移,都需要在产品信息包中添加相应信息。
对于产品来讲,要记录如下信息:
·收货日期。
·搬运托盘号。
·收货温度。
·储存温度。
·运输公司名称。
·密封情况。
对于搬运托盘来讲,要记录如下信息:
·目的地代码。
·搬运托盘代码。
·日期。
·分销环节温度。
·运输公司名称。
经过检验,产品被送到零售商手中。
1.4 食品零售环节
商店收到产品后需要查货物是否符合要求,拆开搬运托盘,打开盒子,产品检查过程结束:

在零售环节,一定要记录如下信息:
·收货日期。
·搬运托盘号。
·收货温度。
·储存温度。
·运输公司名称。
·密封情况。
现在,商店可以在产品上贴上标签了,产品将直接或过一段时间被摆在货架上出售。
2 技术方案
现在我们已经了解了食品链的整个过程以及每个环节的潜在问题,下面我们来看看区块链和物联网技术在此如何发挥作用。
下图为标准的区块链Hyperledger Fabric架构图示:

上图向我们展示了区块链的三层架构,包括前端应用(左侧)、API/SDK(中间)、Hyperledger Fabric和物联网平台(右侧)。
下面对每层架构进行解读:
2.1 前端应用
该层负责数据输入,可以是一个数据包,比如来自SAP、Salesforce或Siebel的数据包,或者是自定义的应用。
它还可以与物联网设备交互,收集数据并在区块链账号中注册。
开发前端应用由以下几个方面组成:

好吧,我知道每层架构都有很多工具,这里只用了我比较熟悉的工具。
这种前端架构使得我们可以将服务从单个接口中分离出来,这样我们就可以将用户体验(User eXperience,UX)扩展到其他平台,而不用重新构建服务内容。
2.2 基于物联网的资产跟踪技术
物联网在食品链中起着重要作用。
物联网设备可以跟踪资产,而且有很多型号可供选择。
有测量温度的传感器,进行位置跟踪的GPS、信标、SigFox、Wi-Fi、4G和Sub1Ghz。
这些设备和网络可以广泛应用于农场、工厂、运输公司、配送中心和零售网点,适用范围涵盖食品链中的所有参与者。
食品链的主要挑战来自运输环节。
许多食品的运输需要特定环境,因为一些食品易腐烂,而温度控制对于预防食品污染和腐烂至关重要。
下面看一下如何使用物联网设备来解决这个问题。
粒子电子资产跟踪器(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结构中的各种任务信息,例如交易历史记录、日期和时间数据以及地理传感器数据。
2.3 API/SDK
API/SDK是区块链网络中连接的集成层,通常使用Node.js开发,在调用智能合约中起着重要的作用。
今天,我们可以找到使用Go和Java的API/SDK文档,以及Python文档。
有关如何使用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允许创建和定义业务网络。
现在让我们继续讨论解决方案中的最后一层。
2.4 Hyperledger Composer——高级概述
Hyperledger Composer是一种创建区块链网络的简单方法,它集成了一个全栈工作解决方案,就像Hyperledger Composer架构站点提供的那样。
在较高级别上,Hyperledger Composer由以下组件组成:
·执行runtime。
·JavaScript SDK。
·命令行接口(CLI)。
·REST服务器。
·环回连接器。
·Playground网络用户界面。
·Yeoman代码生成器。
·VS Code和Atom编辑器插件。
详细介绍这些插件不在本书的内容范围之内。
你可以访问这个链接,简要地了解这些组件:
https://hyperledger.github.io/composer/latest/introduction/solution-architecture。
3 软件组件
现在,我们将从架构师的角度来看看解决方案的软件组件。
这是熟悉所有组件并更好地理解它们是如何集成的一个好方法。
首先,我们探究最重要的组件之一:
身份验证过程。
如何保证食品链中的每个成员在前端应用中都有正确的访问权限?
在回答了这个问题之后,我们将深入研究Hyperledger Composer最重要的组件:
建模语言和交易处理器功能。
3.1 Composer REST服务器
要验证客户端,我们需要设置一个REST服务器。
有了这个选项,在允许客户端在REST API中进行调用之前,应该对其进行身份验证。
REST服务器使用一个名为PASSPORT的开源软件,它是Node.js的身份验证中间件。
它灵活且模块化,支持通过用户名和密码、Facebook、Twitter、Google和轻量级目录访问协议(Lightweight Directory Access Protocol,LDAP)等进行身份验证。
现在,让我们回顾一下组件将如何工作。
下图中,我们可以看到使用Composer REST服务器的高级身份验证架构:

下面的组件已经在图中进行了描述:前端应用、Composer REST服务器、LDAP和云(Cloudant,NoSQL数据库)。
如果正在进行测试,或者需要快速创建身份证明,建议使用Facebook、Google或Twitter进行身份验证,这将比其他方法更容易、更快。
要使用前面的方法,并利用Composer REST服务器,我们需要进行一些定制,这需要执行下列步骤:
1下面一行是composer-rest-server安装时,需要在行之前执行的命令:

在使用此方法之前,请确保你有一个干净的环境,清除所有以前的安装。
2.若要自定义Composer REST服务器Dockerfile,请在Run语句中添加以下命令:

3.创建以下环境变量:

4.如果正在检查API调用并接收到404,这意味着没有登录:

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创建名片。利用接下来的几个属性创建成员卡片:
·ID:wallet-data/admin@system name
·Key:wallet-data/admin@system name
·Value:{"rev":"5-1af3gs53gwh...."}
上传附件,如下所示:

3.2 Hyperledger Composer模型
识别区块链应用案例的方法有很多,应用案例的重要指标。
·是否涉及业务网络?
·如果是,是否存在需要验证且可审计的事务?
·数据透明度以及数据更改是否重要?
在确定了这些问题的答案之后,头脑风暴会议是比较好的沟通方式,会议可详细说明解决方案、确定最佳解决方案平台(如IBM Food Security)或开始创建自定义应用案例。
使用Hyperledger Composer建模语言可以很容易地定义资源结构,该结构将作为交易处理,并记录在账本上。
CTO文件使用三个主要元素为业务网络定义创建域模型:
·包含文件中所有资源声明的单个命名空间。
·包含资产、事务、参与者和事件的一组资源定义。
·从其他命名空间导入资源的可选导入声明。
创建区块链和物联网解决方案时,我们会创建一个业务网络。
让我们更详细地研究我们使用的代码:名称空间是资产、事件、参与者和事务的基本定义,如下所示。
我们将创建一个业务网络,让我们更详细地研究使用的代码:命名空间是资产、事件、参与者和交易的基本定义,如下所示:

资源和枚举类型的声明显示在以下代码中:

交易过程函数在使用业务网络连接API提交交易时由运行库自动调用;

有关Hyperledger Composer建模语言的更多信息,请访问以下链接:
https://hyperledger.github.io/composer/v0.16/reference/cto_language.html
https://hyperledger.github.io/composer/v0.16/reference/js_scripts.html
3.3 Hyperledger Composer访问控制语言
Hyperledger Composer有一个访问控制文件(.acl),可以用它来对业务访问控制和网络访问控制进行编程。
业务访问控制用于业务网络中的资源,而网络访问控制是指对管理网络更改的控制。
下面是授予网络访问控制的一个示例:

又例如:

通过访问以下链接,可以获得有关Hyperledger Composer访问控制语言的更多信息:
https://hyperledger.github.io/composer/v0.16/reference/acl_language.html。
3.4 Hyperledger Composer交易处理函数
Hyperledger Composer业务网络定义由一组模型文件和一组脚本组成。
脚本可以包含执行交易过程的交易处理函数,这些交易是在业务网络的模板文件中定义的。
下面是一个交易执行脚本文件的样例:

如我们所见,在使用BusinessNetworkConnection API提交交易时,交易处理器函数由runtime自动调用。
文档中的Decorators用于注释runtime处理所需的元数据函数,并且每个交易类型都有一个用于存储交易的关联注册表。
小结: 到目前为止,我们已经确定,物联网和区块链的结合可以缓解几个问题,改变现代食品链的运作方式。 例如,增加成员之间信息透明度,使它们能够更有效地控制数据; 提高数据安全性;使流程更加自动化; 尽量减少中间环节; 使链条整体更加简化。 我们还看到物联网设备、传感器功能的扩展,它们能够在需要最少人工或不需要人工的情况下实现机器间的交互。 这些技术组件带来了前所未有的自动化,既降低供应成本,也节约能源。 区块链与物联网的集成将使边缘设备(如传感器、条形码和二维码扫描事件)和基于视频识别的资产之间的数据交换成为可能。 与传感器连接的资产将能够记录敏感信息,如特定仓库的位置和温度,并且可以在区块链上自动记录或更新这些信息。 随着对架构及其技术组件的更好理解,我们将能够为现代食品链充分实现一个使用物联网和区块链的解决方案。 |
5 问答
问:在区块链网络中,如果物联网安全不能保证,是否会危及数据安全?
答:有时,一些公司在使用物联网时不注重安全。
也许是因为这是一项新技术,它们不相信它会带来巨大风险。
然而事实是,企业正在将不安全的设备引入到它们的网络中,然后无法更新软件。
不应用安全补丁虽然很常见,但其影响有限,联网的不安全物联网设备则会随时引发灾难。
想想黑客和DDoS攻击吧!
应该为物联网设备制定一个强有力的安全计划,类似于互联网服务的安全计划,例如计划可包括设备标识和程序更新功能,可一定程度上缓解此类问题。
问:区块链技术足够成熟了吗?
答:目前,市场上有许多区块链平台提供商可供选择。
家乐福、沃尔玛等公司也已经加入了这些平台,在区块链平台上运行它们的业务。
问:使用物联网和区块链技术实现解决方案有多复杂?
答:本章中提到的大多数技术都是开源的,已经被许多公司使用过。
这表明,我们谈论的不是那么复杂的东西,而是大多数开发人员可以使用的东西。
问:开发一个覆盖整个食品链的解决方案有多复杂?
答:这的确不是一件容易的事。
可以从验证应用案例开始,良好的应用案例是必不可少的。
此外,检查是否涉及业务网络。
物联网在跟踪追溯资产方面也起着重要作用,应该有一个资产跟踪的安全计划。
问:我是否应该考虑使用开源工具,如Hyperledger Fabric或Composer?
答:Hyperledger是Linux Foundation开创的一个项目,Linux Foundation会员有250多家公司,包括金融、银行、供应链、制造业等领域的佼佼者,例如IBM、Cisco、美国运通、富士通、英特尔和摩根大通都使用Linux Foundation的技术。
换句话说,只要安全措施到位,使用这些技术都是没有问题的。
二、创建自己的区块链和物联网解决方案
正确理解上一章中提出的项目目标,现在开始工作!
在本章中,我将指导你使用Hyperledger Composer创建区块链网络。
本章学习内容如下:
·创建区块链网络。
·使用Hyperledger Composer定义资产、参与者、事务和访问控制列表(ACL)。
·将Hyperledger环境连接到网络。
建立一个设备,监视发货并与区块链网络进行交互。
1 技术要求
要访问完整代码,必须在计算机上安装Hyperledger Fabric/Composer环境,包括一些先决条件,以及一个能够开发Node.js应用的IDE(推荐使用Visual Studio Code)。
可通过该链接查阅本章代码:
https://github.com/PacktPublishing/Hands-On-IoT-Solutions-with-blockchain/tree/master/ch7/hands-on-iot-blockchain。
2 解决方案概览
在这里,我们将处理从农场到餐桌整个食品生命周期中最重要的部分之一:将产品从食品厂转移到杂货店。
下图显示了每个给定阶段的解决方案:

根据上图,我们重点说明以下四个参与者:
·工厂(Factory):这是食品安全解决方案的起点。
工厂负责从农场收集原始数据,并创建一个发送到仓库的食品盒,并将该食品盒传送给运输者。
允许这个参与者进行的工作是增加一个新食品盒,并将该食品盒传送给运输者。
·运输者(Transporter):运输公司负责在指定温度下将产品从工厂运送到仓库,再从仓库运送到商店。
为运输程序定义的操作要对其控制的资产添加温度监测程序,并将资产转移到仓库或商店。
·商店(Grocery Store):上图是一家向消费者出售食品盒的公司。
商店是连锁店的终点,消费者可以在那里通过食品盒上的信息了解产品,商店则主要通过查看搬运托盘和食品盒上的信息了解产品。
·消费者(Consumer):他们是食品盒到达的最终目标。
消费者对追踪食品盒经过的链条很感兴趣,所以有一个映射的操作来查看食品盒的信息。
我们将使用业务卡片为每个参与者创建一个Composer REST服务器实例,因此总共将有4个Composer REST服务器实例。
还有食品盒和搬运托盘,其定义如下:
·食品盒(FoodBox):它代表在工厂生产的产品,其信息贯穿于整个食品链过程中。
·搬运托盘(Pallet):这代表了一组食品盒,这组食品盒被装在一个搬运托盘上从仓库运送到商店。
下面开始我们的区块链网络解决方案。
3 创建区块链网络
要开发区块链网络,首先必须使用Yeoman命令行创建业务网络项目,然后为其命名:

Yeoman生成器为Hyperledger Composer业务网络创建一个具有基本结构的文件夹。
.cto文件包含业务网络定义:资产、参与者、交易和查询,而.acl文件包含资产和交易的访问控制列表。
下面,我们将编写业务网络定义,启动Visual Studio Code并打开由Yeoman创建的文件夹。
要开始开发区块链解决方案,请打开以下文件并开始编码:models/com.packtpublishing.businessnetwork.cto。
3.1 概念和枚举
通过在Hyperledger Composer中创建更具可读性的结构,创建在资产、参与者和事务中常见的组合数据类型是一个很好的实践。
这些结构就是概念和枚举。
我们将在解决方案中使用以下结构:

接下来,我们来看看如何在业务网络中定义资产。
3.2 资产定义
在定义了区块链网络的基本结构之后,我们将定义其中使用的资产,包括食品盒和食品搬运托盘,其代码定义如下所示:

3.3 参与者
参与者是与区块链网络交互的角色。每个参与者都在业务网络中承担不同角色,其权限在访问控制列表中定义,如下所示:

3.4 为Hyperledger部署和测试业务网络
为了测试,我们将授权所有参与者可以访问区块链网络的所有资源。
1为了实现这一点,我们将在permissions.acl文件中添加以下行(而不删除任何现有的规则):

有了定义好的规则,我们就能部署和测试账本了,而不需要额外的许可。
2.定义网络之后,我们将生成一个Business Network Archive(.bna)文件,并将其部署到Hyperledger环境中。
确保你的环境在此之前已经启动并运行。
要创建.bna文件,进入项目的根目录并运行以下命令:

3.如果你还没有生成PeerAdminCard文件,那么现在该生成了,并用下载Fabric-dev服务器的目录中的createPeerAdminCard.sh脚本导入它。

4.设置好所有内容后,将.bna文件安装到环境中,并通过运行以下命令启动网络:

5.最后,导入开始过程中生成的网络管理员卡片,并对网络进行ping,以确保它在环境中运行:

此时,我们已经创建了网络的第一个版本,生成了用于部署的包(.bna文件),创建了PeerAdminCard,将网络安装到Hyperledger Fabric环境,生成了负责管理区块链网络的NetworkAdminCard,并启用了该网络。
使用管理卡片,我们将发送ping命令以确保网络已启动并运行。现在,来改进我们的网络。
3.5 通过区块链中的交易操控资产
交易是在Hyperledger Composer定义的业务网络对象上执行的基本操作。
交易运行的范围限于Hyperledger Composer的环境和业务网络范围。
在这里演示的应用案例中,我们创建的交易将使用物联网设备提供的信息更新搬运托盘和嵌套的食品盒信息。
它由两个结构组成。
第一个结构是交易的定义,它是在业务网络定义模型(.cto文件)中创建的:

另一个结构是实现交易的函数,该交易是在JavaScript ES5合规脚本(.js文件)中创建的:

3.6 创建并导出参与者业务卡片
为了正确地使用网络,我们将为每一类参与者(Factory、Warehouse、Transporter、Store和Consumer)都创建它们各自的业务卡片,并将这些信息导入到Composer CLI钱包中:
1首先,我们将创建参与者:

2.然后,我们将发出一个标识,并使用以下命令导入它们各自的业务卡片:

3.对每个参与者重复此命令:Transporter 1、Store 1、Warehouse 1和Factory 1。

4.为每个参与者将卡片导入Composer CLI钱包中,并检查是否所有卡片已成功导入:

3.7 定义访问控制列表
为了在网络上强制执行访问权限,我们将使用以下规则为参与者定义对资产的访问权限:
1.只有工厂才能创建FoodBoxes:

2.食品厂可以看到它们的FoodBoxes是什么,并将它们移交给运输者,我们可以使用一个条件规则来定义这些权限:

3.下一个规则是针对Transporters的,它们可以读取和更新自己的FoodBoxes。我们也会为FoodBoxPallets做同样的事情:

4.仓库还可以读取和更新其FoodBoxes信息,以及创建、更新和读取FoodBoxPallets信息:

5.最后,商店可以阅读它们的FoodBoxes信息,而消费者可以阅读所有的FoodBoxes信息:

应用这些规则之后,就可以测试网络了。
3.8 升级业务网络
以下四个步骤是升级已部署的业务网络所必需的:
1-打开Package.json文件并更新应用的版本号。
在我们的例子中,将更新到0.0.2版本,如下所示:

2.通过运行composer archive create -t dir -n.命令创建一个新的BNA文件:

3.在Hyperledger环境中安装新的归档文件:

4.升级(upgrade)网络:

如果所有命令都已成功运行,则业务网络将在新版本上运行,包括前面部分中创建的交易和ACL。
3.9 为每个参与者设置Composer REST服务器
作为安装Hyperledger Composer开发环境的先决条件的一部分,还应该安装Composer REST服务器。
这个组件是一个基于Loopback框架(http://loopback.io)的API服务器(框架),它包括一个loopback-connector-composer(用于连接到Hyperledger Composer环境)和一个动态收集资产、参与者和业务模式信息的脚本。
启动Composer REST服务器的最简单方法是运行cli命令并正确填写启动问卷。
为了方便起见,我们将使用以下命令运行它:

为每个参与者打开一个终端窗口,这样为其启动一个专用的Composer REST服务器:

每个正在运行的实例都与单个用户相关,这意味着通过3003端口的Composer REST服务器调用的所有操作都与标识符为5的使用者相关。
例如,如果创建了一个新的Consumer参与者(例如ID 6),那么必须向参与者发出新的业务卡片,并且必须使用新卡片启动Composer REST服务器。
在大部分应用案例中,对于整个组织来说,一张业务卡片就足够了。
当然也可以根据需要按照公司治理模式制定发行业务卡片的不同规则,例如每个业务分支/子公司有自己的业务卡片,或者每个用户必须有自己的业务卡片。
此时,你的计算机上应该有5个Composer REST服务器实例,每个实例都应该能够在以下地址通过浏览器进行访问:http://localhost:<port>。
4 创建解决方案的物联网部分
在定义了整个区块链网络并让所有组成部分都启动运行之后,我们开始设置和开发设备,利用食品盒和搬运托盘测量数据来更新区块链账本信息。
为了完成以上任务,我们将创建一个新的应用,该应用接收搬运托盘测量数据,并使用Composer REST服务器公开的API来更新区块链账本。
4.1 硬件设置
为了安装监控设备,我们将设定一些与生产环境相关的假设:
·运输车辆有Wi-Fi连接,车上设备可以连接网络。
·监控设备记录的时间与应用上显示的时间同步(包括时区)。
·所有盒子都用同一辆车同时运输,测量参数等信息适用于搬运托盘中的所有盒子。
在生产层面的应用中,这些限制条件/假设必须通过缓存非发布(non-published)事件和使用不同的网络(Sigfox,LoRAWan,移动通讯等)等技术手段来实现,并且记录的实际时间必须与设备位置同步。
本项目中使用的硬件如下图所示:

该图像在Fritzing中创建,并获得了CC BY-SA 3.0的许可,参见https://creativecommons.org/licenses/by-sa/3.0/
下表给出了每个组件的说明。

考虑到这些假设,应用中使用的设备是联网的,如下图所示。在这里,我们将Grove温度传感器连接到基础屏蔽中的A3连接插孔上。

该图像在Fritzing中创建,并获得了CC BY-SA 3.0的许可,参见https://creativecommons.org/licenses/by-sa/3.0/
以上就完成了食品盒运输监测设备的配置。
4.2 固件开发
以下代码是从第2章中借用的,因为它们的主要硬件特点和目标都相同。
唯一的修改在已发布的JSON文档中:
我们必须删除土壤湿度参数,在从工厂到仓库运输时增加食品盒ID参数,从仓库到商店运输时增加搬运托盘ID参数。
它检索Grove传感器的温度并将其发布到Watson物联网平台:

4.3 应用开发
由于我们在本地运行Hyperledger环境,所以开发的应用也必须运行在与Hyperledger环境相同的网络上。
我们没有在IBM Cloud/Bluemix中运行它,配置参数将存储在一个JSON文件中,其目录与应用的主要.js文件将运行的目录相同。
在这里列出了配置JSON文件的内容框架,必须将定义的详细信息对其进行更新:

应用程序代码接收设备发布的所有事件,并根据收集的温度更新托盘中的FoodBoxes:

下面的代码通过Composer REST服务器调用区块链网络中的定义。

5 端到端测试
为了测试,我们将对大多数操作使用Hyperledger Composer Playground,但运输者更新除外。
因此,可以停止在上一节中启动的所有Composer REST服务器,但为运输者启动的服务器除外(端口3004)。
如果你的Hyperledger Composer Playground是在开发环境设置期间安装的,那么你所要做的就是运行composer-playground命令,或者使用npm(npm installg-g composer-playground)安装它。
默认浏览器将打开Composer-Playground网络应用,如以下屏幕截图所示:

Composer Playground登录页面
你看到的参与者与前面创建的相同。
5.1 创建食品盒
根据我们授予的权限,工厂是可以创建Foodboxes的,具体做法如下:
找到Factory 1 @food-safety-b10407业务卡片,选择Connect now,然后点击屏幕左上方的Test按钮。
在左侧面板上,选择Assets->FoodBox,在右上角,点击+Create New Asset按钮:

以下内容用于填写JSON文件,并点击Create New按钮创建资产:

5.2 将资产移交给运输者
利用Hyperledger Composer Playground移交食品安全网络中的一项资产,步骤如下:
1-在应用的右上角,选择My business networks选项,并以运输者身份登录。
2.如果你选择Test,Assets→FoodBox,你会发现并没有资产:

3.返回Factory身份,选择资产数据右手边的Edit按钮,用下面的程序更新JSON文件:

4.保存资产,工厂身份登录将看不到此项。
当你再用运输者身份登录时,你就以看到此项资产。
5.3 运输时测量温度
现在,我们将模拟运输过程中的温度测量。
我们在物联网应用代码中创建了以下注释代码,因为我们在两个不同的时间点处理运输过程采集的数据。
第一种情况是将FoodBox从Factory运输到Warehouse,这是由updateFoodBox函数实现的,而updatePallet函数目的则是处理从Factory到商店的运输。

此时,我们正在处理从Factory到Warehouse的运输,因此取消代码第19行(updateFoodBox(payload.temperature))的注释。
然后更新第30、34、35和36行,为数据提供正确的值。
确保用于运输者的Composer REST服务器已经启动并运行,在设备代码的第2和3行中定义的URL指向正确的Composer REST服务器主机。
启动设备应用。
5.4 将资产转移到仓库
当资产被移交到运输者时,同样的事情发生了。
转到运输者的资产视图,编辑JSON文件,并使用相应的值更改所有者:

5.5 创建一个搬运托盘并添加食品盒
要创建搬运托盘,我们需要遵循与食品盒相同的过程:
1-在左侧面板上,选择Assets→FoodBoxPallet,然后在右上角点击+Create New Asset。
2.将以下代码填写在JSON文件中,确保在foodBoxInPallet字段中使用相同的食品盒ID,在owner字段中使用相同的仓库ID(本案例中为仓库ID 3)。

3.在创建托盘之后,像以前一样将托盘和食品盒都转移到运输者权限中,JSON文件如下所示:

5.6 运输搬运托盘时测量温度
此环节遵循与食品盒运输相同的温度测量规则,但必须对设备代码第19行进行注释,并取消第20行的注释,并用正确的搬运托盘值更新第53、57、58和59行。
在运输尾声,通过托盘以及食品盒的owner的变化,将资产转移到商店:

5.7 跟踪食品盒
我们将通过composer-playground来使用Hyperledger Composer Historian功能,实现消费者对食品盒的跟踪。
若要访问已应用于资产的操作的历史记录,请将消费者业务卡片连接到Hyperledger环境,并从左侧面板中选择All Transactions选项。
我们将能够看到在这项资产上执行的所有操作,从资产创建到搬运托盘和其内的食品盒到达商店:

我们还可以通过单击view record链接查看每个操作的详细信息,如下所示:

我们学习了如何使用Hyperledger Composer和Watson物联网平台创建业务网络。 在开发解决方案过程中,我们可以利用Yeoman来创建Hyperledger Composer、定义共享数据结构、创建资产、设置参与者访问控制列表,以及创建并更新网络。 我们还创建了一个设备,负责监控食品盒从工厂到仓库,再从仓库到商店运输过程中的温度,并将这些信息添加到区块链网络共享信息中。 消费者可以追踪从生产链条开始的所有食品盒信息。 别看Hyperledger Composer和Watson物联网平台的开发非常简单,但我们开发的解决方案确实解决了食品链安全方面的巨大问题。 |

