当前位置:首页 期刊杂志

基于Hyperledger Fabric 的食品溯源系统设计与实现

时间:2024-05-22

段冉阳,周文辉,魏 骁,王 龙

(华北计算机系统工程研究所,北京100083)

0 引言

食品安全溯源体系是指在食品产供销的各个环节(包括种植养殖、生产、流通以及销售与餐饮服务等)中,食品质量安全及其相关信息能够被顺向追踪(生产源头-消费终端)或者逆向回溯(消费终端-生产源头),从而使食品的整个生产经营活动始终处于有效监控之中[1]。 但目前使用的食品溯源技术方案仍然以传统记录方式为主,存在以下几方面的问题:

(1)数据共享仍然缺乏[2]。 目前食品安全溯源主要依托于物流网络等进行实现,但物流信息仅仅是整个供应链上的部分信息,供应链中如食品生产信息、包装信息等无法进行记录和追溯,而这些信息的完整性与真实性对于增加产品的可信度有着极大的帮助。更多的信息录入可以让消费者能够更完整、更直观地了解到产品从产生到消费的全部流程,让更多的参与方加入进来,在提高产品溯源信息完整性的同时,加入更多的背书主体,提高产品溯源信息的真实性与可靠性。

(2)信息存储中心化[3]。 在目前主流的产品溯源供应链中,主要采用中心化的信息存储模式,需要参与产品供应链上的某一方进行管理和维护。 但是,不论是生产方、运输方还是销售方,均为产品供应链上的利益相关方,当有不利于其自身的信息产生时,很有可能出现篡改账本或者谎称账本信息由于技术原因而丢失的情况出现,很难保证产品溯源信息的真实性和有效性。

(3)信息存储孤岛化[4]。 目前主流的系统在整个商品供应链中,存在信息孤岛问题。通常情况下,参与产品供应链的各方具有多个不同的信息系统,各个信息系统之间很难进行交互,这会导致信息同步困难、信息核对繁琐、数据交互不均衡等问题,为日后的使用埋下诸多隐患。 尤其是随着使用时间增长,产品溯源系统产生的数据量增多,对多个系统的重复审计成本也将大大增加。

区块链技术被认为是近年来最具颠覆性和革命性的创新之一[5],已在金融、贸易[6]、物流[7]、征信[8]、公益、物联网、共享经济等诸多领域崭露头角[9],其本质上是提供信任保障的技术,具有去中心、自动化和可信任的理念与特性,能提供较为有效的数据保护[10],十分契合人们对新型食品安全溯源系统的需求。 因此,为了解决上述传统食品溯源系统中存在的问题,本文提出一种基于区块链技术的食品溯源系统设计方案。

1 典型区块链技术比较与选型

1.1 区块链选型

区块链技术发展到现在,形成了多样的区块链体系,其中最具代表性的区块链体系有3 个:比特币系统中使用的比特币(Bitcoin) 区块链系统[11]、 以太坊(Ethereum)区块链[12]和在2015 年由Linux 基金会发起的超级账本(Hyperledger Fabric)开源区块链项目[13]。 下面将从区块链性质、共识算法及运行模式、智能合约和货币类型,综合食品安全溯源的实际使用需求,对上述3 种区块链系统进行比较。 3 种区块链特点如表1 所示。

表1 3 种典型区块链特点对比表

现今食品溯源系统中,数据种类十分复杂且数量庞大[14],同时根据不同的食品,相关溯源信息需要不断变更,这要求使用的区块链系统具备较灵活的数据存储系统和智能合约系统,通过对不同种类食品的智能合约的编写,达到对食品数据的精确统计;同时,参与食品溯源系统中的各个参与方本身均为传统供应链上的合作方,在现实中存在一定的信任关系,有着一定程度的信任积累,且供应链上各个供应方相对固定,无需面对整个公共网络,存在恶意节点的可能性比较小;另外,由于供应链上参与方较多,各参与方需要写入和维护的数据比较复杂,因此需要更快的区块产生速度和更高效的区块链网络。

针对以上食品溯源系统的使用特点,综合3 种区块链技术的特点进行分析,Hyperledger Fabric 区块链网络的特点和优势十分契合食品安全溯源体系的实际情况和使用需求。 因此,本文采用Hyperledger Fabric 区块链系统作为底层架构,对基于区块链的食品安全溯源系统进行设计与实现。

1.2 食品溯源样例选型原因

在区块链与溯源系统相结合的研究中,相关从业人员也进行了许多积极的尝试,但大都集中在贵重物品溯源与单一物品溯源中,首先信息量相对较小,同时需要管理的产品数量并不大,因此所有溯源信息往往在一个账本中进行维护。 本文旨在利用Hyperledger Fabric 的多账本、模块化等特性,对日常食品的溯源系统进行构建,在一定程度上增加整个溯源系统的灵活性,提高整体溯源系统的效率和数据吞吐能力。

食品溯源系统的主要溯源对象为消费者经常购买的食品,选择的溯源食品种类应当对食品原材料来源、加工生产过程、运输条件等有较高要求。 牛奶作为日常饮食的一种,深受各类人群,尤其是老年人和青少年儿童的喜爱。 但是由于目前生产鲜牛奶的厂商众多,目前市场流通的鲜牛奶品质良莠不齐,同时鲜牛奶容易变质,需要相对严格的存储和运输环境,当产生产品质量问题时,传统记录手段很难对相关责任人进行定位。 因此,消费者们对鲜牛奶的食品溯源有着极大的需求,下面就以某品牌鲜牛奶为例,构建基于Hyperledger Fabric区块链的食品溯源系统。

2 基于Hyperledger Fabric 的食品安全溯源系统设计

2.1 整体模型

基于上文的分析,利用Hyperledger Fabric 联盟区块链技术构建基于区块链的食品安全溯源系统,系统的整体模型如图1 所示。

在图1 中,列举了直接参与牛奶食品供应链的食品生产方、运输方、加工方以及销售方,同时引入消费者和监管方进行实时的查询和监管等操作。 每个参与方在实际的区块链网路体系中为一个组织(Org),每个组织中可以根据实际信息录入情况设置节点(Peer),每个组织中至少包含一个节点。各个节点负责对各自的相关信息,如原料采集信息、分装加工信息、物流信息以及销售信息等进行录入,录入的信息经智能合约判断合法后,通过区块链节点上链,各个区块链节点同步交易信息,进行区块生成,形成共识的区块链数据。消费者和相关监管部门利用区块链节点进行相关信息的管理、查询等操作,使整个食品供应链上的食品安全数据全过程真实、透明、不可篡改,达到食品安全信息可追溯、可查询、可信任的目的。

根据参与方分工的不同,各个参与方对应节点也具备不同的功能,并对牛奶溯源过程中的相关数据进行写入和维护。下面对各个参与方对应的组织和节点进行设置,同时定义各个组织需要写入和维护的数据信息。 各个参与方对应的组织和节点如表2 所示。

2.2 软件架构

图1 基于Hyperledger Fabric 区块链的食品安全溯源系统整体模型

表2 各参与方与组织对应关系表

根据上文所述的基于区块链的食品安全溯源系统整体模型,进行该系统软件架构设计。 软件架构整体分为三大部分[15],分别为基础层、数据层和应用层。基础层为Fabric 区块链基础框架;数据层主要包括分布式数据存储、共识机制、智能合约、链码以及相关交易数据,同时提供权限管理等功能;应用层主要利用Fabric 区块链网络提供的各种语言版本的SDK 进行功能的编写和调用,包括溯源信息录入、溯源信息查询、溯源信息监管等操作。 食品溯源系统软件架构图如图2 所示。

图2 食品溯源系统软件架构图

2.3 交互操作

基于上文所述的食品安全溯源系统的整体模型和软件架构,利用Hyperledger Fabric 区块链技术的特点,可以实现相关食品安全信息的基本操作,包括信息录入、信息更新、信息监管以及信息查询等功能,各参与方根据实际需求,通过相关的管理应用与相应区块链系统进行交互,完成整体食品安全溯源系统的功能实现,食品溯源系统基本交互操作示意图如图3 所示。

图3 食品溯源系统基本交互操作示意图

同时,利用Hyperledger Fabric 区块链体系对智能合约的支持,可以根据实际的使用情况,对具体的应用场景进行专用的智能合约编写,相关参与方进行协商确定触发条件,利用智能合约自动执行的特点,自动化地执行相关信息的上联操作,简化工作步骤和工作流程,在提高整体工作效率的同时,降低人为参与的风险,提高数据的有效性。智能合约工作原理示意图如图4 所示。

图4 智能合约工作原理示意图

3 基于Hyperledger Fabric 的食品溯源系统设计

3.1 Hyperledger Fabric 基本组成及技术原理

Hyperledger Fabric 由五大核心模块组成,分别为peer、orderer、cryptogen、configtxgen 以及configtxlator。 其中,peer和orderer 属于系统模块,主要构成Hyperledger Fabric 的基础系统,直接参与系统的运行,并以守护进程的方式在 后 台 长 期 运 行;cryptogen、configtxgen 和configtxlator 属于工具模块,主要负责区块链系统中的包括证书文件、创世区块等相关文件的生成以及完成相关区块链操作等工作,不直接参与系统运行。Hyperledger Fabric 五大核心模块的基本功能如表3 所示。

利用上述五大核心模块,可以构建Hyperledger Fabric联盟区块链的基础区块链网络,该网络由Fabric-CA、peer 节点和orderer 节点3 个基本组成部分构成,各个peer 节点可以根据功能不同细分为不同种类,并组成组织(Org)。

表3 Hyperledger Fabric 核心模块基本功能表

peer 节点与orderer 节点构成了基本的区块链网络之后,下一步需要对相关交易数据进行处理和上链,对已完成的交易和上链数据进行存储,并保证每个peer 节点的数据存储是一致的,这一过程成为共识达成。 Hyper-Ledger Fabric 区块链系统中的共识达成基本过程如图5所示。

Hyperledger Fabric 区块链系统共识达成过程分为以下4 个基本步骤:

(1)由区块链中的一个节点peer0(领导节点)发起交易,交易中含有相关交易内容以及peer0 的数字签名,交易信息会根据该交易定义的相关节点(这里假设相关节点为peer1、peer2 以及peer3)信息进行广播;

(2)相关背书节点peer1、peer2 以及peer3 对交易的内容以及peer0 的签名进行验证,保证该交易的有效性和合法性;

(3)peer0 等待交易的背书结果,当结果满足交易要求时,peer0 向orderer 节点集群提交该笔交易, 排序节点根据相关排序算法对交易进行排序;

(4)一段时间后,orderer 节点集群将这段时间内的所有交易排序打包,形成交易区块并进行广播,所有提交节点接收交易区块并生成账本信息, 实现交易数据的上链操作。

图5 Hyperledger Fabric 区块链系统共识达成过程

3.2 食品溯源系统设计

对基于Hyperledger Fabric 的食品溯源系统的设计共分为三部分, 分别为网络模块设计、 智能合约模块设计以及接口模块设计。

网络模块设计主要建立牛奶溯源系统的区块链内部逻辑,牛奶溯源系统的区块链内部逻辑结构如图6 所示。

参与到整个牛奶溯源系统中的参与方分别为生产方、加工方、运输方以及销售方,每个参与方用一个组织进行代表, 每个组织中设置一个节点模拟实际工作情况,对牛奶溯源相关数据进行维护和修改等操作。 各参与方与区块链组织对应关系如表2 所示。

图6 牛奶溯源系统的区块链内部逻辑结构图

智能合约模块设计主要包括各参与方的链码名称命名命及工作内容确定。首先根据牛奶溯源系统中的实际环境和工作内容,设置溯源系统中的各个参与方需要维护的牛奶信息种类,确定智能合约的名称,具体对应关系如表4 所示。

表4 各参与方维护信息对应表

在本系统中,共需要记录牛奶的7 项信息。 确定了智能合约的名称和对应功能,对智能合约实现功能进行设计,主要设计以下几个功能:

(1)queryMilk():该功能实现对牛奶溯源信息的查询,需要传入1 个参数,参数为牛奶编号(如Milk1),查询结果返回Milk1 对应的相关信息;

(2)createMilk():该功能需要传入共8 个参数,第一个参数为需要创建的牛奶编号,其余7 各参数分别对应牛奶溯源系统中的7 项数据;

(3)changedata():该功能实现对指定牛奶相关信息的修改,需要传入3 个参数,第1 个参数指定需要修改的牛奶编号,第2 个参数指定需要修改的信息标签,第3个参数为具体修改的值;

(4)getMilkHistory():该功能实现对指定牛奶的所有历史信息进行查询,包括信息录入或修改的记录,实现对该牛奶的溯源需求,需要传入1 个参数,指定想要查询的牛奶编号。

接口模块设计主要通过Fabric-Nodejs-SDK 进行实现,主要分为两个部分,分别为query.js 脚本与invoke.js脚本。 query.js 脚本主要调用queryMilk()和getMilkHistory()两种功能;invoke.js 脚本主要调用createMilk()和changedata()两种功能。

4 食品溯源系统实现及测试

4.1 食品溯源系统实现

Hyperledger Fabric 的牛奶溯源系统搭建的硬件环境采用Ubuntu 虚拟机完成,利用Docker 容器模拟多机环境进行封装,具体性能如表5 所示。

表5 系统搭建硬件环境

系统搭建的软件环境如表6 所示。

环境搭建完成后,利用Hyperledger Fabric 提供的5 个核心模块对牛奶溯源系统进行实际搭建。

4.2 原型系统测试

基于Hyperledger Fabric 的牛奶溯源系统搭建完成后,以Milk1 为例,对相关功能进行测试。

表6 系统搭建软件环境

(1)createMilk():创建Milk1,并对Milk1 中的所有溯源信息置空;

(2)queryMilk():对Milk1 进行查询,结果如图7 所示,可以看出Milk1 已经被创建,且所有溯源信息均为空;

图7 Milk1 查询结果(未录入)

(3)changedata():对Milk1 中的相关数据进行写入,并再次进行queryMilk()操作,结果如图8 所示,可以看出Milk1 的相关信息已经改变,溯源信息不再为空;

图8 Milk1 查询结果(已录入)

(4)getMilkHistory():对Milk1 的历史信息进行查询,部分结果如图9 所示。

图9 Milk1 历史记录查询结果(部分)

完成基本功能测试后,对本文设计的牛奶溯源系统进行性能测试,利用多次读写的方式对牛奶溯源系统进行测试。

编写脚本对本系统进行重复写入操作,写入次数500 次,实测区块生成平均时长均小于3 s;编写脚本对牛奶溯源信息进行重复读取操作,读取次数500 次,未发生错误,具备一定的可用性。

5 结论

本文研究了一种基于Hyperledger Fabric 区块链的食品溯源系统,分析了目前的食品溯源系统存在的问题;同时,对现今主流的区块链系统进行筛选,选定Hyperledger Fabric 联盟区块链平台构建食品溯源系统并进行实际搭建;搭建完成后对食品溯源系统中的相关功能进行了模拟测试,并对整个系统进行了简单的性能测试。

跟据测得的结果,本文提出的基于Hyperledger Fabric区块链的食品溯源系统基本满足当前消费者对食品溯源系统的需求,解决了传统食品溯源系统中存在的数据量缺乏、存储信息中心化等问题,保证了食品溯源数据的完整性、有效性与不可篡改性。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!