一种基于区块链的食品药品溯源方法及系统与流程

文档序号:24240764发布日期:2021-03-12 13:15阅读:125来源:国知局
一种基于区块链的食品药品溯源方法及系统与流程

本发明涉及区块链的技术领域,尤其涉及一种基于区块链的食品药品溯源方法及系统。



背景技术:

随着经济的持续增长,人们生活水平不断提高,消费者在购物时不再仅仅关注商品的价格、种类等基本需求,而更加关注商品的质量和安全性。医药行业和食品行业与人们的生活直接相关,药品安全和食品安全直接影响人们的生命健康,随着医疗保障制度逐渐完善、人口老龄化问题日益突出,药品需求量逐年增加,但近几年食品和药品的假冒伪劣问题不断出现,导致食品和药品的安全问题成为了社会热点话题和人们关注的焦点。

现有食品药品溯源系统主要面临信息采集不规范、数据存储不安全、易受中央系统攻击、企业间信息交换隐私保护不足等问题;区块链技术所具有的去中心化、分布式、不可篡改和数据可追根溯源的特点无疑可以较好的达到食品药品溯源体系建设中要求的溯源信息真实、存储可靠、历史长久保存等特性,但传统区块链技术缺乏对溯源对象全方位、多维度定义,且具有较大的链上存储压力。

鉴于此,如何对区块链中食品药品信息进行定义和存储,实现更为高效的链上食品药品溯源,成为本领域技术人员亟待解决的问题。



技术实现要素:

本发明提出一种基于区块链的食品药品溯源方法,通过利用一种食品药品供应链建模方法将食品药品供应链流程进行标准化描述,依据标准化描述的流程对流程中的对象进行身份验证,对验证通过的对象进行链上数据的存储,同时对传统区块链存储索引进行改进,实现更为高效的食品药品溯源。

为实现上述目的,本发明提供的一种基于区块链的食品药品溯源方法,包括:

确定食品药品供应链交易流程中,不同类型的企业所需附加的相关信息;

利用基于食品药品供应链的区块链建模方法将食品药品供应链流程进行标准化描述,得到基于区块链的食品药品供应链流程;

对食品药品供应链中的参与者进行身份验证,若参与者的身份通过验证,参与者则将所确定的需要附加的食品药品数据添加到区块链节点中;

区块链节点对食品药品供应链中参与者所提供的数据进行共识校验,若通过共识校验,则依据基于区块链的食品药品供应链流程进行数据的存储;

利用改进的区块链索引存储策略进行索引构建,并根据所构建的区块链索引实现食品药品溯源的索引查询。

可选地,所述不同类型的企业所需附加的相关信息,包括:

1)生产阶段:生产企业将食品药品的生产名称、食品药品的生产原料、生产日期、生产人员以及加工企业的信息附加到生产交易流程中;

2)加工包装阶段:加工包装企业将食品药品的加工步骤、加工用料、加工日期、加工人员、内外包装信息以及仓储企业信息附加到加工包装交易流程中;

3)仓储阶段:仓储企业将食品药品的仓储地点、入库和出库时间、入库员和出库员信息、入库数量信息以及运输信息附加到仓储交易流程中;

4)销售阶段:销售企业将食品药品的销售对象、销售时间、销售金额信息附加到销售交易流程中;在本发明一个具体实施例中,食品的销售对象主要为消费者、食品代理商、商场以及零售商,药品的销售对象主要为药店、医院以及医药研究所。

可选地,所述利用基于食品药品供应链的区块链建模方法将食品药品供应链流程进行标准化描述,包括:

在所述基于区块链的食品药品供应链流程中,本发明设定了如下两种节点:

1)参与对象节点an,用于描述溯源对象的参与对象,其中n表示溯源对象的参与对象数量,例如,表示溯源对象i的生产企业,表示溯源对象i的加工包装企业;

2)产品节点pn,用于描述溯源对象的产品信息,其中n表示溯源对象所涉及的产品维度数量,例如,表示溯源对象i的生产原料,表示溯源对象i的内包装材料;

详细地,本发明将参与对象节点an以及产品节点pn作为区块链节点,将交易流程中相关企业所附加的信息数据作为区块链节点中的区块数据,在本发明一个具体实施例中,本发明将食品药品的生产名称、食品药品的生产原料等产品信息作为产品区块链节点中的区块数据,将生产企业信息、销售对象信息等参与对象信息作为参与对象区块链节点中的区块数据,所述企业信息包括企业的地理位置,企业加工人员信息等企业内部信息数据;

所述食品药品供应链的区块链建模方法流程为:

1)将溯源对象i的参与对象和产品信息作为区块链中的节点,并将食品药品供应链中交易流程中的信息数据作为区块链节点中的区块数据en,其中n表示该信息数据在区块链节点中发生的次序,n越大,表示该信息数据发生的顺序靠后;

2)在区块数据en中添加信息数据类型标识,所述信息数据类型标识主要包括运输标识、转换标识、描述标识以及所有权转移标识;

所述运输标识用来描述食品药品供应链中物理实体或数字实体的位置变化,用tp表示;

所述转换标识用来描述食品药品供应链中溯源对象转换为新的对象,用tf表示;例如在食品生产过程中,将不同的添加剂以及原料作为输入,转化为成品食品,即表示为tfen;

所述描述标识用来描述溯源对象的客观状态,用ob来表示;例如在食品生产过程中,粮食种植过程的温度、湿度等数据,表示为oben;

所述所有权转移标识用来描述溯源对象的所有权或保管权的变更,用ot表示;例如食品药品的销售便是一种所有权转移,表示为oten;

3)对于所创建的区块链节点,建立不同节点之间的关联关系,将不同节点之间的关联关系作为区块链节点标识;所述不同区块链节点之间关系类型包括参与关系以及连接关系;所述参与关系为参与对象区块链节点与产品区块链节点之间的连接关系,例如在食品药品生产过程中,生产者作为参与对象区块链节点,食品药品的生产信息便为产品区块链节点,生产者作为参与对象节点与食品药品的生产便为参与关系;所述连接关系为两个同类型区块链节点之间的关联关系,例如在食品药品生产过程中,生产者作为参与对象节点,生产企业也作为参与对象节点,两者之间双向的连接关系便为连接关系。

可选地,所述对食品药品供应链中的参与者进行身份验证,包括:

所述食品药品供应链中的参与者包括食品药品溯源过程中的参与者,例如食品药品的生产员,生产企业,运输企业等;

所述身份验证节点对参与者身份进行验证的流程为:

1)参与者选择一个随机密钥ku,其中u表示参与者,计算哈希值hu=h(idu),其中idu为区块链自动生成;

2)参与者生成私钥su=shu,其中s为区块链生成的随机数,并生成公钥qu=kusu和当前时间戳tu;参与者发送(idu,qu,tu)的身份验证请求到身份验证节点;

3)当身份验证节点n收到请求后,检查tu是否有效,若tu≤tn,则表示tu有效,其中tn为当前时间戳;身份验证节点n发送(idn,qn,tn)到参与者;

4)参与者收到消息后,检查时间戳tn是否符合tn小于等于当前时间戳,若符合,则计算q′u=kup,p是区块链生成的随机数,并发送(idu||idn||qu||q′u)到身份验证节点n,其中||表示串联操作;

5)当身份验证节点n收到参与者所发送的消息时,n计算哈希值h((idu||idn||qu||q′u)),并计算q″u=s-1q′u,n检查h((idu||idn||qu||q′u))的值是否等于q″u,若两者相等,则身份验证节点n通过对当前参与者u的身份验证。

可选地,所述利用基于区块链节点性能的区块链分片负载分配策略进行区块链节点的分配,包括:

1)对每个区块链节点进行硬件性能分数score1的计算:

其中:

m为区块链节点的内存容量;

d为区块链节点的磁盘i/o速率;

t为区块链节点的网络吞吐量;

ki为区块链节点各项指标的权值参数,本发明将k1,k2,k3分别设置为0.3,0.3,0.4;

基于区块链节点的交易验证进行交易分数score2的计算:

其中:

|t|为区块链节点验证交易的交易数量;

ti为区块链节点验证第i个交易所花费的时间;

ts为分片内的主节点将交易发送给分片成员的财间;

tr为主节点收到分片中其它节点共识后回复消息的时间;

εi为判断参数,当节点交易验证的结果和最终的结果相同时,参数值为1,否则为0;

avg(ti)为分片中所有节点处理第i个交易的平均时间;

2)根据每个分片生成区块链节点中区块的时间,对每个区块链节点的得分进行调整:

其中:

tblock为当前区块链节点所属分片生成区块的时间;

avg(tblock)为所有区块链分片生成区块的平均时间;

3)采取多轮验证策略对区块链分片中的负载情况进行验证,分片中的负载取决于每一轮验证后该分片的未处理交易数,由如下公式进行计算:

si=count(unt)

其中:

si为分片i的负载值;

unt为分片i中每一轮未处理的交易;

4)根据上述的得分规则,在每一轮结束时计算分片中每个区块链节点在过去w轮累计的分数,并将区块链节点的累计分数进行降序排列;

5)依次将节点分配给上一轮遗留负载最大的分片当中,如果有多个分片满足条件,则选择哈希值最小的分片重复分配,直到所有的节点被分配完毕;

6)筛选出每个分片中得分高于平均分的节点,然后通过计算公钥哈希从这些节点中随机选择一个节点作为分片内的主节点;

7)重复步骤3)~6),直到达到目标验证轮数或各区块链节点的位置不再发生偏移;将目标验证轮数设置为30。

可选地,所述区块链节点对食品药品供应链中参与者所提供的数据进行共识校验,包括:

1)在区块链层查看是否有节点存储着包含所提供数据p的历史上传数据gp,若区块链中已经进行gp的存储,则利用共识节点进行数据一致性的共识检查,主要作用是检查本次需要被上传的数据p与历史上传数据gp是否一致,一致包括:产品的批次号相同、具体的交易信息一致、交易参与者信息一致。如果通过了一致性检查的过程,则说明,溯源对象的最后一次存储追溯数据与本次存储的追溯数据不存在相互矛盾;若区块链节点中不存在历史上传数据,则将所提供数据p存储到新的区块链节点中;

2)存储历史上传数据gp的节点在本地执行数据一致性检查:

其中:

为区块链所存储的历史上传数据的哈希值;

若本地计算得到的sha256(gp)等于区块链中所存储的哈希值,则通过数据一致性检查;

3)利用图形转换规则将历史上传数据gp与最新上传数据g进行数据合成,得到合成后的数据g′,并将合成数据存储到原区块链节点中:

g′=g||gp

生成合成数据g′的哈希值hg′,并将其存储到区块链中,用于下一次数据一致性检查;

4)原区块链节点将合成数据的消息广播到其余区块链节点中;

若通过共识校验,对于每个食品药品的供应链交易,利用自适应分簇方法将参与交易的区块链节点进行分簇,所述自适应分簇方法的流程为:

1)参与交易每个区块链节点随机产生一个0-1之间的随机数σi,若σi<t,则该节点广播自己是簇头的消息i;其中t为自适应阈值,本发明将其设置为0.4;

2)其他区块链节点接收到消息i,就回复请求成为该簇成员的请求消息r;各个簇头节点对接收到的请求消息r回复确认消息s,并根据收到的请求消息数量得到当前该簇内成员的数量,一旦数量等于m,就回复满员消息h;其中m为一个簇的节点数量m;

3)普通节点如果收到确认消息s就将自己进行簇标记c,如果收到满员消息h就放弃上一个簇请求,并重新进行簇请求;直到所有区块链节点都有了簇标记c;当全网稳定运行一段时间后,网络重新进入初始化阶段,节点重新进行下一轮簇的划分,如此不断循环;

4)当一个新节点要加入到网络时,根据其邻居节点的多数的所属簇,就决定自己加入到哪个簇中;

根据自适应的分簇结果,利用协同存储方案进行食品药品的区块数据存储,所述区块数据的存储流程为:

1)当一个簇内节点接收到新区块数据b时,该节点发送区块数据b给簇头节点;簇头节点通过查询存储状况表,选出簇内具有全部数据高度的最少节点,选定这些簇内节点对新区块数据b进行验证,验证后将验证消息报告给簇头节点;

2)若簇头节点接收到的反馈验证信息都正确,就查询存储表,找出当前空间存储率最低的r个区块链节点,并将区块数据b发送给这些节点接收;所述空间存储率的计算公式为:

k=h/s

其中:

s为区块链节点用来存储区块信息的空间;

h为自身同步的区块存储容量;

3)接收并同步了新区块数据b的r个节点向簇头节点报告当前的空间存储率;

4)重复上述步骤,直到执行同步任务的簇内节点都接收到这个区块为止。

可选地,所述利用改进的区块链索引存储策略进行索引构建,包括:

1)采用merkle树存储区块数据hash值,将hash值作为主键,从而便于根据非主键属性进行查找树的索引构建;

2)将区块数据中的关键字存储到布隆过滤器中,所述布隆过滤器是由一个二进制向量和一系列随机映射函数组成的,对于索引中不存在的数据,由于根节点的布隆过滤器没有对其进行存储,因此会直接查找上一区块;

3)根据连续型属性对数据集合进行排序,并对排序后的数据取hash值,再对相邻两个区块的hash值进行hash运算,若区块存储的数据量为奇数,则在末尾复制最后一个数据以保证数据量为偶数,将hash运算的结果作为merkle索引树的父节点;merkle索引树中的父节点保存了左右子树连续型属性的最大值;

在本发明一个具体实施例中,为保证区块链索引的不可篡改性,在查询时对查询到的区块进行hash计算,检查该区块索引是否遭到篡改;例如,若区块中的值0被改为2,则重新计算得到的hash值为hash(hash(hash0|hash1)|2|1|bf1),其中hash0为当前区块的左索引的hash值,hash1为当前区块的右索引的hash值,bf1为布隆过滤器,将所计算得到的hash值与区块原有的hash值进行比对,若两者不同,则认为当前区块的索引遭到篡改。

此外,为实现上述目的,本发明还提供一种基于区块链的食品药品溯源系统,所述系统包括:

数据获取装置,用于利用基于食品药品供应链的区块链建模方法将食品药品供应链流程进行标准化描述,得到基于区块链的食品药品供应链流程,病获取食品药品供应链流程数据;

数据处理器,用于对食品药品供应链中的参与者进行身份验证,若参与者的身份通过验证,参与者则将所确定的需要附加的食品药品数据添加到区块链节点中,并利用基于区块链节点性能的区块链分片负载分配策略,将区块链节点实时分配到合适的区块链分片中;同时区块链节点对食品药品供应链中参与者所提供的数据进行共识校验,若通过共识校验,区块链节点利用协同存储方案进行食品药品数据的存储;

溯源装置,用于利用改进的区块链索引存储策略进行索引构建,并根据所构建的区块链索引实现食品药品溯源的索引查询。

此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有食品药品溯源程序指令,所述食品药品溯源程序指令可被一个或者多个处理器执行,以实现如上所述的基于区块链的食品药品溯源的实现方法的步骤。

相对于现有技术,本发明提出一种基于区块链的食品药品溯源方法,该技术具有以下优势:

首先,本发明提出一种供应链流程中参与者的身份验证算法,所述食品药品供应链中的参与者包括食品药品溯源过程中的参与者,例如食品药品的生产员,生产企业,运输企业等,若参与者的身份通过身份验证节点的验证,参与者则将所确定的需要附加的食品药品数据添加到区块链节点中,有效保证了区块链中所存储数据的真实性,提高了食品药品溯源的准确性;在所述身份验证算法中,参与者和身份验证节点通过双向验证,分别验证对方的身份,若均验证通过才会发送确认消息,当身份验证节点n收到参与者所发送的消息时,n计算哈希值h((idu||idn||qu||q′u)),并计算q″u=s-1q′u,n检查h((idu||idn||qu||q′u))的值是否等于q″u,若两者相等,则身份验证节点n通过对当前参与者u的身份验证,其中u表示参与者,qu表示参与者的公钥,idu和s为区块链生成的随机数,q′u为参与者验证通过身份验证节点后的更新公钥。

由于目前区块链的基础设施不能满足大规模溯源的要求,本发明利用区块链分片技术进行区块链的扩容,即将区块链上的交易将被分成不同的碎片,其由区块链上的不同节点组成,因此,只需要处理一小部分输入的交易,并且通过与区块链上的其他节点并行处理就能完成大量的验证工作;而现有的分片方案通常是将节点随机分配到不同的分片中,这样的随机分配策略忽略了各个节点之间的性能差异,导致区块链中不同的分片之间的性能差异较大,如果某一个负载较大的分片的处理能力较差,就会产生拥堵,导致整个区块链系统交易吞吐量降低。因此本发明提出一种基于区块链节点性能的区块链分片负载分配策略将区块链节点实时分配到合适的区块链分片中,

首先通过节点的硬件性能以及节点验证交易过程来评估节点得分,其中基于区块链节点的交易验证进行交易分数score2的计算公式为:

ti=tr-ts

其中:|t|为区块链节点验证交易的交易数量;ti为区块链节点验证第i个交易所花费的时间;ts为分片内的主节点将交易发送给分片成员的财间;tr为主节点收到分片中其它节点共识后回复消息的时间;εi为判断参数,当节点交易验证的结果和最终的结果相同时,参数值为1,否则为0;avg(ti)为分片中所有节点处理第i个交易的平均时间;采取多轮验证策略对区块链分片中的负载情况进行验证,分片中的负载取决于每一轮验证后该分片的未处理交易数,由如下公式进行计算:

si=count(unt)

其中:si为分片i的负载值;unt为分片i中每一轮未处理的交易;根据所制定的得分规则,在每一轮结束时计算分片中每个区块链节点在过去w轮累计的分数,并将区块链节点的累计分数进行降序排列;依次将节点分配给上一轮遗留负载最大的分片当中,如果有多个分片满足条件,则选择哈希值最小的分片重复分配,直到所有的节点被分配完毕;因此本发明将高性能节点分配到负载较大的分片中,能提升负载较大区块链分片的处理能力,从而解决各个分片负载不均衡的问题,提高区块链系统的交易吞吐量。

由于区块链中的所有交易信息需要被所有区块链节点存储,单个区块链节点存储了整个交易流程信息,具有较大的存储压力,因此本发明提出一种协同存储方案进行食品药品数据的存储,所述协同存储方案将节点划分为若干个簇,每个簇内存储区块链的一个交易的所有区块数据即可,这样,簇中的一个节点只需要存储交易的部分区块,就解决了当前区块链节点的存储压力;而且,当新节点加入到区块链网络时,也归入到一个簇,根据该簇内分配,只需要同步相应的部分区块,大大缩小启动时间;详细地,本发明提出一种自适应分簇方法,通过在簇内随机产生簇头,能够保证各节点等概率地担任簇头,从而保证区块链中各节点的平等性,而且由于簇头节点能量消耗较大,各节点轮流担任簇头,使得全网中节点消耗能量较均衡,更公平;当一个节点接收到簇外节点广播来的新区块时,该节点就将新区块发送给簇头节点,经过簇内节点验证无误后,簇头节点在簇内存储状况表中查找簇内各节点当前的存储率,将该新区块发送给空间存储率最低的r个节点,要求这些节点同步该区块,使得区块数据更多被存储在当前存储率最低节点中,有效缓解区块节点的存储压力。

附图说明

图1为本发明一实施例提供的一种基于区块链的食品药品溯源方法的流程示意图;

图2为本发明一实施例提供的一种基于区块链的食品药品溯源系统的结构示意图;

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

通过利用一种食品药品供应链建模方法将食品药品供应链流程进行标准化描述,依据标准化描述的流程对流程中的对象进行身份验证,对验证通过的对象进行链上数据的存储,同时对传统区块链存储索引进行改进,实现更为高效的食品药品溯源。参照图1所示,为本发明一实施例提供的基于区块链的食品药品溯源方法示意图。

在本实施例中,基于区块链的食品药品溯源方法包括:

s1、确定食品药品供应链交易流程中,不同类型的企业所需附加的相关信息。

所述食品药品供应链流程包括食品药品的整体交易流程链路,例如对于食品供应链,包括食品的种植、加工、仓储以及销售流程,对于药品供应链,包括药品的生产、包装、仓储以及运输流程;

对于不同的交易流程,相关企业需要附加对应的信息,所述不同交易流程所附加的信息包括:

1)生产阶段:生产企业将食品药品的生产名称、食品药品的生产原料、生产日期、生产人员以及加工企业的信息附加到生产交易流程中;

2)加工包装阶段:加工包装企业将食品药品的加工步骤、加工用料、加工日期、加工人员、内外包装信息以及仓储企业信息附加到加工包装交易流程中;

3)仓储阶段:仓储企业将食品药品的仓储地点、入库和出库时间、入库员和出库员信息、入库数量信息以及运输信息附加到仓储交易流程中;

4)销售阶段:销售企业将食品药品的销售对象、销售时间、销售金额信息附加到销售交易流程中;在本发明一个具体实施例中,食品的销售对象主要为消费者、食品代理商、商场以及零售商,药品的销售对象主要为药店、医院以及医药研究所。

s2、利用基于食品药品供应链的区块链建模方法将食品药品供应链流程进行标准化描述,得到基于区块链的食品药品供应链流程。

进一步地,本发明利用食品药品供应链的区块链建模方法将所述食品药品供应链流程进行标准化描述,得到基于区块链的食品药品供应链流程;

在所述基于区块链的食品药品供应链流程中,本发明设定了如下两种节点:

1)参与对象节点an,用于描述溯源对象的参与对象,其中n表示溯源对象的参与对象数量,例如,表示溯源对象i的生产企业,表示溯源对象i的加工包装企业;

2)产品节点pn,用于描述溯源对象的产品信息,其中n表示溯源对象所涉及的产品维度数量,例如,表示溯源对象i的生产原料,表示溯源对象i的内包装材料;

详细地,本发明将参与对象节点an以及产品节点pn作为区块链节点,将交易流程中相关企业所附加的信息数据作为区块链节点中的区块数据,在本发明一个具体实施例中,本发明将食品药品的生产名称、食品药品的生产原料等产品信息作为产品区块链节点中的区块数据,将生产企业信息、销售对象信息等参与对象信息作为参与对象区块链节点中的区块数据,所述企业信息包括企业的地理位置,企业加工人员信息等企业内部信息数据。

所述食品药品供应链的区块链建模方法流程为:

1)将溯源对象i的参与对象和产品信息作为区块链中的节点,并将食品药品供应链中交易流程中的信息数据作为区块链节点中的区块数据en,其中n表示该信息数据在区块链节点中发生的次序,n越大,表示该信息数据发生的顺序靠后;

2)在区块数据en中添加信息数据类型标识,所述信息数据类型标识主要包括运输标识、转换标识、描述标识以及所有权转移标识;

所述运输标识用来描述食品药品供应链中物理实体或数字实体的位置变化,用tp表示;

所述转换标识用来描述食品药品供应链中溯源对象转换为新的对象,用tf表示;例如在食品生产过程中,将不同的添加剂以及原料作为输入,转化为成品食品,即表示为tfen;

所述描述标识用来描述溯源对象的客观状态,用ob来表示;例如在食品生产过程中,粮食种植过程的温度、湿度等数据,表示为oben;

所述所有权转移标识用来描述溯源对象的所有权或保管权的变更,用ot表示;例如食品药品的销售便是一种所有权转移,表示为oten;

3)对于所创建的区块链节点,建立不同节点之间的关联关系,将不同节点之间的关联关系作为区块链节点标识;所述不同区块链节点之间关系类型包括参与关系以及连接关系;所述参与关系为参与对象区块链节点与产品区块链节点之间的连接关系,例如在食品药品生产过程中,生产者作为参与对象区块链节点,食品药品的生产信息便为产品区块链节点,生产者作为参与对象节点与食品药品的生产便为参与关系;所述连接关系为两个同类型区块链节点之间的关联关系,例如在食品药品生产过程中,生产者作为参与对象节点,生产企业也作为参与对象节点,两者之间双向的连接关系便为连接关系。

s3、对食品药品供应链中的参与者进行身份验证,若参与者的身份通过验证,参与者则将所确定的需要附加的食品药品数据添加到区块链节点中。

进一步地,依据基于区块链的食品药品供应链流程,区块链中的身份验证节点对食品药品供应链中的参与者进行身份验证,所述食品药品供应链中的参与者包括食品药品溯源过程中的参与者,例如食品药品的生产员,生产企业,运输企业等;

若参与者的身份通过身份验证节点的验证,参与者则将所确定的需要附加的食品药品数据添加到区块链节点中;

所述身份验证节点对参与者身份进行验证的流程为:

1)参与者选择一个随机密钥ku,其中u表示参与者,计算哈希值hu=h(idu),其中idu为区块链自动生成;

2)参与者生成私钥su=shu,其中s为区块链生成的随机数,并生成公钥qu=kusu和当前时间戳tu;参与者发送(idu,qu,tu)的身份验证请求到身份验证节点;

3)当身份验证节点n收到请求后,检查tu是否有效,若tu≤tn,则表示tu有效,其中tn为当前时间戳;身份验证节点n发送(idn,qn,tn)到参与者;

4)参与者收到消息后,检查时间戳tn是否符合tn小于等于当前时间戳,若符合,则计算q′u=kup,p是区块链生成的随机数,并发送(idu||idn||qu||q′u)到身份验证节点n,其中||表示串联操作;

5)当身份验证节点n收到参与者所发送的消息时,n计算哈希值h((idu||idn||qu||q′u)),并计算q″u=s-1q′u,n检查h((idu||idn||qu||q′u))的值是否等于q″u,若两者相等,则身份验证节点n通过对当前参与者u的身份验证。

s4、利用基于区块链节点性能的区块链分片负载分配策略,将区块链节点实时分配到合适的区块链分片中。

在本发明一个具体实施例中,本发明利用区块链分片技术进行区块链的扩容,即将区块链上的供应链交易将被分成不同的碎片,其由区块链上的不同节点组成,因此,只需要处理一小部分输入的交易,并且通过与区块链上的其他节点并行处理就能完成大量的验证工作;

进一步地,由于现有的分片方案通常是将节点随机分配到不同的分片中,这样的随机分配策略忽略了各个节点之间的性能差异,导致区块链中不同的分片之间的性能差异较大,如果某一个负载较大的分片的处理能力较差,就会产生拥堵,导致整个区块链系统交易吞吐量降低,因此本发明提出一种基于区块链节点性能的区块链分片负载分配策略,将区块链节点实时分配到合适的区块链分片中;

所述基于区块链节点性能的区块链分片负载分配策略为:

1)对每个区块链节点进行硬件性能分数score1的计算:

其中:

m为区块链节点的内存容量;

d为区块链节点的磁盘i/o速率;

t为区块链节点的网络吞吐量;

ki为区块链节点各项指标的权值参数,本发明将k1,k2,k3分别设置为0.3,0.3,0.4;

基于区块链节点的交易验证进行交易分数score2的计算:

其中:

|t|为区块链节点验证交易的交易数量;

ti为区块链节点验证第i个交易所花费的时间;

ts为分片内的主节点将交易发送给分片成员的财间;

tr为主节点收到分片中其它节点共识后回复消息的时间;

εi为判断参数,当节点交易验证的结果和最终的结果相同时,参数值为1,否则为0;

avg(ti)为分片中所有节点处理第i个交易的平均时间;

2)根据每个分片生成区块链节点中区块的时间,对每个区块链节点的得分进行调整:

其中:

tblock为当前区块链节点所属分片生成区块的时间;

avg(tblock)为所有区块链分片生成区块的平均时间;

3)采取多轮验证策略对区块链分片中的负载情况进行验证,分片中的负载取决于每一轮验证后该分片的未处理交易数,由如下公式进行计算:

si=count(unt)

其中:

si为分片i的负载值;

unt为分片i中每一轮未处理的交易;

通过评估各个分片的负载情况,使得负载较大的分片在下一轮节点分配中可以匹配到性能较高的节点,达到负载均衡;

4)根据上述的得分规则,在每一轮结束时计算分片中每个区块链节点在过去w轮累计的分数,并将区块链节点的累计分数进行降序排列;

5)依次将节点分配给上一轮遗留负载最大的分片当中,如果有多个分片满足条件,则选择哈希值最小的分片重复分配,直到所有的节点被分配完毕;

6)筛选出每个分片中得分高于平均分的节点,然后通过计算公钥哈希从这些节点中随机选择一个节点作为分片内的主节点;

7)重复步骤3)~6),直到达到目标验证轮数或各区块链节点的位置不再发生偏移;详细地,本发明将目标验证轮数设置为30。

s5、区块链节点对食品药品供应链中参与者所提供的数据进行共识校验,若通过共识校验,区块链节点利用协同存储方案进行食品药品数据的存储。

进一步地,对于食品药品供应链中参与者所提供的数据,区块链节点对其进行加密处理以及共识校验,所述共识校验流程为:

1)在区块链层查看是否有节点存储着包含所提供数据p的历史上传数据gp,若区块链中已经进行gp的存储,则利用共识节点进行数据一致性的共识检查,主要作用是检查本次需要被上传的数据p与历史上传数据gp是否一致,一致包括:产品的批次号相同、具体的交易信息一致、交易参与者信息一致。如果通过了一致性检查的过程,则说明,溯源对象的最后一次存储追溯数据与本次存储的追溯数据不存在相互矛盾;若区块链节点中不存在历史上传数据,则将所提供数据p存储到新的区块链节点中;

2)存储历史上传数据gp的节点在本地执行数据一致性检查:

其中:

为区块链所存储的历史上传数据的哈希值;

若本地计算得到的sha256(gp)等于区块链中所存储的哈希值,则通过数据一致性检查;

3)利用图形转换规则将历史上传数据gp与最新上传数据g进行数据合成,得到合成后的数据g′,并将合成数据存储到原区块链节点中:

g′=g||gp

生成合成数据g′的哈希值hg′,并将其存储到区块链中,用于下一次数据一致性检查;

4)原区块链节点将合成数据的消息广播到其余区块链节点中。

进一步地,若通过共识校验,区块链节点利用协同存储方案进行食品药品数据的存储,由于区块链中的所有交易信息需要被所有区块链节点存储,单个区块链节点存储了整个交易流程信息,具有较大的存储压力,所述协同存储方案将节点划分为若干个簇,每个簇内存储区块链的一个交易的所有区块数据即可,这样,簇中的一个节点只需要存储交易的部分区块,就解决了当前区块链节点的存储压力;而且,当新节点加入到区块链网络时,也归入到一个簇,根据该簇内分配,只需要同步相应的部分区块,大大缩小启动时间。

对于每个食品药品的供应链交易,利用自适应分簇方法将参与交易的区块链节点进行分簇,所述自适应分簇方法的流程为:

1)参与交易每个区块链节点随机产生一个0-1之间的随机数σi,若σi<t,则该节点广播自己是簇头的消息i;其中t为自适应阈值,本发明将其设置为0.4;

2)其他区块链节点接收到消息i,就回复请求成为该簇成员的请求消息r;各个簇头节点对接收到的请求消息r回复确认消息s,并根据收到的请求消息数量得到当前该簇内成员的数量,一旦数量等于m,就回复满员消息h;其中m为一个簇的节点数量m;

3)普通节点如果收到确认消息s就将自己进行簇标记c,如果收到满员消息h就放弃上一个簇请求,并重新进行簇请求;直到所有区块链节点都有了簇标记c;当全网稳定运行一段时间后,网络重新进入初始化阶段,节点重新进行下一轮簇的划分,如此不断循环;

4)当一个新节点要加入到网络时,根据其邻居节点的多数的所属簇,就决定自己加入到哪个簇中;

通过在簇内随机产生簇头,能够保证各节点等概率地担任簇头,从而保证区块链中各节点的平等性。而且由于簇头节点能量消耗较大,各节点轮流担任簇头,使得全网中节点消耗能量较均衡,更公平。还有,各个簇形成之后并不是一成不变的,一方面会接受新节点的加入,另一方面网络稳定一段时间后,还会重新进行簇的建立阶段,调整各个簇的成员。

根据自适应的分簇结果,本发明利用协同存储方案进行食品药品的区块数据存储,所述区块数据的存储流程为:

1)当一个簇内节点接收到新区块数据b时,该节点发送区块数据b给簇头节点;簇头节点通过查询存储状况表,选出簇内具有全部数据高度的最少节点,选定这些簇内节点对新区块数据b进行验证,验证后将验证消息报告给簇头节点;

2)若簇头节点接收到的反馈验证信息都正确,就查询存储表,找出当前空间存储率最低的r个区块链节点,并将区块数据b发送给这些节点接收;所述空间存储率的计算公式为:

k=h/s

其中:

s为区块链节点用来存储区块信息的空间;

h为自身同步的区块存储容量;

3)接收并同步了新区块数据b的r个节点向簇头节点报告当前的空间存储率;

4)重复上述步骤,直到执行同步任务的簇内节点都接收到这个区块为止。

s6、利用改进的区块链索引存储策略进行索引构建,并根据所构建的区块链索引实现食品药品溯源的索引查询。

进一步地,本发明利用改进的区块链索引存储策略进行区块数据索引的构建;在本发明一个具体实施例中,

所述区块数据索引的构建流程为:

1)采用merkle树存储区块数据hash值,将hash值作为主键,从而便于根据非主键属性进行查找树的索引构建;

2)将区块数据中的关键字存储到布隆过滤器中,所述布隆过滤器是由一个二进制向量和一系列随机映射函数组成的,对于索引中不存在的数据,由于根节点的布隆过滤器没有对其进行存储,因此会直接查找上一区块;

3)根据连续型属性对数据集合进行排序,并对排序后的数据取hash值,再对相邻两个区块的hash值进行hash运算,若区块存储的数据量为奇数,则在末尾复制最后一个数据以保证数据量为偶数,将hash运算的结果作为merkle索引树的父节点;merkle索引树中的父节点保存了左右子树连续型属性的最大值;

在本发明一个具体实施例中,为保证区块链索引的不可篡改性,在查询时对查询到的区块进行hash计算,检查该区块索引是否遭到篡改;例如,若区块中的值0被改为2,则重新计算得到的hash值为hash(hash(hash0|hash1)|2|1|bf1),其中hash0为当前区块的左索引的hash值,hash1为当前区块的右索引的hash值,bf1为布隆过滤器,将所计算得到的hash值与区块原有的hash值进行比对,若两者不同,则认为当前区块的索引遭到篡改。

根据所构建的区块索引,每个区块的区块体对应一个区块索引,每个区块索引的叶子节点对应一个数据集合t(t1,t2,...,tn);进行食品药品溯源时,用户输入条件为溯源对象以及溯源条件,查询算法会循环调用每一个区块链节点,根据基于区块链的食品药品供应链流程找到满足溯源对象的区块链节点,并在区块链节点中找到其中是否存在满足溯源条件的区块以及区块数据ti;当用户输入溯源条件c时,系统首先会与最后一个区块的区块头中的start和end进行比较,若c∈[strat,end],则遍历索引树,并返回结果,之后顺序比较上一个区块,直到遍历完成当前区块链节点所存储的区块。

下面通过一个算法实验来说明本发明的具体实施方式,并对发明的处理方法进行测试。本发明算法的硬件测试环境为:操作系统为linuxcentos6.9,内存为16g;对比溯源方法为基于hash索引的食品药品溯源方法,基于倒排索引的食品药品溯源方法以及无索引的食品药品溯源方法。

在本发明所述算法实验中,本实验通过搜集5g的食品药品供应链流程数据,并使用对比算法和本发明所提出的算法对所搜集的数据进行存储和溯源,将食品药品溯源的准确率作为食品药品溯源方法的评价指标。

根据实验结果,基于hash索引的食品药品溯源方法的溯源准确率为78.62%,基于倒排索引的食品药品溯源方法的溯源准确率为86.32%,无索引的食品药品溯源方法的溯源准确率为72%,本发明所述食品药品溯源方法的溯源准确率为88.73%,相较于对比算法,本发明所提出的基于区块链的食品药品溯源方法具备更高的食品药品溯源准确率。

发明还提供一种基于区块链的食品药品溯源系统。参照图2所示,为本发明一实施例提供的基于区块链的食品药品溯源系统的内部结构示意图。

在本实施例中,所述基于区块链的食品药品溯源系统1至少包括数据获取装置11、数据处理器12、溯源装置13,通信总线14,以及网络接口15。

其中,数据获取装置11可以是pc(personalcomputer,个人电脑),或者是智能手机、平板电脑、便携计算机等终端设备,也可以是一种服务器等。

数据处理器12至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、磁性存储器、磁盘、光盘等。数据处理器12在一些实施例中可以是基于区块链的食品药品溯源系统1的内部存储单元,例如该基于区块链的食品药品溯源系统1的硬盘。数据处理器12在另一些实施例中也可以是基于区块链的食品药品溯源系统1的外部存储设备,例如基于区块链的食品药品溯源系统1上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,数据处理器12还可以既包括基于区块链的食品药品溯源系统1的内部存储单元也包括外部存储设备。数据处理器12不仅可以用于存储安装于基于区块链的食品药品溯源系统1的应用软件及各类数据,还可以用于暂时地存储已经输出或者将要输出的数据。

溯源装置13在一些实施例中可以是一中央处理器(centralprocessingunit,cpu)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行数据处理器12中存储的程序代码或处理数据,例如食品药品溯源程序指令等。

通信总线14用于实现这些组件之间的连接通信。

网络接口15可选的可以包括标准的有线接口、无线接口(如wi-fi接口),通常用于在该系统1与其他电子设备之间建立通信连接。

可选地,该系统1还可以包括用户接口,用户接口可以包括显示器(display)、输入单元比如键盘(keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是led显示器、液晶显示器、触控式液晶显示器以及oled(organiclight-emittingdiode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在基于区块链的食品药品溯源系统1中处理的信息以及用于显示可视化的用户界面。

图2仅示出了具有组件11-15以及基于区块链的食品药品溯源系统1,本领域技术人员可以理解的是,图1示出的结构并不构成对基于区块链的食品药品溯源系统1的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。

在图2所示的装置1实施例中,数据处理器12中存储有食品药品溯源程序指令;溯源装置13执行数据处理器12中存储的食品药品溯源程序指令的步骤,与基于区块链的食品药品溯源方法的实现方法相同,在此不作类述。

此外,本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有食品药品溯源程序指令,所述食品药品溯源程序指令可被一个或多个处理器执行,以实现如下操作:

确定食品药品供应链交易流程中,不同类型的企业所需附加的相关信息;

利用基于食品药品供应链的区块链建模方法将食品药品供应链流程进行标准化描述,得到基于区块链的食品药品供应链流程;

对食品药品供应链中的参与者进行身份验证,若参与者的身份通过验证,参与者则将所确定的需要附加的食品药品数据添加到区块链节点中;

利用基于区块链节点性能的区块链分片负载分配策略,将区块链节点实时分配到合适的区块链分片中;

区块链节点对食品药品供应链中参与者所提供的数据进行共识校验,若通过共识校验,区块链节点利用协同存储方案进行食品药品数据的存储;

利用改进的区块链索引存储策略进行索引构建,并根据所构建的区块链索引实现食品药品溯源的索引查询。

需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1