基于区块链的农产品溯源系统研究
2021-05-14吴晓彤柳平增王志铧
吴晓彤 柳平增 王志铧
(山东农业大学信息科学与工程学院 山东 泰安 271018)
0 引 言
农产品溯源系统作为一种对农产品质量进行监督与控制的有效方法,已成为国内外农产品质量安全监管的有效手段[1]。但由于传统农产品溯源系统依赖于中心数据库存储和管理数据,系统中心化严重,导致信息在记录过程中易被篡改、数据不公开透明、信息易丢失等问题,系统在数据存储安全方面面临着众多挑战。
区块链是一种分布式账本技术,具有去中心化、公开透明、分布式存储、不可篡改、安全可靠等技术特点,被认为是一种与生俱来的信任机器,可用于解决传统溯源系统产生的中心化、信任危机等问题,提高溯源的可靠性与安全性[2-4]。
本文在总结和分析传统农产品溯源系统问题的基础上,构建基于区块链的农产品溯源模型和溯源系统架构,利用区块链的分布式存储、智能合约等技术实现了去中心化的农产品溯源模式,将农产品溯源信息分布式的存储在链上的每一个节点中,并通过HyperledgerFabric框架实现了基于区块链的农产品溯源系统。该系统提高了农产品溯源信息的透明度与安全性。
1 传统农产品溯源系统问题分析
国内外许多学者在物联网、网络信息、数据库等技术方面,对农产品溯源系统进行创新性的研究并取得显著成效[5-17]。传统农产品溯源以种植、仓储、加工及物流等流程为主线,记录和管理从种植到销售所有环节的产品信息,溯源模型如图1所示。
图1 传统农产品溯源系统模型
可以看出:传统的农产品溯源系统一般以中心数据库为基础,采取分段、分环节的溯源模式;在农产品流通过程中,国内多部门实行切块分段共管的运行机制,分段监管步调不一;部分系统基础建设缺乏标准化,信息不规范、系统不兼容;对于监管部门和消费者来说,所有信息需要从中心数据库中获取[18-23]。传统溯源系统依赖于中心数据库会导致以下问题:
(1) 系统中心化严重,信息真实性无法验证。传统溯源系统大多采用中心数据库实现信息存储,信息存在人为篡改的可能,使得消费者对于溯源信息的真实性有较大的质疑。
(2) 农产品信息不公开透明,导致交易双方出现信任问题。不同环节的用户作为不同的角色参与溯源过程,角色间缺乏信息反馈,信息不公开透明,导致各角色掌握的信息不对称,交易双方缺乏信任,容易产生信任危机问题。
(3) 农产品责任主体难确定。由于传统溯源系统各环节分散、碎片化严重,一旦产品出现质量问题,需从每个环节逐步进行溯源,过程较为繁琐,无法快速准确定位责任主体。
2 区块链技术
2.1 区块链概述
区块链是一种分布式账本技术,是一串利用加密算法相关联而产生的链式数据结构,通过去中心化和去信任的方式集体维护一个可靠数据库,具有去中心化、共识机制、开放透明、匿名性四个特点[24-26],区块链连接示意图如图2所示。
图2 区块链接示意图
区块链是一种大家共同参与信息的记录和存储的技术。在之前,人们通过中心化的机构进行信息记录和存储的工作,区块链技术的出现则允许系统中的每个节点都能够参与信息的记录和存储,即使系统中的部分参与节点失效或作假也不能改变区块链的完整性,更不能篡改区块链中的信息[27]。目前区块链作为一种去中心化的核心技术,被广泛应用于金融、政务、物联网等领域。
2.2 关键应用技术
2.2.1分布式存储
区块链分布式存储是一种数据存储的技术,它将网络上每台机器的磁盘空间作为分散的存储资源形成虚拟的存储设备,数据被分散存储在链的每一个节点中,并完整地保存下来。
区块链的分布式存储过程如图3所示,可以分为以下六个步骤:(1) 创建数据分片;(2) 加密每个分片;(3) 为每个分片生成哈希;(4) 复制每个分片;(5) 分发复制的分片;(6) 记录事务到分类帐。
图3 区块链分布式存储过程
区块链的分布式存储打破了传统溯源系统数据存储中心化的局面,使信息分布式存储在多个节点,每个节点都保持完整的信息副本,链上信息对所有参与成员都是透明且可验证的,同时增强了产业链各环节的信息互通性,其去中心化、透明性、可恢复性和防篡改性的特点也使得其与农产品溯源领域极为契合。
2.2.2智能合约
智能合约又称为智能合同,是事件驱动的、有状态的、多方识别的、运行在区块链上的、能够根据预设条件自动处理资产的合约。智能合约的最大优点是使用程序算法来代替仲裁和合同的执行[28]。
如果说区块链是一个数据库,那么智能合约就是将区块链技术应用于现实的应用层。智能合约是在区块链数据库上运行的一种计算机程序,能在满足源代码编写条件的情况下自动执行。智能合约为传统农产品溯源系统标准不同、流通性不强的问题带来了解决办法,实现了信息的连续实时传递和跟踪,且进一步增强了系统的去中心化。目前,智能合约在选举、供应链优化、电子商务等场景中都得到了有效应用。
3 系统方案设计
3.1 区块链应用设计
农产品溯源涉及种植、仓储、加工、物流、销售、查询等多个环节,各环节之间的高效协作能够保障农产品信息的有效溯源。本文根据农产品溯源的实际需求对区块链技术在产业链各环节的应用进行了设计,使区块链中的智能合约和分布式存储技术能够确保产品信息流的正常传递,保证了产品的流通、溯源和信息的分布式存储。
(1) 种植(生产)环节。主要节点为农场或企业。节点需要将生产资料和产品信息录入并上传到区块链中,创建初始区块。在此过程中系统调用智能合约实现对节点的认证和信息上链,并通过数据分片的方式实现信息的分布式存储。当产品随着产业链流动进入下一环节即仓储环节时,当前节点会向下一个节点发送交易请求,双方利用密钥对区块进行验证,并根据内嵌在区块链中的智能合约进行交易过程,在全员审核通过后完成交易,仓库便成为新的授权角色。在交易过程中,监管部门作为链中的节点有权对种植信息进行访问及审查,审查合格后以私钥方式签名来认证种植环节合乎规范。算法伪代码如算法1所示。
算法1智能合约中的农产品交易操作
已知节点编号为user_id,节点角色为user_name,交易编号为tran_id,时间戳为timestamp,产品信息为pro_info。
//注册用户并生成私钥
user.id=user_id,user.name=user_name,;
newKeyPair() (user_id,[]byte);
//进行产品信息的录入和区块的生成
protected List
pro_hash=sha256(pro_info),pro_time=timestamp;
generateBlock(pro_info);
//节点验证
if proving(user_id).equal==0 then
return false;
//区块广播及验证
else public boolean broadcast(Block pro_info);
isBlockValid(Block pro_info);
AddBlockchain();
return ture;
(2) 仓储环节。此环节的主要节点为仓库(冷库)。仓库接受了来自种植环节的产品之后,获得访问和维护产品信息的权限,并且将该环节特定信息写入区块中,在转移产品的过程中调用智能合约将变更的溯源编码进行更新。这个过程中节点之间通过共识算法进行区块的广播和数据的同步,使得链中的其他节点也可以实现自身区块的信息更新和对该环节区块的访问。
(3) 加工环节。作为消费者最关心的环节,在收到来自于上一环节的产品后,需要写入加工信息。其中:检验合格信息需要有监管部门参与检验并通过数字签名对产品的合格与否来进行认证,与产品信息一同写入区块中,同时生产资料的供应商作为节点加入到链中,防止产品溯源过程中产生断链现象。最后的产品包装过程中,除了必要的包装信息外,还需要为产品生成溯源码或二维码,便于消费者进行产品的溯源查询。
(4) 物流环节。主要节点为物流公司。在更新产品信息时需要提供物流信息,运输中每个包装上应包含产品的标识,以便于当前节点与下一节点的对接管理。
(5) 销售环节。主要节点为超市等销售企业。农产品经过物流环节的运输后,会发往不同地区的销售企业,所以区块中的产品信息须添加当前节点的企业信息;销售企业同样也需要明确产品的来源信息、销售信息等,确保产品信息的完整性,由于以上环节的代码逻辑与生产环节较为相似,故此处不再阐述。
(6) 查询环节。主要节点是消费者和监管部门。消费者可以通过扫描所购买产品包装上的一维码和二维码对产品进行溯源,获取产品的相关信息;在查询过程中系统首先会对消费者的身份进行验证,通过验证后系统将通过溯源码进行区块链地址查询,查询成功后返回地址,后台接口将该地址的区块信息反馈给消费者,完成逆向溯源的过程。该算法伪代码如算法2所示。
算法2智能合约中的农产品信息查询
已知节点编号为user_id,产品批次号为tran_id,时间戳为timestamp,产品信息为pro_info。
//节点验证
if proving(user_id).equal==0 then
return false;
//遍历区块
Else
mineTxList=blockStoreProvider.loadRelatedTransactions();
for
(TransactionStore.getTransactionStore:mineTxList)
If
(TransactionStore.getTransaction().getHash.equals(pro_hash))
List
//遍历查询输出
For(int i=0;i TransactionOutput output=outputs.get(i); Break; return output; 基于传统农产品溯源和区块链技术各自的特点,本文设计了基于区块链的农产品溯源系统模型,如图4所示。为便于叙述,本文将基于区块链的农产品溯源系统包含的产业链环节分为六个,分别为种植、仓储、加工、物流、销售、查询环节,考虑到产业链可能还存在众多分支环节,此处仅取主链进行分析。 图4 基于区块链的农产品溯源系统模型 从生产到销售的流通过程中,农产品会经历众多环节,而产品信息传递的关键在于其环节参与节点。本文给每个参与节点设置密钥,密钥就像是区块链钱包,上面包含其农产品的详细信息,使得产业链每一环节的参与节点都能够利用自身的密钥对信息进行加密;在两个环节进行产品交易时,发起者首先通过自身密钥进行节点认证,认证通过后开始整个交易流程,此时两节点需要利用非对称加密技术达成一致协议,使产品所属关系被转移。通过共识算法保证交易的一致性,例如在某个节点进行信息的存储后,会对全网发送一个广播,链上所有节点确认广播后,使产品信息分布式存储于各节点的分布式账本中,通过密码学和共识算法的结合能够保证信息不可篡改。通过编写智能合约,保证农产品的每一次信息传递、位置变更等都会被记录在区块链上,并且真实有效。比如:当生产者将农产品交付给物流环节的过程就是一个合同,物流将农产品运送到销售店面同样也会有一个合同。在整个流程过程中有无数个合同要签约,把这一系列的合同通过代码的形式在区块链上实现,就是通过智能合约来完成。通过此模型实现的产品溯源全过程信息透明且不可篡改,解决了传统溯源的诚信问题。 若某个环节的参与节点发生了故障,系统仍然能够正常运行,且故障节点的数据可以恢复。这些参与节点在系统中都享有数据写入和读取的权限,并且链中的区块能够进行数据同步,这意味着每个节点间可以共享产品信息,在保证数据真实的前提下,实现农产品信息的有效跟踪和溯源,真正达到系统去中心化的效果。 由于区块链农产品溯源系统所涉及到的参与节点众多,并且这些节点都是特定的或是签订协议的组织,不同节点所享有的权限不同,因此每个节点都可以作为一个中心参与到溯源过程中,系统在运行过程中所需要的数据承载能力也较高。结合不同类型区块链技术特点的分析,本文选用联盟链作为区块链溯源系统的底层架构支撑。 根据上述模型所设计的区块链溯源系统的总体架构如图5所示,主要分为用户层、系统层、数据存储层、智能合约层、数据传输层、物理层。其中,区块链技术主要用于数据存储层和智能合约层。 图5 区块链农产品溯源系统架构图 物理层主要包含物联网传感器和感知、处理和传输模块等,承担数据自动采集与物联网远程控制等功能,用于将环境感知信息、产品信息等通过协议上传到区块中,可以通过设备中的加密技术和完整性验证确保采集到的信息的安全性。 数据传输层提供网络数据传输服务,包含WLAN、数据网络、蓝牙等方式。主要目的是实现区块链网络节点之间的信息交互,区块链的本质是一个P2P(点对点)网络,每一个节点既能够接受信息,又能够发布信息,节点之间通过维护一个共同的区块链来保持通信。在区块链的网络中,每一个节点都可以创造出新的区块,在新区块被创造出以后会通过广播的形式通知其他节点,而其他节点则反过来会对这个节点进行验证,当区块链网络中超过半数的用户验证通过以后,这个新的区块就会被添加到主链上了。 智能合约层则根据企业间的商业合同编写,定义了一系列的事务处理流程,包括数据操作模块、资金周转模块、安全预警模块。数据操作模块是对数据的添加、查询等操作;资金交易模块是自动执行企业间事先协商好的资金交易过程,例如供货企业向进货企业提供原料,原料到达后进货企业检测无误后会自动支付供货企业货款;安全预警模块是如果区块链系统检测到有非法访问或数据异常,会自动向系统管理员发送警报。 数据存储层中主要指对分布式数据库的操作,系统将数据记录到区块主体的Merkle树中后,会对其进行Hsah求值,形成链式结构,在对其进行时间戳的加盖后,区块便开始生效,上传到区块链中的数据经过完整性验证后都可以供任何链中的节点用户进行访问。而节点管理是指针对于不同类型的链,链中每个节点设置的访问权限不同,例如公有链中的信息可以对链中的所有节点公开,而联盟链或私有链中各节点的访问权限可能不同,权限的设置根据实际的需求来决定。数据存储层中的存储介质分为两部分:普通数据库和基于超级账本的区块链系统。非溯源数据存入区块链会占用不必要的系统资源,所以此类数据会被存入各企业自己的数据库中,而关键的溯源数据会上传至区块链系统中安全保存。 系统层和用户层主要是面向用户,而用户分为政府、企业和公众,不同用户所拥有的职能和权限也不同,同时增加数据可视化的方式,提高溯源系统的实用性。 本文研究基于上述的系统架构和区块链溯源模型,设计并实现了一个基于区块链的农产品溯源系统,系统拓扑结构如图6所示。该系统由区块链后台系统、溯源前台系统两个子系统组成,并利用组件式开发,将视频监控、环境感知、政府管理、电商平台等模块融合,是一个面向政府、农户和消费者的农产品可信溯源系统。 图6 区块链农产品溯源系统拓扑结构图 本文是在Ubuntu操作系统环境下,采用Hyperledger Fabric 1.0底层架构和Docker、Git等工具,利用Go语言通过GoLand编译器进行区块链后台环境的部署,区块链后台环境部署成功如图7所示。前台系统的Web应用是在Windows操作系统环境下,利用SSH框架、MySQL数据库及Tomcat服务器,使用Java语言在MyEclipse编译器中进行部署。 图7 区块链环境部署 系统查询界面如图8所示,消费者可以点击企业介绍和网上商城来了解企业信息和购买农产品。另外系统还提供政府和企业两个不同的管理入口,政府能够对企业的资质和操作规范进行监督,企业享有内部人员和企业效益的管理权限。当消费者输入产品包装上的溯源码或扫描二维码后,即可跳转到系统的产品信息溯源界面,获取到该产品从种植到销售的溯源信息,以及对应的人员信息和区块链地址等,如图9所示。 图8 系统查询界面 图9 产品信息溯源界面 区块链技术的去中心化、不可篡改、分布式存储的天然特性,使其在农产品溯源系统中具有广泛的应用前景。本文分析了传统农产品溯源系统存在的问题,提出了基于区块链的农产品溯源系统研究,对区块链溯源系统模型和系统架构进行了构建和分析,利用区块链数据分片的方式实现信息的分布式存储,对智能合约进行设计使其满足农产品产业链的实际需求,解决了传统农产品溯源系统中心化严重导致的信息易被篡改、信息不透明、存储安全性低等问题。在此基础上利用HyperledgerFabric平台实现了该区块链系统,该系统与传统的溯源系统相比,具有去中心化、数据分布式存储的特点,且建立了新的信托机制,保障了信息的安全性及可信性,打破传统溯源系统中的技术壁垒,为农产品溯源提供了一个不依赖于第三方的可信平台。 由于目前区块链技术还处于尚未完全成熟的阶段,区块链溯源系统的性能和节点达成共识的效率亟待提高。因此,如何提高区块链系统的性能和共识效率是后续研究中应着重解决的问题。3.2 区块链溯源模型设计
3.3 系统架构设计
4 系统实现
4.1 环境部署
4.2 功能实现
5 结 语