CN115004625A - 用于区块链分类账的索引结构 - Google Patents
用于区块链分类账的索引结构 Download PDFInfo
- Publication number
- CN115004625A CN115004625A CN202180010632.4A CN202180010632A CN115004625A CN 115004625 A CN115004625 A CN 115004625A CN 202180010632 A CN202180010632 A CN 202180010632A CN 115004625 A CN115004625 A CN 115004625A
- Authority
- CN
- China
- Prior art keywords
- blockchain
- index structure
- keys
- ledger
- transaction
- 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.)
- Pending
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2379—Updates performed during online database operations; commit processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- 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/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
-
- 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/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
存储包括来自区块链分类账的键的索引结构,其中,键被存储为索引结构中的节点,接收对存储在区块链分类账上的数据的区块链请求,从索引结构中的节点读取包括在区块链请求中的非关键查询的键的集合,以及生成并存储区块链请求的读取集,所述读取集不包括非关键查询的键的集合的值。
Description
技术领域
本申请一般涉及经由区块链存储数据,并且更具体地,涉及存储来自区块链分类账的键值并且可以针对非关键查询被访问以减少幻象数据(phantom data)项的索引结构。
背景技术
集中式数据库在一个位置处的单个数据库(例如,数据库服务器)中存储和维护数据。该位置通常是中央计算机,例如,台式中央处理器(CPU)、服务器CPU或大型计算机。存储在集中式数据库中的信息通常可以从多个不同的点访问。多个用户或客户端工作站可以在集中式数据库上同时工作,例如,基于客户端/服务器配置。集中式数据库因为它的单个位置而易于管理、维护和控制,特别是出于安全目的。在集中式数据库中,数据冗余被最小化,因为所有数据的单个存储位置也意味着给定的数据集只有一个主记录。
同时,区块链系统存储关于不可变分类账的数据,通过非信任参与者提供对不可变分类账的分布式和分散式访问,建立对非信任参与者之间的协定的共识要求,使得没有一个实体可以在没有来自其他实体的协定的情况下改变不可变分类账,调用智能合同等。区块链由同意将块(其中存储有数据)添加到不可变分类账的参与者的网络形成。在被添加之前,该区块被链接到不可变分类账上的先前块,从而形成链。区块链的这种不可变且不可破坏的性质使得其免受伪造的信息和黑客的侵害。分散的性质还给予它独特的无信任质量,因为各方在他们可以安全交易之前不需要建立信任。通过区块链,出现了用于数据存储、通信和安全的新的和改进的机会。
发明内容
一个示例实施例提供了一种装置,包括:存储器,被配置为存储索引结构,所述索引结构包括来自区块链分类账的键的索引,其中所述键被存储为所述索引结构中的节点;以及处理器,被配置为以下中的一个或多个:接收对存储在所述区块链分类账上的数据的区块链请求,从所述索引结构中的所述节点读取包括在所述区块链请求中的非关键查询的键的集合,以及生成并存储所述区块链请求的读取集,所述读取集不包括所述非关键查询的所述键的集合的值的。
优选地,本发明提供了一种装置,其中所述索引结构包括二叉树,在二叉树中,所述键以分层方式被布置为节点。
优选地,本发明提供了一种装置,其中所述处理器还被配置为基于被添加到所述区块链分类账的键值来构建所述索引结构。
优选地,本发明提供一种装置,其中所述处理器被配置为经由next函数从所述索引结构中的所述节点逐个读取所述键的集合。
优选地,本发明提供了一种装置,其中所述处理器还被配置为当所述区块链请求的查询不影响所述区块链请求的有效性时,将所述查询标识为所述非关键查询。
优选地,本发明提供了一种装置,其中所述处理器还被配置为基于所述区块链请求的先前读取集来验证所述区块链请求,所述先前读取集不包括从所述索引结构读取的所述密钥集合的值。
优选地,本发明提供了一种装置,其中所述索引结构在区块链对等体节点的链码的逻辑内实现。
优选地,本发明提供了一种装置,其中所述索引结构中的所述键对应于存储在所述区块链分类账的区块链上的唯一值。
另一示例实施例提供了一种方法,包括以下一个或多个:存储索引结构,所述索引结构包括来自区块链分类账的键的索引,其中所述键被存储为所述索引结构中的节点;接收对存储在所述区块链分类账上的数据的区块链请求;从所述索引结构中的节点读取包括在所述区块链请求中的非关键查询的键的集合;以及生成并存储所述区块链请求的读取集,所述读取集不包括非关键查询的键的集合的值的。
优选地,本发明提供了一种方法,其中所述索引结构包括二叉树,在所述二叉树中,所述键以分层方式被布置为节点。
优选地,本发明提供了一种方法,还包括基于被添加到所述区块链分类账的键值来构建所述索引结构。
优选地,本发明提供一种方法,其中所述读取包括经由next函数从所述索引结构中的所述节点逐个读取所述键的集合。
优选地,本发明提供了一种方法,还包括当所述区块链请求的查询不影响所述区块链请求的有效性时,将所述查询标识为所述非关键查询。
优选地,本发明提供了一种方法,所述方法还包括基于不包括从所述索引结构读取的所述键的集合的值的所述区块链请求的先前读取集来验证所述区块链请求。
优选地,本发明提供了一种方法,其中所述索引结构在区块链对等体节点的链码的逻辑内实现。
优选地,本发明提供了一种方法,其中所述索引结构中的所述键对应于存储在所述区块链分类账的区块链上的唯一值。
从另一方面看,本发明提供了一种包括指令的非暂时性计算机可读介质,所述指令在由处理器读取时使所述处理器执行方法,所述方法包括:存储索引结构,所述索引结构包括来自区块链分类账的键的索引,其中所述键被存储为所述索引结构中的节点;接收对存储在所述区块链分类账上的数据的区块链请求;从所述索引结构中的节点读取包括在所述区块链请求中的非关键查询的键的集合;以及生成并存储所述区块链请求的读取集,所述读取集不包括所述非关键查询的所述键的集合的值。
优选地,本发明提供了一种非暂时性计算机可读介质,其中所述索引结构包括二叉树,在所述二叉树中,所述键以分层方式被布置为节点。
优选地,本发明提供了一种非暂时性计算机可读介质,其中所述方法还包括基于被添加到所述区块链分类账的键值来构建所述索引结构。
优选地,本发明提供了一种非暂时性计算机可读介质,其中所述读取包括经由next函数从所述索引结构中的所述节点逐个读取所述键的集合。
附图说明
图1A是示出了根据示例实施例的实现二分索引结构的区块链网络的图。
图1B是示出根据示例实施例的图1A的二分索引结构的示例的图。
图2A是示出根据示例实施例的示例区块链架构配置的图。
图2B是示出根据示例实施例的节点之间的区块链交易流的图。
图3A是示出根据示例实施例的许可的网络的图。
图3B是示出根据示例实施例的另一许可的网络的图。
图3C是示出根据示例实施例的无许可的网络的图。
图4A是示出根据示例实施例的经由范围查询来查询区块链分类账的过程的图。
图4B是示出根据示例性实施例的查询区块链分类账的顶部上的索引结构的过程的图。
图5是示出根据示例性实施例的访问区块链分类账的顶部上的索引结构的方法的图。
图6A是示出根据示例性实施例的被配置为执行在本文描述的一个或多个操作的示例系统的图。
图6B是示出根据示例性实施例的被配置为执行在本文描述的一个或多个操作的另一示例系统的图。
图6C是示出根据示例实施例的被配置为利用智能合同的另一示例系统的图。
图6D是示出根据示例实施例的被配置为利用区块链的又一示例系统的图。
图7A是示出根据示例实施例的新块被添加到分布式分类账的过程的图。
图7B是示出根据示例实施例的新数据块的数据内容的图。
图7C是示出根据示例实施例的数字内容的区块链的图。
图7D是示出根据示例实施例的可以表示区块链中的块的结构的块的图。
图8A是示出根据示例实施例的存储机器学习(人工智能)数据的示例区块链的图。
图8B是示出根据示例实施例的示例量子安全区块链的图。
图9是示出支持一个或多个示例实施例的示例系统的图。
具体实施方式
容易理解的是,如本文附图中一般描述和示出的,本发明的组件可以以多种不同的配置来布置和设计。因此,如附图所示,方法、装置、非暂时性计算机可读介质和系统中的至少一个的实施例的以下详细描述不旨在限制所要求保护的本申请的范围,而仅仅是所选实施例的代表。
在一个或多个实施例中,贯穿本说明书描述的当前特征、结构或特性可以以任何合适的方式组合或移除。例如,在整个说明书中,短语“示例实施例”、“一些实施例”或其他类似语言的使用是指结合实施例描述的特定特征、结构或特性可以包括在至少一个实施例中的事实。因此,在整个说明书中出现的短语“示例实施例”、“在一些实施例中”、“在其他实施例中”或其他类似的语言不一定都指同一组实施例,并且所描述的特征、结构或特性可以在一个或多个实施例中以任何合适的方式组合或移除。此外,在图中,元件之间的任何连接都可以允许单向和/或双向通信,即使所描绘的连接是单向或双向箭头。此外,附图中描绘的任何设备可以是不同的设备。例如,如果显示移动设备正在发送信息,也可以使用有线设备来发送信息。
此外,虽然术语“消息”可能已经在实施例的描述中使用,但是本申请可以应用于许多类型的网络和数据。此外,虽然在示例性实施例中可以描述特定类型的连接、消息和信令,但是本申请不限于特定类型的连接、消息和信令。
示例实施例提供了方法、系统、组件、非暂时性计算机可读介质、设备和/或网络,其实现逻辑上位于区块链分类账的顶部的索引结构,并且防止非关键幻象项在区块链交易期间发生。
在一个实施例中,本申请利用分散式数据库(decentralized database)(诸如区块链),该数据库是分布式存储系统,包括彼此通信的多个节点。分散式数据库包括类似于分布式分类账的仅附接不可变数据结构,能够维护相互不信任方之间的记录。不信任方在本文被称为对等体或对等体节点。每个对等体维护数据库记录的副本,并且在分布式对等体之间没有达成共识的情况下,没有单个对等体可以修改数据库记录。例如,对等体可以执行共识协议来验证(validate)区块链存储交易,将存储交易分组为块,并在块上构建散列链。为了保持一致性,此过程通过根据需要对存储交易进行排序来形成分类账。在各种实施例中,可以使用许可的和无许可的区块链。在公共的或无许可的区块链中,任何人都可以在没有特定身份的情况下参与。公共区块链经常涉及本地加密货币,并使用基于各种协议(诸如工作证明(Proof of Work,PoW))的共识。另一方面,许可的区块链数据库提供了确保共享共同目标但彼此不完全信任的一组实体(诸如交换资金、商品、信息等的企业)之间的互动。
本申请可以利用区块链操作任意可编程逻辑,适合分散式存储方案,称为“智能合同”或“链码”。在一些情况下,管理功能和参数可能存在专门的链码,称为系统链码。本申请可以进一步利用智能合同,这些智能合同是可信的分布式应用,其利用区块链数据库的防篡改属性和节点之间的基础协定,这被称为背书(endorsement)或背书策略。与本申请相关联的区块链交易可以在提交给区块链之前进行“背书”,而未经背书的交易将被忽略。背书策略允许链码以背书所必需的一组对等体节点的形式指定交易的背书者。当客户端将交易发送到背书策略中指定的对等体时,执行交易以验证交易。在验证之后,交易进入排序阶段,在该阶段中使用共识协议来产生分组到块中的、经背书的交易的排序序列。
本申请可以利用作为区块链系统的通信实体的节点。“节点”可以执行逻辑功能,即不同类型的多个节点可以在同一物理服务器上运行。节点被分组在信任域中,并且与以各种方式控制它们的逻辑实体相关联。节点可以包括不同类型,诸如向背书者(例如,对等体)递交交易调用并向排序服务(例如,排序节点)广播交易提议的客户端或递交客户端(submitting-client)节点。另一类型的节点是对等体节点,其可以接收客户端递交的交易、提交交易,并维护区块链交易的分类账的状态和副本。对等体也可以具有背书者的角色,尽管这不是必需的。排序服务节点或排序方是为所有节点运行通信服务的节点,并且其实现递送保证,诸如在提交交易和修改区块链的世界状态时到系统中的对等体节点中的每一个的广播,区块链的世界状态是通常包括控制和设置信息的初始区块链交易的另一名称。
本申请可以利用分类账,该分类账是区块链所有状态转换的有序的、防篡改的记录。状态转换可以由参与方(例如,客户端节点、排序节点、背书者节点、对等体节点等)递交的链码调用(即,交易)产生。每个参与方(诸如对等体节点)可以维护分类账的副本。交易可以导致一组资产键-值对作为一个或多个操作数(诸如创建、更新、删除等)被提交到分类账。分类账包括区块链(也称为链),其用于在块中存储不可变的、有序的记录。该分类账还包括维护区块链的当前状态的状态数据库。
本申请可以利用链,该链是被构造为散列链接的块(hash-linked block)的交易日志,并且每个块包含N个交易的序列,其中N等于或大于1。块头部(block header)包括块的交易的散列,以及前面的块的头部的散列。以这样的方式,分类账上的所有交易都可以被排序并密码地链接在一起。因此,在不破坏散列链接的情况下,不可能篡改分类账数据。最近添加的区块链块的散列表示该最近添加的区块链块之前已经到来的链上的每个交易,这使得可能确保所有对等体节点处于一致和可信的状态。该链可以存储在对等体节点文件系统(即,本地、附加存储器、云等)上,有效地支持区块链工作负载的仅附接的性质。
不可变分类账的当前状态可以被存储在状态数据库中,并且可以表示被包括在链交易日志中的所有键的最新值。因为当前状态表示通道已知的最新键值,所以当前状态有时被称为世界状态。链码调用根据分类账的当前状态数据执行交易。为了使这些链码交互有效,键的最新值可以存储在状态数据库中。状态数据库可以只是到链的交易日志中的索引视图,因此状态数据库可以在任何时候从链重新生成。在对等体节点启动时和交易被接受之前,状态数据库可以自动恢复(或者生成,如果需要的话)。
在数据可被添加到诸如区块链的分布式数据库之前,必须执行共识协议以确保数据被一致同意。这种分散协议的形式使得区块链能够在没有中央/控制实体的情况下被管理。在超分类结构中,共识协议具有各种阶段,包括背书、排序和验证/承诺。在背书阶段期间,区块链对等体的子集模拟交易以确保交易可基于区块链的当前状态(存储在区块链分类账上)来处理。然而,此时没有数据被添加到区块链。如果被背书,则交易被发送到排序者节点,其将被背书的交易聚集到数据块中。然后,当数据块已满时,排序者节点切割该数据块,并将该数据块广播到该通道上的区块链对等体。然后,区块链对等体基于区块链的当前状态重新执行交易,以确保数据仍然有效。如果批准,则交易被用于更新分类账的状态,并且数据块被存储在区块链上。
为了提供背书阶段的证明,背书者节点将生成标识从区块链分类账读取的键值的读取集和标识要被写入区块链分类账的值的写入集。当交易随后在验证/提交阶段期间由区块链对等体提交时,读取集在提交时间重新运行。如果结果与提议/背书时间不同,则抛出幻象读取错误。该检查确保状态和环境从提议时间到提交时间没有改变。然而,读取集仅在范围查询期间被评估,并且是由超分类帐结构执行的范围查询的结果。来自非临界范围查询的幻象读取错误可能是智能合同逻辑的性能的巨大障碍,因为幻象读取错误导致拒绝交易。
在许多情况下,交易可以运行多个范围查询,并且不是所有范围查询都是评估背书的关键。在范围查询对于评估不是关键的情况下,不需要对等体检查幻象读取错误。然而,诸如超分类帐结构的区块链解决方案的当前框架不提供避免范围查询的执行的方式。由于这种限制,一些交易失败,即使它们应该成功。这种失败消除了运行进行相同非关键范围查询的并发交易的可能性。
示例实施例通过在区块链分类账的顶部构建索引结构并且使得区块链对等体能够查询索引结构而不是范围查询区块链分类账,克服了相关区块链解决方案中的缺陷。在一些实施例中,索引结构是二叉树,其中键被存储为经由链路彼此连接的节点。索引结构可以包括分层格式,并且节点/键可以基于任何期望的商业规则彼此连接。当接收到区块链交易时,区块链对等体可通过从索引结构而不是区块链分类账读取非关键查询的键来背书交易。这样,当背书对等体生成用于交易的读取集时,区块链对等体可以省略从索引结构读取的数据。因此,当提交对等体在提交时重新运行查询时,提交对等体也可从索引结构中读取非关键查询的键,并避免执行非关键数据的比较。因此,可以避免非关键项的幻象读取错误。
索引可被构造为逻辑上位于区块链分类账的顶部并允许交易绕过对非关键范围查询的幻象错误检查的二元搜索树。示例实施例的益处包括通过允许开发者实现并发智能合同逻辑而显著改进链码性能。此外,交易吞吐量也得到了提高,因为交易不再由于非关键交易数据的幻象项而被拒绝。系统仍然允许从分类账处理掉关键范围查询。因此,可以针对关键范围查询来检查幻象读取错误。
图1A示出了根据示例性实施例的在区块链分类账120的顶部上实现索引结构130的区块链网络100。参照图1A,多个区块链对等体121-125共享区块链(未示出)的管理。区块链可包括在区块链分类账120上散列链接在一起的区块的链。区块链分类账120还可以存储状态数据库(在本文中被称为世界状态),其包括存储在区块链上的所有键(唯一数据项)的当前值。在来自客户端110的典型交易中,区块链对等体将基于从区块链分类账120的状态数据库获得的键-值背书该交易。
同时,在示例性实施例中,区块链对等体121-125可在区块链分类账120的顶部上构建和维护索引结构130。索引结构130可以包括来自区块链分类账130的基于由系统(Sys)定义的业务逻辑而被排序/连接的键的索引。当从客户端110接收到区块链请求(诸如交易)时,可以使用索引结构130来处理区块链请求的非关键查询,而仍然可以根据区块链分类账120上的键值来处理关键查询。
在图1A中,客户端110已经选择了区块链对等体123和124作为用于交易的背书对等体。这些区块链对等体123和124中的每一个可通过调用从区块链分类账120读取数据以核实(verify)交易是否将成功的链码(部署/打包的智能合同逻辑)来模拟交易。为了背书交易,区块链对等体123可运行从区块链分类账120检索数据的多个范围查询。根据各种实施例,区块链对等体123可标识对背书不关键的一个或多个范围查询(即,它们不影响交易有效性)并向索引结构130查询这种查询的密钥。当区块链对等体123生成背书的读取集时,区块链对等体123可包括从区块链分类账120读取的所有键(关键范围查询)并且省略从索引结构130读取的键(非关键查询)。
所得到的读取集可以被返回到客户端110,并且被转发到排序节点(未示出)以便包括在区块链中。当包括交易(及其读取集)的数据块被剪切并被发送到区块链对等体121-125时,区块链对等体121-125中的每一个可在将该块提交到其区块链分类账120的本地副本之前再次执行查询以验证交易。这里,区块链对等体121-125可向区块链分类账120查询关键范围查询,并将从区块链分类账120读取的键值与存储在交易的读取集中的键值进行比较。然而,对于非关键查询,区块链对等体121-125可查询它们自己的索引结构130的副本,而不必执行对非关键查询的验证。结果,可以避免非关键数据/查询的幻象读取错误。
图1B示出了根据示例实施例的图1A的索引结构130的示例。参考图1B,在区块链对等体上运行的链码可以在区块链分类账120的顶部上构建索引结构130,以创建用于不易出错的查询的定制索引。在该示例中,索引结构130是二叉树。索引结构130可以是由图1A所示的区块链对等体121-125部署和执行的、打包成链码的智能合同逻辑的一部分。
范围查询使用范围迭代器来遍历区块链分类账120中的分类账键的集合。迭代器可用于在该范围内在开始键和结束键之间的所有键上迭代。每个键具有与其相关联的值。对等体使用范围查询来获得值的范围。如果两个查询执行呈现不同的结果,则出现幻象读取错误。例如,如果在交易的背书期间执行的范围查询和在交易的验证/提交期间执行的相同范围查询导致返回不同的键/值,则检测到幻象错误,幻象错误可能由修改背书和验证/提交之间的记录范围内的(一个或多个)键的并发交易引起。
在示例实施例中,索引结构130在交易之间持续。存储分类账键而不是简单地将键存储在区块链分类账120数据库中是替代方式。在图1B中,键被存储为索引结构中的节点132。此外,键/节点132与二叉树中的链路134链接。索引结构130中的每个节点132对应于存储在区块链分类账120上的键值,如图1B中的箭头所示。区块链分类账120可以存储包括键(例如,系统值)和在其处将键添加到系统的时间戳的键-值对。每个分类账键对应于索引结构130中的节点。此外,每个键节点的下一属性指向另一键。在插入时基于区块链对等体的智能合同内的商业逻辑,可在索引结构130中对键进行分类排序(sort)。
为了查询索引结构130,区块链对等体可以将键作为树中的节点来逐个地读取,而不是在区块链分类账120上按范围查询它们。在作为索引结构130的二叉搜索树的示例中,区块链对等体可通过调用Next()来标识索引结构130中的下一节点132。该函数标识索引结构130内的键之间的顺序。区块链对等体将不会通过简单地查询下一节点而生成幻象读取错误。一些幻象读取错误是有效的,因为不应在同一读取-写入集内修改某些数据。仍然可以从区块链分类账120查询这些数据项。然而,其它幻象读取错误是由于对交易的有效性不关键的数据的改变引起的。示例实施例提供了一种创新的方式,以通过查询索引结构130并且不将结果添加到读取集来避免不关键的幻象读取错误。
在没有由示例实施例构建的定制索引结构的情况下,利用迭代器运行范围查询(诸如通过使用Fabric的GetStateByRange函数)是区块链对等体理解下一键是什么的唯一方式。因此,如果在提议和提交时间之间添加、更新或删除该范围内的任何键,则GetStateByRange将返回不同的结果,并且幻象读取错误将发生。相反,代替读取范围查询中的键,示例实施例使用诸如二叉搜索树的索引结构逐个读取范围中的各个元素。利用二叉搜索树,区块链对等体可以通过调用Next()来标识下一键。通过消除对分类账的本地范围查询函数的需要,实施例创建了一种消除非关键幻象读取检查以允许更好的链码性能的方式。
区块链,即超分类帐结构,具有以下功能(或类似的)以保存和查询分类帐数据。分类帐数据通常被保存为键-值对。例如,PutState(k,v)是用于将值v与键k一起存储在分类账中的函数。GetState(k)是用于得到存储在分类帐中的对于键k的值的函数。在幻象读取错误检查期间,该查询不被添加到交易的读取集。GetStateByRange(startKey,endKey)是在开始键(包括)和结束键(不包括)之间查询分类帐数据的函数。在幻象读取错误检查期间,将该范围查询添加到读取交易集。
同时,索引结构(例如,二叉搜索树、红黑树等)提供以下功能以在二叉树中添加节点或找到节点。在该示例中,二叉搜索树中的节点值表示分类账键。例如,如果需要,Insert(k)可以将键k插入到二叉搜索树并重新平衡。Find(k)可以在二叉搜索树中找到其键大于或等于输入键值k的节点。Next(k)可接收二叉搜索树中的当前节点k,并返回二叉搜索树中的下一键k+1。索引结构中的键的顺序可以基于在智能合同内实现的商业逻辑。
此外,示例实施例使得对等体能够使用分类账的顶部的二分搜索树来构建分类账键的索引。当一段数据(键-值对)被添加到区块链分类账时,区块链对等体可使用以下逻辑而不是使用区块链的本地PutState()函数。
在该示例中,在将数据添加到分类账之前,对等体可以将键添加到二分搜索树以便构建分类账键的索引。为了绕过用于非临界范围查询的幻象读取错误检查,区块链对等体可使用二分搜索树索引,以使用以下逻辑而不是区块链的本地GetStateByRange()函数来查询数据范围。下面的函数使用二叉搜索树索引,以便找到要读取的下一键,然后使用本地GetState()函数单独地从分类帐读取每个值。这避免了添加用于幻象读取错误检查的读取集。
图2A示出了根据示例实施例的区块链架构配置200。参考图2A,区块链架构200可以包括某些区块链元素,例如,一组区块链节点202。区块链节点202可以包括一个或多个节点204-210(这四个节点仅通过示例来描述)。这些节点参与许多活动,诸如区块链交易添加和验证过程(共识)。区块链节点204-210中的一个或多个可以基于背书策略来背书交易,并且可以为架构200中的所有区块链节点提供排序服务。区块链节点可以启动区块链认证,并试图写入存储在区块链层216中的区块链不可变分类账,其副本也可以存储在基础物理基础设施214上。区块链配置可以包括一个或多个应用224,其链接到应用编程接口(API)222,以访问和执行存储的程序/应用代码220(例如,链码、智能合同等),这些应用可以根据由参与方寻求的定制配置来创建,并且可以维护他们自己的状态、控制他们自己的资产以及接收外部信息。这可以作为交易来部署,并且经由附接到分布式分类账来安装在所有区块链节点204-210上。
区块链基础或平台212可以包括区块链数据、服务(例如,加密信任服务、虚拟执行环境等)的各种层,并支撑可用于接收和存储新交易的物理计算机基础设施,并为寻求访问数据条目的审查者提供访问。区块链层216可以暴露接口,该接口提供对处理程序代码和接合物理基础设施214所必需的虚拟执行环境的访问。加密信任服务218可用于核实交易,诸如资产交换交易,并保持信息私密。
图2A的区块链架构配置可以由区块链平台212经由暴露的一个或多个接口和所提供的服务来处理和执行程序/应用代码220。代码220可以控制区块链资产。例如,代码220可以存储和传送数据,并且可以由节点204-210以智能合同和与受其执行影响的条件或其他代码元素相关联的链码的形式执行。作为非限制性示例,可以创建智能合同来执行提醒、更新和/或受改变、更新等影响的其他通知。智能合同本身可以用于标识与授权和访问要求以及分类账的使用相关联的规则。例如,智能合同(或执行智能合同的逻辑的链码)可以从索引结构读取区块链数据226。区块链数据可由包括在区块链层216中的一个或多个处理实体(例如,虚拟机)处理以生成链代码调用的结果228。该结果可以由智能合同中的商业逻辑确定。物理基础设施214可以用于检索本文所述的任何数据或信息。
可以经由高级应用和编程语言创建智能合同,并且然后将其写入区块链中的块。智能合同可以包括用区块链(例如,区块链对等体的分布式网络)注册、存储和/或复制的可执行代码。为了被部署,智能合同可以被打包到链码中(与其他智能合同一起)并且被部署到区块链对等体上。交易是可以响应于与智能合同相关联的条件被满足来执行的智能合同代码的执行。智能合同的执行可以触发对数字区块链分类账的状态的可(多个)信的修改。由智能合同执行引起的对区块链分类账的(多个)修改可以通过一个或多个共识协议在区块链对等体的分布式网络中自动复制。
智能合同可以将数据以键-值对的形式写入区块链。此外,智能合同代码可以读取存储在区块链中的值,并在应用操作中使用它们。智能合同代码可以将各种逻辑运算的输出写入区块链内的一个或多个块中。该代码可用于在虚拟机或其他计算平台中创建临时数据结构。写入区块链的数据可以是公开的和/或可以被加密并维护为私有。智能合同使用/生成的临时数据由所提供的执行环境保存在存储器中,一旦标识出区块链所需的数据,就将其删除。
链码可以包括智能合同的、具有附加功能的代码解释。这里,链码可以包括智能合同中的逻辑的打包的和可部署版本。如本文所述,链码可以是部署在计算网络上的程序代码,在计算网络中,链码由链验证者(validator)在共识过程期间一起执行和验证。链码接收散列,并从区块链检索与通过使用先前存储的特征提取器创建的数据模板相关联的散列。如果散列标识符和从所存储的标识符模板数据创建的散列匹配,则链码发送对所请求的服务的授权密钥。链码可以写入与加密细节相关联的区块链数据。
图2B示出了根据示例实施例的区块链节点之间的区块链交易流250的示例。参考图2B,交易流可以包括客户端节点260向背书对等体节点281发送交易提议291。背书对等体281可以核实客户端签名并执行链码函数来启动交易。输出可以包括链码结果、在链码中读取的键/值的集合版本(读取集),以及在链码中写入的键/值的集合(写入集)。这里,背书对等体281可以确定是否背书该交易建议。如果被批准,提议响应292连同背书签名一起被发送回客户端260。客户端260将背书组装到交易有效载荷293中,并将其广播到排序服务节点284。排序服务节点284然后将排序的交易作为块递送给通道上的所有对等体281-283。在提交到区块链之前,每个对等体281-283可以验证交易。例如,对等体可以检查背书策略,以确保指定对等体的正确分配已经对结果进行了签名,并且针对交易有效载荷293认证了签名。
再次参考图2B,客户端节点通过构造请求并将其发送到作为背书者的对等体节点281来启动交易291。客户端260可以包括利用支持的软件开发工具包(softwaredevelopment kit,SDK)的应用,其利用可用的API来生成交易提议。该提议对调用链码函数的请求,使得可以读取数据和/或向分类账写入数据(即,为资产编写新的键值对)。SDK可以充当小型函数库(shim),以将交易提议打包成适当架构的格式(例如,通过远程过程调用(remote procedure call,RPC)的协议缓冲器),并采用客户端的加密凭证以产生用于交易提议的唯一签名。
作为响应,背书对等体节点281可以核实(a)交易提议是良好形成的,(b)交易在过去还没有被递交(重放攻击保护),(c)签名是有效的,以及(d)递交者(在示例中,是客户端260)被适当授权在该通道上执行提议的操作。背书对等体节点281可以将交易提议输入作为调用的链码函数的参量。然后,针对当前状态数据库执行链码,以产生包括响应值、读取集和写入集的交易结果。但是,此时不会对分类账进行更新。在292中,该组值连同背书对等体节点281的签名作为提议响应292被传递回客户端260的SDK,客户端260解析应用要消费的有效载荷。
作为响应,客户端260的应用审查/核实背书对等体签名,并比较提议响应以确定提议响应是否相同。如果链码仅查询分类账,则应用将审查查询响应,并且通常不会将交易递交给排序节点服务284。如果客户端应用旨在将交易递交给排序节点服务284以更新分类账,则该应用在递交之前确定指定的背书策略是否已被满足(即,交易所需的所有对等体节点是否都对该交易进行了背书)。这里,客户端可能只包括交易的多方之一。在这种情况下,每个客户端可能具有它们自己的背书节点,并且每个背书节点将需要背书交易。该架构使得即使应用选择不审查响应或以其他方式转发未经背书的交易,背书策略仍将由对等体强制执行并在提交验证阶段被维持。
在成功审查之后,在步骤293中,客户端260将背书组装到交易提议中,并且在交易消息中向排序节点284广播交易提议和响应。交易可能包含读/写入集、背书对等体签名和通道ID。排序节点284不需要审查交易的全部内容来执行其操作,相反,排序节点284可以简单地从网络中的所有通道接收交易,按通道按时间顺序对它们进行排序,并为每个通道创建交易块。
这些块在通道上从排序节点284被递送到所有对等体节点281和283。可以验证块内的数据部分以确保背书策略被满足并且确保自从读取集由交易执行生成以来不存在对读取集变量的分类账状态的改变。另外,在步骤295中,每个对等体节点281-283将块附接到通道的链,并且对于每个有效交易,写入集被提交到当前状态数据库。可以发出事件,以通知客户端应用该交易(调用)已经被不可变地附加到链,以及通知该交易是是经验证的还是未经验证的。
图3A示出了许可的区块链网络300的示例,其特征在于分布式、分散式点对点(peer-to-peer)架构。在该示例中,区块链用户302可以启动到许可的区块链304的交易。在该示例中,交易可以是部署、调用或查询,并且可以通过利用SDK的客户端应用、直接通过API等来发布。网络可以提供对监管者306的访问,诸如审查者。区块链网络运营商308管理成员许可,例如将监管者306注册为“审查者”,并且将区块链用户302注册为“客户端”。审查者可以被限制为只能查询分类账,而客户端可以被授权部署、调用和查询某些类型的链码。
区块链开发者310可以编写链码和客户端应用。区块链开发者310可以通过接口将链码直接部署到网络。为了在链码中包括来自传统数据源312的凭证,开发者310可以使用带外连接(out-of-band connection)来访问数据。在该示例中,区块链用户302通过对等体节点314连接到许可的区块链304。在进行任何交易之前,对等体节点314从管理用户角色和许可的证书授权机构316检索用户的注册和交易证书。在一些情况下,区块链用户必须拥有这些数字证书,以便在许可的区块链304上进行交易。同时,试图利用链码的用户可能需要在传统数据源312上核实他们的凭证。为了确认用户的授权,链码可以通过传统的处理平台318对该数据使用带外连接。
图3B示出了许可的区块链网络320的另一示例,其特征在于分布式、分散式点对点架构。在该示例中,区块链用户322可以向许可的区块链324递交交易。在该示例中,交易可以是部署、调用或查询,并且可以通过利用SDK的客户端侧应用、直接通过API等来发布。网络可以提供对监管者326的访问,诸如审查者。区块链网络运营商328管理成员许可,诸如将监管者326注册为“审查者”,并且将区块链用户322注册为“客户端”。审查者可以被限制为只能查询分类账,而客户端可以被授权部署、调用和查询某些类型的链码。
区块链开发者330编写链码和客户端侧应用。区块链开发者330可以通过接口将链码直接部署到网络。为了在链码中包括来自传统数据源332的凭证,开发者330可以使用带外连接来访问数据。在该示例中,区块链用户322通过对等体节点334连接到网络。在进行任何交易之前,对等体节点334从证书授权机构336检索用户的注册和交易证书。在一些情况下,区块链用户必须拥有这些数字证书,以便在许可的区块链324上进行交易。同时,试图利用链码的用户可能需要在传统数据源332上核实他们的凭证。为了确认用户的授权,链码可以通过传统的处理平台338对该数据使用带外连接。
在一些实施例中,本文的区块链可以是无许可的区块链。与需要许可才能加入的许可的区块链相反,任何方都可以加入无许可的区块链。例如,要加入无许可的区块链,用户可以创建个人地址,并通过递交交易开始与网络交互,从而将条目添加到分类账中。此外,各方都可以选择在系统上运行节点,并采用挖掘协议(mining protocol)来帮助核实交易。
图3C示出了由包括多个节点354的无许可的区块链352处理交易的过程350。发送方356希望经由无许可的区块链352向接收方358发送支付或一些其他形式的价值(例如,契约、医疗记录、合同、商品、服务或可打包在数字记录中的任何其他资产)。在一个实施例中,发送方设备356和接收方设备358中的每一个可以具有数字钱包(与区块链352相关联),其提供用户界面控制和交易参数的显示。作为响应,该交易通过区块链352广播到节点354。取决于区块链352的网络参数,节点基于由无许可的区块链352创建者建立的规则(可以是预定义的或动态分配的)来核实360交易。例如,这可能包括核实涉及参与方的身份等。可以立即核实该交易,或者可以将其与其他交易放在队列中,并且节点354基于一组网络规则来确定交易是否有效。
在结构362中,有效交易被形成为块,并用锁(散列)密封。该过程可以通过节点354当中的挖掘节点来执行。挖掘节点可以利用专门用于为无许可的区块链352挖掘和创建块的附加软件。每个块可以通过使用网络同意的算法创建的散列(例如,256比特数字等)来标识。每个块可以包括头部、指针或对链中先前块的头部的散列的引用,以及一组有效交易。对先前块的散列的引用与块的安全独立链的创建相关联。
在将块添加到区块链之前,必须对块进行验证。对无许可的区块链352的验证可以包括工作证明(PoW),其是从块的头部导出的难题的解决方案。虽然在图3C的示例中没有示出,但是用于验证块的另一过程是权益证明(proof-of-stake)。工作证明算法奖励解决数学问题的矿工(miner),与此不同的是,有了权益证明,新块的创建者会根据其财富(也称为“权益”)以确定性的方式被挑选。然后,由选择的/挑选的节点执行类似的证明。
使用挖掘364,节点试图通过对一个变量进行增量改变来解决该块,直到解决方案满足网络范围的目标。这将创建PoW,从而确保正确答案。换句话说,潜在的解决方案必须证明在解决问题的过程中计算资源被耗尽了。在一些类型的无许可的区块链中,矿工可能会得到有价值的奖励(例如,硬币等)用于正确挖掘块。
这里,PoW过程连同块的链接使得区块链的修改变得非常困难,因为攻击者必须修改所有后续的块以便接受对一个块的修改。此外,随着新块被挖掘,修改块的难度增加,后续块的数量增加。利用分布366,通过无许可的区块链352分布成功验证的块,并且所有节点354将该块添加到多数链(majority chain),该多数链是无许可的区块链352的可审计分类账。此外,由发送方356递交的交易中的价值被存入或以其他方式传送到接收方设备358的数字钱包。
图4A示出了根据示例性实施例的经由范围查询来查询区块链分类账的过程400A。参考图4A,在区块链对等体上运行的智能合同444包括状态数据库446(存储在区块链分类账上)。在该示例中,日志记录系统442跟踪登录到企业网络上的用户,并记录关于用户活动的数据。数据可以存储在由包括键的智能合同444管理的区块链上。所有键的当前值可由智能合同444存储在状态数据库446内。
在该示例中,智能合同444具有对登录到日志记录系统442中的用户/雇员的数量进行计数并每秒时间将结果记录在区块链分类账(状态DB 446)上的逻辑。图4A示出了将交易存储到状态数据库446的智能合同444的通信序列以及幻象读取错误的发生的示例。
由于网络开销,在交易的提议和该交易的提交之间所花费的时间可以变化。在401中,日志记录系统在12:00:00的时间开始第一交易。在402中,智能合同444对通过范围查询登录到系统中的雇员的数量进行计数。目前有6个雇员登录到系统中。然后将范围查询添加到读取集以检查幻象读取错误。
同时,在403中,新用户440登录到系统上。现在7个雇员登录到系统上。此外,智能合同444用新的用户信息更新块链分类账446。这在背书和401中接收的第一交易的验证之间同时发生。在405中,日志记录系统442在12:00:01处触发下一计数交易(交易2)的开始。在406中,智能合同444对通过范围查询登录的雇员的数量进行计数。总计数为7。范围查询被添加到交易2的读取集以检查幻象读取错误。这里,在407中执行第二交易的幻象错误检查并且它成功。因此,在408中,第二交易被提交到区块链和状态DB446,并且在409中发送成功通知。
同时,第一交易由于开销而被延迟。这里,在411中,智能合同444基于分类账的当前状态(状态DB 446)执行幻象错误检查。在这个示例中,登录到系统上的用户的当前数量被记录为7,但是第一交易的读取集指示用户的数量是6,因此,幻象错误检查失败。因此,在412中,智能合同444输出故障通知。
图4B示出了根据示例性实施例的查询区块链分类账446的顶部上的索引结构448的过程400B。在该示例中,索引结构448将区块链分类账的当前键存储在逻辑上驻留在区块链分类账的状态DB 446上的索引中。在421中,日志记录系统442在12:00:00触发第一交易。在422中,作为响应,智能合同444通过查询索引结构448而不向状态DB 446发出范围查询来对登录到系统中的雇员的数量进行计数。目前有6个雇员登录到系统中。由于没有使用范围查询,因此不将该读取添加到交易1的读取集中。相反,仅用关键查询(在该示例中未示出)来创建读取集。
在423中,新用户440登录到系统。现在7个雇员登录。在该示例中,状态DB 446和索引结构448都以用户440的新的键更新。
同时,如图4A的情况,在425中,日志记录系统442触发第二交易的开始。在这种情况下,交易2开始于12:00:01。在426中,智能合同444通过查询索引结构448来计数登录的雇员的数量。总计数为7,然而,该读取不被添加到交易2的读取集,因为没有使用范围查询。在427中,智能合同444基于第二交易的读取集执行幻象错误检查,并且检查成功。在428中,第二交易被添加到区块链分类账并且成功消息被发送到日志记录系统442。
同时,正如图4A的示例中那样,第一交易被延迟。然而,在430中,幻象错误检查被执行并成功,因为非关键交易(雇员/用户计数)未被添加到读取集。因此,不需要对422中读取的雇员计数值执行幻象错误检查。相反,在431中提交第一交易,并且在432中提供成功消息。
图5示出了根据示例实施例的访问区块链分类账的顶部上的索引结构的方法500。作为非限制性示例,方法500可由区块链对等体、在区块链对等体上运行的链码等来执行,然而实施例不限于此。参考图5,在510中,该方法可包括存储索引结构,该索引结构包括来自区块链分类账的键的索引,其中键被存储为索引结构中的节点。作为示例,索引结构可以是二叉树,也称为二叉搜索树。树可包括表示存储在区块链中的键的节点。
在一些实施例中,当将键添加到区块链时,区块链对等体节点还可随着时间的推移构建索引结构。例如,索引结构可在运行于区块链对等体节点上的智能合同(部署为链码)内创建和实现。节点可以被排序或者以任何期望的方式彼此连接。例如,智能合同可以包括用于连接索引结构中的节点/键的商业规则、方法、过程等。当索引结构是诸如二叉树的树时,可以以分层方式将键布置为节点。
在520中,方法可包括接收对存储在区块链分类账上的数据的区块链请求。例如,区块链请求可包括调用区块链对等体节点上的智能合同的区块链交易。可以使用对块链分类账的一个或多个查询来处理块链请求。在传统的区块链中,这些请求可使用范围查询来处理。然而,在530中,该方法可包括从索引结构中的节点读取包括在区块链请求中的非关键查询的键的集合,而不是在区块链分类账上执行范围查询。这里,区块链请求可以包括/需要对分类账的关键和非关键查询两者。区块链对等体可以处理分类账上的关键查询。然而,对于非关键查询,区块链对等体节点可改为从索引结构读取数据。
此外,在540中,该方法可包括生成并存储区块链请求的读取集,该读取集不包括非关键查询的键的集的值。因此,通过处理索引结构上的非关键查询而不是区块链分类账,可以避免幻象读取错误。此外,对等体可以避免将从索引结构读取的键放在智能合同的读取集内。
在一些实施例中,该读取可以包括经由next函数从索引结构中的节点逐个读取该键的集合。这里,当智能合同正在构建索引结构时,next函数可以基于智能合同如何排序节点而移动到索引结构中的下一键/节点。在一些实施例中,该方法还可包括当区块链请求的查询不影响区块链请求的有效性时将该查询标识为非关键查询。在一些实施例中,该方法可包括基于区块链请求的先前读取集来验证区块链请求,该先前读取集不包括从索引结构读取的键的集合的值的。在一些实施例中,索引结构可以在区块链对等体节点的链码逻辑内实现。在这些示例中,索引结构中的键对应于存储在区块链分类账的区块链上的唯一值。
图6A示出了根据示例实施例的示例系统600,其包括被配置为执行各种操作的物理基础设施610。参考图6A,物理基础设施610包括模块612和模块614。模块614包括区块链620和智能合同630(其可以驻留于区块链620上),区块链620和智能合同630可以执行任何示例实施例中包括的任何操作步骤608(在模块612中)。步骤/操作608可以包括所描述或描绘的实施例中的一个或多个,并且可以表示写入一个或多个智能合同630和/或区块链620或从中读取的输出或写入信息。物理基础设施610、模块612和模块614可以包括一个或多个计算机、服务器、处理器、存储器和/或无线通信设备。此外,模块612和模块614可以是相同的模块。
图6B示出了根据示例实施例的被配置为执行各种操作的另一示例系统640。参考图6B,系统640包括模块612和模块614。模块614包括区块链620和智能合同630(其可以驻留于区块链620上),区块链620和智能合同630可以执行任何示例实施例中包括的任何操作步骤608(在模块612中)。步骤/操作608可以包括所描述或描绘的实施例中的一个或多个,并且可以表示写入一个或多个智能合同630和/或区块链620或从中读取的输出或写入信息。物理基础设施610、模块612和模块614可以包括一个或多个计算机、服务器、处理器、存储器和/或无线通信设备。此外,模块612和模块614可以是相同的模块。
图6C示出了根据示例实施例的被配置为利用合同方之间的智能合同配置和被配置为在区块链上强制执行智能合同条款的中介服务器的示例系统。参考图6C,配置650可以表示由明确标识一个或多个用户设备652和/或656的智能合同630驱动的通信会话、资产传送会话或过程或进程。智能合同执行的执行、操作和结果可以由服务器654管理。智能合同630的内容可能需要作为智能合同交易的各方的实体652和656中的一个或多个的数字签名。智能合同执行的结果可以作为区块链交易写入区块链620。智能合同630驻留在区块链620上,其可以驻留在一个或多个计算机、服务器、处理器、存储器和/或无线通信设备上。
图6D示出了根据示例实施例的包括区块链的系统660。参考图6D的示例,应用编程接口(API)网关662提供用于访问区块链逻辑(例如,智能合同630或其他链码)和数据(例如,分布式分类账等)的公共接口。在该示例中,API网关662是用于通过将一个或多个实体652和656连接到区块链对等体(即,服务器654)来在区块链上执行交易(调用、查询等)的公共接口。这里,服务器654是区块链网络对等组件,其保存分布式分类账和世界状态的副本,从而允许客户端652和656查询关于世界状态的数据,以及将交易递交到区块链网络,在区块链网络中,取决于智能合同630和背书策略,背书对等体将运行智能合同630。
以上实施例可以以硬件、以由处理器执行的计算机程序、以固件或以以上的组合来实施。计算机程序可以体现在计算机可读介质上,诸如存储介质上。例如,计算机程序可以驻留在随机存取存储器(random access memory,“RAM”)、闪存、只读存储器(read-onlymemory,“ROM”)、可擦可编程只读存储器(erasable programmable read-only memory,“EPROM”)、电可擦可编程只读存储器(electrically erasable programmable read-onlymemory,“EEPROM”)、寄存器、硬盘、可移动磁盘、光盘只读存储器(compact disk read-onlymemory,“CD-ROM”)或本领域已知的任何其他形式的存储介质中。
示例性存储介质可以耦合到处理器,使得处理器可以从存储介质读取信息和向存储介质写入信息。或者,存储介质可以集成到处理器中。处理器和存储介质可以驻留在专用集成电路(application specific integrated circuit,“ASIC”)中。或者,处理器和存储介质可以作为分立组件驻留。
图7A示出了根据示例实施例的新块被添加到分布式分类账720的过程700,并且图7B示出了根据示例实施例的区块链的新数据块结构730的内容。参考图7A,客户端(未示出)可以向区块链节点711、712和/或713递交交易。客户端可以是从任何源接收的、在区块链720上执行活动的指令。例如,客户端可以是代表请求者行动的应用,诸如为区块链提议交易的设备、个人或实体。多个区块链对等体(例如,区块链节点711、712和713)可以维护区块链网络的状态和分布式分类账720的副本。不同类型的区块链节点/对等体可以存在于区块链网络中,包括模拟和背书由客户端提议的交易的背书对等体;和核实背书、验证交易并将交易提交到分布式分类账720的提交对等体。在该示例中,区块链节点711、712和713可以执行背书者节点、提交者节点或两者的角色。
分布式分类账720包括在块中存储不可变的、有序记录的区块链,以及维护区块链722的当前状态的状态数据库724(当前世界状态)。每个通道可以存在一个分布式分类账720,并且每个对等体为其所属的每个通道维护其自己的分布式分类账720的副本。区块链722是交易日志,该交易日志被构造为散列链接的块,其中每个块包含N个交易的序列。块可以包括各种组件,诸如图7B所示。块的链接(由图7A中的箭头示出)可以通过在当前块的块头部内添加前面的块的头部的散列来生成。以这样的方式,区块链722上的所有交易被排序并密码地链接在一起,防止在不破坏散列链接的情况下篡改区块链数据。另外,由于链接,区块链722中的最新块表示该最新块之前已经到来的每个交易。区块链722可以被存储在对等体文件系统(本地或附加存储器)上,该对等体文件系统支持仅附接的区块链工作负载。
区块链722和分布式分类账722的当前状态可以被存储在状态数据库724中。这里,当前状态数据表示区块链722的链交易日志中曾经包括的所有键的最新值。链码调用针对状态数据库724中的当前状态执行交易。为了使这些链码交互极其有效,所有键的最新值被存储在状态数据库724中。状态数据库724可以包括到区块链722的交易日志中的索引视图,因此它可以在任何时候从链重新生成。在交易被接受之前,在对等体启动时,状态数据库724可以自动恢复(或者生成,如果需要的话)。
背书节点从客户端接收交易,并基于模拟结果背书交易。背书节点保存模拟交易提议的智能合同。当背书节点背书交易时,背书节点创建交易背书,该交易背书是从背书节点到客户端应用的、指示对模拟交易的背书的签名响应。背书交易的方法取决于可能在链码中指定的背书策略。背书策略的示例是“大多数背书对等体必须背书交易”。不同的通道可能具有不同的背书策略。经背书的交易由客户端应用转发给排序服务710。
排序服务710接受经背书的交易,将它们排序到块中,并将块递送给提交对等体。例如,当已经达到交易的阈值、定时器超时或其他条件时,排序服务710可以启动新块。在图7A的示例中,区块链节点712是已经接收到新数据块730以用于存储在区块链720上的提交对等体。区块链中的第一块可以被称为创世块,其包括关于区块链、其成员、存储在其中的数据等的信息。
排序服务710可以由排序方的群组构成。排序服务710不处理交易、智能合同或维护共享分类账。相反,排序服务710可以接受经背书的交易,并指定这些交易被提交给分布式分类账720的顺序。区块链网络的架构可以被设计成使得“排序”的具体实现方式(例如,Solo、Kafka、BFT等)成为可插拔组件。
交易以一致的顺序被写入分布式分类账720。建立交易的顺序,以确保当状态数据库724的更新被提交给网络时,这些更新是有效的。与加密货币区块链系统(例如比特币等)不同(其中通过解决加密难题或挖掘进行排序),在该示例中,分布式分类账720的各方可以选择最适合该网络的排序机制。
当排序服务710初始化新数据块730时,新数据块730可以被广播给提交对等体(例如,区块链节点711、712和713)。作为响应,每个提交对等体通过检查以确保读取集和写入集仍然匹配状态数据库724中的当前世界状态来验证新数据块730内的交易。具体地,提交对等体可以确定当背书者模拟交易时存在的读取数据是否与状态数据库724中的当前世界状态相同。当提交对等体验证交易时,交易被写入分布式分类账720上的区块链722,并且状态数据库724用来自读取-写入集的写入数据更新。如果交易失败,也就是说,如果提交对等体发现读取-写入集与状态数据库724中的当前世界状态不匹配,则被排序到块中的交易仍将被包括在该块中,但是该交易将被标记为无效,并且状态数据库724将不被更新。
参考图7B,存储在分布式分类账720的区块链722上的新数据块730(也称为数据块)可以包括多个数据段,诸如块头部740、块数据750(块数据部分)和块元数据760。应当理解,图7B中所示的各种所示块及其内容,诸如新数据块730及其内容,仅仅是示例,而不意味着限制示例实施例的范围。在常规块中,数据部分可将N个交易(例如,1、10、100、500、1000、2000、3000等)的交易信息存储在块数据750内。
新数据块730还可以将到(例如,在图7A中的区块链722上的)先前块的链接包括在块头部740内。特别地,块头部740可以包括先前块的头部的散列。块头部740还可以包括唯一的块号、新数据块730的块数据750的散列等。新数据块730的块号可以是唯一的,并且以各种顺序分配,诸如从零开始以递增/有序的顺序。
块元数据760可以存储元数据的多个字段(例如,作为字节数组等)。元数据字段可以包括关于块创建的签名、对最后配置块的引用、标识块内的有效和无效交易的交易过滤器、对块进行排序的排序服务的最后偏移持久化等。签名、最后配置块和排序方元数据可以由排序服务710添加。同时,块的提交者(诸如区块链节点712)可以基于背书策略、读取/写入集的核实等来添加有效性/无效性信息。交易过滤器可以包括大小等于包括在块数据750中的交易的数量的字节数组和标识交易是有效的/无效的验证码。
图7C示出了根据本文描述的实施例的用于数字内容的区块链770的实施例。数字内容可以包括一个或多个文件和相关联的信息。文件可以包括媒体、图像、视频、音频、文本、链接、图形、动画、网页、文档或其他形式的数字内容。区块链服务的不可变的、仅附接的方面作为保护数字内容的完整性、有效性和真实性的保障,使其适合用于可受理性规则适用的法律诉讼,或考虑证据的其他设置,或对数字信息的呈现和使用另外地感兴趣的其他设置。在这种情况下,数字内容可以被称为数字证据。
区块链可以以多种方式形成。在一个实施例中,数字内容可以包括在区块链自身中并从其访问。例如,区块链的每个块可以存储参考信息的散列值(例如,头部、值等)以及相关联的数字内容。散列值和相关联的数字内容然后可以一起被加密。因此,可以通过解密区块链中的每个块来访问每个块的数字内容,并且每个块的散列值可以用作参考先前块的基础。这可以示出如下:
在一个实施例中,数字内容可以不包括在区块链中。例如,区块链可以存储每个块的内容的加密散列而没有任何数字内容。数字内容可以被存储在与原始文件的散列值相关联的另一存储区域或存储器地址中。另一存储区域可以是用于存储区块链的相同的存储设备,或者可以是不同的存储区域,或者甚至是分离的关系数据库。每个块的数字内容可以通过获得或查询感兴趣的块的散列值,然后在存储区域中查找该值来进行引用或访问,该散列值与实际数字内容相对应地存储。该操作可以例如由数据库网守(gatekeeper)来执行。这可以示出如下:
在图7C的示例实施例中,区块链770包括以排序序列密码地链接的多个块7781、7782……778N,其中N≥1。用于链接块7781、7782……778N的加密可以是许多密钥或非密钥散列函数中的任何一种。在一个实施例中,块7781、7782……778N受散列函数的影响,该散列函数从基于块中信息的输入产生n位字母数字输出(其中n是256或另一数字)。这种散列函数的示例包括但不限于SHA型(SHA代表安全散列算法)算法、Merkle-Damgard算法、HAIFA算法、Merkle树算法、基于随机数的算法(nonce-based algorithm)和非抗冲突的PRF算法(non-collision-resistant PRF algorithm)。在另一实施例中,块7781、7782……778N可以通过不同于散列函数的函数进行密码地链接。为了说明的目的,下面的描述是参照散列函数(例如SHA-2)进行的。
区块链的块7781、7782……778N中的每一个包括头部、文件的版本和值。作为区块链中进行散列的结果,头部和值对于每个块都不同。在一个实施例中,值可以包括在头部中。如以下更详细描述的,文件的版本可以是原始文件或原始文件的不同版本。
区块链中的第一块7781被称为创世块,并且包括头部7721、原始文件7741和初始值7761。用于创世块的散列方案以及实际上在所有后续块中,可能会有所不同。例如,第一块7781中的所有信息可以一次被散列在一起,或者第一块7781中的信息的每个或一部分可以被分离地散列,然后可以执行分离散列部分的散列。
头部7721可以包括一个或多个初始参数,该一个或多个初始参数例如可以包括版本号、时间戳、随机数(nonce)、根信息、难度级别、共识协议、持续时间、媒体格式、源、描述性关键字和/或与原始文件7741和/或区块链相关联的其他信息。头部7721可以自动生成(例如,通过区块链网络管理软件)或者由区块链参与方手动生成。与区块链的其他块7782至778N中的头部不同,创世块中的头部7721不引用先前块,这仅仅是因为没有先前块。
创世块中的原始文件7741可以是例如由设备捕获的数据,在其包含在区块链之前经过或不经过处理。原始文件7741通过系统接口从设备、媒体源或节点接收。原始文件7741与元数据相关联,例如,该元数据可以由用户、设备和/或系统处理器手动或自动地生成。元数据可以与原始文件7741相关联地被包括在第一块7781中。
创世块中的值7761是基于原始文件7741的一个或多个唯一属性生成的初始值。在一个实施例中,一个或多个唯一属性可以包括原始文件7741的散列值、原始文件7741的元数据以及与该文件相关联的其他信息。在一个实施方式中,初始值7761可以基于以下唯一属性:
1)SHA-2计算的原始文件的散列值
2)始发设备ID
3)原始文件的开始时间戳
4)原始文件的初始存储位置
5)软件用于当前控制原始文件和相关元数据的区块链网络成员ID
区块链中的其他块7782到778N也具有头部、文件和值。然而,与第一块7721不同,其他块中的头部7722至772N中的每一个包括紧接之前块的散列值。紧接之前块的散列值可以只是先前块的头部的散列,或者可以是整个先前块的散列值。如箭头780所示,通过在每个剩余块中包括之前块的散列值,可以逐个块地执行从第N个块回到创世块(以及相关联的原始文件)的跟踪,以建立可审计的和不可变的监管链。
其他块中的头部7722至772N中的每一个还可以包括其他信息,例如版本号、时间戳、随机数、根信息、难度级别、共识协议和/或总体上与相对应的文件和/或区块链相关联的其他参数或信息。
其他块中的文件7742至774N可以等于原始文件,或者可以是创世块中原始文件的修改版本,这取决于例如所执行的处理类型。执行的处理类型可能因块而异。该处理可以涉及例如对之前块中的文件的任何修改,诸如编辑信息或者以其他方式改变文件的内容、从文件中获取信息或者向文件添加或附接信息。
附加地或者可替换地,该处理可以仅涉及从之前块复制文件、改变文件的存储位置、分析来自一个或多个之前块的文件、将文件从一个存储或存储器位置移动到另一存储或存储器位置、或者相对于区块链的文件和/或其相关联的元数据执行动作。涉及分析文件的处理可以包括例如附接、包括或以其他方式关联各种分析、统计或与文件相关联的其他信息。
其他块7762至776N中的每一个块中的值是唯一值,并且作为所执行的处理的结果而全部是不同的。例如,任何一个块中的值对应于先前块中值的更新版本。更新反映在值被分配到的块的散列中。因此,块的值提供了块中执行了什么处理的指示,并且还允许通过区块链回到原始文件的追踪。此追踪确认了整个区块链中的文件的监管链。
例如,考虑先前块中的文件的部分被编辑、屏蔽(blocked out)或像素化(pixelated)以保护文件中示出的个人的身份的情况。在这种情况下,包括经编辑的文件的块将包括与经编辑的文件相关联的元数据,例如,如何执行编辑、谁执行编辑、(多个)编辑发生的时间戳等。可以对元数据进行散列以形成值。因为该块的元数据不同于被散列以形成先前块中的值的信息,所以这些值彼此不同,并且可以在解密时被恢复。
在一个实施例中,当出现以下中的任何一个或多个时,可以更新先前块的值(例如,所计算的新的散列值),以形成当前块的值。在该示例实施例中,可以通过散列下面提到的信息中的全部或部分来计算新的散列值。
a)在如果文件已经以任何方式处理过(例如,如果文件被编辑、复制、改变、访问或采取了一些其他动作)的情况下的新的SHA-2计算的散列值;
b)文件的新的存储位置;
c)与文件相关联的新的元数据;
d)将文件的访问或控制从一个区块链参与方传送到另一区块链参与方。
图7D示出了根据一个实施例的可以表示区块链790中的块的结构的块的实施例。块Blocki包括头部772i、文件774i和值776i。
头部772i包括先前块Blocki-1的散列值和附加参考信息,该附加参考信息例如可以是在本文讨论的任何类型的信息(例如,包括参考、特性、参数等的头部信息)。所有块引用先前块的散列,当然,除了创世块。先前块的散列值可以仅仅是先前块中的头部的散列,或者是先前块中包括文件和元数据的信息中的全部或部分的散列。
文件774i有序地包括多个数据,诸如数据1、数据2、…、数据N。数据用描述内容和/或与数据相关联的特性的元数据Metadata 1、Metadata 2、…、Metadata N来标记。例如,每个数据的元数据可以包括用于指示数据的时间戳、处理数据、指示数据中描绘的个人或其他内容的关键字、和/或可能有助于整体上建立文件的有效性和内容的其他特征(并且特别是其使用数字证据)的信息,例如,如结合下面讨论的实施例所描述的。除了元数据之外,每个数据可以用对先前的数据的引用REF1、REF2、……、REFN来标记,以防止篡改、文件中的间隙以及通过文件的有序引用。
一旦元数据被分配给数据(例如,通过智能合同),元数据就不能在没有散列改变的情况下被变更,其可以被容易地被标识为无效。因此,元数据创建了信息的数据日志,该信息的数据日志可以被访问以供区块链中的参与方使用。
值776i是散列值或基于先前讨论的任何类型的信息计算的其他值。例如,对于任何给定的块Blocki,该块的值可以被更新以反映对该块执行的处理,例如,新的散列值、新的存储位置、相关联文件的新的元数据、控制或访问的传送、标识符或要添加的其他动作或信息。尽管每个块中的值被示为与文件和头部的数据的元数据分离,但是在另一实施例中,该值可以部分或全部基于该元数据。
一旦形成区块链770,在任何时间点,就可以通过向区块链查询块上的值的交易历史来获得文件的不可变的监管链。该查询或跟踪过程可以从解密最近包含的块(例如,最后(第N个)块)的值开始,然后继续解密其他块的值,直到到达创世块并且恢复原始文件。解密还可以包括在每个块处解密头部和文件以及相关联的元数据。
解密是基于每个块中发生的加密的类型来执行的。这可能涉及私钥、公钥或公钥-私钥对的使用。例如,当使用不对称加密时,区块链参与方或网络中的处理器可以使用预定算法生成公钥和私钥对。公钥和私钥通过一些数学关系相互关联。公钥可以被公开地分发以用作用于从其他用户接收消息的地址,例如,IP地址或归属地址(home address)。私钥是保密的,并且用于对发送给其他区块链参与方的消息进行数字签名。签名被包括在消息中,使得接收方可以使用发送方的公钥进行核实。这样,接收方可以确定只有发送方可以发送此消息。
生成密钥对可能类似于在区块链上创建帐户,但实际上不需要在任何地方注册。此外,在区块链上执行的每个交易由发送方使用其私钥进行数字签名。该签名确保只有帐户的所有者才能跟踪和处理(如果在智能合同确定的许可范围内的情况下)区块链的文件。
图8A和图8B示出了区块链的用例的另外的示例,这些示例可以在本文被合并和使用。具体地,图8A示出了存储机器学习(人工智能)数据的区块链810的示例800。机器学习依赖于大量的历史数据(或训练数据)来建立预测模型,以便对新数据进行准确预测。机器学习软件(例如,神经网络等)经常可以筛选数百万条记录来发掘非直觉模式。
在图8A的示例中,主机平台820构建并部署用于资产830的预测性监控的机器学习模型。这里,主机平台820可以是云平台、工业服务器、网络服务器、个人计算机、用户设备等。资产830可以是任何类型的资产(例如,机器或装备等),诸如飞机、机车、涡轮机、医疗机械和装备、石油和天然气装备、船只、轮船、车辆等。作为另一示例,资产830可以是诸如股票、货币、数字硬币、保险等非有形资产。
区块链810可用于显著改善机器学习模型的训练过程802和基于训练的机器学习模型的预测过程804。例如,在802中,历史数据可以由资产830自己(或通过中介,未示出)存储在区块链810上,而不是要求数据科学家/工程师或其他用户收集数据。这可以显著减少主机平台820在执行预测模型训练时所需的收集时间。例如,使用智能合同,数据可以直接和可靠地从其原产地直接传送到区块链810。通过使用区块链810来确保所收集的数据的安全性和所有权,智能合同可以将来自资产的数据直接发送给使用该数据来构建机器学习模型的个体。这允许在资产830之间共享数据。
所收集的数据可以基于共识机制存储在区块链810中。共识机制引入(许可的节点)以确保记录的数据是经过核实的和准确的。记录的数据带有时间戳、加密签名并且不可变。因此,它是可审计的、透明的和安全的。在某些情况下,添加直接写入区块链的IoT设备(如供应链、医疗保健、物流等),提高了记录数据的频率和准确性。
此外,在所收集的数据上对机器学习模型的训练可以由主机平台820进行多轮细化和测试。每一轮都可以基于附加的数据或先前没有考虑过的数据来帮助扩展机器学习模型的知识。在802中,不同的训练和测试步骤(以及与之相关联的数据)可以由主机平台820存储在区块链810上。机器学习模型的每个细化(例如,变量、权重等的改变)可以存储在区块链810上。这提供了如何训练模型以及用什么数据训练模型的可核实的证明。此外,当主机平台820已经获得最终训练的模型时,结果模型可以存储在区块链810上。
在模型已经被训练之后,它可以被部署到现场环境中,在那里其可以基于最终训练的机器学习模型的执行来做出预测/决策。例如,在804中,机器学习模型可用于诸如飞机、风力涡轮机、医疗保健机器等的资产的基于状态的维护(condition-basedmaintenance,CBM)。在该示例中,从资产830反馈回的数据可以被输入到机器学习模型中,并用于进行事件预测,诸如故障事件、错误代码等。由主机平台820处的机器学习模型的执行做出的确定可以存储在区块链810上,以提供可审计/可核实的证明。作为一个非限制性示例,机器学习模型可以预测资产830的一部分的未来故障/故障,并创建警报或通知来替换该部分。该决定背后的数据可以由主机平台820存储在区块链810上。在一个实施例中,本文描述和/或描绘的特征和/或动作可以发生在区块链810上或相对于该区块链810发生。
区块链的新交易可以被一起收集到新块中,并被添加到现有的散列值中。然后对其进行加密,为该新块创建新的散列。当其被加密时,将被添加到下一个交易列表中,依此类推。结果是块的链,每个块都包含所有之前块的散列值。存储这些块的计算机定期比较它们的散列值,以确保它们都一致。任何不一致的计算机都会丢弃导致问题的记录。这种方法有利于确保区块链的防篡改性,但并不完美。
操纵(game)这个系统的一个方法是让不诚实的用户改变对他们有利的交易列表,但是保持散列不变。这可以通过暴力来实现,换句话说,通过改变记录,加密结果,并查看散列值是否相同。如果没有,则一次又一次地尝试,直到找到匹配的散列。区块链的安全性基于这样一种信念,即普通计算机只能在完全不切实际的时间尺度上执行这种暴力攻击,诸如宇宙的年龄。相比之下,量子计算机要快得多(快1000倍),因此构成了更大的威胁。
图8B示出了量子安全区块链852的示例850,其实现量子密钥分发(quantum keydistribution,QKD)以保护免受量子计算攻击。在该示例中,区块链用户可以使用QKD核实彼此的身份。这使用量子粒子(诸如光子)发送信息,窃听者不破坏这些信息就无法复制它们。这样,通过区块链的发送方和接收方可以确定彼此的身份。
在图8B的示例中,存在四个用户854、856、858和860。每对用户可以在他们之间共享秘密密钥862(即,QKD)。因为在该示例中有四个节点,所以存在六对节点,因此使用了六个不同的秘密密钥862,包括QKDAB、QKDAC、QKDAD、QKDBC、QKDBD和QKDCD。每对都可以通过使用量子粒子(诸如光子)发送信息来创建QKD,窃听者在不破坏这些信息的情况下无法复制它们。这样,一对用户可以确定彼此的身份。
区块链852的操作基于两个过程(i)创建交易,和(ii)构建聚集新交易的块。可以类似于传统区块链网络创建新交易。每个交易可以包含关于发送方、接收方、创建时间、要传送的量(或值)、证明发送方拥有操作资金的参考交易列表等的信息。该交易记录然后被发送到所有其他节点,在那里其被输入到未确认交易的池中。这里,双方(即来自854-860当中的一对用户)通过提供他们的共享秘密密钥862(QKD)来认证交易。此量子签名可以附加到每个交易中,使得篡改变得非常困难。每个节点针对区块链852的本地副本检查它们的条目,以核实每个交易都有足够的资金。然而,交易尚未得到确认。
可以使用广播协议以分散式方式创建块,而不是对块执行传统的挖掘过程。在预定的时间段(例如,秒、分、小时等)网络可以将广播协议应用于任何未确认的交易,从而获得关于交易的正确版本的拜占庭协议(Byzantine agreement)(共识)。例如,每个节点可以拥有私有值(该特定节点的交易数据)。在第一轮中,节点将它们的私有值传输给彼此。在随后的轮次中,节点传达它们在前一轮中从其他节点接收到的信息。这里,诚实的节点能够在新块中创建一组完整的交易。这个新块可以添加到区块链852中。在一个实施例中,本文描述和/或描绘的特征和/或动作可以发生在区块链852上或相对于该区块链852发生。
图9示出了支持在本文描述和/或描绘的一个或多个示例实施例的示例系统900。系统900包括计算机系统/服务器902,其可与许多其他通用或专用计算系统环境或配置一起操作。适于与计算机系统/服务器902一起使用的众所周知的计算系统、环境和/或配置的示例包括但不限于个人计算机系统、服务器计算机系统、瘦客户机、胖客户机、手持或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络PC、小型计算机系统、大型计算机系统以及包括上述任何系统或设备的分布式云计算环境等。
计算机系统/服务器902可以在由计算机系统执行的计算机系统可执行指令的一般上下文中描述,诸如程序模块。通常,程序模块可以包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、逻辑、数据结构等。计算机系统/服务器902可以在分布式云计算环境中实践,其中任务由通过通信网络链接的远程处理设备来执行。在分布式云计算环境中,程序模块可以位于包括存储器存储设备的本地和远程计算机系统存储介质中。
如图9所示,云计算节点900中的计算机系统/服务器902以通用计算设备的形式示出。计算机系统/服务器902的组件可以包括但不限于一个或多个处理器或处理单元904、系统存储器906以及将包括系统存储器906的各种系统组件耦合到处理器904的总线。
总线表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些架构包括但不限于工业标准架构(ISA)总线,微通道架构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机系统/服务器902典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器902访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。在一个实施例中,系统存储器906实现其他附图的流程图。系统存储器906可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)910和/或高速缓存存储器912。计算机系统/服务器902可以进一步包括其他可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统914可以用于读写不可移动的、非易失性磁介质(图中未显示,通常称为“硬盘驱动器”)。尽管图1中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其他光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线相连。存储器906可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本申请各实施例的功能。
具有一组(至少一个)程序模块918的程序/实用工具916,可以存储在例如存储器906中,这样的程序模块918包括——但不限于——操作系统、一个或者多个应用程序、其他程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块918通常执行本申请所描述的各实施例中的功能和/或方法。
如本领域技术人员将理解的,本申请的各方面可以体现为系统、方法或计算机程序产品。因此,本申请的各方面可以采取完全硬件实施例、完全软件实施例(包括固件、常驻软件、微代码等)的形式或结合软件和硬件方面的实施例,它们在本文中可以统称为“电路”、“模块”或“系统”。此外,本申请的各方面可以采取包含在一个或多个计算机可读介质中的计算机程序产品的形式,该一个或多个计算机可读介质具有包含在其上的计算机可读程序代码。
计算机系统/服务器902也可以与一个或多个外部设备920(例如键盘、指向设备、显示器922等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器902交互的设备通信,和/或与使得该计算机系统/服务器902能与一个或多个其他计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过I/O接口924进行。并且,计算机系统/服务器902还可以通过网络适配器926与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器926通过总线与计算机系统/服务器12的其他模块通信。应当明白,尽管图中未示出,可以结合计算机系统/服务器902使用其他硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
尽管系统、方法和非暂时性计算机可读介质中的至少一个的示例性实施例已经在附图中示出并在前面的具体实施方式中描述,但是应当理解,本申请不限于所公开的实施例,而是能够进行由所附权利要求所阐述和定义的许多重新布置、修改和替换。例如,各种图的系统的能力可以由本文描述的一个或多个模块或组件来执行,或者在分布式架构中执行,并且可以包括发送器、接收器或两者的对。例如,由各个模块执行的全部或部分功能可以由这些模块中的一个或多个执行。此外,本文描述的功能可以在模块或组件内部或外部的不同时间以及与不同事件相关地执行。此外,在各种模块之间发送的信息可以经由数据网络、互联网、语音网络、互联网协议网络、无线设备、有线设备中的至少一个和/或经由多个协议在模块之间发送。此外,由任何模块发送或接收的消息可以直接和/或经由一个或多个其他模块发送或接收。
本领域技术人员将会理解,“系统”可以被实现为个人计算机、服务器、控制台、个人数字助理(PDA)、蜂窝电话、平板计算设备、智能手机或任何其他合适的计算设备,或者设备的组合。将上述功能呈现为由“系统”执行并不旨在以任何方式限制本申请的范围,而是旨在提供许多实施例的一个示例。实际上,本文公开的方法、系统和装置可以以符合计算技术的本地化和分布式形式来实现。
应当注意,本说明书中描述的一些系统特征已经被呈现为模块,以便更具体地强调它们的实现独立性。例如,模块可以被实现为硬件电路,该硬件电路包括定制的超大规模集成(VLSI)电路或门阵列、现成半导体(诸如逻辑芯片、晶体管或其他分立元件)。模块也可以在可编程硬件设备中实现,诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备、图形处理单元等。
模块也可以至少部分地在软件中实现,用于由各种类型的处理器执行。可执行代码的标识单元可以例如包括计算机指令的一个或多个物理或逻辑块,其可以例如被组织为对象、过程或功能。然而,标识的模块的可执行程序不需要物理上位于一起,而是可以包括存储在不同位置的不同指令,当这些指令在逻辑上结合在一起时,构成该模块并实现该模块的所述目的。此外,模块可以存储在计算机可读介质上,该介质可以是例如硬盘驱动器、闪存设备、随机存取存储器(RAM)、磁带或用于存储数据的任何其他这样的介质。
实际上,可执行代码的模块可以是单个指令或许多指令,甚至可以分布在几个不同的代码段上、分布在不同的程序中以及分布在几个存储设备中。类似地,操作数据在本文可以在模块中被标识和图示,并且可以以任何合适的形式被体现,并且被组织在任何合适类型的数据结构中。操作数据可以作为单个数据集来收集,或者可以分布在不同的位置,包括分布在不同的存储设备上,并且可以至少部分地仅仅作为电子信号存在于系统或网络上。
很容易理解,如这里的附图中一般描述和示出的,本申请的组件可以以多种不同的配置来布置和设计。因此,实施例的详细描述并不旨在限制所要求保护的应用的范围,而是仅仅代表所选择的应用实施例。
本领域普通技术人员将容易理解,可以用不同顺序的步骤和/或不同于所公开的配置的硬件元件来实践上述内容。因此,尽管已经基于这些优选实施例描述了本申请,但是对于本领域技术人员来说,某些修改、变化和替代结构将是显而易见的。
虽然已经描述了本申请的优选实施例,但是应当理解,所描述的实施例仅是说明性的,并且当考虑到其全部范围的等同物和修改(例如,协议、硬件设备、软件平台等)时,本申请的范围仅由所附权利要求来限定。
Claims (20)
1.一种装置,包括:
存储器,被配置为存储索引结构,所述索引结构包括来自区块链分类账的键的索引,其中所述键被存储为所述索引结构中的节点;以及
处理器,被配置为接收对存储在所述区块链分类账上的数据的区块链请求,从所述索引结构中的所述节点读取包括在所述区块链请求中的非关键查询的键的集合,以及生成并存储所述区块链请求的读取集,所述读取集不包括所述非关键查询的所述键的集合的值。
2.根据权利要求1所述的装置,其中所述索引结构包括二叉树,在所述二叉树中,所述键以分层方式被布置为节点。
3.根据权利要求1所述的装置,其中所述处理器还被配置为基于被添加到所述区块链分类账的键值来构建所述索引结构。
4.根据权利要求1所述的装置,其中所述处理器被配置为经由next函数从所述索引结构中的所述节点逐个读取所述键的集合。
5.根据权利要求1所述的装置,其中所述处理器还被配置为当所述区块链请求的查询不影响所述区块链请求的有效性时,将所述查询标识为所述非关键查询。
6.根据权利要求1所述的装置,其中所述处理器还被配置为基于所述区块链请求的先前读取集来验证所述区块链请求,所述先前读取集不包括从所述索引结构读取的所述键的集合的值。
7.根据权利要求1所述的装置,其中所述索引结构在区块链对等体节点的链码的逻辑内实现。
8.根据权利要求1所述的装置,其中所述索引结构中的所述键对应于存储在所述区块链分类账的区块链上的唯一值。
9.一种方法,包括:
存储索引结构,所述索引结构包括来自区块链分类账的键的索引,其中所述键被存储为所述索引结构中的节点;
接收对存储在所述区块链分类账上的数据的区块链请求;
从所述索引结构中的节点读取包括在所述区块链请求中的非关键查询的键的集合;以及
生成并存储所述区块链请求的读取集,所述读取集不包括所述非关键查询的所述键的集合的值。
10.根据权利要求9所述的方法,其中所述索引结构包括二叉树,在所述二叉树中,所述键以分层方式被布置为节点。
11.根据权利要求9所述的方法,还包括基于被添加到所述区块链分类账的键值来构建所述索引结构。
12.根据权利要求9所述的方法,其中所述读取包括经由next函数从所述索引结构中的所述节点逐个读取所述键的集合。
13.根据权利要求9所述的方法,还包括当所述区块链请求的查询不影响所述区块链请求的有效性时,将所述查询标识为所述非关键查询。
14.根据权利要求9所述的方法,还包括基于所述区块链请求的先前读取集来验证所述区块链请求,所述先前读取集不包括从所述索引结构读取的所述键的集合的值。
15.根据权利要求9所述的方法,其中所述索引结构在区块链对等体节点的链码的逻辑内实现。
16.根据权利要求9所述的方法,其中所述索引结构中的所述键对应于存储在所述区块链分类账的区块链上的唯一值。
17.一种包括指令的非暂时性计算机可读介质,所述指令在由处理器读取时使所述处理器执行方法,所述方法包括:
存储索引结构,所述索引结构包括来自区块链分类账的键的索引,其中所述键被存储为所述索引结构中的节点;
接收对存储在所述区块链分类账上的数据的区块链请求;
从所述索引结构中的节点读取包括在所述区块链请求中的非关键查询的键的集合;以及
生成并存储所述区块链请求的读取集,所述读取集不包括所述非关键查询的所述键的集合的值。
18.根据权利要求17所述的非暂时性计算机可读介质,其中所述索引结构包括二叉树,在所述二叉树中,所述键以分层方式被布置为节点。
19.根据权利要求17所述的非暂时性计算机可读介质,其中所述方法还包括基于被添加到所述区块链分类账的键值来构建所述索引结构。
20.根据权利要求17所述的非暂时性计算机可读介质,其中所述读取包括经由next函数从所述索引结构中的所述节点逐个读取所述键的集合。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/751,151 US11269863B2 (en) | 2020-01-23 | 2020-01-23 | Index structure for blockchain ledger |
US16/751,151 | 2020-01-23 | ||
PCT/IB2021/050188 WO2021148904A1 (en) | 2020-01-23 | 2021-01-12 | Index structure for blockchain ledger |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115004625A true CN115004625A (zh) | 2022-09-02 |
Family
ID=76970563
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180010632.4A Pending CN115004625A (zh) | 2020-01-23 | 2021-01-12 | 用于区块链分类账的索引结构 |
Country Status (7)
Country | Link |
---|---|
US (1) | US11269863B2 (zh) |
JP (1) | JP2023513420A (zh) |
CN (1) | CN115004625A (zh) |
AU (1) | AU2021210206B2 (zh) |
DE (1) | DE112021000688T5 (zh) |
GB (1) | GB2607780A (zh) |
WO (1) | WO2021148904A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11711204B2 (en) * | 2020-01-29 | 2023-07-25 | EMC IP Holding Company LLC | Using sparse merkle trees for smart synchronization of S3 |
US11645399B1 (en) * | 2021-01-11 | 2023-05-09 | American Express Travel Related Services Company, Inc. | Searching encrypted data |
CN113014563B (zh) * | 2021-02-10 | 2022-03-25 | 华中科技大学 | 一种保障可搜索公钥加密检索完备性的方法及系统 |
US20230128039A1 (en) * | 2021-10-22 | 2023-04-27 | Mastercard International Incorporated | Method and system for dynamic addition of blocks in a blockchain |
JP2024022375A (ja) * | 2022-08-05 | 2024-02-16 | 富士通株式会社 | 情報処理プログラム、情報処理方法、および情報処理装置 |
WO2024050361A1 (en) * | 2022-08-29 | 2024-03-07 | The Curators Of The University Of Missouri | Blockchain transactions based on participant ranking |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0522488B1 (en) | 1991-07-10 | 2002-02-20 | Hitachi, Ltd. | Method of sorting on distributed database system and method of accessing thereto |
GB2508573A (en) | 2012-02-28 | 2014-06-11 | Qatar Foundation | A computer-implemented method and computer program for detecting a set of inconsistent data records in a database including multiple records |
US10366065B2 (en) * | 2016-04-29 | 2019-07-30 | Netapp, Inc. | Memory efficient lookup structure |
CN108572978A (zh) | 2017-03-10 | 2018-09-25 | 深圳瀚德创客金融投资有限公司 | 构建用于区块链的倒排索引结构的方法和计算机系统 |
WO2018205137A1 (en) | 2017-05-09 | 2018-11-15 | Accenture Global Solutions Limited | Data storage layer index for efficient information retrieval |
US10565192B2 (en) * | 2017-08-01 | 2020-02-18 | International Business Machines Corporation | Optimizing queries and other retrieve operations in a blockchain |
US10733176B2 (en) | 2017-12-04 | 2020-08-04 | International Business Machines Corporation | Detecting phantom items in distributed replicated database |
KR102232641B1 (ko) * | 2017-12-13 | 2021-03-26 | 서강대학교산학협력단 | 블록체인 기반 IoT 환경에서의 다중 검색을 지원하는 데이터 구조체를 이용한 검색 방법 및 그 방법에 따른 장치 |
US11775479B2 (en) * | 2018-05-24 | 2023-10-03 | Luther Systems Us Incorporated | System and method for efficient and secure private similarity detection for large private document repositories |
CN208781225U (zh) * | 2018-07-12 | 2019-04-23 | 中国科学院深圳先进技术研究院 | 一种区块链时空数据查询系统及电子设备 |
CN108595720B (zh) | 2018-07-12 | 2020-05-19 | 中国科学院深圳先进技术研究院 | 一种区块链时空数据查询方法、系统及电子设备 |
US11169985B2 (en) * | 2018-07-27 | 2021-11-09 | Oracle International Corporation | System and method for supporting SQL-based rich queries in hyperledger fabric blockchains |
CN109086413A (zh) * | 2018-08-03 | 2018-12-25 | 上海点融信息科技有限责任公司 | 用于搜索区块链数据的方法、设备及可读存储介质 |
GB2591693B (en) * | 2018-09-18 | 2022-08-24 | Newsouth Innovations Pty Ltd | A block chain-based system for multi-party, multistage process verification |
US10929473B2 (en) * | 2018-09-27 | 2021-02-23 | Palo Alto Research Center Incorporated | Integrated index blocks and searching in blockchain systems |
CN110362536A (zh) | 2019-07-15 | 2019-10-22 | 北京工业大学 | 基于告警关联的日志密文检索方法 |
-
2020
- 2020-01-23 US US16/751,151 patent/US11269863B2/en active Active
-
2021
- 2021-01-12 AU AU2021210206A patent/AU2021210206B2/en active Active
- 2021-01-12 DE DE112021000688.6T patent/DE112021000688T5/de active Pending
- 2021-01-12 GB GB2212228.7A patent/GB2607780A/en active Pending
- 2021-01-12 CN CN202180010632.4A patent/CN115004625A/zh active Pending
- 2021-01-12 WO PCT/IB2021/050188 patent/WO2021148904A1/en active Application Filing
- 2021-01-12 JP JP2022544157A patent/JP2023513420A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
GB2607780A (en) | 2022-12-14 |
JP2023513420A (ja) | 2023-03-31 |
AU2021210206A1 (en) | 2022-06-16 |
GB202212228D0 (en) | 2022-10-05 |
WO2021148904A1 (en) | 2021-07-29 |
AU2021210206B2 (en) | 2024-04-04 |
US11269863B2 (en) | 2022-03-08 |
US20210232568A1 (en) | 2021-07-29 |
DE112021000688T5 (de) | 2022-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115210741B (zh) | 部分有序的区块链 | |
US11200260B2 (en) | Database asset fulfillment chaincode deployment | |
US11250021B2 (en) | Faster view change for blockchain | |
AU2021210206B2 (en) | Index structure for blockchain ledger | |
US11251938B2 (en) | Blockchain verification using non-consecutive blocks | |
US11362826B2 (en) | Endorsement process for non-deterministic application | |
US11489663B2 (en) | Correlation-based hash tree verification | |
CN114128214A (zh) | 用于配置区块链的安全层 | |
US11580098B2 (en) | Multi-client transaction validation | |
US11194770B2 (en) | Database mergeable ledgers | |
WO2022089198A1 (en) | Blockchain for artificial intelligence training | |
US20210297264A1 (en) | Enabling consensus in distributed transaction processing systems | |
US11343313B1 (en) | Fault tolerant periodic leader rotation for blockchain | |
CN114450708A (zh) | 基于现有链码的链码推荐 | |
US11379472B2 (en) | Schema-based pruning of blockchain data | |
US20210126787A1 (en) | Optimal endorser node determination based on state | |
US11379474B2 (en) | Computation of containment relationships | |
WO2023046409A1 (en) | Digital asset platform with hsm verification | |
US11416474B2 (en) | Blockchain-based software library access and usage management | |
US20210256442A1 (en) | Computation of containment relationships | |
US20210263908A1 (en) | Multi-candidate data structure for transaction validation | |
US11249949B2 (en) | Batch processing | |
US20210342291A1 (en) | Data archive | |
US20210157783A1 (en) | Dynamic updates of decentralized invoices | |
CN111984378A (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 |