CN107807951B - 一种区块链生成方法、数据验证方法、节点及*** - Google Patents
一种区块链生成方法、数据验证方法、节点及*** Download PDFInfo
- Publication number
- CN107807951B CN107807951B CN201710841223.4A CN201710841223A CN107807951B CN 107807951 B CN107807951 B CN 107807951B CN 201710841223 A CN201710841223 A CN 201710841223A CN 107807951 B CN107807951 B CN 107807951B
- Authority
- CN
- China
- Prior art keywords
- block
- data
- fingerprint information
- node
- written
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/30—Authentication, i.e. establishing the identity or authorisation of security principals
- G06F21/31—User authentication
- G06F21/32—User authentication using biometric data, e.g. fingerprints, iris scans or voiceprints
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3236—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Databases & Information Systems (AREA)
- Computer Networks & Wireless Communication (AREA)
- Data Mining & Analysis (AREA)
- Signal Processing (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Collating Specific Patterns (AREA)
Abstract
本发明公开了一种区块链生成方法、数据验证方法、节点及***,用于提高存储空间利用率,应用于包含M个节点的区块链***,针对M个节点中的每一个节点,区块链生成方法包括:获取N个待写入数据分别对应的N个指纹信息;N大于等于1;构造新区块,新区块包括数据集合和区块头;数据集合中包括N个指纹信息;区块头中包括该节点的本地区块链中前一区块的区块头哈希值;前一区块为本地区块链的最长链中最新加入的区块;通过共识算法,从M个节点产生的新区块中确定共识区块加入本地区块链。节省了交易信息中非待写入数据的其它信息所占用的存储空间,从而提高了存储空间的利用率。
Description
技术领域
本发明涉及数据认证技术领域,尤其涉及一种区块链生成方法、数据验证方法、节点及***。
背景技术
现代生活中,常需要证明某项数据(事物)的存在,即数据的存证,如撰写过的文章、历史的操作指令、签订过的合同等,此时便需经过第三方认证机构进行认证,这种认证方式对认证机构的信用度要求极高,而且操作繁琐、成本较高、时效性差。
为了解决上述通过第三方认证机构进行数据存证时存在的种种问题,目前已出现很多通过区块链数据存证的方案,利用区块链的无中心化结构及不可更改的特性很好地解决了上述问题。一种常见的使用区块链进行数据存证的方法为,先构建特殊交易,将待存证数据的指纹信息作为特殊交易的附加信息参数,如比特币交易中的OP_Return参数。之后,将特殊交易发往区块链***。然而,即使是一个最简单的交易,其也需要占用至少200字节的内存空间,这严重浪费了区块链***的内存空间,仅对于数据存证来说,所占用的存储空间仅有一小部分用于存储待存证数据的指纹信息,存储空间的利用率非常低,不利于存储更多的待存证数据。
发明内容
本发明提供一种区块链生成方法、数据验证方法、节点及***,用以提高区块链***的存储空间利用率。
本发明实施例提供一种区块链生成方法,应用于包含M个节点的区块链***,M大于等于3,针对所述M个节点中的每一个节点,包括:
获取N个待写入数据分别对应的N个指纹信息;N大于等于1;
构造新区块,所述新区块包括数据集合和区块头;所述数据集合中包括所述N个指纹信息;所述区块头中包括所节点的本地区块链中前一区块的区块头哈希值;所述前一区块为所述本地区块链的最长链中最新加入的区块;
通过共识算法,从所述M个节点产生的新区块中确定满足所述共识算法规则的共识区块加入所述本地区块链。
可选的,所述新区块还包括含有N个数字签名的签名集合;
所述N个数字签名与所述N个指纹信息一一对应。
可选的,通过共识算法,从所述M个节点的新区块中确定满足所述共识算法规则的共识区块加入所述本地区块链之后,还包括:
针对所述共识区块中的每个指纹信息,将所述指纹信息对应的索引信息保存在本地索引库中;所述索引信息包括所述指纹信息在所述本地区块链中的区块高度和所述指纹信息在所在区块中的位置编号。
可选的,所述新区块的区块头中还包括所述N个指纹信息的根哈希值。
可选的,所述N个指纹信息的根哈希值是通过默克尔merkle树算法获得的;
所述方法还包括:
对所述N个指纹信息进行分组;
根据第一哈希规则计算所述分组的中间哈希值;
根据第二哈希规则计算所述中间哈希值的哈希值作为所述分组的哈希值;
对所述分组的哈希值继续分组,并返回根据第一哈希规则计算所述分组的中间哈希值的步骤,直至获取所述根哈希值。
可选的,针对所述M个节点中的每一个节点,获取N个待写入数据分别对应的N个指纹信息之前,还包括:
针对任一个待写入数据,接收节点接收所述待写入数据的指纹信息,所述接收节点为所述M个节点中的任一节点;
所述接收节点将所述待写入数据的指纹信息存入所述接收节点的待写入数据集,并向其它M-1个节点发送数据写入请求;所述数据写入请求中包括所述待写入数据的指纹信息;所述数据写入请求用于指示所述其它M-1个节点中任一个节点将所述待写入数据的指纹信息存入各自的待写入数据集;
针对所述M个节点中的任一节点,在所述节点的待写入数据集中待写入数据的指纹信息的数量达到预设数量或距离上一次构造新区块的时间间隔达到预设时间时,从所述节点的待写入数据集中获取N个待写入数据分别对应的N个指纹信息。
可选的,通过共识算法,从所述M个节点产生的新区块中确定满足所述共识算法规则的共识区块加入所述本地区块链之后,还包括:
针对所述M个节点中的任一节点,从所述节点的待写入数据集中去除所述共识区块中包括的所述N个指纹信息。
可选的,所述区块链***中还存在至少一个背书节点;
所述方法还包括:
所述背书节点按设定规则从所述区块链中确定背书区块;
构造背书交易信息,所述背书交易信息的附加信息参数中包含所述背书区块的区块头哈希值;
将所述背书交易信息发送至背书区块链***。
本发明实施例提供一种数据验证方法,应用于包含M个节点的区块链***,M大于等于3,包括:
验证节点获取待验证数据的指纹信息,所述验证节点为所述M个节点中的任一节点;
所述验证节点从区块链中确定各区块是否包含所述待验证数据的指纹信息;所述区块链中的每个区块包括数据集合和区块头;所述数据集合中包括各已写入数据分别对应的指纹信息;所述区块头中包括所述区块的前一区块的区块头哈希值;
若所述区块链中存在所述待验证数据的指纹信息,则确认所述待验证数据验证通过。
可选的,所述区块还包括含有N个数字签名的签名集合;所述N个数字签名与所述N个指纹信息一一对应;
所述方法还包括:
在所述区块链中存在所述待验证数据的指纹信息时,从所述区块链中获取所述待验证数据的指纹信息对应的数字签名;
获取所述待验证数据的公钥信息;
根据所述公钥信息验证所述数字签名;
在所述数字签名验证通过时,确认所述待验证数据确权通过。
可选的,所述验证节点存有本地索引库;所述本地索引库中包括所述区块链各区块中已写入数据的指纹信息的索引信息;所述索引信息包括所述指纹信息在所述区块链中的区块高度和所述指纹信息在所在区块中的位置编号;
所述验证节点从所述区块链中确定各区块是否包含所述待验证数据的指纹信息,包括:
根据所述待验证数据的指纹信息查找所述本地索引库,获取所述待验证数据的指纹信息对应的索引信息;
从所述区块链中确定所述索引信息对应的指纹信息;
当所述待验证数据的指纹信息与所述索引信息对应的指纹信息一致时,确定所述区块链中存在所述待验证数据的指纹信息。
可选的,所述新区块的区块头中还包括各已写入数据分别对应的指纹信息的根哈希值;
在所述区块链中存在所述待验证数据的指纹信息时,还包括:
计算所述待验证数据的指纹信息所在数据集合的根哈希值;
在所述数据集合的根哈希值与所述区块头中的根哈希值一致时,确认所述待验证数据验证通过。
本发明实施例提供一种区块链节点,应用于包含M个节点的区块链***,M大于等于3,包括:
收发单元,用于获取N个待写入数据分别对应的N个指纹信息;N大于等于1;
处理单元,用于构造新区块,所述新区块包括数据集合和区块头;所述数据集合中包括所述N个指纹信息;所述区块头中包括本地区块链中前一区块的区块头哈希值;所述前一区块为所述本地区块链的最长链中最新加入的区块;
所述处理单元还用于通过共识算法,从所述M个节点产生的新区块中确定满足所述共识算法规则的共识区块加入所述本地区块链。
可选的,所述新区块还包括含有N个数字签名的签名集合;
所述N个数字签名与所述N个指纹信息一一对应。
可选的,所述处理单元还用于:
针对所述共识区块中的每个指纹信息,将所述指纹信息对应的索引信息保存在本地索引库中;所述索引信息包括所述指纹信息在所述本地区块链中的区块高度和所述指纹信息在所在区块中的位置编号。
可选的,所述新区块的区块头中还包括所述N个指纹信息的根哈希值。
可选的,所述N个指纹信息的根哈希值是通过默克尔merkle树算法获得的;
所述处理单元还用于:
对所述N个指纹信息进行分组;
根据第一哈希规则计算所述分组的中间哈希值;
根据第二哈希规则计算所述中间哈希值的哈希值作为所述分组的哈希值;
对所述分组的哈希值继续分组,并返回根据第一哈希规则计算所述分组的中间哈希值的步骤直至获取所述根哈希值。
可选的,所述收发单元还用于:
接收所述待写入数据的指纹信息;
所述处理单元还用于:将所述待写入数据的指纹信息存入待写入数据集,并向其它M-1个节点发送数据写入请求;所述数据写入请求中包括所述待写入数据的指纹信息;所述数据写入请求用于指示所述其它M-1个节点中任一个节点将所述待写入数据的指纹信息存入各自的待写入数据集;
所述处理单元还用于:在待写入数据集中待写入数据的指纹信息的数量达到预设数量或距离上一次构造新区块的时间间隔达到预设时间时,从待写入数据集中获取N个待写入数据分别对应的N个指纹信息。
可选的,所述处理单元还用于:
从待写入数据集中去除所述共识区块中包括的所述N个指纹信息。
本发明实施例提供一种区块链节点,应用于包含M个节点的区块链***中的任一节点,M大于等于3,包括:
收发单元,用于获取待验证数据的指纹信息;
处理单元,用于从区块链中确定各区块是否包含所述待验证数据的指纹信息;所述区块链中的每个区块包括数据集合和区块头;所述数据集合中包括各已写入数据分别对应的指纹信息;所述区块头中包括所述区块的前一区块的区块头哈希值;
若所述区块链中存在所述待验证数据的指纹信息,则确认所述待验证数据验证通过。
可选的,所述区块还包括含有N个数字签名的签名集合;所述N个数字签名与所述N个指纹信息一一对应;
所述处理单元还用于:
在所述区块链中存在所述待验证数据的指纹信息时,从所述区块链中获取所述待验证数据的指纹信息对应的数字签名;
获取所述待验证数据的公钥信息;
根据所述公钥信息验证所述数字签名;
在所述数字签名验证通过时,确认所述待验证数据确权通过。
可选的,所述节点还包括存储单元,所述存储单元存有本地索引库;所述本地索引库中包括所述区块链各区块中已写入数据的指纹信息的索引信息;所述索引信息包括所述指纹信息在所述区块链中的区块高度和所述指纹信息在所在区块中的位置编号;
所述处理单元具体用于:
根据所述待验证数据的指纹信息查找所述本地索引库,获取所述待验证数据的指纹信息对应的索引信息;
从所述区块链中确定所述索引信息对应的指纹信息;
当所述待验证数据的指纹信息与所述索引信息对应的指纹信息一致时,确定所述区块链中存在所述待验证数据的指纹信息。
可选的,所述新区块的区块头中还包括各已写入数据分别对应的指纹信息的根哈希值;
所述处理单元还用于:
计算所述待验证数据的指纹信息所在数据集合的根哈希值;
在所述数据集合的根哈希值与所述区块头中的根哈希值一致时,确认所述待验证数据验证通过。
本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使所述计算机执行上述任一项所述的区块链生成方法。
本发明实施例提供一种计算设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述任一项所述的区块链生成方法。
本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使所述计算机执行上述任一项所述的数据验证方法。
本发明实施例提供一种计算设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述任一项所述的数据验证方法。
本发明实施例提供一种区块链***,包含M个节点,M大于等于3,所述区块链***包含上述任一项所述的区块链节点。
可选的,所述***还包括背书节点;所述背书节点用于:
按设定规则从所述区块链中确定背书区块;
构造背书交易信息,所述背书交易信息的附加信息参数中包含所述背书区块的区块头哈希值;
将所述背书交易信息发送至背书区块链***。
综上所述,本发明实施例提供一种区块链生成方法、数据验证方法、节点及***,应用于包含M个节点的区块链***,M大于等于3,其中,区块链生成方法针对M个节点中的每一个节点,包括:获取N个待写入数据分别对应的N个指纹信息;N大于等于1;构造新区块,新区块包括数据集合和区块头;数据集合中包括N个指纹信息;区块头中包括该节点本地区块链中前一区块的区块头哈希值;前一区块为本地区块链的最长链中最新加入的区块;通过共识算法,从M个节点产生的新区块中确定满足共识算法规则的共识区块加入本地区块链。在采用本发明实施例所提供的区块链生成方法所获得的区块链中,各区块直接存储待写入数据的指纹信息,而不是交易信息,与现有技术相比,本发明实施例中存入一个待写入数据不再需要存入一条交易信息,节省了交易信息中非待写入数据的其它信息所占用的存储空间,从而降低了一个待写入数据的指纹信息所占存储空间,进而从整体上提高了存储空间的利用率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种可行的区块链***架构示意图;
图2为本发明实施例提供的一种区块链生成方法流程示意图;
图3为本发明实施例提供的一种可行的区块数据结构示意图;
图4为本发明实施例提供的一种两个区块对应同一个前一区块的区块链结构示意图;
图5为本发明实施例提供的一种可行的merkle树结构示意图;
图6为本发明实施例提供的一种数据验证方法流程示意图;
图7为本发明实施例提供的一种可行的区块数据结构示意图;
图8为本发明实施例提供的一种区块链节点结构示意图;
图9为本发明实施例提供的一种区块链节点结构示意图;
图10为本发明实施例提供的一种计算设备结构示意图;
图11为本发明实施例提供的一种计算设备结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
本发明实施例提供一种区块链***,包括M个节点,M大于等于3。其中,M个节点通过对等网络(Peer to Peer,P2P)动态组网,形成一个“去中心化”的***。图1为本发明实施例提供的一种可行的区块链***架构示意图,如图1所示,区块链***中包括节点0、节点1、节点2、节点3和节点4,这五个节点之间互为对等节点,通过P2P动态组网构成一个去中心化的***。图1中的直线表示各节点之间的数据传输关系,以节点2为例,其广播消息可由节点1和节点3接收。
在使用本发明实施例所提供的区块链***写入数据时,可将***的M个节点中的任一节点作为接收节点,接收节点接收待写入数据的指纹信息;接收节点将待写入数据的指纹信息存入接收节点的待写入数据集,并向其它M-1个节点发送数据写入请求;数据写入请求中包括待写入数据的指纹信息;数据写入请求用于指示其它M-1个节点中任一个节点将待写入数据的指纹信息存入各自的待写入数据集,即对于其它M-1个节点中的任一节点,在收到数据写入请求后,获取其中的待写入数据的指纹信息并存入各自的待写入数据集。
以图1所示的区块链***举例说明,节点2作为接收节点接收待写入数据的指纹信息;节点2将待写入数据的指纹信息存入其本地的待写入数据集,并向节点0、节点1和节点3发送数据写入请求;数据写入请求中包括待写入数据的指纹信息;节点0、节点1和节点3将数据写入请求中的待写入数据的指纹信息存入各自的待写入数据集,节点1或节点3继续转发该数据写入请求至节点4;节点4接收节点1和节点3中最先到达的数据写入请求,并将数据写入请求中的待写入数据的指纹信息存入节点4的待写入数据集中,经过上述过程,***中的每一个对等节点都收到了待写入数据的指纹信息。
应理解,本发明实施例所提供的区块链***中的M个节点为区块链***中的对等节点,在具体实施过程中,区块链***也可能存在一些非对等节点,如本发明实施例接下来会提到的背书节点便是一个非对等节点,这种包含了非对等节点的区块链***也适用于本发明实施例所提供的技术方案,也应包含于本发明实施例中。为了便于描述,本发明实施例在未作特别说明的情况下,以下所述节点皆为对等节点,之后不再赘述。
基于上述区块链***架构,本发明实施例提供一种区块链生成方法,如图2所示。图2为本发明实施例提供的一种区块链生成方法流程示意图,其针对区块链***的M个节点中的任一节点,包括以下步骤:
S201:获取N个待写入数据分别对应的N个指纹信息;N大于等于1。
S202:构造新区块,新区块包括数据集合和区块头;数据集合中包括N个指纹信息;区块头中包括根哈希值以及该节点的本地区块链中前一区块的区块头哈希值;前一区块为本地区块链的最长链中最新加入的区块。
S203:通过共识算法,从M个节点产生的新区块中确定满足共识算法规则的共识区块加入本地区块链。
在S201中,待写入数据可以是需要进行存证的数据,其具体形式并不作限定。每个待写入数据都拥有自己的指纹信息,一般为通过散列函数(hash)算法处理待写入数据后获得的哈希值。对于各对等节点具有各自待写入数据集的情况,可选的,在节点的待写入数据集中待写入数据的指纹信息的数量达到预设数量或距离上一次构造新区块的时间间隔达到预设时间时,执行S201。
在S202中,区块链***中的每一个对等节点都构造新区块,新区块的数据结构如图3所示,图3为本发明实施例提供的一种可行的区块数据结构示意图,表示的是区块中数据的逻辑结构。如图3所示,构造的新区块中包括数据集合和区块头,其中,数据集合中包括S201中获取的N个指纹信息:指纹1、指纹2、……、指纹N,区块头中包括前一区块的区块头哈希值,其中,前一区块为该节点的本地区块链的最长链中最新加入的区块,新区块中包含前一区块的区块头哈希值保证了区块链的链式结构。
在区块链***中,M个节点各自拥有本地区块链,区块链中每个区块通过哈希指针(前一区块的区块头哈希值)串在一起,形成链式结构。理论上讲,区块链***中M个节点应具有相同的本地区块链,但实际的区块链***中,由于各节点之间接收新区块广播的时间并不一致,不同节点的算力也有所不同,使得本地区块链中可能会存在多个区块对应同一个前一区块的情况,如图4所示,为本发明实施例提供的一种两个区块对应同一个前一区块的区块链结构示意图。图4中的箭头表示哈希指针,箭头从区块1指向区块2,表示的是区块2的区块头中包括区块1的区块头哈希值,其它以此类推。在图4所示的区块链中,区块4和区块8的区块头中都包括区块3的区块头哈希值,在节点构造新区块时,根据“最长链规则”选取最长链中最新加入的区块作为新区块的前一区块,即选择区块7作为该节点所构造的新区块的前一区块,新区块的区块头中包括区块7的区块头哈希值。
可选的,新区块中还包含时间戳,时间戳为生成该新区块的节点的当前***时间,可以为待写入数据添加时间存证的功能。可选的,新区块的区块头中还包括所述N个指纹信息的根哈希值。根哈希值可用于在数据验证时,验证区块的数据集合是否有被篡改。
在S203中,区块链中的M个节点都在进行新区块的构建,由于每个节点对N个指纹信息的选取以及排序都可能不同,因此所获得的根哈希值也有可能不同,为了保证***中区块链的一致,需通过共识算法从M个节点所产生的新区块中确定一个新区块作为共识区块并由产生该共识区块的节点将该共识区块广播至其它M-1个节点。共识算法的具体实现方式有多种,例如工作量证明(Proof of Work,PoW),又例如实用拜占庭容错共识算法(Practical Byzantine Fault Tolerance,PBFT)等等,本发明实施例对此不作限定。如图3所示的区块数据结构中,区块头还包括随机数,随机数被用于共识算法中对共识区块的确定,以PoW为例,M个节点中的每一个节点在构建好数据集合以及区块头中的其它部分后,开始尝试多个随机数,随机数的改变将直接导致新区块的区块头哈希值的变化,当任一区块的区块头哈希值率先满足“难度值”(如区块头哈希值前n个比特位为0)时,该节点将其构建的新区块将作为共识区块广播至区块链***中的其它节点。其它节点在接收到共识区块广播后,停止构建新区块,并将共识区块加入本地区块链。可选的,难度值可以是预先配置的某个固定值,也可以是周期性根据产生新区块的平均用时动态调整。可选的,从M个节点产生的新区块中确定共识区块之后,针对M个节点中的任一节点,从节点的待写入数据集中去除共识区块中包括的N个指纹信息,以防止已经被写入区块链的数据被重复写入区块链中。
可选的,针对M个节点中的任一节点,在通过共识算法,从M个节点产生的新区块中确定满足共识算法规则的共识区块加入本地区块链之后,还包括:针对共识区块中的每个指纹信息,将指纹信息对应的索引信息保存在本地索引库中;索引信息包括指纹信息在区块链中的区块高度和指纹信息在所在区块中的位置编号。以图3所述的区块结构为例,其区块高度为height,则其数据集合中的第二个指纹—指纹1的索引信息为height和2。区块链***中的每个节点都将区块中的数据的索引信息存入本地索引库,那么用户在进行数据验证时,只需提供待验证数据的指纹信息,方便用户使用。当然,针对M个节点中的任一节点,在通过共识算法,满足共识算法规则的共识区块加入本地区块链之后,还可以判断自身是否为共识区块中的任一指纹信息的接收节点,若是,则输出该指纹信息的索引信息给用户。用户在进行数据验证时可同时提供待验证数据的指纹信息和索引信息,能够加快数据验证的效率。
在本发明实施例所提供的区块结构中,区块头还包括N个指纹信息的根哈希值。N个指纹信息的根哈希值是通过默克尔merkle树算法获得的,具体的,在S201之后,还包括:对N个指纹信息进行分组;根据第一哈希规则计算分组的中间哈希值;根据第二哈希规则计算中间哈希值的哈希值作为分组的哈希值;对分组的哈希值继续分组,并返回根据第一哈希规则计算分组的中间哈希值的步骤,直至获取根哈希值。
请参考图5,为本发明实施例提供的一种可行的merkle树结构示意图,图5所示的merkle数中指纹信息包括a、b、c、d、e、f共六个,位于merkle树的层1(图中未示出)。进行根哈希值的计算时,对六个指纹信息两两分组并计算每个分组的哈希值,得到层2的哈希值h、i和g,继续对h、i和g分组并重复上述过程直至在层4中获得哈希值。在图3所示的merkle树中,层1还包含两个补位哈希值x,这是因为采用这种两两分组的merkle树算法需保证层1中指纹信息的数量为2的Q次方才能最后获得一个根哈希值,Q为正整数,在指纹信息数量不足2的Q次方时,需用补位哈希值x补充至2的Q次方个,如图5中补充了两个补位哈希值x后,层1便达到了2的3次方(8)个指纹信息。具体实施过程中,补位哈希值x可以是任意可知的哈希值,例如,x可以是N个指纹信息中的第N个指纹信息,也可以是第一个指纹信息,也可以是所有字节都为0的空信息等等,应理解,虽然补位哈希值x的实现方式可有多种,但对于同一条区块链中的各区块来说,补位哈希值x的具体实现方式最好是一致的。
可选的,为了提高哈希算法的安全性,本发明实施例在计算merkle树中每个分组的哈希值时,先根据第一哈希规则计算分组的中间哈希值;再根据第二哈希规则计算中间哈希值的哈希值作为分组的哈希值。以图5所示的merkle树为例,对指纹信息a和指纹信息b根据第一哈希规则获得中间哈希值h0,根据第二哈希规则计算中间哈希值h0的哈希值,得到指纹信息a和指纹信息b分组的哈希值h。
当然,这种哈希值运算方法也可以运用到本发明实施例其它计算哈希值的步骤,如对指纹信息、区块头哈希值等的计算,也应包含于本发明实施例中。以计算hello的指纹信息为例,第一哈希规则为sha-256,输出中间哈希值2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824,第二哈希规则为ripemd-160,继续对中间哈希值进行哈希运算,获得hello的指纹信息b6a9c8c230722b7c748331a8b450f05566dc7d0f。
采用本发明实施例所提供的哈希值计算方法,一方面可以提高哈希算法的安全性,防范单一算法的哈希碰撞攻击,另一方面,通过选择合适的第二哈希规则可以输出长度更短的哈希值。
而且,由于本发明实施例所提供的区块链生成方法所获得的区块链中,各区块直接存储待写入数据的指纹信息,与现有的比特币区块相比,本发明实施例无需对merkle数层1中的指纹信息再次哈希,减少了merkle树的层数,从而减少哈希计算次数。
在采用本发明实施例所提供的区块链生成方法所获得的区块链中,各区块直接存储待写入数据的指纹信息,而不是交易信息,与现有技术相比,本发明实施例中存入一个待写入数据不再需要存入一条交易信息,节省了交易信息中非待写入数据的其它信息所占用的存储空间,从而降低了一个待写入数据的指纹信息所占存储空间,进而从整体上提高了存储空间的利用率。具体来说,采用本发明实施例所提供的区块链生成方法,在采用SHA-256哈希算法的情况下,写入一个待写入数据仅需占用32个字节的存储空间,远远小于现有技术的至少约200个字节。相应的,1M大小的区块所占存储空间中能够容纳更多的数据。此外,与现有的依赖于数字货币区块链网络的数据写入技术,本发明实施例还可以通过调整区块链***的一些参数可以实现更大的区块链***业务容量,即单位时间内能够写入的待写入数据的数量,比如提高产生新区块的速度,提高新区块的大小、采用更短字节的哈希算法等等。而且,本发明实施例所提个的区块链生成方法,无需支付数字货币交易费用,每次写入待写入数据的成本几乎可以忽略不计。
通过上述实施例所提供的方法,能够将待写入数据写入区块链,实现对待写入数据的存证,并节省区块链***的存储空间。基于相同的技术构思,本发明实施例还提供一种数据验证方法,可以对上述实施例中写入区块链的数据进行数据验证。图6为本发明实施例提供的一种数据验证方法流程示意图,如图6所示,包括以下步骤:
S601:验证节点获取待验证数据的指纹信息,验证节点为M个节点中的任一节点。
S602:验证节点从区块链中确定各区块是否包含待验证数据的指纹信息;区块链中的每个区块包括数据集合和区块头;数据集合中包括各已写入数据分别对应的指纹信息;区块头中包括区块的前一区块的区块头哈希值。
S603:若区块链中存在待验证数据的指纹信息,则确认待验证数据验证通过。
其中,已写入数据为通过上述实施例写入区块链***的待写入数据,此处的区块链***与上述实施例中的区块链***可以为同一个区块链***。
在S601中,区块链***的M个节点中的任一节点都可以作为验证节点为用户提供数据验证服务。验证节点获取的待验证数据的指纹信息可以由用户直接提供,也可以根据用户提供的待验证数据计算获得。一种较佳的实现方式是用户保存待验证数据的指纹信息,并直接提供给验证节点,这是因为待验证数据往往较为复杂,由用户保存可能会出现误差。
在S602中,验证节点可以遍历区块链中各区块所包含的已写入数据所对应的指纹信息,当然,这种方式验证效率非常低下。一种较为高效的实现方式是验证节点通过索引信息查询区块链特定位置是否包含此待验证数据的指纹信息,索引信息可以由用户直接提供,也可以通过查询索引库获得。可选的,验证节点存有本地索引库;本地索引库中所述区块链各区块中已写入数据的指纹信息的索引信息;索引信息包括指纹信息在区块链中的区块高度和指纹信息在所在区块中的位置编号。索引库中的索引信息可以是在每次增加新区块后存入索引库中的,也可以是定期从一个或多个区块中批量读取后存入索引库中的。在S602和S603中,验证节点可以先判断是否有用户提供的索引信息。在用户提供了索引信息时,直接通过索引信息查询区块链。在用户没有提供索引信息时,根据待验证数据的指纹信息查找本地索引库,获取待验证数据的指纹信息对应的索引信息;从区块链中确定索引信息对应的指纹信息;当待验证数据的指纹信息与索引信息对应的指纹信息一致时,确定区块链中存在待验证数据的指纹信息。
举例说明,获取待验证数据的指纹信息H1,从区块链中确定索引信息(其中区块高度为height)对应的指纹信息H2,当H1和H2一致时,确定区块链中存在待验证数据的指纹信息,待验证数据验证通过。可选的,新区块的区块头中还包括各已写入数据分别对应的指纹信息的根哈希值;为了进一步提高验证的可信性,在区块链中存在待验证数据的指纹信息时,还包括:计算待验证数据的指纹信息所在数据集合的根哈希值;在数据集合的根哈希值与区块头中的根哈希值一致时,确认待验证数据验证通过。举例说明,进一步计算索引信息中区块高度为height的区块的数据集合中的N个指纹信息的根哈希值H3,当H3与该区块的区块头所包括的根哈希值一致时,确认该区块中的数据未被篡改,H2确实是该区块的数据集合中所包含的指纹信息。可选的,为了进一步提高验证的可信性,还可以继续计算区块高度为height的区块的区块头哈希值H4,并查询区块链中区块高度为height+1的区块,在区块高度为height+1的区块的区块头中前一个区块的哈希值与H4一致时,确认区块高度为height的区块确实为区块链中的区块,当然,在此基础上还可以继续验证区块高度为height+1的区块及其之后的区块,以提高数据验证的可信性。
通过上述实施例所提供的方法,能够实现对数据的存证,并节省区块链***的存储空间。本发明实施例还提供一种区块链生成方法和数据验证方法,可以在实现数据存证的同时,增加对待验证数据的确权功能。
本发明实施例提供的具有确权功能的区块链生成方法与上述区块链生成方法类似,区别在于,针对所述M个节点中的每一个节点,包括:
在S201中除了获取N个待写入数据分别对应的N个指纹信息之外,还要获取N个待写入数据分别对应的N个数字签名;其中,数字签名是待写入数据所有者利用私钥生成并由接收节点随待写入数据一起接收后,通过区块链***广播至区块链***的各个节点的。可选的,接收节点还可以接收用户输入的数字签名和与私钥对应的公钥信息,并用公钥验证数字签名是否与待写入数据的指纹信息一致,若一致,则通过区块链***将待写入数据的指纹信息和数字签名广播至区块链***的各个节点,采用这种事先验证的方法,可以保证数字签名与指纹信息之间存在着正确的对应关系,能够提高确权结果的可信性。
在S202中,区块链***的M个节点中的任一节点采用图7所示的区块数据结构构造新区块,图7为本发明实施例提供的一种可行的区块数据结构示意图,如图7所示,区块中还包括含有签名1、签名2、……、签名N共N个数字签名的签名集合;N个数字签名与数据集合中的N个指纹信息一一对应,具体来说,相互对应的一对数字签名和指纹信息是同一个待写入数据的数字签名和指纹信息。图7所示的区块中将指纹信息和数字签名分开存放,可以支持一些轻量级验证节点(如手机终端应用程序(Application,APP)),有选择性地从区块链下载相关的、不含签名的区块内容,而根据实际使用需求决定是否进行确权。
相对应的,对上述区块链生成方法生成的区块链中的数据进行验证时,与前述的数据验证方法类似,区别在于:
在S601中,验证节点除了获取待验证数据的指纹信息之外,还需要获取待验证数据的公钥信息。公钥信息可以包含于验证请求中,验证请求中包括待验证数据的指纹信息和公钥信息。公钥信息也可以由第三方保存,验证节点从第三方获取公钥信息。
在S603之后,还包括:在区块链中存在待验证数据的指纹信息时,从区块链中获取待验证数据的指纹信息对应的数字签名;获取待验证数据的公钥信息;根据公钥信息验证数字签名;在数字签名验证通过时,确认待验证数据确权通过。以待验证数据的指纹信息H1和索引信息对应的已写入数据的指纹信息H2为例,当H1与H2一致时,确认待验证数据验证通过。之后,继续从区块链中获取与H2对应的数字签名A2,用伴随待验证数据的指纹信息一同接收的公钥信息解密数字签名A2,当数字签名A2的解密结果为H1时,确认待验证数据确权通过。
在上述确权过程中,由验证节点执行确权过程。当然,验证节点也可以直接输出待验证数据的指纹信息所对应的签名信息,以供数据验证请求方自行验证等等,这些实现方式都应包含于本发明实施例中。
基于相同的技术构思,本发明实施例还提供一种区块链节点,该节点能够实现上述任一项所述的区块链生成方法。图8为本发明实施例提供的一种区块链节点结构示意图,如图8所示,节点800包括:收发单元801和处理单元802,其中:
收发单元801,用于获取N个待写入数据分别对应的N个指纹信息;N大于等于1;
处理单元802,用于构造新区块,所述新区块包括数据集合和区块头;所述数据集合中包括所述N个指纹信息;所述区块头中包括本地区块链中前一区块的区块头哈希值;所述前一区块为所述本地区块链的最长链中最新加入的区块;
所述处理单元802还用于通过共识算法,从所述M个节点产生的新区块中确定满足所述共识算法规则的共识区块加入所述本地区块链。
可选的,所述新区块还包括含有N个数字签名的签名集合;
所述N个数字签名与所述N个指纹信息一一对应。
可选的,所述处理单元802还用于:
针对所述共识区块中的每个指纹信息,将所述指纹信息对应的索引信息保存在本地索引库中;所述索引信息包括所述指纹信息在所述区块链中的区块高度和所述指纹信息在所在区块中的位置编号。
可选的,所述新区块的区块头中还包括所述N个指纹信息的根哈希值。
可选的,所述N个指纹信息的根哈希值是通过默克尔merkle树算法获得的;
所述处理单元802还用于:
对所述N个指纹信息进行分组;
根据第一哈希规则计算所述分组的中间哈希值;
根据第二哈希规则计算所述中间哈希值的哈希值作为所述分组的哈希值;
对所述分组的哈希值继续分组,并返回根据第一哈希规则计算所述分组的中间哈希值的步骤直至获取所述根哈希值。
可选的,所述收发单元801还用于:
针对任一个待写入数据,接收所述待写入数据的指纹信息;
所述处理单元802还用于:将所述待写入数据的指纹信息存入待写入数据集,并向其它M-1个节点发送数据写入请求;所述数据写入请求中包括所述待写入数据的指纹信息;所述数据写入请求用于指示所述其它M-1个节点中任一个节点将所述待写入数据的指纹信息存入各自的待写入数据集;
所述处理单元802还用于:在待写入数据集中待写入数据的指纹信息的数量达到预设数量或距离上一次构造新区块的时间间隔达到预设时间时,从待写入数据集中获取N个待写入数据分别对应的N个指纹信息。
可选的,所述处理单元802还用于:
从待写入数据集中去除所述共识区块中包括的所述N个指纹信息。
基于相同的技术构思,本发明实施例还提供一种区块链节点,该节点能够实现上述任一项所述的数据验证方法。图9为本发明实施例提供的一种区块链节点结构示意图,如图9所示,节点900包括:收发单元901和处理单元902,其中:
收发单元901,用于获取待验证数据的指纹信息;
处理单元902,用于从所述区块链中确定各区块是否包含所述待验证数据的指纹信息;所述区块链中的每个区块包括数据集合和区块头;所述数据集合中包括各已写入数据分别对应的指纹信息;所述区块头中包括所述各已写入数据的根哈希值以及所述区块的前一区块的区块头哈希值;
若所述区块链中存在所述待验证数据的指纹信息,则确认所述待验证数据验证通过。
可选的,所述区块还包括含有N个数字签名的签名集合;所述N个数字签名与所述N个指纹信息一一对应;
所述处理单元902还用于:
在所述区块链中存在所述待验证数据的指纹信息时,从所述区块链中获取所述待验证数据的指纹信息对应的数字签名;
获取所述待验证数据的公钥信息;
根据所述公钥信息验证所述数字签名;
在所述数字签名验证通过时,确认所述待验证数据确权通过。
可选的,所述节点还包括存储单元903,所述存储单元903存有本地索引库;所述本地索引库中包括所述区块链各区块中已写入数据的指纹信息的索引信息;所述索引信息包括所述指纹信息在所述区块链中的区块高度和所述指纹信息在所在区块中的位置编号;
所述处理单元902具体用于:
根据所述待验证数据的指纹信息查找所述本地索引库,获取所述待验证数据的指纹信息对应的索引信息;
从所述区块链中确定所述索引信息对应的指纹信息;
当所述待验证数据的指纹信息与所述索引信息对应的指纹信息一致时,确定所述区块链中存在所述待验证数据的指纹信息。
可选的,所述新区块的区块头中还包括各已写入数据分别对应的指纹信息的根哈希值;
所述处理单元902还用于:
计算所述待验证数据的指纹信息所在数据集合的根哈希值;
在所述数据集合的根哈希值与所述区块头中的根哈希值一致时,确认所述待验证数据验证通过。
基于相同的技术构思,本发明实施例还提供一种区块链***,该***包含上述任一项所述的区块链节点,能够实现上述任一项所述的区块链生成方法以及上述任一项所述的数据验证方法。
可选的,本发明实施例所提供的区块链***还包括背书节点,该背书节点有别于区块链***中的对等节点,其在区块链***中用于:按设定规则从任一节点的本地区块链中确定背书区块;构造背书交易信息,背书交易信息的附加信息参数中包含背书区块的区块头哈希值;将背书交易信息发送至背书区块链***。
具体实施过程中,设定规则可以按照区块链中各区块区块头中时间戳,每个一段时间间隔选取一个作为背书区块,也可以根据区块的数量,每隔一定数量的区块选取一个作为背书区块。
可选的,区块链中最新的前b个区块不可作为背书区块,b可根据实际的区块链***情况决定,一般节点越多的区块链***,b的取值便越大。这是因为对于过于复杂的区块链***,***中信息的发送会存在一定的时延问题,这便导致前b个区块有可能并不是真正被加入区块链的区块。以图1所示的区块链***为例,在S203中,节点0在接收到其它节点广播的新区块之前构造出了符合难度值要求的新区块,此时节点0默认自身构造的新区块为区块链的共识区块并广播至节点4,节点4接收节点0广播的新区块并存入本地的区块链中作为共识区块。然而,实际情况可能是节点2才是***中率先构造出符合难度值要求的新区块的节点,节点2所构造的新区块才是区块链的共识区块,但由于***过于复杂,在节点0构造出符合难度值要求的新区块时节点2的新区块广播仍未到达节点0,在节点4接收节点0的新区块广播时节点2的新区块广播也为到达节点4,才造成节点0和节点4本地区块链发生错误。将区块链中最新的前b个区块排除作为背书区块的可能,可以保证所选择的背书区块都是稳定的、可靠的区块链区块。
可选的,背书区块链***可以是比特币网络,也可以是以太坊网络等大型的数字货币区块链***,这种***因为节点数量众多,对其区块链进行修改是几乎不可能实现的事情。将区块链中的部分区块的区块头写入背书区块链***,可以提高数据验证的可信性。具体的,在使用者对本发明实施例所提供的区块链***的验证结果存在质疑时,可通过查询背书区块链***中存入的背书区块的区块头哈希值与区块链中该背书区块的区块头哈希值是否一致,若不一致,说明区块链发生错误,若一致,说明验证结果可信。应理解,即使区块链发生错误,也不代表本发明实施例所提供的区块链***的数据验证完全丧失了可信性,对于确认待验证数据存在的验证结果依旧是可信的,而对于确认待验证数据不存在的验证结果则可行性较低。
通过在区块链***中增加背书节点,可以避免由于区块链链条高度不足,容易被攻击的问题,进一步提高了数据验证的可信性。
基于相同的技术构思,本发明实施例还提供一种计算设备,该计算设备具体可以为桌面计算机、便携式计算机、智能手机、平板电脑、个人数字助理(Personal DigitalAssistant,PDA)等。如图10所示,为本发明实施例提供的一种计算设备结构示意图,该计算设备可以包括中央处理器1001(Center Processing Unit,CPU)、存储器1002、输入设备1003、输出设备1004等,输入设备1003可以包括键盘、鼠标、触摸屏等,输出设备1004可以包括显示设备,如液晶显示器(Liquid Crystal Display,LCD)、阴极射线管(Cathode RayTube,CRT)等。
存储器1002可以包括只读存储器(ROM)和随机存取存储器(RAM),并向处理器提供存储器中存储的程序指令和数据。在本发明实施例中,存储器可以用于存储本发明实施例所提供的区块链生成方法的程序,处理器通过调用存储器存储的程序指令,按照获得的程序指令执行上述任一项所述的区块链生成方法。
基于相同的技术构思,本发明实施例还提供一种计算机可读存储介质,用于存储为上述计算设备所用的计算机程序指令,其包含用于执行上述任一项所述的区块链生成方法的程序。
所述计算机存储介质可以是计算机能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器(例如软盘、硬盘、磁带、磁光盘(MO)等)、光学存储器(例如CD、DVD、BD、HVD等)、以及半导体存储器(例如ROM、EPROM、EEPROM、非易失性存储器(NAND FLASH)、固态硬盘(SSD))等。
基于相同的技术构思,本发明实施例还提供一种计算设备,该计算设备具体可以为桌面计算机、便携式计算机、智能手机、平板电脑、个人数字助理(Personal DigitalAssistant,PDA)等。如图11所示,为本发明实施例提供的一种计算设备结构示意图,该计算设备可以包括中央处理器1101(Center Processing Unit,CPU)、存储器1102、输入设备1103、输出设备1104等,输入设备1103可以包括键盘、鼠标、触摸屏等,输出设备1104可以包括显示设备,如液晶显示器(Liquid Crystal Display,LCD)、阴极射线管(Cathode RayTube,CRT)等。
存储器1102可以包括只读存储器(ROM)和随机存取存储器(RAM),并向处理器提供存储器中存储的程序指令和数据。在本发明实施例中,存储器可以用于存储本发明实施例所提供的数据验证方法的程序,处理器通过调用存储器存储的程序指令,按照获得的程序指令执行上述任一项所述的数据验证方法。
基于相同的技术构思,本发明实施例还提供一种计算机可读存储介质,用于存储为上述计算设备所用的计算机程序指令,其包含用于执行上述任一项所述的数据验证方法的程序。
所述计算机存储介质可以是计算机能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器(例如软盘、硬盘、磁带、磁光盘(MO)等)、光学存储器(例如CD、DVD、BD、HVD等)、以及半导体存储器(例如ROM、EPROM、EEPROM、非易失性存储器(NAND FLASH)、固态硬盘(SSD))等。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (29)
1.一种区块链生成方法,应用于包含M个节点的区块链***,M大于等于3,其特征在于,针对所述M个节点中的每一个节点,包括:
获取N个待写入数据分别对应的N个指纹信息;N大于等于1;
构造新区块,所述新区块包括数据集合和区块头;所述数据集合中包括所述N个指纹信息;所述区块头中包括所述节点的本地区块链中前一区块的区块头哈希值;所述前一区块为所述本地区块链的最长链中最新加入的区块;
通过共识算法,从所述M个节点产生的新区块中确定满足所述共识算法规则的共识区块加入所述本地区块链。
2.如权利要求1所述的方法,其特征在于,所述新区块还包括含有N个数字签名的签名集合;
所述N个数字签名与所述N个指纹信息一一对应。
3.如权利要求1所述的方法,其特征在于,通过共识算法,从所述M个节点的新区块中确定满足所述共识算法规则的共识区块加入所述本地区块链之后,还包括:
针对所述共识区块中的每个指纹信息,将所述指纹信息对应的索引信息保存在本地索引库中;所述索引信息包括所述指纹信息在所述本地区块链中的区块高度和所述指纹信息在所在区块中的位置编号。
4.如权利要求1所述的方法,其特征在于,所述新区块的区块头中还包括所述N个指纹信息的根哈希值。
5.如权利要求4所述的方法,其特征在于,所述N个指纹信息的根哈希值是通过默克尔merkle树算法获得的;
所述方法还包括:
对所述N个指纹信息进行分组;
根据第一哈希规则计算所述分组的中间哈希值;
根据第二哈希规则计算所述中间哈希值的哈希值作为所述分组的哈希值;
对所述分组的哈希值继续分组,并返回根据第一哈希规则计算所述分组的中间哈希值的步骤,直至获取所述根哈希值。
6.如权利要求1所述的方法,其特征在于,针对所述M个节点中的每一个节点,获取N个待写入数据分别对应的N个指纹信息之前,还包括:
针对任一个待写入数据,接收节点接收所述待写入数据的指纹信息,所述接收节点为所述M个节点中的任一节点;
所述接收节点将所述待写入数据的指纹信息存入所述接收节点的待写入数据集,并向其它M-1个节点发送数据写入请求;所述数据写入请求中包括所述待写入数据的指纹信息;所述数据写入请求用于指示所述其它M-1个节点中任一个节点将所述待写入数据的指纹信息存入各自的待写入数据集;
针对所述M个节点中的任一节点,在所述节点的待写入数据集中待写入数据的指纹信息的数量达到预设数量或距离上一次构造新区块的时间间隔达到预设时间时,从所述节点的待写入数据集中获取N个待写入数据分别对应的N个指纹信息。
7.如权利要求6所述的方法,其特征在于,通过共识算法,从所述M个节点产生的新区块中确定满足所述共识算法规则的共识区块加入所述本地区块链之后,还包括:
针对所述M个节点中的任一节点,从所述节点的待写入数据集中去除所述共识区块中包括的所述N个指纹信息。
8.如权利要求1至7任一项所述的方法,其特征在于,所述区块链***中还存在至少一个背书节点;
所述方法还包括:
所述背书节点按设定规则从所述区块链中确定背书区块;
构造背书交易信息,所述背书交易信息的附加信息参数中包含所述背书区块的区块头哈希值;
将所述背书交易信息发送至背书区块链***。
9.一种数据验证方法,应用于包含M个节点的区块链***,M大于等于3,其特征在于,包括:
验证节点获取待验证数据的指纹信息,所述验证节点为所述M个节点中的任一节点;
所述验证节点从区块链中确定各区块是否包含所述待验证数据的指纹信息;所述区块链中的每个区块包括数据集合和区块头;所述数据集合中包括各已写入数据分别对应的指纹信息;所述区块头中包括所述区块的前一区块的区块头哈希值;
若所述区块链中存在所述待验证数据的指纹信息,则确认所述待验证数据验证通过。
10.如权利要求9所述的方法,其特征在于,所述区块还包括含有N个数字签名的签名集合;所述N个数字签名与所述N个指纹信息一一对应;
所述方法还包括:
在所述区块链中存在所述待验证数据的指纹信息时,从所述区块链中获取所述待验证数据的指纹信息对应的数字签名;
获取所述待验证数据的公钥信息;
根据所述公钥信息验证所述数字签名;
在所述数字签名验证通过时,确认所述待验证数据确权通过。
11.如权利要求9所述的方法,其特征在于,所述验证节点存有本地索引库;所述本地索引库中包括所述区块链各区块中已写入数据的指纹信息的索引信息;所述索引信息包括所述指纹信息在所述区块链中的区块高度和所述指纹信息在所在区块中的位置编号;
所述验证节点从所述区块链中确定各区块是否包含所述待验证数据的指纹信息,包括:
根据所述待验证数据的指纹信息查找所述本地索引库,获取所述待验证数据的指纹信息对应的索引信息;
从所述区块链中确定所述索引信息对应的指纹信息;
当所述待验证数据的指纹信息与所述索引信息对应的指纹信息一致时,确定所述区块链中存在所述待验证数据的指纹信息。
12.如权利要求9所述的方法,其特征在于,所述区块头中还包括各已写入数据分别对应的指纹信息的根哈希值;
在所述区块链中存在所述待验证数据的指纹信息时,还包括:
计算所述待验证数据的指纹信息所在数据集合的根哈希值;
在所述数据集合的根哈希值与所述区块头中的根哈希值一致时,确认所述待验证数据验证通过。
13.一种区块链节点,应用于包含M个节点的区块链***,M大于等于3,其特征在于,包括:
收发单元,用于获取N个待写入数据分别对应的N个指纹信息;N大于等于1;
处理单元,用于构造新区块,所述新区块包括数据集合和区块头;所述数据集合中包括所述N个指纹信息;所述区块头中包括本地区块链中前一区块的区块头哈希值;所述前一区块为所述本地区块链的最长链中最新加入的区块;
所述处理单元,还用于通过共识算法,从所述M个节点产生的新区块中确定满足所述共识算法规则的共识区块加入所述本地区块链。
14.如权利要求13所述的节点,其特征在于,所述新区块还包括含有N个数字签名的签名集合;
所述N个数字签名与所述N个指纹信息一一对应。
15.如权利要求13所述的节点,其特征在于,所述处理单元还用于:
针对所述共识区块中的每个指纹信息,将所述指纹信息对应的索引信息保存在本地索引库中;所述索引信息包括所述指纹信息在所述本地区块链中的区块高度和所述指纹信息在所在区块中的位置编号。
16.如权利要求13所述的节点,其特征在于,所述新区块的区块头中还包括所述N个指纹信息的根哈希值。
17.如权利要求16所述的节点,其特征在于,所述N个指纹信息的根哈希值是通过默克尔merkle树算法获得的;
所述处理单元还用于:
对所述N个指纹信息进行分组;
根据第一哈希规则计算所述分组的中间哈希值;
根据第二哈希规则计算所述中间哈希值的哈希值作为所述分组的哈希值;
对所述分组的哈希值继续分组,并返回根据第一哈希规则计算所述分组的中间哈希值的步骤直至获取所述根哈希值。
18.如权利要求13所述的节点,其特征在于,
所述收发单元还用于:
接收所述待写入数据的指纹信息;
所述处理单元还用于:
将所述待写入数据的指纹信息存入待写入数据集,并向其它M-1个节点发送数据写入请求;所述数据写入请求中包括所述待写入数据的指纹信息;所述数据写入请求用于指示所述其它M-1个节点中任一个节点将所述待写入数据的指纹信息存入各自的待写入数据集;
所述处理单元还用于:
在所述待写入数据集中待写入数据的指纹信息的数量达到预设数量或距离上一次构造新区块的时间间隔达到预设时间时,从所述待写入数据集中获取N个待写入数据分别对应的N个指纹信息。
19.如权利要求18所述的节点,其特征在于,所述处理单元还用于:
从所述待写入数据集中去除所述共识区块中包括的所述N个指纹信息。
20.一种区块链节点,应用于包含M个节点的区块链***中的任一节点,M大于等于3,其特征在于,包括:
收发单元,用于获取待验证数据的指纹信息;
处理单元,用于从区块链中确定各区块是否包含所述待验证数据的指纹信息;所述区块链中的每个区块包括数据集合和区块头;所述数据集合中包括各已写入数据分别对应的指纹信息;所述区块头中包括所述区块的前一区块的区块头哈希值;
若所述区块链中存在所述待验证数据的指纹信息,则确认所述待验证数据验证通过。
21.如权利要求20所述的节点,其特征在于,所述区块还包括含有N个数字签名的签名集合;所述N个数字签名与所述N个指纹信息一一对应;
所述处理单元还用于:
在所述区块链中存在所述待验证数据的指纹信息时,从所述区块链中获取所述待验证数据的指纹信息对应的数字签名;
获取所述待验证数据的公钥信息;
根据所述公钥信息验证所述数字签名;
在所述数字签名验证通过时,确认所述待验证数据确权通过。
22.如权利要求20所述的节点,其特征在于,所述节点还包括存储单元,所述存储单元存有本地索引库;所述本地索引库中包括所述区块链各区块中已写入数据的指纹信息的索引信息;所述索引信息包括所述指纹信息在所述区块链中的区块高度和所述指纹信息在所在区块中的位置编号;
所述处理单元具体用于:
根据所述待验证数据的指纹信息查找所述本地索引库,获取所述待验证数据的指纹信息对应的索引信息;
从所述区块链中确定所述索引信息对应的指纹信息;
当所述待验证数据的指纹信息与所述索引信息对应的指纹信息一致时,确定所述区块链中存在所述待验证数据的指纹信息。
23.如权利要求20所述的节点,其特征在于,所述区块头中还包括各已写入数据分别对应的指纹信息的根哈希值;
所述处理单元还用于:
计算所述待验证数据的指纹信息所在数据集合的根哈希值;
在所述数据集合的根哈希值与所述区块头中的根哈希值一致时,确认所述待验证数据验证通过。
24.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使所述计算机执行权利要求1至8任一项所述的区块链生成方法。
25.一种计算设备,其特征在于,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行如权利要求1至8任一项所述的区块链生成方法。
26.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使所述计算机执行权利要求9至12任一项所述的数据验证方法。
27.一种计算设备,其特征在于,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行如权利要求9至12任一项所述的数据验证方法。
28.一种区块链***,包含M个节点,M大于等于3,其特征在于,包含如权利要求13至19任一项所述的区块链节点以及如权利要求20至23任一项所述的区块链节点。
29.如权利要求28所述的***,其特征在于,所述***还包括背书节点;所述背书节点用于:
按设定规则从所述区块链中确定背书区块;
构造背书交易信息,所述背书交易信息的附加信息参数中包含所述背书区块的区块头哈希值;
将所述背书交易信息发送至背书区块链***。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710841223.4A CN107807951B (zh) | 2017-09-18 | 2017-09-18 | 一种区块链生成方法、数据验证方法、节点及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710841223.4A CN107807951B (zh) | 2017-09-18 | 2017-09-18 | 一种区块链生成方法、数据验证方法、节点及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107807951A CN107807951A (zh) | 2018-03-16 |
CN107807951B true CN107807951B (zh) | 2020-10-13 |
Family
ID=61592439
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710841223.4A Active CN107807951B (zh) | 2017-09-18 | 2017-09-18 | 一种区块链生成方法、数据验证方法、节点及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107807951B (zh) |
Families Citing this family (66)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110119947B (zh) * | 2018-02-07 | 2021-08-10 | 上海策赢网络科技有限公司 | 共享工作量证明算力生成共生区块链的方法和设备 |
CN108933667B (zh) * | 2018-05-03 | 2021-08-10 | 深圳市京兰健康医疗大数据有限公司 | 一种基于区块链的公钥证书的管理方法及管理*** |
CN108629040A (zh) * | 2018-05-11 | 2018-10-09 | 北京奇虎科技有限公司 | 数据持有证明方法、装置及*** |
CN108830712A (zh) * | 2018-05-17 | 2018-11-16 | 易链科技(深圳)有限公司 | 区块生成的方法、装置、设备和介质 |
CN108734453B (zh) * | 2018-05-21 | 2023-04-14 | 腾讯科技(深圳)有限公司 | 区块链数据处理方法、装置、计算机设备和存储介质 |
CN109033886A (zh) * | 2018-06-20 | 2018-12-18 | 北京欧链科技有限公司 | 一种区块链勘误方法及装置、存储介质、电子设备 |
CN108920966A (zh) * | 2018-06-25 | 2018-11-30 | 北京奇虎科技有限公司 | 一种区块链存证、取证方法及装置 |
CN109033214A (zh) * | 2018-06-28 | 2018-12-18 | 威马智慧出行科技(上海)有限公司 | 共享汽车数据的数据管理***及方法 |
CN108876378B (zh) * | 2018-07-11 | 2022-04-19 | 北京国泰网信科技有限公司 | 公有链数据加密备份方法 |
CN109067849B (zh) * | 2018-07-11 | 2021-11-16 | 西康软件股份有限公司 | 基于区块的数据同步方法 |
CN108595720B (zh) * | 2018-07-12 | 2020-05-19 | 中国科学院深圳先进技术研究院 | 一种区块链时空数据查询方法、***及电子设备 |
CN109002732B (zh) * | 2018-07-17 | 2022-04-26 | 深圳前海微众银行股份有限公司 | 数据存证方法、设备和***以及数据取证方法 |
CN110740112B (zh) * | 2018-07-20 | 2023-05-12 | 北京京东尚科信息技术有限公司 | 认证方法、装置和计算机可读存储介质 |
CN109359222B (zh) * | 2018-08-06 | 2021-07-06 | 杭州复杂美科技有限公司 | 数据存储方法及***、设备和存储介质 |
CN109087101B (zh) * | 2018-08-07 | 2021-09-07 | 北京三快在线科技有限公司 | 交易校验方法、装置、存储介质及电子设备 |
CN108881491A (zh) * | 2018-08-07 | 2018-11-23 | 长沙拓扑陆川新材料科技有限公司 | 一种用于挖掘区块链中的块的方法及*** |
CN109165221A (zh) * | 2018-08-16 | 2019-01-08 | 北京京东尚科信息技术有限公司 | 区块链的数据存储方法、装置、区块链节点及存储介质 |
CN109299335A (zh) * | 2018-08-31 | 2019-02-01 | 阿里巴巴集团控股有限公司 | 数据存储的控制方法、装置、服务器及可读存储介质 |
CN109377217A (zh) * | 2018-09-03 | 2019-02-22 | 深圳壹账通智能科技有限公司 | 实体***的记账方法及终端设备 |
CN109145543B (zh) * | 2018-09-03 | 2020-12-04 | 湖北文理学院 | 一种身份认证方法 |
CN109191126B (zh) * | 2018-09-10 | 2021-02-02 | 南京荣链科技有限公司 | 一种基于区块链的现金跨行流转方法、终端及介质 |
CN108876384B (zh) * | 2018-09-19 | 2021-11-05 | 联动优势科技有限公司 | 一种交易数据的处理方法及装置 |
CN109213767B (zh) * | 2018-09-19 | 2020-07-21 | 挖财网络技术有限公司 | 一种适用于区块链的账户数据管理方法 |
CN109120714B (zh) * | 2018-09-21 | 2021-07-09 | 深圳市九洲电器有限公司 | 安防数据恢复方法及***,节点服务器 |
US11924360B2 (en) | 2018-10-08 | 2024-03-05 | Green Market Square Limited | Blockchain timestamp agreement |
CN111008402B (zh) * | 2018-10-08 | 2024-03-08 | 绿市广场有限公司 | 区块链时间戳协定 |
US10608829B1 (en) | 2018-10-08 | 2020-03-31 | International Business Machines Corporation | Blockchain timestamp agreement |
CN109586949B (zh) * | 2018-10-17 | 2021-04-09 | 北京新唐思创教育科技有限公司 | 区块生成方法及计算机存储介质 |
CN110046517B (zh) * | 2018-11-07 | 2020-05-05 | 阿里巴巴集团控股有限公司 | 一种对写入区块链的交易进行隐匿的方法及装置 |
CN109639430B (zh) * | 2018-11-09 | 2020-05-26 | 北京航空航天大学 | 安全高速轻量级的区块链***及方法 |
CN109409889B (zh) * | 2018-11-13 | 2021-11-12 | 杭州秘猿科技有限公司 | 一种区块链中的区块确定方法、装置及电子设备 |
CN110060152B (zh) * | 2018-11-27 | 2020-10-30 | 创新先进技术有限公司 | 一种基于多个区块链网络的数据读取方法及*** |
CN110020945B (zh) | 2018-11-27 | 2020-10-30 | 创新先进技术有限公司 | 一种基于多个区块链网络的数据读取方法及*** |
CN110060153B (zh) * | 2018-11-27 | 2020-11-17 | 创新先进技术有限公司 | 一种基于多个区块链网络的数据存证方法及*** |
CN110020854B (zh) * | 2018-11-27 | 2020-11-17 | 创新先进技术有限公司 | 一种基于多个区块链网络的数据存证方法及*** |
CN109903027A (zh) | 2018-12-14 | 2019-06-18 | 阿里巴巴集团控股有限公司 | 基于区块链的事件处理方法及装置、电子设备 |
CN109903026A (zh) | 2018-12-14 | 2019-06-18 | 阿里巴巴集团控股有限公司 | 基于区块链的事件处理方法及装置、电子设备 |
CN109819016B (zh) * | 2018-12-17 | 2022-11-04 | 维沃移动通信有限公司 | 基于区块链的信息发布方法、信息接收方法和移动终端 |
CN109684333B (zh) * | 2018-12-24 | 2021-02-09 | 杭州复杂美科技有限公司 | 一种数据存储及裁剪方法、设备和存储介质 |
CN110868286B (zh) * | 2018-12-29 | 2023-05-12 | 北京版全家科技发展有限公司 | 一种基于区块链智能合约生成随机数的方法 |
CN109740317A (zh) * | 2018-12-29 | 2019-05-10 | 北京奇虎科技有限公司 | 一种基于区块链的数字指纹存证方法及装置 |
CN109918874B (zh) * | 2019-03-14 | 2022-09-02 | 度小满科技(北京)有限公司 | 一种实物信息存储方法及装置、实物信息查找方法及装置 |
CN109949035B (zh) * | 2019-03-15 | 2022-03-22 | 智链万源(北京)数字科技有限公司 | 区块链数据隐私控制方法、装置及*** |
CN110209727B (zh) * | 2019-04-04 | 2020-08-11 | 特斯联(北京)科技有限公司 | 一种数据存储方法、终端设备及介质 |
CN110113388B (zh) * | 2019-04-17 | 2020-01-14 | 四川大学 | 一种基于改进型聚类算法的区块链***共识的方法和装置 |
US10990705B2 (en) | 2019-04-18 | 2021-04-27 | Advanced New Technologies Co., Ltd. | Index creation for data records |
WO2020211569A1 (zh) * | 2019-04-18 | 2020-10-22 | 创新先进技术有限公司 | 一种数据记录的索引创建方法 |
CN110162526B (zh) * | 2019-04-18 | 2023-02-24 | 创新先进技术有限公司 | 一种块链式账本中数据记录的查询方法、装置及设备 |
CN110162662B (zh) * | 2019-04-18 | 2023-02-28 | 创新先进技术有限公司 | 一种块链式账本中数据记录的验证方法、装置及设备 |
CN112019586B (zh) * | 2019-05-29 | 2023-04-07 | 国际商业机器公司 | 用于区块链的验证的方法和*** |
CN110225044B (zh) * | 2019-06-17 | 2020-11-27 | 北京瑞策科技有限公司 | 在区块链上的验证方法及装置 |
CN110471928B (zh) * | 2019-07-08 | 2022-06-21 | 上海数据交易中心有限公司 | 数据流通*** |
CN110544167B (zh) * | 2019-07-25 | 2022-03-01 | 晋商博创(北京)科技有限公司 | 基于cpk的联盟链的数据处理方法、服务器及存储介质 |
CN110493148B (zh) * | 2019-08-12 | 2022-04-01 | 深圳前海微众银行股份有限公司 | 一种区块处理、区块共识和区块同步方法及装置 |
CN110598477A (zh) * | 2019-09-19 | 2019-12-20 | 腾讯科技(深圳)有限公司 | 基于区块链的信息处理方法、装置、存储介质和设备 |
CN110674140B (zh) * | 2019-09-29 | 2022-04-15 | 腾讯科技(深圳)有限公司 | 基于区块链的内容处理方法、装置、设备及存储介质 |
CN110750541B (zh) * | 2019-10-18 | 2023-05-02 | 天津理工大学 | 一种基于区块链的数据存储索引***及方法 |
CN110989934B (zh) * | 2019-12-05 | 2023-08-25 | 达闼机器人股份有限公司 | 区块链节点数据存储方法、区块链***及区块链节点 |
CN112131304B (zh) * | 2020-02-10 | 2021-05-04 | 北京天德科技有限公司 | 一种基于区块链技术的新型计算及存储架构 |
CN111314374A (zh) * | 2020-03-11 | 2020-06-19 | 上海交通大学 | 快速验证的区块链结构及其生成***、验证方法 |
CN111831997B (zh) * | 2020-06-18 | 2021-07-27 | 华东师范大学 | 一种客户端与中心化数据库之间建立可信关系的方法 |
CN111723159A (zh) * | 2020-08-21 | 2020-09-29 | 支付宝(杭州)信息技术有限公司 | 一种基于区块链的数据验证方法和装置 |
CN111833062B (zh) * | 2020-09-21 | 2020-12-01 | 江苏傲为控股有限公司 | 数字资产数据包的可信性验证*** |
CN112380149B (zh) * | 2021-01-18 | 2021-04-06 | 腾讯科技(深圳)有限公司 | 基于节点内存的数据处理方法、装置、设备以及介质 |
CN113282966A (zh) * | 2021-06-07 | 2021-08-20 | 中国电子科技集团公司第三十研究所 | 一种基于区块链的数据确权方法 |
CN113411614B (zh) * | 2021-06-21 | 2022-02-18 | 环球数科集团有限公司 | 一种基于区块链技术的视频保护***及计算机存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105975868A (zh) * | 2016-04-29 | 2016-09-28 | 杭州云象网络技术有限公司 | 一种基于区块链的证据保全方法及装置 |
CN106503589A (zh) * | 2016-10-26 | 2017-03-15 | 北京瑞卓喜投科技发展有限公司 | 区块链交易信息正确性的校验方法、装置及*** |
CN106548091A (zh) * | 2016-10-14 | 2017-03-29 | 北京爱接力科技发展有限公司 | 一种数据存证、验证的方法及装置 |
-
2017
- 2017-09-18 CN CN201710841223.4A patent/CN107807951B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105975868A (zh) * | 2016-04-29 | 2016-09-28 | 杭州云象网络技术有限公司 | 一种基于区块链的证据保全方法及装置 |
CN106548091A (zh) * | 2016-10-14 | 2017-03-29 | 北京爱接力科技发展有限公司 | 一种数据存证、验证的方法及装置 |
CN106503589A (zh) * | 2016-10-26 | 2017-03-15 | 北京瑞卓喜投科技发展有限公司 | 区块链交易信息正确性的校验方法、装置及*** |
Non-Patent Citations (1)
Title |
---|
"比特币背后的密码学原理";怒马2048;《简书-https://www.jianshu.com/p/225ff9439132》;20151222;博客第9-10页 * |
Also Published As
Publication number | Publication date |
---|---|
CN107807951A (zh) | 2018-03-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107807951B (zh) | 一种区块链生成方法、数据验证方法、节点及*** | |
CN107657438B (zh) | 一种区块链生成方法、数据验证方法、节点及*** | |
CN110869967B (zh) | 用于并行处理区块链交易的***和方法 | |
CN111448781B (zh) | 一种计算机实现的用于通信共享的区块链数据的方法 | |
US10581613B2 (en) | Cryptographically verifiable data structure having multi-hop forward and backwards links and associated systems and methods | |
EP3669281B1 (en) | Shared blockchain data storage | |
US11228439B2 (en) | Scale out blockchain with asynchronized consensus zones | |
CN111047324B (zh) | 用于更新区块链节点处的公钥集合的方法及装置 | |
US11949789B2 (en) | Blockchain-enabled computing | |
CN111143378B (zh) | 处理数据的方法及实现该方法的装置 | |
US9444619B2 (en) | Generation of randomized messages for cryptographic hash functions | |
EP3794770B1 (en) | Shared blockchain data storage based on error correction code | |
CN111656386B (zh) | 管理账本***中的交易请求 | |
CN110781140B (zh) | 区块链中数据签名的方法、装置、计算机设备及存储介质 | |
CN112163854B (zh) | 一种层级化基于区块链公钥可搜索加密方法及*** | |
WO2022183998A1 (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN111630545B (zh) | 管理账本***中的交易请求 | |
CN111314066B (zh) | 基于区块链的数据转移方法、终端及计算机可读存储介质 | |
WO2023072965A1 (en) | Methods and systems for distributed blockchain functionalities | |
KR20220010534A (ko) | 작업 증명 블록체인 네트워크 상의 비병렬식 채굴용 시스템 및 방법 | |
CN110620776A (zh) | 一种数据转移信息传输方法及其装置 | |
Zhou et al. | Integrity preserving multi-keyword searchable encryption for cloud computing | |
CN111630549B (zh) | 管理账本***中的交易请求 | |
Wang et al. | A lightweight data integrity verification with data dynamics for mobile edge computing | |
CN116668135A (zh) | 一种移动边缘设备参与的区块链共识方法、***与装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |