一种基于Fabric区块链平台实现资产溯源的方法及系统与流程

文档序号:20018172发布日期:2020-02-25 11:01阅读:961来源:国知局
一种基于Fabric区块链平台实现资产溯源的方法及系统与流程

本发明属于区块链技术领域,更具体地,涉及一种基于fabric区块链平台实现资产溯源的方法及系统。



背景技术:

当前的供应链是一种直接或间接满足供应需求的线性经济模型,但是这种模式有一些缺点,例如供应链成员之间的关系基于某个中心维系,且消费者难以获取关于产品来源的信息,即难以实现资产溯源应用。研究资产溯源应用具有重要的实际意义,主要有以下原因:(1)传统供应链为中心化设计,该设计无法保证被信任的中心机构在被攻击的情况下供应流程中数据的真实性;(2)去中心化应用发展迅速,具有取代现有中心化应用的潜力,但去中心化应用资产溯源的相关理论及实践并不完整,技术空白较大;(3)未来存证方式必然通过去中心化实现,但去中心化应用的数据保存方式存在弊端,此弊端会导致应用时延十分严重。

中本聪于2008年发表了名为《比特币白皮书:一种点对点的电子现金系统》的白皮书,其中指出了基于数字签名实现的数字货币的相关概念,至此比特币进入了大众的视野。比特币结合了经济学理论、密码学、p2p网络、共识机制、智能脚本等多种技术,是一项拥有综合性技术创新的成果,具有良好的理论支持。区块链技术是源于比特币的一种技术,是指基于密码学理论,通过分布式存储,使用点对点网络,通过透明和可信规则,使数据达到一致性,包含可编程服务的一项计算机技术。区块链技术具有去中心化、开放性、不可篡改性等特点,对打击假冒伪劣、追溯物品的供应流程、保障物品安全性、维护消费者权益等方面起到了积极作用。

去中心化应用(dapp)基于区块链思想实现,此类应用去除了交易中第三方公信机构,对推动交易方式的变革具有重要意义。资产溯源为dapp的设计重点,此功能可令用户获取任意物品详细信息和流转详情,保证了交易的透明性,可有效应用于供应链。现有基于区块链实现的溯源应用将物品数据直接存储在区块链中,应用存在覆盖面窄、链上数据膨胀快的问题。



技术实现要素:

针对现有技术的缺陷和改进需求,本发明提供了一种基于fabric区块链平台实现资产溯源的方法及系统,旨在解决现有基于区块链实现的资产溯源应用所存在的覆盖面窄、链上数据膨胀快的问题。

为实现上述目的,按照本发明的第一方面,提供了一种基于fabric区块链平台实现资产溯源的方法,包括:资产上链步骤、资产交易步骤以及资产溯源步骤;

资产上链步骤包括:

获得每一件待上链的物品的详细信息,从而得到物品信息列表;

生成用于存储物品信息列表的区块,并将该区块存储到链外数据库outerdb中;

根据物品信息列表生成每件物品的标签,用于唯一标识各物品,之后根据物品标签以及物品生产者的公钥调用智能合约,生成相应的交易信息;

将所生成的区块的区块头信息连同所生成的交易信息存储到区块链的本地数据库中;

资产交易步骤包括:

待交易物品的所有者向区块链发起交易请求,以请求将其所拥有的物品转移给接收者;

区块链接收到该交易请求后,解析获得所有者的公钥、接收者的公钥、以及需要交易的物品标签,并根据获得的信息调用智能合约,生成相应的交易信息;

将所生成的交易信息存储到区块链的本地数据库中;

资产溯源步骤包括:

生成待查询物品的标签;

根据待查询物品的标签查询链外数据库outerdb,以获取待查询物品的详细信息;

根据待查询物品的标签查询区块链的本地数据库,获得待查询物品的历史交易信息,从而获得待查询物品的流转详情;

其中,链外数据库outerdb为区块链系统之外的数据库。

本发明将物品的详细信息存储在链外数据库outerdb中,而将物品的存证信息存储在区块链的本地数据库中,既能利用区块链的去中心化、开放性、不可篡改性等特点实现资产溯源,又能防止区块链数据急剧膨胀;本发明利用物品的标签唯一标识物品,与物品实际的信息无关,因此,本发明能够适用于各种物品的溯源应用。总的来说,本发明能够有效解决现有基于区块链实现的资产溯源应用所存在的覆盖面窄、链上数据膨胀快的问题。

进一步地,交易信息包括:与待交易物品相关联的上一笔交易的交易id,待交易物品的所有者的公钥,以及记录有新的资产所有权关系的交易输出信息;

交易输出信息包括:用于唯一标识待交易物品的标签,用于将接收者的公钥与该交易输出信息进行绑定的锁定脚本,以及所有者对该交易输出信息的数字签名。

本发明采用了未花费输出(utxo)模型来构造交易信息,能够将一批物品的流转详情保存在一笔交易中,由于区块链账本保存了所有交易,所以用户可通过遍历交易获取流转详情进行任意物品的溯源。

进一步地,在资产上链步骤中,调用智能合约生成的交易信息中,上一笔交易的交易id为空,以表示当前交易为该物品相关联的第一笔交易;所有者的公钥为物品生产者的公钥;

在该交易信息的交易输出信息中,标签为待上链物品的标签;锁定脚本为物品生产者的公钥与该交易输出信息进行绑定的结果;数字签名为物品生产者对该交易输出的数字签名。

进一步地,在资产交易步骤中,获取到所有者的公钥a、接收者的公钥b、以及需要交易的物品标签m后,根据所获取到的信息,调用智能合约,生成相应的交易信息,包括:

(s1)获取区块链中的最后一笔交易,并从该交易开始进行交易遍历,以获取与公钥a绑定的所有交易输出信息,若获取成功,则转入步骤(s2);否则,交易失败;

(s2)在所获取的交易输出信息中,筛选出包含标签m的交易输出信息o;

(s3)获得交易输出信息o所属交易信息中的所有者公钥c,并利用公钥c对交易输出信息o中的数字签名进行验证,若验证通过,则转入步骤(s4);否则,交易失败;

(s4)创建新的交易输出信息o1,将其中的物品标签设置为标签m;利用公钥b对交易输出信息o1进行绑定,生成新的锁定脚本script,并将交易输出信息o1中的锁定脚本设置为锁定脚本script;

(s5)创建新的交易信息tx,将其中上一笔交易的交易id设置为交易输出信息o所属交易信息的交易id,将其中的所有者公钥设置为公钥a,并将其中的交易输出信息设置为交易输出信息o1。

进一步地,利用私钥对交易输出信息进行签名的方法包括:选定任意的随机值a;对于椭圆曲线中的任意一点g,对其进行乘法运算得到ag;对需要签名的数据d通过散列算法获得其哈希值d,并使得b=(d+k1x)/a;由ag和b共同组成生成的信息即为数字签名;k1为用户的私钥,x为点g的横坐标;

利用公钥验证数字签名的方法包括:用户解析数字签名获取ag和b的值;对需要签名的数据d通过散列算法获得其哈希值d;获得签名用户的公钥k2,计算(dg+xk2)/b的值,若该值等于ag,则签名验证成功,否则验证失败。

进一步地,在资产上链步骤和资产交易步骤中,将生成的交易信息存储到区块链的本地数据库中,其方法包括:

对所生成的交易信息的交易id进行加密,得到用于唯一标识该交易信息的标识符id1;

对所生成的交易信息进行序列化操作,得到对应的字节流txbytes;

以标识符id1为键,以字节流txbytes为值,生成键值对<id1,txbytes>,并将该键值对<id1,txbytes>存储到区块链的本地数据库中。

本发明通过加密的方式将物品的使用权进行锁定,能够提高应用的安全性。

进一步地,对所生成的交易信息的交易id进行加密,包括:

(t1)获得需要加密的交易id所对应的字符串str,若字符串str所占比特数n>264,则转入步骤(t2);否则,直接利用sha-256哈希算法对字符串str加密,操作结束;

(t2)将字符串str划分为m个块,使得前m-1个块所占比特数为264,且第m个块所占的比特数数小于或等264

(t3)利用sha-256哈希算法对m个块分别进行加密,并将所得到的m个加密结果进行按位异或运算,将最终得到的运算结果作为加密结果,操作结束。

本发明利用sha-256哈希算法能够将不等长字符串通过哈希操作散列成定长字符串,由于sha-256算法只能对小于264比特大小的字符串进行哈希运算,本发明对于长度超过了264比特的字符串作划分处理,能够排除特殊情况,满足大于264比特大小的字符串的哈希运算操作。

进一步地,生成用于存储物品信息列表的区块,包括:

分别计算各物品的详细信息的哈希值,将计算得到的每一个哈希值作为一个数据项;

以每一个数据项为满二叉树的一个叶子节点,并在数据项数不足时,构造空数据节点;

对于满二叉树的非叶子节点node,若节点node的右子节点为空数据节点,则将节点node的左子节点的哈希值作为节点node的哈希值;否则,利用节点node的左子节点和右子节点的哈希值生成节点node的哈希值;

满二叉树中各节点的哈希值均计算完成后,根据满二叉树生成区块,区块头中记录的信息包括满二叉树的根节点哈希值、时间戳以及前一个区块的哈希值。

通过上述生成区块的方式,本发明利用满二叉树结构实现了一种特殊结构的mekle树,因为mekle树中,叶子节点的的哈希值hash均基于左子节点哈希值hleft及右子节点哈希值hright生成,即满足hash=sha(hleft+hright),若右子节点的哈希值hright为空值,则hash=sha(hleft),本发明对传统的mekle树的生成过程进行了改进,通过引入空数据节点的方式构建满二叉树,并在节点的右子节点为空数据节点时直接跳过复杂的哈希运算,直接生成该节点的哈希值为hash=hleft,在不影响整体merkle树存证结构和内容的情况下,简化了生成算法中对于多空节点情况的处理。

进一步地,本发明第一方面提供的基于fabric区块链平台实现资产溯源的方法及系统,还包括:余额查询步骤;

余额查询步骤包括:

用户向区块链发送查询请求,以请求根据该用户的公钥e查询该用户所拥有的物品的详细信息;

区块链接收到该请求后,解析获得公钥e,并进行交易遍历,以获得所有与公钥e绑定的交易输出信息,并从中提取物品的标签,从而得到标签集合;

根据标签集合查询链外数据库outerdb,从而获得该用户所拥有的物品的详细信息。

按照本发明的第二方面,提供了一种系统,包括计算机可读存储介质和处理器,计算机可读存储介质用于存储可执行程序;

处理器用于读取计算机可读存储介质中存储的可执行程序,执行本发明第一方面提供的基于fabric区块链平台实现资产溯源的方法。

总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:

(1)本发明所提供的基于fabric区块链平台实现资产溯源的方法及系统,将物品的详细信息存储在链外数据库outerdb中,而将物品的存证信息存储在区块链的本地数据库中,既能实现去中心化的、开放的、不可篡改的资产溯源应用,又能防止区块链数据急剧膨胀。

(2)本发明所提供的基于fabric区块链平台实现资产溯源的方法及系统,采用了未花费输出(utxo)模型来构造交易信息,能够将一批物品的流转详情保存在一笔交易中,由于区块链账本保存了所有交易,所以用户可通过遍历交易获取流转详情进行任意物品的溯源;利用物品的标签唯一标识物品,能够适用于各种物品的溯源应用。总的来说,本发明能够有效解决现有基于区块链实现的资产溯源应用所存在的覆盖面窄、链上数据膨胀快的问题。

(3)本发明所提供的基于fabric区块链平台实现资产溯源的方法及系统,对于长度超过了264比特的字符串作划分处理,并分别进行加密,能够排除特殊情况,满足大于264比特大小的字符串的哈希运算操作。

(4)本发明所提供的基于fabric区块链平台实现资产溯源的方法及系统,利用mekle树来组织物品的详细信息,并对传统的mekle树的生成过程进行了改进,通过引入空数据节点的方式构建满二叉树,并在节点的右子节点为空数据节点时直接跳过复杂的哈希运算,直接生成该节点的哈希值为hash=hleft,在不影响整体merkle树存证结构和内容的情况下,简化了生成算法中对于多空节点情况的处理。

附图说明

图1为本发明实施例提供的基于fabric区块链平台实现资产溯源应用的方法示意图;

图2为本发明实施例提供的资产上链步骤示意图;

图3为本发明实施例提供的资产交易步骤示意图;

图4为本发明实施例提供的资产溯源步骤示意图;

图5为本发明实施例提供的余额查询步骤示意图;

图6为传统的merkle树示意图;

图7为本发明实施例提供的利用满二叉树结构实现的merkle树示意图;

图8为本发明实施例提供的资产溯源应用的整体示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

为了有效解决现有基于区块链实现的资产溯源应用所存在的覆盖面窄、链上数据膨胀快的问题,本发明提供了一种基于fabric区块链平台实现资产溯源的方法,如图1所示,包括:资产上链步骤、资产交易步骤以及资产溯源步骤;

资产上链步骤会令一批物品与物品生产者的公钥进行绑定,并将物品的详细信息存放在outerdb中,如图2所示,资产上链步骤包括:

获得每一件待上链的物品的详细信息,从而得到物品信息列表;物品的详细信息可包括生产日期、生产厂家、图片、安全验证证书号等;

生成用于存储物品信息列表的区块,并将该区块存储到链外数据库outerdb中;

根据物品信息列表生成每件物品的标签(label),用于唯一标识各物品,之后根据物品标签以及物品生产者的公钥调用智能合约,生成相应的交易信息;其中,生成物品的标签,即物品的label,具体可通过哈希运算完成;

将所生成的区块的区块头信息连同所生成的交易信息存储到区块链的本地数据库中;

资产交易步骤会将物品所有者拥有的某件物品转移给另外一名用户(接收者),如图3所示,资产交易步骤包括:

待交易物品的所有者向区块链发起交易请求,以请求将其所拥有的物品转移给接收者;

区块链接收到该交易请求后,解析获得所有者的公钥、接收者的公钥、以及需要交易的物品标签,并根据获得的信息调用智能合约,生成相应的交易信息;

将所生成的交易信息存储到区块链的本地数据库中;

资产溯源步骤可获取物品的详细信息和流转详情,如图4所示,资产溯源步骤包括:

生成待查询物品的标签;

根据待查询物品的标签查询链外数据库outerdb,以获取待查询物品的详细信息;

根据待查询物品的标签查询区块链的本地数据库,获得待查询物品的历史交易信息,从而获得待查询物品的流转详情;

其中,链外数据库outerdb为区块链系统之外的数据库;fabric区块链默认使用leveldb作为本地数据库,也可以使用couchdb或其他数据库,在本发明实施例中,使用leveldb作为区块链的本地数据库。

如图1所示,上述基于fabric区块链平台实现资产溯源的方法,还可包括:余额查询步骤;

通过余额查询步骤,用户可以查询自己的物品信息,如图5所示,余额查询步骤包括:

用户向区块链发送查询请求,以请求根据该用户的公钥e查询该用户所拥有的物品的详细信息;

区块链接收到该请求后,解析获得公钥e,并进行交易遍历,以获得所有与公钥e绑定的交易输出信息,并从中提取物品的标签,从而得到标签集合;

根据标签集合查询链外数据库outerdb,从而获得该用户所拥有的物品的详细信息。

上述基于fabric区块链平台实现资产溯源的方法,将物品的详细信息存储在链外数据库outerdb中,而将物品的存证信息存储在区块链的本地数据库中,既能利用区块链的去中心化、开放性、不可篡改性等特点实现资产溯源,又能防止区块链数据急剧膨胀;利用物品的标签唯一标识物品,与物品实际的信息无关,因此,能够适用于各种物品的溯源应用。总的来说,上述基于fabric区块链平台实现资产溯源的方法,能够有效解决现有基于区块链实现的资产溯源应用所存在的覆盖面窄、链上数据膨胀快的问题。

在本实施例中,交易信息包括:与待交易物品相关联的上一笔交易的交易id,待交易物品的所有者的公钥,以及记录有新的资产所有权关系的交易输出信息;

交易输出信息包括:用于唯一标识待交易物品的标签,用于将接收者的公钥与该交易输出信息进行绑定的锁定脚本,以及所有者对该交易输出信息的数字签名。

本实施例采用了未花费输出(utxo)模型来构造交易信息,能够将一批物品的流转详情保存在一笔交易中,由于区块链账本保存了所有交易,所以用户可通过遍历交易获取流转详情进行任意物品的溯源。

基于上述根据utxo模型构造的交易信息,在资产上链步骤中,调用智能合约生成的交易信息中,上一笔交易的交易id为空,以表示当前交易为该物品相关联的第一笔交易;所有者的公钥为物品生产者的公钥;

在该交易信息的交易输出信息中,标签为待上链物品的标签;锁定脚本为物品生产者的公钥与该交易输出信息进行绑定的结果;数字签名为物品生产者对该交易输出的数字签名;

基于上述根据utxo模型构造的交易信息,在资产交易步骤中,获取到所有者的公钥a、接收者的公钥b、以及需要交易的物品标签m后,根据所获取到的信息,调用智能合约,生成相应的交易信息,包括:

(s1)获取区块链中的最后一笔交易,并从该交易开始进行交易遍历,以获取与公钥a绑定的所有交易输出信息,若获取成功,则转入步骤(s2);否则,交易失败;

(s2)在所获取的交易输出信息中,筛选出包含标签m的交易输出信息o;

(s3)获得交易输出信息o所属交易信息中的所有者公钥c,并利用公钥c对交易输出信息o中的数字签名进行验证,若验证通过,则转入步骤(s4);否则,交易失败;

(s4)创建新的交易输出信息o1,将其中的物品标签设置为标签m;利用公钥b对交易输出信息o1进行绑定,生成新的锁定脚本script,并将交易输出信息o1中的锁定脚本设置为锁定脚本script;;

(s5)创建新的交易信息tx,将其中上一笔交易的交易id设置为交易输出信息o所属交易信息的交易id,将其中的所有者公钥设置为公钥a,并将其中的交易输出信息设置为交易输出信息o1。

在一个可选的实施方式中,上述基于fabric区块链平台实现资产溯源的方法中,利用私钥对交易输出信息进行签名的方法包括:选定任意的随机值a;对于椭圆曲线中的任意一点g,对其进行乘法运算得到ag;对需要签名的数据d通过散列算法获得其哈希值d,并使得b=(d+k1x)/a;由ag和b共同组成生成的信息即为数字签名;k1为用户的私钥,x为点g的横坐标;

相应地,利用公钥验证数字签名的方法包括:用户解析数字签名获取ag和b的值;对需要签名的数据d通过散列算法获得其哈希值d;获得签名用户的公钥k2(由于公钥是公开的,签名用户的公钥k2可直接获取),计算(dg+xk2)/b的值,若该值等于ag,则签名验证成功,否则验证失败。

在一个可选的实施方式中,上述基于fabric区块链平台实现资产溯源的方法,在资产上链步骤和资产交易步骤中,将生成的交易信息存储到区块链的本地数据库中,其方法包括:

对所生成的交易信息的交易id进行加密,得到用于唯一标识该交易信息的标识符id1;

对所生成的交易信息进行序列化操作,得到对应的字节流txbytes;

以标识符id1为键,以字节流txbytes为值,生成键值对<id1,txbytes>,并将该键值对<id1,txbytes>存储到区块链的本地数据库中;

通过加密的方式将物品的使用权进行锁定,能够提高应用的安全性。

作为一种优选的实施方式,上述基于fabric区块链实现资产溯源的方法,对所生成的交易信息的交易id进行加密,包括:

(t1)获得需要加密的交易id所对应的字符串str,若字符串str所占比特数n>264,则转入步骤(t2);否则,直接利用sha-256哈希算法对字符串str加密,操作结束;

(t2)将字符串str划分为m个块,使得前m-1个块所占比特数为264,且第m个块所占的比特数数小于或等264;若满足nmod264=0,则m=n/(264),否则,m=n/(264)+1,mod表示取模运算;

(t3)利用sha-256哈希算法对m个块分别进行加密,并将所得到的m个加密结果进行按位异或运算,将最终得到的运算结果作为加密结果,操作结束;

利用sha-256哈希算法能够将不等长字符串通过哈希操作散列成定长字符串,由于sha-256算法只能对小于264比特大小的字符串进行哈希运算,对于长度超过了264比特的字符串作划分处理,能够排除特殊情况,满足大于264比特大小的字符串的哈希运算操作。

作为一种优选的实施方式,上述基于fabric区块链平台实现资产溯源的方法,生成用于存储物品信息列表的区块,包括:

分别计算各物品的详细信息的哈希值,将计算得到的每一个哈希值作为一个数据项;

以每一个数据项为满二叉树的一个叶子节点,并在数据项数不足时,构造空数据节点;

对于满二叉树的非叶子节点node,若节点node的右子节点为空数据节点,则将节点node的左子节点的哈希值作为节点node的哈希值;否则,利用节点node的左子节点和右子节点的哈希值生成节点node的哈希值;

满二叉树中各节点的哈希值均计算完成后,根据满二叉树生成区块,区块头中记录的信息包括满二叉树的根节点哈希值、时间戳以及前一个区块的哈希值;由此构造的区块中,区块信息包括对应的merkle树存证信息、时间戳、前一个区块的哈希值以及物品的详细信息,而区块头信息则包括merkle树存证信息、时间戳以及前一个区块的哈希值。

merkle树的主要作用为数据存证,merkle树的生成顺序为自底向上,树中的每一个节点均可作为其子节点的存证,因而根节点为所有节点的存证;一般将merkle树的树形结构设计为二叉树,也可以由设计者的需要设计成k叉树(k>2)。在一般情况下,一棵二叉merkle树可以表示成如图6所示。其中data1到data4均为需要进行存证操作的数据,每一项数据均为任意内容的字符串。对于以上4个数据,通过sha-256算法生成其对应的哈希值,其对应的的哈希值分别为h(2,0)、h(2,1)、h(2,2)、h(2,2),然后从左至右每两个节点的对应哈希值进行计算得到一个新字符串,然后将得到的字符串进行散列操作得到新的哈希值,如此迭代直到根节点。

从图6所示的merkle树生成的过程易知,对于所有数据项,任意一个数据进行了修改,整个merkle树对应的根节点哈希值便会出现变动,只要使用者拥有了merkle树的原生根节点哈希值,任何修改动作很容易被其感知。

上述优选实施方式中,利用满二叉树结构实现了一种如图7所示的特殊结构的merkle树,并利用该特殊结构的merkle树来组织物品的详细信息,此结构可保证对任何物品信息的修改均会导致当前批次物品对应的存证与区块链上的存证不一致,这一修改可被区块链上所有用户感知,从而达到防伪目的;

因为merkle树中,叶子节点的的哈希值hash均基于左子节点哈希值hleft及右子节点哈希值hright生成,即满足hash=sha(hleft+hright),若右子节点的哈希值hright为空值,则hash=sha(hleft);如图7所示,上述优选实施方式对传统的merkle树的生成过程进行了改进,通过引入空数据节点(null)的方式构建满二叉树,并在节点的右子节点为空数据节点时直接跳过复杂的哈希运算,直接生成该节点的哈希值为hash=hleft,在不影响整体merkle树存证结构和内容的情况下,简化了生成算法中对于多空节点情况的处理。

通过上述fabric区块链平台实现资产溯源的方法所实现的资产溯源应用,其整体结构如图8所示,应用具体分为两个部分,第一个部分是基于fabric项目的区块链系统,此部分用于数据存证及交易保存;第二部分为链外web应用,web应用通过sdk作为媒介与区块链系统产生交互,同时web应用中实现的链外数据库可以用于存储任意对应于区块链上存证信息的物品的详细信息。在上述fabric区块链平台实现资产溯源的方法中,对智能合约的调用均通过调用sdk完成。

本发明还提供了一种系统,包括计算机可读存储介质和处理器,计算机可读存储介质用于存储可执行程序;

处理器用于读取计算机可读存储介质中存储的可执行程序,执行上述基于fabric区块链平台实现资产溯源的方法。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

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