APP下载

基于Hyperledger Fabric的青海牦牛养殖溯源系统

2023-10-07李玉伟张京京李守晓王繁珍刘同海

家畜生态学报 2023年9期
关键词:牦牛区块数据库

李玉伟,张京京,张 航,李守晓,王繁珍,刘同海

(天津农学院计算机与信息工程学院,天津300380)

在畜牧动物之中,牦牛因蛋白质含量高、肉质好、天然放牧无公害等特性成为青海畜牧产业发展的重点对象。青海省是中国牦牛的主要产区之一,数量占全世界牦牛的30%以上[1],属于牦牛养殖规模较大的省份,同时青海牦牛在青海高原食草家畜中的数量位居第一,其产值更是占据青海省畜牧业总产值的四分之一,在经济发展、历史发展、人文发展等方面都起着重要的推动作用[2]。虽然牦牛及其副产品占据着广大的市场,但也存在着严重的产品溯源信息安全问题,这些问题不仅给牦牛产业带来严重的损失,还会造成消费者的信任缺失,降低消费者购买欲望,从而损害牧场和国家的利益。传统溯源系统存在的问题主要有:(1)信息孤岛:在牦牛溯源体系中,每个溯源环节的节点都存在着自己的数据库和操作系统,并且节点的信息系统都是相对封闭的,这就造成了信息孤岛问题。这些问题不仅仅存在于部门外部,在内部也存在着,例如不同溯源环节的管理员管理不同的数据信息,需要考虑将共享数据和涉密数据分开管理,从而增加了溯源环节之间信息交互的难度。(2)信息失真:有些企业为了追求数据信息的美观,故意将数据信息夸张或者削弱,然后根据个人的选择将修改后的信息人为添加到溯源界面,改变了原有溯源信息的真实性,造成信息失真。(3)中心化严重:在传统牦牛溯源体系中,溯源环节所产生的所有数据信息都会被集中存放,一旦中心节点数据发生安全问题,就会导致整个溯源系统的瘫痪。此外,中心化对传输效率也有着极大地限制,2个节点之间须通过中心节点才能发生交流,严重限制了数据的传输效率。(4)数据来源真实性:在牦牛的养殖溯源阶段,存在着防伪溯源市场覆盖率低、数据采集自动化程度低等问题,在溯源过程中不可避免地存在一些人为操作,如果想建立起一套完整的全自动化采集、上传数据的系统,需要庞大的资金链投入,但一些小型企业无法承受这些开支,这就导致数据信息录入时对人工的依赖性强,容易发生数据的篡改,从而无法保障数据来源的真实性。

区块链作为底层架构,提供了一个分布式账本用于跨网络参与节点存储、传输和查看安全P2P交易[3],结合密码学、共识机制、时间戳等技术可实现网络的去中心化,其完整性和不变性能够大大提高溯源过程中的效率、可靠性和透明度[4-6]。近年来,区块链技术越来越多的应用在农业、医药、生鲜等领域,在本系统中使用区块链技术能够建立牦牛养殖阶段溯源链上多个角色之间的信任、解决数据失真及信息不对称等问题,为参与网络的多个用户提供安全可靠的信息溯源平台[7]。

1 牦牛养殖溯源流程与系统模型分析

1.1 牦牛养殖溯源流程分析

在牦牛养殖阶段,参与溯源活动的主体主要是:牧场、加工企业、消费者、政府监管部门,这些参与网络的用户并不都是直接相关联的,目前大多是以牧场为核心,通过整合上下游企业部门进行统一管理。在此阶段牦牛的溯源分为4个主要环节(见图1):养殖、饲喂、称重、环境监测,从数据采集到追溯的具体细化过程来看又可以分为:牦牛出生体况检查、养殖过程中的体重数据变化、牦牛的防疫、养殖方式、牧草的种类等级信息、周边温湿度和光照等环境监测、成熟后出栏数据,再到最终的销售等环节。对牦牛养殖阶段溯源首先要保证数据来源的真实性,需要使用物联网传感器设备、小气象站和摄像头对数据进行自动获取和上传,同时向政府、牧场、企业、消费者提供查询API接口,实现溯源的监管。

图1 牦牛养殖溯源流程Fig.1 Traceability process of yak breeding

1.2 系统关键技术模型分析

1.2.1 数据存储机制 区块链溯源系统中的存储方式是将溯源产品在各节点产生的溯源数据直接写入区块链账本中,但随着参与网络的用户数量的增加,产生的溯源数据也成倍增长,区块链存储压力随之增大。此外,区块链中所有节点账本中存储的数据都是一致的,对于处于竞争状态的企业来说无法获得有效的竞争数据。针对这些不足,本文设计了一种“区块链+关系型数据库”双重存储的存储模式,通过将牦牛养殖链上各环节产生的溯源信息经过智能合约进行验证,最终将溯源信息和区块链位置信息一同存入关系型数据库中。通过这种存储方式可以有效提高数据存储的运行效率,同时也保障了隐私数据的安全问题。部分数据具体的存储格式分别见表1与表2。

表1 本地数据库溯源字段Table 1 Local database traceability fields

表2 区块链溯源信息数据结构Table 2 Data structure of blockchain traceability information

1.2.2 Channel分割 Channel是区块链网络中成员进行通信的一种主要通信机制,一个区块链网络可以存在多个Channel。一般情况下区块链网络中包含多个通道,每个通道又包含不同的peer节点,参与网络的每个peer节点都有一份可参与共享的账本,这些节点独立且平等的存储着相同的信息,这就造成了数据的重复上传及存储。为实现数据的有效存储,需要对区块链溯源系统中的通道进行单独设计。当某一通道中存储的数据量过大时,可以拆分为多个通道,并给每个节点设置存储上限值,其中每个通道分别存储不同的数据信息,从而分担peer节点的存储压力。拆分的本质是在数据总量不变的情况下,缩小通道体积和减少数据的冗余。具体拆分如图2所示。

图2 Channel拆分设计图Fig.2 Channel split design

1.2.3 智能合约 智能合约的业务逻辑有许多编程功能、预定义规则、条件(合同条款)等,由对等方之间的相互协议定义,以读取、执行和更新分类账的当前状态,当满足或触发条件时,执行链码自动执行特定交易[8-9]。目前,畜牧产品安全是一个主要的应用领域,链码的部署和实施可以有效处理、访问、共享和存储牦牛溯源关键数据、访问控制及供应链中牦牛可追溯性等问题。牦牛溯源链码的主要特征之一是支持非受信任利益相关者之间的数字签名批准,以根据约定条件执行交易,使用树状结构中创建的哈希函数对大型数据集进行安全、高效的验证[10]。链码支持可扩展性和互操作性,以增强各利益相关者之间的协作,从而实现牦牛养殖信息的溯源。在不同利益相关者之间执行多项交易时,使用链码取代第三方解决方案可以降低运营和基础设施成本[11-12]。

2 基于Hyperledger Fabric的牦牛养殖溯源系统设计

2.1 系统架构

如图3所示,基于区块链的牦牛养殖溯源系统架构由图中4层组成,下面将详细描述此架构图的具体含义和架构流程。

图3 区块链溯源系统架构图Fig.3 Block chain traceability system structure

图4 Fabric交易流程Fig. 4 Fabric transaction process

数据接入层:利用智能设备通过获取牛的耳标号来确定具体的牦牛个体,然后利用传感器等智能设备获取牦牛生长过程中的数据以及牧场周围环境数据,并上传至溯源数据仓库。

数据存储层:将物联网智能设备所采集的数据和人工录入的数据存储至溯源数据仓库,通过区块链基础层将数据写入区块链账本,以备查询使用。

区块链基础层:本系统采用的是Hyperledger Fabric联盟链开源框架,框架提供的证书认证、加密算法、智能合约运行环境、共识算法等为牦牛溯源系统提供了区块链基础服务。

查询应用层:在系统的前端界面进行牧场或牦牛的溯源查询,会调用存储在区块链账本中的数据生成1个二维码,以供消费者、牧场人员、政府监管部门共同监管、查询。

基于区块链的青海牦牛养殖溯源系统通过物联网智能设备和人工录入的方式将牦牛养殖过程中获取到的数据存入到区块链系统的账本中,再将数据通过区块链基础层的区块链服务传输到查询应用层展示出来,实现了溯源系统与区块链技术的完美结合,保障了数据信息的真实性、透明性和安全性。

2.2 Fabric交易流程

交易的基本事务流程如下:

(1)客户端提出交易请求,通过可用SDK构建事务请求并调用链码函数生成新的交易提案,链码函数将依次对分布式账本的状态执行读/写操作。通过调用CA服务创建唯一签名和身份证书,通过链码规定客户端要把请求发送到具体对等方,接着客户端将其同时发送给一个或多个背书节点。

(2)当背书节点接收请求后,会使用MSP验证签名并确定请求是否被授权进行合理操作,背书节点把收到的请求提案当作输入执行交易,并验证背书签名与提案是否一致,判断指定的背书是否被执行。若背书通过,则将获得的结果及读写合集作为输出发送给Orderer 节点,使背书节点模拟执行链码,将结果传回SDK并反馈给客户端,此时账本信息还未更新[13]。

(3)Orderer节点对交易进行广播和达成共识,并对交易排序,按照区块生成的规则将交易分块分布,然后将生成的新区块提交给Committer节点:Fabric中的订购服务建立区块链中所有交易的总订单,确保所有交易在对等方达成共识,订购服务通常由多个节点组成,以实现可扩展性。客户端向订购服务广播交易信息,事务将包含读写集合、认可对等签名和通道标识。订购服务不需要检查交易内容来执行其操作,它从不同的客户端接收不同通道的事务并将它们排序。

(4)生成的区块被发布到Channel中的节点后,先验证区块中交易执行背书时的数据是否发生变化,然后检查账本的读写集合是否有效,将检查后的交易数据提交到状态数据库中实现信息的更新。

2.3 系统实现

2.3.1 平台选择 区块链网络中分为公有链、私有链和联盟链[14]。公有链的自由程度在这3个区块链类型中最高,参与网络的所有节点可随意加入和离开网络,且每个节点可以直接参加链上数据的读写;私有链不仅不对外开放、代码不开源,还会限制区块链网络中节点的读写操作,必须开放权限才可使用;联盟链一般是指几个参与联盟的节点组成的网络结构,通过授权后可在网络中加入新的节点,其核心代码对外开放,读写权限由等级控制,可以理解成是由参与区块链网络的节点组成的利益联盟[15]。

3种区块链类别对比情况见表3。如表3所示,通过分析公有链、私有链和联盟链的参与者、中心化程度、交易速度、交易成本、共识算法选用、应用场景等几个类别的区别,可知虽然联盟链的交易速度和去中心化程度不是最高,但从参与者和共识算法的角度来看,联盟链最适合在牦牛养殖溯源体系中使用,故本系统采用联盟链中具有代表性的Hyperledger Fabric开源区块链网络。Hyperledger Fabric是一个联盟链的开发框架,具有扩展性强、系统的运行不需要token支持等特点,且还支持在多个节点上一致地执行用标准编程语言编写的分布式应用程序,这使得Fabric成为第一个用于许可区块链的分布式操作系统[16-19]。Hyperledger Fabric允许组织共享区块链基础配置的同时还能够保持组织的私密性,有效实现了数据的共享和数据隐私同步进行。本系统在Hyperledger Fabric开源框架的基础上进行设计研究,旨在使用开放标准创建一个可公开访问的数据,并允许进行分析以监测牦牛养殖状况和牧场环境情况,再搭配Hyperledger Explorer的区块链可视化界面完成基于区块链的牦牛溯源平台管理系统的搭建,可以有效提高系统的可靠性、灵活性、可扩展性和机密性。

表3 三种区块链类别对比表Table 3 Comparison of three blockchain categories

2.3.2 系统实现过程

2.3.2.1 数据库 数据库部分采用状态型数据库和关系型数据库相结合的方式。在Fabric网络中,状态型数据库分为LevelDB和CouchDB,LevelDB数据库存在于节点的内部,属于本地数据库,CouchDB 数据库存在于节点的外部,属于备选状态数据库。历史数据默认存储在LevelDB数据库中,考虑到牦牛养殖溯源过程中调用智能合约产生的事务繁多,且CouchDB可以满足LevelDB不支持的许多用例的链码,因此为方便链码的部署,将CouchDB修改为Fabric的默认数据库。关系型数据库使用MYSQL数据库,在确定牦牛养殖阶段溯源所需数据信息后,建立相关的数据库,从而实现对各阶段数据信息的记录。其中还可以通过对MYSQL数据库的查询来验证状态数据库是否发生异常。在牦牛养殖溯源过程中,为了方便用户的使用和维护数据的安全,数据存储时应采用MYSQL数据库与状态型数据库相结合的存储方式。

2.3.2.2 服务器端 Fabric网络需要在Linux环境下运行,因此使用虚拟机运行程序。虚拟机使用的是64位的Centos7系统,此系统由Red Hat Linux提供,属于企业级Linux系统,适用于区块链联盟链。虚拟机内存为2GB、硬盘为40GB、Fabric版本为1.4.4,在区块链中设置了2个组织(SimpleOrg1和SimpleOrg2) 、4个节点和1个Orderer排序节点,并在Docker容器环境下运行。

在本系统的区块链网络中使用Fabric CA发布的证书作为凭证,以保障参与网络的用户的身份安全,通过SHA-256算法和非对称加密技术验证身份的有效性。当参与网络的用户需要对系统进行操作时,网络先对用户的身份进行验证,再对数据信息通过执行智能合约进行验证,保障了各节点之间交易的安全性。此外在系统中还设定了用户的权限,根据权限不同调用的智能合约内容也不同,保障了操作时溯源信息的安全性。Fabric中目前包含3种共识机制,分别是Solo、Kafka和PBFT。为了简化系统模式,在实验测试阶段使用Solo算法。

智能合约是由开发者制订的协议,部署在Docker中由系统程序自动执行,人为无法操作,保证了客观公正无法修改。一旦智能合约在区块链网络中部署成功,就会自动获取用户的唯一地址,智能合约定义了整个通道的操作参数并执行区块链中事务的调用[20-21],当对数据进行上链时,区块链就会自动调用智能合约并触发相应功能。智能合约分为模块设计和功能设计,模块设计主要包括各参与网络的不同权限用户的链码信息,根据系统应用的实际环境和所需牦牛溯源信息进行分模块。在牦牛养殖溯源系统中,主要设计了以下智能合约的功能:智能合约初始化init()和invoke()调用函数模块部分代码;将上传至链码的数据信息写入区块链账本; createBlockInfo():传入牦牛编号、牦牛体重、等信息参数; queryChainCodeByNo():牦牛数据信息查询。图5为部分智能合约功能。

图5 部分智能合约代码Fig. 5 Some codes of smart contract

2.3.2.3 客户端 前端网站基于目前流行的TCP/IP协议,使用Java、Html5等作为开发语言,使用Spring Boot、jQuery、Ajax等技术进行开发,使用具有便捷、小巧、依赖性低等特点的DOT开源JavaScript模板引擎,通过API接口实现系统的具体功能。在前端对牦牛养殖信息进行操作时,服务器会对数据进行预处理并转化为json格式对数据进行上链,然后通过智能合约的校验功能和共识机制的共识功能,最终完成数据的上链。

3 应用案例分析与测试

通过对青海省某牧场中的牦牛养殖链进行实地调研,该牧场中上下游的完整参与主体包括:牧场、企业、小气象站、政府监管部门。其中从养殖到售卖涉及到的环节有多个,每个环节和企业都有详细的交易记录,但各环节之间存在数据难以交互的问题,无法形成一条完整的信息链,从而导致交易效率低、数据不透明等。经过分析与讨论,采用本文设计的牦牛养殖溯源系统对牦牛养殖链进行管理与优化。

系统管理界面如图6所示,用户登录至后台管理界面后,根据用户权限的不同查看的用户界面也不相同。后台管理界面的信息溯源分为牧场信息溯源和牦牛信息溯源,牧场信息溯源需要填写牧场编号,然后点击查询后会自动生成包含牧场溯源信息的二维码;牦牛信息溯源需要填写牦牛耳标号,然后点击查询后会自动生成包含牦牛溯源信息的二维码。使用手机扫码工具就可以对界面中的二维码进行扫描,完成溯源信息的查询。

图6 产品溯源界面Fig. 6 Product traceability interface

登录可视化区块链浏览器界面后,Hyperledger Explorer的主页面板将显示浏览器信息的最新状态。由图7所示,导航选项卡包括:DASHBOARD、NETWORK、BLOCKS、TRANSACTIONS、CHAINCODES和CHANNELS。用户可以通过区块链浏览器查看上链后的所有交易信息及区块信息,每个面板都反映了每个选定通道的历史、指标和最新活动。当产品出现问题时,监管部门和牧场通过区块链网络和产品编码信息可以快速定位到出现问题的环节,及时发现并解决问题。在图8中,用户可以从提供的链接中直接访问区块详细信息以及后台管理界面所添加的具体交易信息,从而提高了数据的透明度、增加了消费者的信任度,有利于牧场和企业的稳定发展。

图7 信息监控界面Fig. 7 Information monitoring interface

图8 区块信息查询界面Fig. 8 Block information query interface

与传统的溯源体系相比,与区块链技术相结合的牦牛养殖溯源系统具有去中心化的特征,统一了各节点之间数据上链的标准,保障了各环节的快速交互,从而解决了溯源环节之间的信息孤岛、信息失真、中心化严重等问题。此外在区块链网络中每个参与网络的节点都是平等的,通过查看节点的账本就可以对网络中上链的数据进行监督,且链上数据具有时间戳、不可篡改,从而保障了溯源数据的真实性。建立包含区块链技术的牦牛养殖溯源系统,一定程度上保障了养殖链中的各参与者相互协作和相互监督,实现了牦牛养殖过程中资源利用的最大化。

4 结 论

本文首先分析了目前牦牛溯源存在的具体问题,对牦牛养殖溯源系统的溯源流程和关键技术模型进行分析,为改进传统溯源系统中存在的问题,使用区块链和关系型数据库相结合的存储机制,设计了适用于牦牛养殖阶段的智能合约和通道分割机制,为实现养殖阶段中的数据安全提供了保障,减少了存储的压力,并缩小了通道体积和减少了数据的冗余。其次通过对区块链平台进行对比,提出并选定使用Hyperledger Fabric对牦牛养殖溯源系统进行实际开发。最后,结合具体的实验应用成果,分析了系统的优势之处。本文提出的可追溯解决方案减少了对中心化数据库和中介机构的需求,解决了传统溯源中信息孤岛、信息失真、中心化严重、数据来源真实性、自动化程度低等问题,保证了牦牛养殖阶段溯源数据的完整性、透明性和安全性,从而降低了牦牛养殖阶段以及后续阶段数据信息存在的风险。

猜你喜欢

牦牛区块数据库
美仁大草原的牦牛(外一章)
跟着牦牛去巡山
区块链:一个改变未来的幽灵
区块链:主要角色和衍生应用
区块链+媒体业的N种可能
读懂区块链
数据库
数据库
目前牦牛口蹄疫的诊断与防治
数据库