徐金胜,张 恩,*
(1.河南师范大学计算机与信息工程学院,河南 新乡 453007;2.智慧商务与物联网技术河南省工程实验室,河南 新乡 453007)
芝麻(Sesamum indicumL.)属于胡麻科胡麻属植物,是我国主要的油料作物之一[1]。芝麻可以提炼出芝麻油,俗称“香油”。芝麻油是一种古老而珍贵的植物油,具有浓郁的香味和独特的营养成分。它被世界卫生组织列为三大优质食用植物油之一[2]。我国是全球最大的芝麻消费国。由于芝麻油销量大、价格高、利润丰厚,许多商家在食用油市场大规模销售假芝麻油,主要通过掺入大豆油或直接使用大豆油加香精伪装成芝麻油[3]。GB/T 8233—2018《芝麻油》中规定“芝麻油中不得掺有其他食用油和非食用油;不得添加任何香精和香料”[4]。虽然许多产品宣称为“100%纯芝麻油”,但芝麻油高成本生产导致其长期成为重点掺假对象[5]。假芝麻油在加工中如果超量使用食用香精,可能会对人体消化系统和呼吸系统产生一定影响,严重可能引起腹泻、呼吸急促或困难等症状,芝麻油掺假问题已导致严重的人身伤亡和经济损失[6]。为保护合法生产者和消费者利益,迫切需要建立一套科学、快速、准确和有效的芝麻油防伪溯源体系。
目前,食品的真实性和可溯源性已成为食品检测的一项重要内容。现有的研究主要分析快速鉴别掺假芝麻油[7-10],但消费者缺少可信任的方式去辨别真伪。基于此,本研究的目的是在保证芝麻油质量安全的前提下增加可追溯性,通过建立一个安全和可信赖的防伪溯源系统让消费者更放心。传统的溯源方式面临几个问题:由于涉及各企业生产的多种产品,溯源数据量大且数据易丢失;此外,溯源信息主要来源于企业数据库,导致数据中心化,无法保障溯源数据的安全性、真实性和可靠性[11]。一些国内外学者研究利用区块链技术的优势,如去中心化、信息透明性和防篡改性等,在食品质量安全防伪溯源领域都进行了探索研究。许继平等[12]基于超级账本Fabric开源框架设计并研发了小麦质量安全可信溯源系统,实现了粮油质量安全全链条信息互联互通,并且保证了跨链信息交互的安全与全流程可追溯性。刘孝保等[13]基于百度超级链平台开发图区块链模型实现了基于区块链的果蔬供应链追溯系统,并提出信息存储与快速查询提供新的方法和思路。何静等[14]提出基于量子区块链的食品冷链追溯系统构建思路并构建了量子区块链冷链追溯系统。Guo Chaopeng等[15]提出了一种增加双层索引结构优化区块链中的可追溯性查询性能,Wu Hanqing等[16]将溯源记录复制到多个块中并采用并行搜索提高查询效率,Lai Chengzhe等[17]设计了一个Merkle树独立索引结构支持高效的溯源查询。上述研究有效解决了当前食品真实性和可溯源性的质量安全问题,实现了溯源数据的安全真实可靠性,但即使采取了一些解决提升溯源查询效率方案,仍然无法有效解决目前区块链数据存储压力大和查询效率低的双向问题。因此本研究设计了基于Fabric超级账本框架的芝麻油防伪溯源系统,在系统中改进了传统区块链的溯源信息存储方法,采用本地及链上双存储方式并进行数据校验后返回信息,实现了链上链下的平行访问,用区块链上的哈希值与分布式节点中Redis缓存数据进行哈希校验以确保溯源数据的正确性。同时改进传统节点查询采用了链码直连状态数据库的查询过程,旨在缓解区块链系统巨大的数据存储压力,提高信息的读取效率。最后得出基于区块链的芝麻油防伪溯源系统,能够提高芝麻油追溯信息的透明度和数据安全性,同时能够保障芝麻油质量安全,便于消费者查询真伪。
区块链技术始创于以化名“中本聪”的学者在2008年发表的论文《比特币:一种点对点电子现金系统》[18]。区块链通过点对点分布式记账、共识机制、非对称加密算法和智能合约等技术,为各参与方建立了信任基础,并为链上的可信数据交互提供技术支持[19]。区块链的上链过程持续性地将新数据记录到历史账本中,数据溯源按时间顺序从历史账本中还原数据,并进行可视化,因此区块链技术非常适用于溯源系统中[20]。区块链技术经历了以数字资产为代表的1.0时期和以智能合约为代表的2.0时期,现正进入赋能社会治理的3.0时代[21]。要将这项“仅限于网络”的技术融入实体产业食品安全防伪溯源系统领域,需要进行必要调整和平台选择。目前区块链的应用平台有3 种访问类型:公有链任何人都可以访问,完全去中心;私有链成员预设,不再加入其他成员;联盟链在私有链基础上允许有条件成员访问[22]。考虑到参与芝麻油追溯体系中种植、采摘、采购、生产、运输、监管、销售各个环节不同权限的成员角色,均由得到准入许可的可信参与方成员组成的企业联盟,因此确定采用联盟链区块链类型。本实验采用联盟链平台Fabric作为底层平台设计和实现溯源系统,Fabric是一个开源的企业级许可分布式账本技术平台,专为在企业环境中使用而设计。
本系统通过分析芝麻油溯源系统中各个用户的需求,将种植户、采购原料厂商、加工厂商、物流、销售、监管机构等各参与方纳入Fabric联盟区块链的相应组织,以便对相关信息进行查询和管理。在Fabric中,多个相关组织可以组建一个通道,每个通道都可视为一个独立的区块链网络。通道与通道之间相互隔离,这样可以保证各组织数据的隐私安全。在本系统中将监管机构和以上各用户组织分别建立一个通道以便于监管数据,在每个通道内,存在多个peer节点,它们作为服务节点,维护该通道的账本数据。此外,链码也在通道中运行,它是运行在区块链上的智能合约,也是Fabric中的业务逻辑实现,能够将接收到的信息写入到区块链中。因此本追溯系统架构设计包括4 层结构:设备信息采集层、数据交互应用层、Fabric区块链网络层、溯源查询小程序层。设备信息采集层负责监管芝麻油产业链的全过程,从种植到销售,并采集相关数据。数据交互应用层是提供给各个组织用户功能的芝麻油质量追溯平台,平台接收传感器和监控设备传来的实时信息并提供各个组织角色登录不同界面添加己方所需要上传的信息,溯源系统首先将上传的溯源信息数据存储到本地MySQL数据库再同步到各节点分布式缓存Redis数据库中,然后通过Fabric SDK提供的gRPC接口将溯源数据内容哈希化同步上传到Fabric区块链网络层。Fabric网络层是由多个组织组成,组织中的节点负责智能合约的运行,接收数据交互应用层传入的数据写入到区块链账本中,账本由一个区块链组成,用于有序的、不可篡改的记录存储在区块中,并用一个状态数据库维护当前状态。每个通道对应一个账本,每个peer节点为其所属的每个通道维护一份账本副本。使用了Raft共识机制在节点内部达成强一致的背书响应,以保证各节点数据库的一致性[23]。溯源查询小程序层中,消费者可以通过微信扫码访问溯源小程序查询真伪,进行芝麻油产品供应链的溯源查询并参与互动领取微信红包,小程序端收集经消费者允许获取到的位置等信息以用于厂家查验产品流向。芝麻油溯源系统的整体架构如图1所示。
图1 芝麻油溯源系统整体架构图Fig.1 Overall structure of sesame oil traceability system
芝麻油溯源平台根据上述设计需求分析可以划分为系统管理模块、芝麻种植模块、原料采购模块、芝麻油加工管理模块、监管模块、运输管理模块、芝麻油溯源模块。各个模块参与方分别为管理端、种植户、采购原料厂商、生产厂商、监督部门、物流公司、销售商等。本平台使用了基于Java web开发框架Spring Boot开发的权限管理系统实现上述各个模块的功能,通过Fabric区块链官方提供的用于Java应用开发的SDK开发连接区块链网络层的模块接口,根据功能模块分析,需要将芝麻油整个产业链上的种植信息、原料信息、加工信息、质量检测信息、运输信息、产品信息、销售点信息上传至区块链网络上。现有的Fabric溯源系统大部分使用的都是数据直接上链的方式,生产应用过程中随着节点和数据的增加,区块链存储需要面对数据量和访问量增大,对数据存储系统的功能和性能均提出了较高的要求[24]。因此有部分研究在Fabric存储基础上提出新的存储设计方式:例如杨信廷等[25]提出“数据库+区块链”的链上链下追溯信息双存储设计的农产品追溯系统信息存储模型,刘双印等[26]等提出了“On-Chain+Off-Chain”农产品质量安全溯源信息协同管理存储策略,王莉等[27]提出本地及链上双存储方式的粮食供应链溯源模型,唐豪等[28]提出了一种基于区块链的农产品可信检测数据链上链下分类存储方法,上述研究一定程度上改进了链上数据存储的问题,但仍存在线下数据库过于集中的问题,尤其是当线下数据库链下数据丢失时链上缺少完整溯源信息导致无法溯源问题。孙一萌等[29]提出使用链下数据库Redis结合MPT树实现链下数据的查询可验证,缩短了区块链数据验证查询时间但未改善区块链数据存储压力和上链效率,考虑到整个芝麻油产业链节点较多和溯源信息数据量较大带来存储压力和链上读写慢以及溯源数据安全问题,本实验在本地及链上双存储设计的基础上增加了Fabric多节点分布式Redis数据库缓存线下本地溯源数据有效解决了区块链数据存储压力和上链效率的问题,利用分布式Redis数据库存储线下信息同步MySQL备份也解决了线下数据库过于集中导致数据丢失的风险,设计的芝麻油溯源系统数据存储模式流程如图2所示。
图2 芝麻油溯源系统数据存储模式流程图Fig.2 Flowchart for data storage mode of sesame oil traceability system
芝麻油防伪溯源系统具体的溯源存储实现过程首先各模块需要将详细的溯源数据存储到链下MySQL数据库作为备份和对应组织各节点上的Redis缓存数据库中,其中溯源ID字段作为从种植农作物到成品芝麻油销售整个过程溯源信息的唯一标识,Redis存储数据value值是MySQL中溯源信息转成的JSON字符串,链上存储数据是Redis中JSON字符串经过MD5哈希算法处理之后的32 位字符串。溯源查询时通过溯源ID分别查询相对应Fabric各组织节点上的Redis中的字符串信息和链上的哈希值,再次将哈希字符串信息和哈希值对比以验证溯源信息是否被修改。溯源系统主要的应用是需要将芝麻油整个产业链上的过程信息展现给消费者以验证真伪,因此需要对芝麻油各个批次的信息进行快速追溯查询。由于Fabric中查询链上溯源信息是通过链码读取状态数据库,需要调用ChaincodeStub接口由peer节点通过gRPC从状态数据库CouchDB读取状态数据库后返回给链码。这个过程消耗了peer节点的网络I/O,也增加了背书阶段的延迟,尤其是在链码作为独立的外部服务,与背书节点不在同一节点运行的情况下[30]。为了减少节点的网络I/O消耗和提高查询的效率,本实验通过修改链码ChaincodeStub接口,添加原属于peer节点的交易模拟器对象和访问状态数据库的配置功能,实现链码直接访问状态数据库。链码通过溯源ID直接查询状态数据库中的哈希值执行计算形成模拟虚拟交易结果并返回给peer节点。peer节点只负责调用链码,并对链码返回的模拟交易结果进行签名背书。具体的go代码修改过程如图3所示。
图3 链码直接访问状态数据库部分代码Fig.3 Code snippet for direct access of chain code to the state database
本实验系统区块链环境使用Fabric 2.4版本,默认区块配置文件区块大小为10 M,每个区块包含500 个交易,出块时间间隔为2 s。测试运行环境为一台阿里云服务器,具体配置为4 核CPU、8 G内存、80 G固态硬盘存储空间、5 M独享带宽、Ubuntu 22.04操作系统。使用Fabric官方提供的区块链性能基准框架Caliper对系统区块链性能进行测试,主要涉及背书交易环节读写操作的吞吐量方面的测试数据,测试性能指标主要有交易吞吐量、交易延迟、资源利用率。交易吞吐量是指一段时间内系统成功处理交易的数量,单位为TPS,表示1 s内系统成功处理交易的数量,在溯源系统中指的是处理信息上链的数量。交易延迟是指一笔交易从客户端发起至在系统中生效之间所耗费的时间,在溯源系统中指的是一条采集信息到上链成功的时间。文献[25-28]的双链设计方案和本实验设计方案类似,本实验在此基础上增加了分布式节点Redis缓存数据库方案1和链码直连状态数据库查询方案2,有效解决了线下数据过于集中有丢失风险的问题,同时提升了存储和查询效率。为了体现方案1和方案2在测试性能指标的提升效果,与文献[25-28]进行性能测试比较。本实验分别对以上3 种方案设计10 轮性能测试,每轮使用Caliper默认基准测试并发交易1 000 次,共计30 000 次。对统计实验的最终结果计算出平均交易吞吐量、平均交易延迟时间。溯源查询时间测试实验是通过Postman接口测试软件对3 种方案和对应溯源记录数量分别访问查询接口10 次,计算出平均查询时间。平均交易延迟时间比较如图4所示,平均交易吞吐量结果比较如图5所示,平均查询时间结果比较如图6所示。由于本实验方案1和文献[25-28]的双链设计方案的在区块链上存储方式一致,针对链下增加的分布式缓存数据库影响不到链上效率,所以对比交易吞吐量和交易延迟时间基本一致,查询时间上由于方案1分布式节点Redis缓存数据库方案中Redis的指定节点查询性能高于单独的链下存储数据库MySQL,所以对比查询时间,Redis优于MySQL,尤其随着交易数量增大,查询时间的差距越明显。在本实验方案1的基础上加上方案2的链码直连状态数据库查询方式在减少节点的网络I/O消耗同时又提高了查询的效率,所以在交易吞吐量、交易延迟时间和查询时间方面,以上两种方案都有明显的优势,对于在交易延迟时间和查询时间上的性能有显著提升。
图4 平均交易延迟时间Fig.4 Average transaction delay time
图5 平均交易吞吐量Fig.5 Average transaction throughput
图6 溯源平均查询时间Fig.6 Average query time for traceability
本实验系统已成功应用于河南驻马店某香油公司的区块链防伪溯源系统设计过程中。通过对该企业芝麻油供应链进行实地调研,从种植和原料环节、加工环节、质量监管、运输和销售环节分设计了芝麻油追溯系统采集方法,最终消费者可以通过微信扫描芝麻油瓶身防伪码在小程序中进行防伪溯源查询,防伪码由溯源ID生成的产品唯一标识码组成,小程序后端通过溯源ID查询到的溯源信息返回给小程序端。图7为系统溯源信息采集界面图,其为芝麻油供应链各节点提供信息采集服务,主要为芝麻种植、原料、加工、监管、运输信息采集界面,系统各模块通过信息采集功能上传添加至对应的供应链数据信息,系统会自动对数据进行相应处理,将溯源信息和其哈希值分别存储到本地数据库和区块链系统中。图8为系统溯源信息上链数据明细查询和区块链浏览器网络信息,图9为消费者通过微信扫描芝麻油产品上的防伪二维码查询产品真伪和各环节溯源信息以及数据的存证信息并参与扫码领取红包的营销活动,消费者扫码同意获取定位信息可以领取厂商提供的微信红包验证防伪溯源二维码是否被第一次扫码验证,厂商可以根据获取到的消费者定位信息验证分销商货源销售情况。与传统芝麻油供应链管理系统相比,基于区块链的芝麻油供应链防伪溯源系统具备去中心化防篡改的特性,不依赖某个组织和个人的同时保障数据安全,解决了芝麻油供应链管理中的质量安全问题,同时采用本实验提出的增加Redis缓存的改进链上链下双存储方式方案和Fabric链码直连状态数据库查询方案,在一定程度上缓解了因溯源数据增长过快带给区块链系统的存储压力,使溯源查询效率明显提升。
图7 芝麻油溯源系统信息采集图Fig.7 Information acquisition of sesame oil traceability system
图8 芝麻油溯源系统信息上链图Fig.8 Information chain of sesame oil traceability system
图9 芝麻油溯源系统小程序验证真伪溯源图Fig.9 Sesame oil authentication and tracing by mini program of sesame oil traceability system
本实验系统在企业环境运行过程中,区块链网络溯源信息正常上链未出现崩溃现象,监管机构通过系统后台根据溯源ID查询链上数据能及时响应并返回完整溯源详细信息,消费者扫描芝麻油产品上的防伪二维码在小程序中能快速查询到产品真伪和产品基本溯源信息,整体运行性能能够满足溯源系统应用。本溯源系统能够帮助企业将芝麻油的全过程质量安全信息(种植、原料、生产、物流、销售)等环节可视化,使造假者无法模仿出芝麻油生产过程中的全生命周期信息,从而达到防伪的目的。企业也能够方便快捷地了解销售点的库存及出售数据,及时了解产品销售地域的分布,凭借追溯途径的统计分析功能,完成防窜货预警。消费者扫码查询产品防伪溯源的同时吸引消费者参与企业的营销活动,增加消费忠诚度,帮助生产企业了解了消费者的消费模式,为后期企业改善产品提供了强有力的数据支持。
本实验主要探讨基于区块链技术的芝麻油防伪溯源系统的设计与实现应用过程,针对现有的基于Fabric框架的区块链溯源系统随着溯源信息数量持续增加存在的链上数据存储压力过大、查询速度慢以及存储数据安全性差等问题,提出了一种“区块链缓存”的双存储设计:将溯源数据哈希值存储到链上区块链和状态数据库中,链上同时返回区块链对应的哈希值,然后将溯源信息和返回的哈希值存储在各个节点的Redis缓存数据库和本地数据库中。查询时从Redis数据库通过溯源信息唯一ID值读取信息,对获取的溯源信息再次进行MD5哈希计算,并与通过改进过的Fabric链码直连状态数据库方案获取存储在区块链上状态数据库中的哈希值进行一致性对比,从而验证溯源信息是否被篡改。通过将以上方案与现有的区块链溯源系统存储方案和查询方法进行实验对比,结果表明:
1)针对区块链中数据不可删除修改,随着溯源产业链节点拓展和数据剧增,区块链需要存储的数据量负荷压力越来越大的情况,本实验提出了“区块链缓存”的链上链下溯源信息双存储设计,本地数据库和分布式节点Redis缓存数据库存储原始溯源数据,区块链上存储溯源数据的哈希值,能够提供链上数据高吞吐量和低延时的处理能力,解决数据安全问题的同时能够保证数据的真伪性。
2)本实验提出的在本地数据库存储信息的同时增加分布式节点Redis缓存数据库存储溯源信息的双存储方案,一方面解决了线下数据库过于集中的数据丢失无法追溯的安全问题;另一方面解决了溯源数据查询分布式负载均衡的问题。同时采用Redis高性能缓存数据库,在一定程度上,提高了查询速率。
3)随着溯源记录总量的增加,本实验提出的链码直连状态数据库的查询方法效率明显提升,当追溯记录总量300 000 条时为例,本实验方法的查询效率较传统区块链上查询方法效率提高了47.36%。
本实验系统不仅实现了芝麻油溯源数据的真实上链,消费者还能方便快捷地查验所购买芝麻油的真伪并能查询到详细溯源信息,消除了消费者对芝麻油生产商掺假问题的信任危机,同时也方便监管部门管控取证芝麻油产业链数据,实现了“生产企业 监管部门 消费者”之间良好的信任氛围,可为其他食品溯源防伪提供借鉴和参考。本实验中提供的一种增加分布式节点Redis缓存的改进链上链下双存储方式方案,在需要存储查询海量溯源数据业务场景中有重要的应用,也为其他联盟链平台的存储方案提供了应用参考。