CN112131254A - 用于区块链分类账的sql处理引擎 - Google Patents
用于区块链分类账的sql处理引擎 Download PDFInfo
- Publication number
- CN112131254A CN112131254A CN202010535740.0A CN202010535740A CN112131254A CN 112131254 A CN112131254 A CN 112131254A CN 202010535740 A CN202010535740 A CN 202010535740A CN 112131254 A CN112131254 A CN 112131254A
- Authority
- CN
- China
- Prior art keywords
- blocks
- blockchain
- cache
- sql
- data
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24539—Query rewriting; Transformation using cached or materialised query results
-
- 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/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6227—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database where protection concerns the structure of data, e.g. records, types, queries
-
- 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/221—Column-oriented storage; Management thereof
-
- 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
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- 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
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
-
- 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
-
- 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
-
- 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/64—Protecting data integrity, e.g. using checksums, certificates or signatures
Abstract
接收应用于在区块链分类账上存储的区块中的区块子集的结构化查询语言(SQL)请求,在高速缓存中存储在区块链分类账上存储的区块中的一部分区块,识别该SQL请求所应用于的、未存储在高速缓存中的一个或多个区块,以及从区块链分类账检索所识别的未存储在高速缓存中的一个或多个区块,执行一个合并所述SQL请求所应用于的高速缓存中的一个或多个区块和从区块链分类账检索的一个或多个区块的SQL操作,以及将所合并的区块发送到与所接收的SQL请求相关联的计算系统。
Description
技术领域
本申请一般涉及用于查询区块链数据的系统,尤其涉及一种可利用高速缓存表来存储区块链分类账中的区块并以部分谓词下推来响应SQL查询的SQL处理引擎。
背景技术
中心化数据库在一个位置的单个数据库(如数据库服务器)中存储和维护数据。这个位置通常是中央计算机,例如桌面中央处理单元(CPU)、服务器CPU或主机。中心化数据库中存储的信息通常可以从多个不同的点访问。例如,多个用户或客户端工作站可以基于客户端/服务器配置在中心化数据库上同时工作。中心化数据库由于其单一的位置而易于管理、维护和控制,尤其适合安全的需要。在中心化数据库中,数据冗余被最小化,因为所有数据的单一存储位置也意味着给定的数据集只有一个主记录。
但是,中心化数据库存在重大缺陷。例如,中心化数据库有单一的故障点。特别地,如果没有容错考虑,并且发生硬件故障(例如硬件、固件和/或软件故障),则数据库中的所有数据都将丢失,所有用户的工作将中断。此外,中心化数据库高度依赖于网络连接。因此,连接越慢,每次数据库访问所需的时间就越长。另一个缺点是当中心化数据库由于单一的位置而遇到高流量时,会出现瓶颈。此外,中心化数据库提供对数据的有限访问,因为数据库只维护一个数据副本。因此,多个设备无法同时访问同一数据块,而不会造成严重问题或有覆盖存储数据的风险。此外,由于数据库存储系统具有最小数据冗余、甚至无数据冗余,因此,意外丢失的数据很难检索,除非通过手动操作从备份存储中检索。因此,需要一种克服这些缺点和局限的解决方案。
近来,区块链作为可以减轻传统数据库存储缺点的存储机制已经得到普及。然而,传统数据库优于区块链的一个好处是能够处理提供高效的数据库取回操作的SQL查询。同时,当区块链接收到对区块的查询请求时,在没有索引的情况下,必须扫描/访问整个分类账。因此,需要一种克服这些缺点和限制的解决方案。
发明内容
一个示例性实施例提供了一种系统,所述系统包括网络接口、高速缓存以及处理器,其中,所述网络接口被配置为接收应用于在区块链分类账上存储的区块中的区块子集的结构化查询语言(SQL)请求,所述高速缓存被配置为存储在所述区块链分类账上存储的区块中的一部分区块,所述处理器被配置为识别所述SQL请求所应用于的、未存储在所述高速缓存中的一个或多个区块,并且从所述区块链分类账检索出未存储在所述高速缓存中的所识别的一个或多个区块,其中,所述处理器还被配置为执行SQL操作以合并来自所述SQL请求所应用于的所述高速缓存的一个或多个区块和所述从所述区块链分类账检索出的一个或多个区块,并且控制所述网络接口将所合并的区块发送至与所接收的SQL请求相关联的计算系统。
另一个示例性实施例一种包括以下一项或多项的方法:接收应用于在区块链分类账上存储的区块中的区块的子集的结构化查询语言(SQL)请求,在高速缓存中存储在区块链分类账上存储的区块中的一部分区块,识别所述SQL请求所应用于的未存储在高速缓存中的一个或多个区块,以及从区块链分类账检索出所识别的未存储在高速缓存中的一个或多个区块,执行SQL操作以合并来自所述SQL请求所应用于的高速缓存的一个或多个区块和所述从区块链分类账检索出的一个或多个区块,以及将合并的区块发送到与所接收的SQL请求相关联的计算系统。
接收应用于在区块链分类账上存储的区块中的区块的子集的结构化查询语言(SQL)请求,在高速缓存中存储在区块链分类账上存储的区块中的一部分区块,识别所述SQL请求所应用于的未存储在高速缓存中的一个或多个区块,以及从区块链分类账检索出所识别的未存储在高速缓存中的一个或多个区块,执行SQL操作以合并来自所述SQL请求所应用于的高速缓存的一个或多个区块和所述从区块链分类账检索出的一个或多个区块,以及将合并的区块发送到与所接收的请求相关联的计算系统。
附图说明
图1示出按照示例性实施例的包括用于区块链的SQL处理引擎的的系统的示图。
图2A示出按照示例性实施例的区块链体系结构配置示例。
图2B示出按照示例性实施例的在节点之间的区块链事务流。
图3A示出按照示例性实施例的许可网络。
图3B示出按照示例性实施例的另一个许可网络。
图3C是示出按照示例性实施例的无许可网络的示图。
图4A是示出按照示例性实施例的以表格格式存储区块数据的高速缓存表的示图。
图4B是示出按照示例性实施例的检索和组合高速缓存表和区块链分类账中的区块数据的处理的示图。
图5是示出按照示例性实施例的使用用于区块链的高速缓存表来处理SQL命令的方法的示图。
图6A示出按照实施例的被配置以执行本文所述的一个或多个操作的示例系统。
图6B示出按照实施例的被配置以执行本文所述的一个或多个操作的另一个示例系统。
图6C示出按照实施例的被配置以使用智能合约的另一个示例系统。
图6D示出根据示例性实施例的被配置以使用区块链的另一个示例系统。
图7A示出按照实施例的将新块添加到分布式分类账的过程。
图7B示出按照示例性实施例的新数据块的内容。
图7C示出按照示例性实施例的用于数字内容的区块链。
图7D示出按照示例性实施例的可以表示区块链中区块的结构的一个区块。
图8A是示出按照示例性实施例的存储机器学习(人工智能)数据的示例区块链的示图。
图8B是示出按照示例性实施例的示例量子安全(quantum-secure)区块链的示图。
图9示出支持一个或多个示例性实施例的示例系统。
具体实施方式
容易理解,本文附图中一般说明和例示的组件,可以以各种不同的配置来布置和设计。因此,如附图中所示的方法、装置、非暂时性计算机可读介质和系统中的至少一个的实施例的以下详细描述并非旨在限制所要求保护的本申请的范围,而仅仅是代表所选实施例。
贯穿说明书描述的特征、结构或特性可以在一个或多个实施例中以任何合适的方式组合或去除。例如,贯穿本说明书的短语“示例性实施例”、“一些实施例”或其它类似语言的使用指的是结合该实施例描述的特定特征、结构或特性可包括在至少一个实施例中的事实。因此,贯穿本说明书出现的短语“示例性实施例”、“在一些实施例中”、“在其它实施例中”或其它类似语言不一定都指代相同的一组实施例,所描述的特征、结构在一个或多个实施例中,可以以任何合适的方式组合或去除特征。
另外,虽然术语“消息”可能已经在实施例的描述中使用,但是本申请可以应用于许多类型的网络和数据。此外,虽然在示例性实施例中可以描绘某些类型的连接、消息和信令,但是本申请不限于某种类型的连接、消息和信令。
示例性实施例提供了方法、系统、组件、非瞬态计算机可读介质、设备和/或网络,其提供了一种结构化查询语言(SQL)处理引擎,该处理引擎可利用高速缓存表来更有效地从区块链分类账取回区块。当接收到对一个区块子集的SQL查询时,SQL处理引擎可以识别并检索出该子集的存储在高速缓存表中的一部分,并从区块链分类账中检索出任何未高速缓存的区块。此外,SQL处理引擎可以使用并集(union)命令来组合所述高速缓存的区块和非高速缓存的区块,并且响应于所述SQL查询而返回所组合的数据。
本申请在一个实施例中,使用去中心化数据库(诸如如区块链),其是一个包括多个相互通信的节点的分布式存储系统。去中心化数据库包括一个只可附加但不可改变的数据结构,类似于能够在不受信任的各方之间维护记录的分布式分类账(ledger)。不受信任的各方在本文中称为对等体(peers)或对等节点。每个对等体维护数据库记录的副本,在分布式对等体之间没有达成共识(consensus)的情况下,单一对等体不能修改数据库记录。例如,对等体可以执行共识协议来验证区块链存储事务,将存储事务分组为区块,并在区块上构建哈希链。该过程根据需要通过对存储事务进行排序来形成分类账以便保持一致性。在各种实施例中,可以使用许可的和/或无许可的区块链。在公共或无许可的区块链中,任何人都可以在没有特定身份的情况下参与。公共区块链通常涉及本地加密货币,使用基于各种协议(诸如工作量证明(PoW))的共识。另一方面,许可的区块链数据库提供了在一组有共同目标但彼此不完全信任的实体—例如交换资金、商品、信息等的企业—之间的安全交互。
本申请可以利用一种操作为去中心化存储方案定制的、称为“智能合约”或“链码”(chaincode)的任意可编程逻辑的区块链。在某些情况下,可能存在用于管理功能和参数的专用链码,称为系统链码。本申请可以进一步利用这种智能合约:其是受信任的分布式应用程序,利用了区块链数据库的防篡改属性和节点之间称为背书(endorsement)或背书策略的基础协议。与本申请关联的区块链事务可先被“背书”(endorsed)再被提交(committed)到区块链,而未被背书的事务则不被考虑。背书策略允许链码为事务指定为背书所需的一组对等节点的形式的背书者。当客户端将事务发送到在背书策略中指定的对等体时,该事务被执行,以验证该事务。在验证之后,事务进入排序阶段,在排序阶段,用共识协议来生成按顺序排列的一系列背书的事务,这些背书的事务被分组到区块中。
本申请可以利用作为区块链系统通信实体的节点。“节点”可以执行逻辑功能,即不同类型的多个节点可以在同一物理服务器上运行。节点在信任域中被分组,并与以各种方式控制它们的逻辑实体相关联。节点可以包括不同的类型,例如客户端或提交客户端(submitting-client)节点,其将事务调用(transaction-invocation)提交给背书者(例如对等体),并将事务建议广播给排序服务(例如排序节点)。另一种节点类型是可以接收客户端提交的事务、提交事务并维护区块链事务分类账的状态和副本的对等节点。对等体也可以扮演背书者(endorser)的角色,尽管这不是必需的。排序服务节点或排序者(orderer)是为所有节点运行通信服务的节点,它实现交付保证,例如在提交事务和修改区块链的世界状态(world state)时向系统中的每个对等节点的广播,这是通常包括控制和设置信息的初始区块链事务的另一个名称。
本申请可以利用是区块链的所有状态转变的有序、防篡改的记录的分类账。状态转变可能由参与方(例如,客户端节点、排序节点、背书者节点、对等节点等)提交的链码调用(即,事务)产生。每个参与方(例如对等节点)都可以维护分类账的副本。事务可以导致一组资产键-值对作为一个或多个操作数被提交给分类账,例如创建、更新、删除等。分类账包括用于以块存储不可改变的有序记录的区块链(也称为链)。分类账还包括维护区块链的当前状态的状态数据库。
本申请可以使用一种是事务日志的链,其结构为哈希链接的区块(hash-linkedblock),每个区块包含一系列的N个事务,其中N等于或大于1。块头(block header)包括该区块的事务的哈希(hash),以及前一区块的头的哈希。通过这种方式,分类账上的所有事务都可以按顺序排列并以加密方式链接在一起。因此,在不破坏哈希链(hash links)的情况下,不可能篡改分类账数据。最近添加的区块链块的哈希代表在它之前已经到达的链上的每一个事务,这使得有可能确保所有对等节点处于一致和可信状态。可以将该链存储在对等节点文件系统(即本地、附加存储、云等)上,高效地支持区块链工作负载的只可附加的性质。
不可改变的分类账的当前状态,代表链事务日志中包含的所有的键的最新值。当前状态表示一个通道已知的最新键值,因此有时称之为世界状态。链码调用针对分类账的当前状态数据执行事务。为了使这些链码交互有效,可以将键的最新值存储在状态数据库中。状态数据库可以只是链事务日志的索引视图,因此可以随时根据链来重新生成。状态数据库可以在对等节点启动时和接受事务之前自动恢复(或根据需要生成)。
本文描述和描绘的SQL处理引擎的一些益处,包括通过将先前访问的区块链数据存储在高速缓存中来提高访问区块链数据的速度。高速缓存可以以能使用SQL命令(例如,SELECT等)进行查询的方式来构造(例如,具有列和行的关系数据库表等)。除了通过使用高速缓存来加速对块链数据的访问之外,SQL处理引擎还可缓解高速缓存的不包含最新的数据的主要缺点。这种缓解是通过部分谓词下推(predicate pushdown)—其使得SQL处理引擎能够仅检索出区块的特定子集(例如,不在高速缓存中的区块)—并且例如使用SQLUNION构造命令将它们与高速缓存中的区块合并来实现的。此外,SQL处理引擎可以在允许使用包括诸如SELECT、FROM、WHERE等SQL命令的SQL语言来查询区块链数据(例如,可以由诸如块索引之类的唯一性别名标识的区块)的更广泛的解决方案中实现。
SQL处理引擎通过提高SQL处理从分类账检索数据的速度同时维持整个数据集(即,包括不一定在高速缓存中的"最新"块)的可用性来产生对查询区块链的计算机功能功能改进。SQL处理引擎也不需要预先存在的索引。
SQL查询的执行模型要求整个数据集被加载(稍后可能要被过滤掉)到引擎存储器中。由于分布式分类账的技术特性,这个要求在区块链的性能方面将是惊人地昂贵的。为了减轻这种花费,SQL处理引擎执行部分谓词下推,所述部分谓词下推识别并过滤掉存储在高速缓存中的一部分区块,使得仅从区块链分类账中查询未高速缓存的区块。同时,来自高速缓存的区块可以被容易地检索出,而不需要访问区块链分类账。
示例性实施例描述了一种可以基于一种实现SQL格式的高速缓存表的SQL处理系统来扩展用SQL查询区块链的方式的系统。例如,高速缓存表可以是一个以SQL格式(表格、列、行等)实现的并且可以存储从区块链账本检索出的数据的分类账区块高速缓存。当SQL处理引擎接收到对区块链数据(区块等)的SQL查询时,SQL处理引擎可以从高速缓存中检索/获取所请求的区块中的任何区块。针对没有被高速缓存的任何剩余区块,SQL处理引擎可以执行去除已经被缓存的区块部分谓词下推,使得仅从区块链分类账识别和检索出未被缓存的区块。这可以显著减少处理时间,防止系统为了寻找必要的数据而不得不扫描整个区块链分类账。此外,SQL处理引擎可以执行一个SQL UNION操作,以将满足整个SQL请求的来自高速缓存的区块与来自区块链分类账的区块合并。合并的区块可以由SQL处理引擎进一步处理,诸如将合并后的区块发送到某个应用等。
图1示出了根据示例性实施例的、包括用于从区块链130的分布式账本查询数据的SQL处理引擎120的系统100。参考图1,SQL处理引擎120可以从区块链130脱链(off-chain)的方式实现。例如,SQL处理引擎120可以是在诸如服务器、云平台、数据库、用户设备等计算系统上运行的服务、程序、应用等。SQL处理引擎120可以包括一个或多个高速缓存表122,高速缓存表被存储在SQL处理引擎120中,或者被远程存储但是可由SQL处理引擎120经由网络访问。在该示例中,SQL处理引擎120可以与区块链130(其包含对等节点)隔离地执行。此时称SQL处理引擎120是“脱链的”,并且可以在具有对区块链网络中的对等节点的网络访问的任何计算系统上执行。
应用110(或未示出的其他实体)可以从区块链130查询数据。例如,应用可以提交一个SQL查询,要求从区块链130请求数据区块的特定子集。响应于接收到SQL查询,SQL处理引擎120可以标识已经被高速缓存在高速缓存表122中的一部分区块,并在本地(或经由远程存储)检索出这部分区块。对于SQL请求中的任何未高速缓存的区块,SQL处理引擎120可以从区块链130的分布式账本检索出未高速缓存的区块。此外,SQL处理引擎120可以例如通过SQL并集(union)命令将来自高速缓存表122的高速缓存的区块与来自区块链130的非高速缓存的区块组合,并且将组合的数据块作为SQL响应发送到应用110。
这里,应用110可以是经由网络连接到SQL处理引擎120的分析应用。应用110可以将SQL查询传递到SQL处理引擎120,如果该查询涉及区块链数据,则(在不使用高速缓存表的情况下)SQL处理引擎将扫描整个分类账以将所有区块提取到SQL引擎存储器中,在SQL引擎存储器中可以处理所有区块。然而,在使用高速缓存表的示例中,该查询将被SQL引擎重定向到一个SQL VIEW(视图),该SQL VIEW由对高速缓存的数据和不在高速缓存中的、从分类账中提取的区块的子集进行SQL UNION运算的结果组成。该子集是用带有诸如“WHEREORDINAL>MAX(CACHE_TABLE_ORDINAL)”的WHERE子句的查询来提取的,上述的部分谓词下推技术被应用于该查询以便实际上仅提取那些区块(而不是再提取整个分类帐)。
SQL处理引擎120可以周期性地从区块链130抓取或以其他方式提取区块,并将区块数据以表格格式存储在高速缓存表122中。作为示例,SQL处理引擎可以在被明确指示时,通过针对高速缓存表122的INSERT SQL语句,对从区块链130获取的数据进行高速缓存。在用INSERT(插入)语句填充高速缓存表122之前,可以用(例如,图4A所示的等)数据模型来创建高速缓存表。被插入到高速缓存表122中的数据,可源自SQL解决方案的来自区块链应用的区块的联合视图(federated view)。
从区块链130中取出数据以存储在高速缓存表112中的实体,可以是手动执行INSERT语句以向高速缓存插入数据的最终用户。作为另一个例子,自动化过程可以基于某一预定义的准则(例如,周期性地等)来执行INSERT语句以向高速缓存插入数据。这不一定在每次应用访问账本时发生(例如,由最终用户决定是否使用该功能)。由于区块链分类账中数据的不可变性,不需要将旧数据从高速缓存去除,也不需要在高速缓存中直接更新旧数据。如果高速缓存的存储设备达到容量,则可以从高速缓存移除数据以便为更活跃使用的数据释放空间。不过本发明不涉及任何管理高速缓存的存储的系统或方法。
图2A例示了按照实施例的区块链体系结构配置200。参照图2A,区块链架构200可以包括某些区块链元素,例如,一组区块链节点202。区块链节点202可以包括一个或多个节点204-210(这四个节点仅仅是举例说明)。这些节点参与许多活动,例如区块链事务添加和验证过程(共识)。一个或多个区块链节点204-210可以根据背书策略来背书(endorse)事务,并可以为架构200中的所有区块链节点提供排序(ordering)服务。区块链节点可以启动区块链验证,并寻求写入存储在区块链层216中的区块链不可变分类账,其副本也可以存储在基础物理设施214上。区块链配置可以包括一个或多个应用程序224,这些应用程序224链接到应用程序编程接口(API)222以访问和执行所存储的程序/应用程序代码220(例如,链码、智能合约等),这些程序/应用程序代码可以根据参与者寻求的自定义配置创建,并可以维护自己的状态,控制自己的资产,以及接收外部信息。这可以作为事务进行部署,并通过附加到分布式分类账而安装在所有区块链节点204-210上。
区块链基础或平台212可包括区块链数据、服务(例如,加密信任服务、虚拟执行环境等)以及基础物理计算机设施的各个层次,该基础设施可用于接收和存储新的事务,并为寻求访问数据条目的审核者(auditors)提供访问权限。区块链层216可以开放一个接口,以为处理程序代码和参与基础物理设施214提供所需的对虚拟执行环境的访问。加密信任服务218可用于验证诸如资产交换事务的事务,并将信息保密。
图2A的区块链架构配置可以通过由区块链平台212开放的一个或多个接口处理和执行程序/应用程序代码220以及所提供的服务。代码220可以控制区块链资产。例如,代码220可以存储和传输数据,并且可以由节点204-210以智能合约的形式执行,并将链码与条件或其它受其执行约束的代码元素关联起来。作为非限制性的示例,可以创建智能合约来执行提醒、更新和/或其它通知(取决于更改、更新等)。智能合约本身可用于识别与授权、访问要求和分类账使用相关的规则。例如,智能合约可以从区块链读取一个读取集226,其可以由区块链层216中包含的一个或多个处理实体(例如,虚拟机)进行处理。写入集228可以包括该被读数据的智能合约执行结果。基础物理设施214可用于检索这里所述的任何数据或信息。
智能合约可以通过高级应用程序和编程语言创建,然后写入区块链中的区块。智能合约可以包括注册、存储和/或复制到区块链(例如,区块链对等体的分布式网络)的可执行代码。事务是智能合约代码的执行,智能合约代码的执行可以响应于与智能合约相关的条件的满足而进行。智能合约的执行可以触发对数字区块链分类账的状态的可信修改。智能合约的执行导致的对区块链分类账的修改,可以通过一个或多个共识协议在区块链对等体的分布式网络中自动复制。
智能合约可以以键-值对的形式向区块链写入数据。此外,智能合约代码可以读取存储在区块链中的值,并在应用程序操作中使用它们。智能合约代码可以将各种逻辑操作的输出写入区块链。代码可用于在虚拟机或其它计算平台中创建临时数据结构。写入区块链的数据可以是公开的和/或经过加密并作为私有数据维护的。智能合约使用/生成的临时数据,由所提供的执行环境保存在内存中,一旦识别出区块链所需的数据,便被删除。
链码可以包括智能合约的代码解释,具有附加功能。如本文所述,链码可以是部署在计算网络上的程序代码,在共识过程期间由链验证器一起执行和验证。链码接收一个哈希,并从区块链中检索一个与使用先前存储的功能提取器创建的数据模板关联的哈希。如果哈希标识符的哈希与从存储的标识符模板数据创建的哈希匹配,则链码将向被请求的服务发送授权钥。链码可以将与加密细节相关的数据写入区块链。
图2B例示按照实施例的区块链节点之间的区块链事务流250的示例。参考图2B,该事务流可以包括由应用客户端节点260发送给背书对等节点281的事务建议291。背书对等节点281可以验证客户端签名并执行一个链码函数来发起事务。输出可包括链码结果、在链码中读取的一组键/值版本(读取集)和在链码中写入的一组键/值(写入集)。如果得到批准,则将建议响应292连同背书签名一起发送回客户端260。客户端260将背书组装成事务负载293,并将其广播到排序服务节点284。然后,排序服务节点284将排序的事务作为区块交付通道上的所有对等体281-283。在提交到区块链之前,每个对等体281-283可以验证该事务。例如,对等体可以检查背书策略,以确保指定对等体的正确分配已签署结果并对照事务负载293验证了签名。
再次参考图2B,客户端节点260通过构造请求并向对等节点281(背书者)发送请求来发起事务291。客户端260可以包括利用受支持的软件开发工具包(SDK)的应用程序,该工具包利用可用的API来生成事务建议。事务建议是一个调用链码函数以便可以读取数据和/或将数据写入分类账(即,写入资产的新键值对)的请求。该SDK可以充当一个填充程序,用于将事务建议封装成一个适当架构的格式(例如,远程过程调用(RPC)上的协议缓冲区),并获取客户端的加密凭据来生成为事务建议的唯一性签名。
作为响应,背书对等节点281可以验证:(a)事务建议形成得很好,(b)该事务过去未曾提交(重放攻击保护),(c)签名有效,以及(d)提交方(submitter)(在该示例中为客户端260)被适当授权在该通道上执行所建议的操作。背书对等节点281可以将事务建议输入作为被调用的链码功能的参数。然后针对当前状态数据库执行链码以产生包括响应值、读取集和写入集的事务结果。但是,此时没有对分类账进行更新。在292中,将该组值与背书对等节点281的签名一起作为建议响应292传递回客户端260的SDK,其解析负载以供应用程序使用。
作为响应,客户端260的应用程序检查/验证背书对等体签名并比较建议响应以确定建议响应是否相同。如果链码仅查询了分类账,则应用程序将检查查询响应并且通常不将该事务提交给排序服务节点284。如果客户端应用程序打算将该事务提交给排序服务节点284以更新分类账,则应用程序在提交之前确定指定的背书策略是否已得到满足(即,事务所需的所有对等节点都支持该事务)。这里,客户端可以仅包括事务的多方中的一方。在这种情况下,每个客户端可以有自己的背书节点,并且每个背书节点都需要背书该事务。该体系结构使得即使某应用程序选择不检查响应或以其它方式转发未经背书的事务,该背书策略仍将由对等体实施并在提交验证(commitvalidation)阶段得到支持。
在成功检查之后,在步骤293中,客户端260将背书组装到事务中,并向排序节点284广播事务消息内的事务建议和响应。事务可以包含读取/写入集,背书对等体签名和通道ID。排序服务节点284不需要检查事务的整个内容以便执行其操作,而是可以简单地接收来自网络中所有通道的事务,按通道按时间对它们进行排序,并按通道创建事务的区块。
将事务的区块从排序服务节点284交付到通道上的所有对等节点281-283。验证区块内的事务294以确保任何背书策略都得到满足,以及确保自读取集被事务执行生成以来,读取集变量的分类账状态没有变化。将区块中的事务标记为有效或无效。此外,在步骤295中,每个对等节点281-283将区块附加到通道的链上,并且针对每个有效事务,将写入集提交给当前状态数据库。发出一个事件,以通知客户端应用程序已经将事务(调用)已不可变地附加到链上,以及通知该事务验证是有效的还是无效的。
图3A例示了许可的区块链网络300的示例,该网络具有分布式、去中心化的点对点体系结构。在这个例子中,区块链用户302可以向许可的区块链304发起事务。在本例中,事务可以是部署、调用或查询,并可以利用SDK通过客户端侧的应用程序、直接通过API等方式来发布。网络可以提供对诸如审核员的监管者306的访问。区块链网络操作者308管理成员权限,例如将监管者306注册为“审核员”,将区块链用户302注册为“客户”。可以限制审核员只能查询分类账,而客户则可以被授权部署、调用和查询某些类型的链码。
区块链开发者310可以编写链码和客户端应用程序。区块链开发者310可以通过接口将链码直接部署到网络。为了在链码中包括来自传统数据源312的凭证,开发者310可以使用带外连接来访问数据。在该示例中,区块链用户302通过对等节点314连接到许可的区块链304。在进行任何事务之前,对等节点314从管理用户角色和许可的认证机构316检索用户的注册和事务证书。在某些情况下,区块链用户必须拥有这些数字证书才能在许可的区块链304上进行事务。同时,试图使用链码的用户可能需要验证他们在传统数据源312上的凭证。为了确认用户的授权,链码可以通过传统处理平台318使用与该数据的带外连接。
图3B示出了许可的区块链网络320的另一示例,其具有分布式、去中心化的对等架构。在该示例中,区块链用户322可以向许可的区块链324提交事务。在该示例中,事务可以是部署、调用或查询,并且可以利用SDK通过客户端侧的应用程序、直接通过API等方式来发布。区块链网络操作者328管理成员权限,例如将监管者326注册为“审核员”,将区块链用户322注册为“客户”。可以限制审核员只能查询分类账,而客户则可以被授权部署、调用和查询某些类型的链码。
区块链开发者330编写链码和客户端应用程序。区块链开发者330可以通过接口直接将链码部署到网络上。为了在链码中包含来自传统数据源332的凭证,开发者330可以使用带外连接来访问数据。在本例中,区块链用户322通过对等节点334连接到网络。在继续进行任何事务之前,对等节点334从认证机构336检索用户的注册和事务证书。在某些情况下,区块链用户必须拥有这些数字证书才能在许可的区块链324上进行事务。同时,试图使用链码的用户可能需要验证他们在传统数据源332上的凭证。为了确认用户的授权,链码可以通过传统的处理平台338使用与该数据的带外连接。
在一些实施方式中,本文的区块链可以是无许可的区块链。与需要允许才能加入的许可的区块链相反,任何人都可以加入无许可的区块链。例如,为了加入无许可区块链,用户可以通过提交事务并因此向账本添加条目来创建个人地址并开始与网络交互。另外,所有各方都可以选择在系统上运行一个节点并采用挖矿协议(mining protocols)来帮助验证事务。
图3C示出了由包括多个节点354的无许可区块链352处理的事务的过程350。发送者356期望经由无许可区块链352向接收者358发送付款或一些其他形式的值(例如,契约、病历、合同、货物、服务、或能够被封装在数字记录中的任何其他资产)。在一个实施例中,发送方设备356和接收方设备358中的每一个可以具有提供用户界面控制和事务参数显示的数字钱包(与区块链352相关联的)。作为响应,该事务在整个区块链352中被广播到节点354。取决于区块链352的网络参数,所述节点基于由无许可区块链352的创建者确立的规则(其可以是预定义的或动态分配的)来验证360该事务。例如,这可以包括验证所涉及各方的身份等。该事务可能立即被验证事务,或者可能被与其它事务一起放入一个队列中,节点354基于一组网络规则来确定事务是否有效。
在结构362中,将有效的事务形成区块并用锁(哈希)来密封。该过程可以通过节点354中的挖矿节点来执行。挖矿节点可利用专用于挖矿和创建无许可区块链352的区块的其它软件。每个区块可以由网络用商定的算法创建的哈希(例如,256位的数字等)来标识。每个区块可以包括块头、指向链中前一块头的哈希的指针或引用、以及一组有效事务。对前一区块哈希的引用与安全独立区块链的创建相关联。
在区块可被添加到区块链之前,必须验证这些区块。针对无许可区块链352的验证可包括一个工作量证明(Proof-of-work(PoW)),其是对从区块的块头导出的谜题的解。尽管在图3C的示例中未示出,但是用于验证区块的另一过程是赌注证明(proof-of-stake)。与其中算法奖励解决数学问题的挖矿机的工作量证明不同的是,赌注证明以确定性方式根据其财富(也被定义为“赌注”)来选择新区块的创建者。然后,由所选择/挑选的节点执行类似的证明。
通过挖矿364,节点试图通过对一个变量进行递增改变来求解该区块,直到该解满足某个网络范围的目标。这创建了PoW,从而确保正确的回答。换句话说,潜在的解必须证明对问题求解时耗尽计算资源。在某些类型的无许可区块链中,挖矿机可因正确地挖掘出区块而被奖励以值(例如,币等)。
这里,该PoW过程与区块链一起使得极其难以对区块链进行修改,因为攻击者必须修改所有后续区块才能使对一个区块的修改被接受。此外,随着新的区块被开采,修改区块的难度增加,并且后续区块的数量增加。通过分发366,成功验证的区块通过无许可区块链352被分发,并且所有节点354将该区块添加到作为无许可区块链352的可审计分类账的多数链(majority chain)。此外,由发送者356提交的事务中的值被存放或以其他方式转移到接收者设备358的数字钱包。
图4A示出了根据示例性实施例的以表格格式存储区块数据的高速缓存表400。参考图4A,高速缓存表400可用于联合查询(即,数据源不是由SQL处理引擎120管理的,而是被存储在区块链上)。这里,高速缓存表400可将区块链的区块属性(区块数据的值)映射到SQL处理引擎内部所展示的关系数据模型(如SQL表)中的列和/或行。在该示例中,高速缓存表400的列401、402、403、404和405包括区块属性的值,诸如序数值401(例如,块号、块索引等)、通道ID402、区块的数据的计算的哈希403、链上的前一区块的前一哈希404、事务计数405等。其他示例包括过滤值、元数据值、区块的时间戳、计算的哈希等。在该模型中,序数列401存储(映射到)分布式账本上的区块链中的区块的唯一性索引的值。因此,序数列401是相应区块的唯一性值,可以用于标识该区块。
如将理解的,对区块链分类账数据的一般SQL查询将需要在SQL处理引擎中加载整个分类账。然而,使用谓词下推允许SQL处理引擎执行查询的“抢先”过滤(即,在SQL引擎执行其自己的工作之前),以便对哪些区块要从区块链有效地提取到SQL引擎中以及哪些区块已经存储在高速缓存表400中做出决定,从而实现显著的性能改进。由于大多数区块链实现提供了基于其索引来提取单个区块的方式,所以由SQL处理引擎例如通过分析SQL查询“WHERE”子句以基于其索引找到哪些区块被请求/或拒绝来对块索引执行抢先过滤。作为一个示例,“WHERE ORDINAL>100”子句指示SQL处理引擎应当仅检索出索引>100的区块。当分布式账本保持多于100个区块(例如,1024个区块等)时,这可能是显著有益的,因为系统无需针对事务数据扫描整个账本,而是仅需要基于块编号或索引来检索特定区块。
这并非是微不足道的任务,因为大多数“WHERE”子句都是包含多个列和过滤算子的复杂布尔表达式(例如,ORDINAL>15ANDARG_0=“create_account”OR ORDINAL<45ANDARG_1=“customer_name”)。为了实现这一点,SQL处理引擎可以遍历WHERE子句表达式树,并且对于每个过滤算子(例如,=,>,<),计算该过滤器产生的区块的列表(例如,ORDINAL<=45产生“区块0到45”列表)。不应用于ORDINAL列的过滤器产生整个分类帐。当结合过滤算子使用布尔算子(例如,“ORDINAL>15AND ORDINAL<45”中的“AND”)时,根据所使用的布尔算子,使用适当的数学集合运算(例如,UNION、INTERSECTION等)组合来自两个过滤算子的区块的列表。例如,“ORDINAL>15AND ORDINAL<45”产生2个列表(16到最后一个和0到44),它们“交叉”(intersect)以提供“16到44”的最终列表。
图4B示出了根据示例性实施例的从高速缓存表400和区块链440检索和组合区块数据的过程420。参考图4B,SQL处理引擎430接收包括SELECT、FROM和WHERE子句/命令的SQL查询422。这里,SQL处理引擎430可以识别SQL查询422中标识的哪些区块被存储在高速缓存表400中,以及哪些区块没有被高速缓存并且必须从区块链440中检索。在图4A的例子中,高速缓存表400存储块号1-10和31-45。
返回图4B,SQL处理引擎430可以执行部分谓词下推,以过滤哪些区块需要从区块链440检索。在该示例中,SQL处理引擎430可以识别/检测出区块31-40被高速缓存并存储在高速缓存表400中。因此,SQL处理引擎430可以确定SQL查询的剩余区块(即,21-30)必须从区块链440中检索。例如,SQL处理引擎430可以通过执行1)从0到分类帐高度的整数序列与2)高速缓存中的“ORDINAL”(序数)值集合的集合差,来获知从区块链源检索哪些数据。例如,如果高速缓存包含具有以下“ORDINAL”值的区块:(1-10和31-45)并且分类帐的高度是50,则集合差将产生:(1至50)-(1-10和31-45)=(11-30和46-50)。在该示例中,SQL处理引擎430可以直接从区块链源提取“ORDINAL”值在(11-30和46-50)中的区块。然后,这些区块记录可以经由SQL UNION操作与来自高速缓存的区块记录组合,以向请求记录的应用提供完整的区块记录集合。
在不针对“ORDINAL”列进行谓词下推的情况下,SQL处理引擎将需要(通过计算机网络)从区块链拉入/提取每个区块,将每个区块的元数据投射到数据模型中以产生对应的记录,扫描每个记录以提取具有包含在用户提供的子集中的“ORDINAL”列值的那些记录,并且将提取的记录返回给终端用户。在针对“ORDINAL”列进行谓词下推的情况下,SQL处理引擎将(通过计算机网络)仅拉入/提取具有包含在所计算的列表中的“ORDINAL”列值的那些区块。
图5示出了根据示例性实施例的使用用于区块链的高速缓存表来处理SQL命令的方法500。参考图5,该方法可以包括,在510,接收一个针对在区块链分类账上存储的区块之中的一个区块子集的结构化查询语言(SQL)请求。该方法可以包括,在520,在高速缓存中存储在区块链分类账上存储的区块之中的一部分区块。这里,高速缓存可以在接收SQL请求之前存储区块。换言之,当在520接收到SQL请求时,被高速缓存的区块可能已经存在于高速缓存中。
在530,该方法可包括识别SQL请求所适合的、未存储在高速缓存中的一个或多个区块,以及从区块链分类账检索出所识别的未存储在高速缓存中的一个或多个区块。在540,该方法可以包括执行SQL操作(例如SQL UNION等)以合并SQL请求所适合的高速缓存中的一个或多个区块和从区块链分类账检索的一个或多个区块。在550,该方法可包括将合并的区块发送到与接收到的SQL请求相关联的计算系统。
在一些实施例中,所述检索还包括检索存储在区块链分类账上的子集的一个或多个未高速缓存的区块。在一些实施例中,所述检索还可以包括执行谓词下推,其中从所述请求中过滤掉所述一个或多个高速缓存的区块,以识别所述一个或多个剩余的未高速缓存的区块。在一些实施例中,高速缓存可以包括将不同类型的区块数据存储在相应的列中的列式高速缓存表。在一些实施例中,列式高速缓存表中的列之一包括与分布式账本上的区块的块号相对应的块索引值。在一些实施例中,所述方法还可以包括响应于接收到标识多个区块的索引的SQL插入命令,从区块链分类账获取所述多个区块,并且将所述多个区块存储在高速缓存中。
图6A例示了一个示例系统600,其包括一个配置为根据示例性实施例执行各种操作的基础物理设施610。参考图6A,基础物理设施610包括模块612和模块614。模块614包括区块链620和智能合约630(可以位于区块链620上),该智能合约可以执行任何示例性实施例中包含的任何操作步骤608(模块612中)。步骤/操作608可以包括所说明或描述的一个或多个实施例,并且可以表示从一个或多个智能合约630和/或区块链620写入或读取的输出或写入信息。基础物理设施610、模块612和模块614可包括一台或多台计算机、服务器、处理器、存储器和/或无线通信设备。此外,模块612和模块614可以是同一模块。
图6B例示另一个示例系统640,其被配置得执行按照示例性实施例的各种操作。参照图6B,系统640包括模块612和模块614。模块614包括区块链620和智能合约630(可以位于区块链620上),该智能合约可以执行任何示例性实施例中包含的任何操作步骤608(模块612中)。步骤/操作608可以包括所说明或描述的一个或多个实施例,并且可以表示从一个或多个智能合约630和/或区块链620写入或读取的输出或写入信息。基础物理设施610、模块612和模块614可包括一台或多台计算机、服务器、处理器、存储器和/或无线通信设备。此外,模块612和模块614可以是同一模块。
图6C例示按照示例性实施例的被配置为利用合约方与中介服务器之间智能合约配置的示例系统,该中介服务器被配置为在区块链上实施智能合约条款。参考图6C,配置650可以代表一个由智能合约630驱动的通信会话、资产转移会话或过程,其明确地标识一个或多个用户设备652和/或656。智能合约执行的执行、操作和结果可以由服务器654管理。智能合约630的内容可以要求由智能合约事务的参与方中的一个或多个实体652和656进行数字签名。智能合约执行的结果可以作为区块链事务写入区块链620。智能合约630驻留在区块链620上,区块链620可以驻留在一个或多个计算机、服务器、处理器、存储器和/或无线通信设备上。
图6D例示按照示例性实施例的包括区块链的系统660。参考图6的示例,应用程序编程接口(API)网关662提供用于访问区块链逻辑(例如,智能合约630或其它链码)和数据(例如,分布式分类账等)的公共接口。在该示例中,API网关662是用于通过将一个或多个实体652和656连接到区块链对等体(即,服务器654)来对区块链执行事务(调用、查询等)的公共接口。这里,服务器654是区块链网络对等组件,其保存世界状态的副本和分布式分类账,从而允许客户端652和656查询关于世界状态的数据以及将事务提交到区块链网络中,其中,取决于智能合约630和背书策略,背书对等体将运行智能合约630。
以上实施例可以以硬件、处理器执行的计算机程序、固件或以上的组合的形式来实现。计算机程序可以体现在计算机可读介质—例如存储介质—上。例如,计算机程序可以驻留在随机存取存储器(“RAM”)、闪存、只读存储器(“ROM”)、可擦除可编程只读存储器(“EPROM”)、电可擦除可编程只读存储器(“EEPROM”)、寄存器、硬盘、可移动磁盘、光盘只读存储器(“CD-ROM”)或本领域已知的任何其它形式的存储介质。
示例性存储介质可以耦合到处理器,使得处理器可以从存储介质读取信息,将信息写入存储介质。在替代性方案中,存储介质可以是处理器的组成部分。处理器和存储介质可以驻留在专用集成电路(“ASIC”)中。在替代性方案中,处理器和存储介质可以作为分立组件驻留。
图7A例示按照示例性实施例的将新的区块添加到分布式分类账720的过程700,图7B例示按照示例性实施例的用于区块链的新数据块结构730的内容。参考图7A,客户端(未予示出)可以向区块链节点711、712和/或713提交事务。客户端可以是从任何源接收的用以在区块链720上进行活动的指令。作为示例,客户端可以是代表请求者—如设备、人或实体—行事以针对区块链建议事务的应用程序。多个区块链对等体(例如,区块链节点711、12和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可以在对等体启动时自动恢复(或根据需要生成)。
背书节点从客户端接收事务,并根据模拟结果对事务进行背书。背书节点持有模拟事务建议的智能合约。当背书节点背书某事务时,背书节点将创建一个事务背书,该背书是背书节点对客户端应用程序的签名响应,指示对模拟事务的背书。对事务进行背书的方法取决于可以在链码中规定的背书策略。背书策略的一个例子是“大多数背书等同体必须为事务背书”。不同的通道可以有不同的背书策略。背书的事务(endorsed transactions)由客户端应用程序转发给排序服务710。
排序服务710接收背书的事务,将它们排序到一个区块中,并将这些区块交付给提交对等体。例如,当达到事务阈值、计时器超时或其它条件时,排序服务710可以启动新的区块。在图7A的示例中,区块链节点712是已经接收到一个用于在区块链720上存储的新数据块730的提交对等体。区块链中的第一个区块可以称为起始区块,其中包括关于该区块链及其成员、存储在其中的数据等信息。
排序服务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及其内容,仅仅为示例,并非是要限制示例性实施例的范围。新数据块730可以在块数据750中存储N(例如1、10、100、500、1000、2000、3000等)个事务的事务信息。新数据块730还可以在块头740中包括指向(例如图7B中的区块链722上的)前一区块的链接。特别地,块头740可以包括前一区块的头的哈希。块头740还可以包括唯一性块号、新数据块730的块数据750的哈希等。新数据块730的块号可以是唯一性的,并以各种顺序,例如以从零开始的递增/顺序的顺序,进行分配。
块数据750可以存储新数据块730中记录的每个事务的事务信息。例如,事务数据可以包括下述的一个或多个:事务类型、版本、时间戳、分布式分类账720的通道ID、事务ID、时期(epoch)、有效负载可见性、链码路径(部署事务)、链码名、链码版本、输入(链码和函数)、客户(创建者)标识—诸如公钥和证书、客户签名、背书者身份、背书者签名、建议哈希、链码事件、响应状态、命名空间、读取集(事务读取的键和版本列表等)、写入集(键和值列表等)、开始键、结束键、键的列表、默克尔树(Merkel tree)查询摘要,等等。可以为N个事务中的每个事务存储事务数据。
块元数据760可以存储多个元数据字段(例如,以字节数组等形式)。元数据字段可以包括区块创建时的签名、对最后一个配置块的引用、标识区块内的有效和无效事务的事务筛选器、对该区块进行排序的排序服务的最后一个偏移量等。排序服务710可以添加签名、最后一个配置块和排序者元数据。同时,区块的提交方(如区块链节点712)可以添加基于背书策略的有效性/无效性信息、读取/写入集的验证等。事务筛选器可以包括一个大小等于块数据750中的事务个数的字节数组和一个标识事务有效还是无效的验证代码。
图7C例示按照本文所述实施例的针对数字内容的区块链770的实施例。数字内容可以包括一个或多个文件和相关信息。这些文件可以包括媒体、图像、视频、音频、文本、链接、图形、动画、网页、文档或其它形式的数字内容。区块链的不可改变、只可附加的特点对保护数字内容的完整性、有效性和真实性起着保障作用,使数字内容适用于其中应用了容许性规则的法律程序,或者适用于顾及证据或提交和使用数字信息很重要的其它情景。在这种情况下,数字内容可以称为数字证据。
区块链的形成方式有多种多样。在一个实施例中,可以将数字内容纳入区块链中并从区块链本身访问。例如,区块链的每个区块可以与相关的数字内容一起存储引用信息(例如块头、值等)的哈希值(hashvalue)。然后可以将哈希值和相关的数字内容一起加密。因此,可以通过解密区块链中的每个区块来访问每个区块的数字内容,每个区块的哈希值可以作为引用前一个区块的基础。这可以例示如下:
块1 块2…… 块N
哈希值1 哈希值2 哈希值N
数字内容1 数字内容2 数字内容N
在一个实施例中,数字内容可以不含在区块链中。例如,区块链可以存储每个区块的内容的加密哈希,而不存储任何数字内容。可以将数字内容与原始文件的哈希值相关联地存储在另一个存储区或内存地址中。另一个存储区域可以是与存储区块链的相同的存储设备,也可以是不同的存储区,甚至是单独的关系数据库。通过获取或查询感兴趣的区块的哈希值,然后在存储区中查找与实际的数字内容对应存储的该哈希值,可以引用或访问每个区块的数字内容。这个操作可以由例如数据库网关管理器来执行。这可以例示如下:
在图7C的示例性实施例中,区块链770包括按顺序加密链接的若干区块7781、7782、……778N,其中N≥1。用于链接区块7781、7782、……778N的加密术可以是多个密钥化或非密钥化哈希函数中的任何一个。在一个实施例中,区块7781、7782、……778N受制于一个哈希函数,该函数从基于区块中信息的输入产生n比特的字母数字输出(其中n是256或其它数字)。这种哈希函数的例子包括但不限于SHA(安全哈希算法)型算法、Merkle-Damagard算法、HAIFA算法、Merkle-tree算法、基于随机数的算法和非抗冲突PRF的算法。在另一个实施例中,区块7781、7782、……778N可以通过不同于哈希函数的函数进行加密链接。为了便于说明,以下描述参考了一种哈希函数,例如SHA-2。
区块链中的每个区块7781、7782、……、778N都包含一个头、一个文件版本和一个值。由于区块链中的哈希,每个区块的头和值都不同。在一个实施例中,值可以包括在头中。如下面更详细的描述,该文件版本可以是原始文件,或者原始文件的不同版本。
区块链中的第一个区块7781被称为起始区块,包括头7721、原始文件7741和初始值7761。用于起始区块的哈希方案,以及所有后续区块的哈希方案,可能会有所不同。例如,第一个块7781中的所有信息可以一次哈希在一起,或者可以对第一个块7781中的每个或一部分信息单独进行哈希,然后对单独哈希的部分进行哈希。
头7721可以包括一个或多个初始参数,例如,可以包括版本号、时间戳、随机数、根信息、难度级别、共识协议、持续时间、媒体格式、来源、描述性关键字和/或与原始文件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每个都包含前一区块的哈希值。前一区块的哈希值可能只是前一区块的头的哈希,也可能是整个前一区块的哈希值。通过将前一区块的哈希值包含在其余每个区块中,可以从第N个块逐个区块地反向跟踪到起始区块(以及相关的原始文件),如箭头780所示,以建立可审核和不可变的监护链。
其它区块中的每个头7722到772N还可以包括其它信息,例如版本号、时间戳、随机数、根信息、难度级别、共识协议和/或与相应文件和/或区块链相关的其它参数或信息。
其它区块中的文件7742到774N可以等于原始文件,也可以是起始区块中原始文件的修改版本,具体取决于所执行的处理的类型。所执行的处理的类型可能因区块而异。例如,处理可能涉及对前一区块中的文件的任何修改,例如修订信息或以其它方式更改文件的内容、从文件中去除信息或向文件添加或附接信息。
此外,或者作为替代,处理可能仅涉及从前一区块复制文件、更改文件的存储位置、分析一个或多个在前区块中的文件、将文件从一个存储或内存位置移动到另一个存储或内存位置,或者执行相对于区块链文件和/或其关联的元数据的操作。涉及分析文件的处理可以包括(例如)附加、包括或以其它方式关联与该文件关联的各种分析、统计或其它信息。
其它区块7762到776N中的每个其它区块的值都是唯一性的值,并且由于所执行的处理而不同。例如,任何一个区块中的值对应于前一区块中的值的更新版本。更新反映在向其分配值的区块的哈希中。因此,区块的值提供了区块中执行了什么处理的指示,并允许通过区块链回溯跟踪到原始文件。此跟踪确认了文件在整个区块链中的监管链。
例如,考察对前一区块中的文件的部分进行修订、分块或像素化以便保护文件中所示的人的身份的情况。在这种情况下,包括被修订文件的区块将包括与被修订文件相关联的元数据,例如修订操作的执行方式、谁执行修订操作、发生修订操作的时间戳等。可以对元数据进行哈希以形成值。由于区块的元数据与前一区块中通过哈希形成值的信息不同,因此这些值彼此不同,在解密时可以恢复。
在一个实施例中,当发生以下任何一个或多个情况时,可以更新前一区块的值(例如,计算出新的哈希值),以形成当前区块的值。在本实施例中,新的哈希值可以通过哈希下面所述的全部或部分信息来计算。
a)新SHA-2计算的哈希值(如果文件已以任何方式处理)(例如,如果文件已被修订、复制、更改、访问或采取了某些其它操作)
b)文件的新存储位置
c)识别的与文件关联的新元数据
d)将文件的访问或控制从一个区块链参与者转移到另一个区块链参与者
图7D例示可表示根据一个实施例的区块链790中的区块的结构的区块的实施例。该区块即区块Blocki包括头772i、文件774i和值776i。
头772i包括前一区块Blocki-1的哈希值和额外的引用信息,该信息例如可以是本文讨论的任何类型的信息(例如,包括引用、特征、参数等的头信息)。所有区块都引用前一区块的哈希值,当然,起始区块除外。前一区块的哈希值可以只是前一区块中头的哈希,也可以是前一区块中的全部或部分信息—包括文件和元数据—的哈希。
文件774i包括多个数据,如依次的Data 1、Data 2、……、Data N。这些数据用描述与数据相关的内容和/或特征的元数据Metadata1、Metadata2、……、MetadataN来标记。例如,每个数据的元数据可以包括指示数据时间戳的信息、处理数据、指示数据中描述的人员或其它内容的关键字,和/或有助于确定文件整体的有效性和内容—尤其是其作为数字证据的用途,例如如下文所讨论的实施例所述的那样—的其它特征。除了元数据之外,每个数据还可以用对前一数据的引用REF1、REF2、……、REFN来标记,以防止篡改、文件中的间隙以及通过文件的顺序引用。
一旦元数据被分配给数据(例如,通过智能合约),元数据在哈希没有改变情况下就不能被更改,而哈希的改变很容易被识别为无效。因此,元数据创建了可被访问以供区块链参与者使用的信息的数据日志。
值776i是基于前面讨论过的任何类型的信息计算出的哈希值或其它值。例如,对于任何给定的区块Blocki,可以更新该区块的值以反映为该区块执行的处理,例如,新哈希值、新存储位置、关联文件的新元数据、控制或访问的传输、标识符或要添加的其它操作或信息。尽管每个区块中的值被显示为是与文件的数据的元数据和头分离的,但是在另一个实施例中该值可以部分或全部基于元数据。
一旦区块链770形成,在任何时间点,可以通过向区块链查询跨区块的值的事务历史来获取文件的不可改变的监管链。此查询或跟踪过程可以始于解密最近被包括的区块(例如,最后一个(第N个)区块)的值,然后继续解密其它区块的值,直到到达起始区块,然后恢复原始文件。解密也可能涉及到解密每个区块上的头和文件以及相关的元数据。
解密是根据每个区块中发生的加密的类型执行的。这可能涉及使用私钥、公钥或公钥-私钥对。例如,当使用非对称加密时,网络中的区块链参与者或处理器可以使用预定的算法生成公钥和私钥对。公钥和私钥通过某种数学关系相互关联。公钥可以被公开分发以用作从其它用户接收消息的地址(例如IP地址或家庭地址)。私钥是保密的,用于对发送给其它区块链参与者的消息进行数字签名。签名被包括在邮件中,以便接收者可以使用发件人的公钥进行验证。这样,接收者就可以确信只有发件人才可能发送了此邮件。
生成密钥对可以类似于在区块链上创建帐户但无须实际在任何地方注册。此外,在区块链上执行的每个事务都由发送方使用其私钥进行数字签名。此签名确保只有帐户所有者才能跟踪和处理区块链的文件(如果在智能合约确定的权限范围内)。
图8A和8B示出了可结合和用于本文的区块链的用例的另外的示例。具体地,图8A示出了存储机器学习(人工智能)数据的区块链810的示例800。机器学习依赖于大量的历史数据(或训练数据)来构建用于对新数据进行准确预测的预测模型。机器学习软件(例如,神经网络等)通常可以筛选数百万条记录以找出非直观模式。
在图8A的示例中,主机平台820构建和部署用于资产830的预测监控的机器学习模型。这里,主机平台820可以是云平台、工业服务器、web服务器、个人计算机、用户设备等。资产830可以是任何类型的资产(例如,机器或设备等),诸如飞机、机车、涡轮机、医疗机械和设备、油气设备、船、舰、车辆等。作为另一个例子,资产830可以是非有形资产,例如股票、货币、数字硬币、保险等。
可以用区块链810来显著地改进机器学习模型的训练过程802和基于经训练的机器学习模型的预测过程804。例如,在802,历史数据可以由资产830本身(或通过媒介,未予示出)存储在区块链810上,而不是要求数据科学家/工程师或其他用户来收集数据。这可显著减少主机平台820在执行预测模型训练时所需的收集时间。例如,使用智能合约,可用将数据直接且可靠地从其起源位置直接传递到区块链810。通过使用区块链810来确保所收集的数据的安全性和所有权,智能合同可以直接将数据从资产发送到使用该数据来构建机器学习模型的个体。这允许在资产830之间共享数据。
所收集的数据可基于某个共识机制存储在区块链810中。所述共识机制拉入(许可的节点)以确保正被记录的数据经过验证的和准确的。所记录的数据是带时间戳的、密码签名的和不可变的。因此,所记录的数据是可审计的、透明的和安全的。在某些情况下(即,供应链、保健、物流等),添加直接写入区块链的IoT设备可以增加被记录的数据的频率和准确性。
此外,在所收集的数据上训练机器学习模型可以由主机平台820进行若干轮细化和测试。每轮可以基于额外的数据或先前未被考虑的数据,以帮助扩展机器学习模型的知识。在802,不同的训练和测试步骤(以及与其相关联的数据),可由主机平台820存储在区块链810上。机器学习模型的每个细化(例如,变量、权重等的改变)都可以被存储在区块链810上。这样就可以提供关于模型是如何训练的以及用过什么数据来训练模型用的可验证的证明。此外,当主机平台820已经实现最终训练的模型时,可以将所得的模型存储在区块链810上。
在已经训练了模型之后,可以将其部署到真实环境,在真实环境中,可以基于最终训练的机器学习模型的执行来进行预测/决策。例如,在904,可以将机器学习模型用于诸如飞机、风力涡轮机、保健机器等资产的基于条件的维护(CBM)。在该示例中,从资产830反馈的数据可以被输入机器学习模型,并且被用于进行诸如故障事件、错误代码之类的事件预测。可以将通过在主机平台820处执行机器学习模型所做出的确定存储在区块链810上,以提供可审计/可验证的证明。作为一个非限制性示例,机器学习模型可以预测资产830的一部分的未来故障/失败,并且创建替换该部分的警报或通知。这种决策背后的数据,可由主机平台820存储在区块链810上。在一个实施例中,本文描述和/或描绘的特征和/或动作可以在区块链810上或相对于区块链810发生。
可以将区块链的新事务聚集到新的区块中并添加到现有的哈希值。然后,对其进行加密,以生成该新的区块的新哈希。当对事务进行加密时,将其添加到下一个事务列表,等等。结果是其中每个区块都包含所有在前区块的哈希值的区块链。存储这些区块的计算机定期比较它们的哈希值以确保它们都一致。任何不同意的计算机都丢弃引起问题的记录。这种方法对于确保区块链的防篡改是有益的,但它不是完美的。
不诚实的用户游戏该系统的一种方式,是以对自己有利的方式改变事务的列表,但是保持哈希不变。这可以通过蛮力来完成,换句话说,通过改变记录、加密结果、以及查看哈希值是否相同来完成。如果不是,则要反复地尝试,直到找到匹配的哈希。区块链的安全性基于这样的信念,即普通计算机仅能在完全不切实际的时间尺度上,诸如以宇宙年龄的时间来进行这种蛮力攻击。相反,量子计算机快得多(快数千倍),因此造具有更大的威胁。
图8B示出了实现量子密钥分发(QKD)以防止量子计算攻击的量子安全区块链852的示例850。在该示例中,区块链用户可使用QKD验证彼此的身份。这使用诸如光子的量子粒子发送信息,窃听者在不破坏量子粒子的情况下不能复制该量子粒子。这样,发送者和接收者通过区块链可以确信彼此的身份。
在图8B的示例中,存在四个用户854、856、858和860。每对用户可以在他们之间共享密钥862(即,QKD)。由于在该示例中有四个节点,因此存在六对节点,并且因此使用六个不同的密钥862,包括QKDAB、QKDAC、QKDAD、QKDBC、QKDBD和QKDCD。每对可以通过使用诸如光子的量子粒子发送信息来创建QKD,窃听者在不破坏QKD的情况下不能复制QKD。这样,一对用户可以确信彼此的身份。
区块链852的操作基于两个过程:(i)事务的创建,以及(ii)聚集新事务的区块的构造。可以类似于传统的区块链网络的方式创建新的事务。每个事务可以包含关于发送者、接收者、创建时间、要转移的金额(或价值)、证明发送者具有用于该操作的资金的参考事务的列表等的信息。然后,将该事务记录发送到所有其它节点,在所有其它节点中,该事务记录被输入未确认事务池。这里,两方(即,854-860中的一对用户)通过提供他们的共享密钥862(QKD)来认证该事务。可以将该量子签名附加到每个事务,使得极难篡改它。每个节点检查其关于区块链852的本地副本的条目,以验证每个事务具有足够的资金。然而,事务还没有被确认。
不是对区块执行传统的挖矿过程,而是可以使用广播协议以分散的方式来创建区块。在预定的时间段(例如,几秒、几分钟、几小时等),网络可以将广播协议应用于任何未确认的事务,从而实现关于事务的正确版本的拜占庭协定(共识)。例如,每个节点可以拥有一个私有值(该特定节点的事务数据)。在第一轮中,节点向彼此发送它们的私有值。在随后的轮次中,节点传送它们在前一轮次中从其它节点接收的信息。这里,诚实的节点能够在新的区块内创建完整的事务集。该新的区块可被添加到区块链852。在一个实施例中,本文描述和/或描绘的特征和/或动作可在区块链852上或相对于区块链852发生。
图9例示支持本文所述的一个或多个实施例的示例系统900。系统900包括一个计算机系统/服务器902,它与许多其它通用或专用计算系统环境或配置一起运行。适用于计算机系统/服务器902的计算系统、环境和/或配置示例包括但不限于个人计算机系统、服务器计算机系统、瘦客户端、厚客户端、手持或笔记本设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络PC、小型计算机系统、大型机计算机系统和包括上述任何系统或设备等的分布式云计算环境。
计算机系统/服务器902可在由计算机系统执行的计算机系统可执行指令(如程序模块)的一般上下文中描述。通常,程序模块可以包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、逻辑、数据结构等。计算机系统/服务器902可以在分布式云计算环境中使用,其中任务由通过通信网络连接的远程处理设备执行。在分布式云计算环境中,程序模块可以位于包括内存存储设备的本地和远程计算机系统存储介质中。
如图9中所示,云计算节点900中的计算机系统/服务器902以通用计算设备的形式示出。计算机系统/服务器902的组件可以包括但不限于一个或多个处理器或处理单元904、系统存储器906,以及将包括系统存储器906的各种系统组件耦合到处理器904的总线。
总线代表若干类型的总线结构中的任何一种或多种,包括存储器总线或存储器控制器、外围设备总线、加速图形端口、以及使用各种总线架构中的任何总线架构的处理器或本地总线。作为示例而非限制,这样的架构包括工业标准架构(ISA)总线、微通道架构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA)本地总线和外围组件互连(PCI)总线。
计算机系统/服务器902通常包括各种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器902访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。在一个实施例中,系统存储器906实现其它附图中的流程图。系统存储器906可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)910和/或高速缓冲存储器912。计算机系统/服务器902还可以包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为示例,可以提供存储系统914用于对不可移动的非易失性磁介质(未予示出,通常称为“硬盘驱动器”)进行数据的读取和写入。尽管未予示出,但是可以提供用于读取和写入可移动的非易失性磁盘(例如,“软盘”)的磁盘驱动器,以及用于读取或写入可移动的非易失性光学器件的光盘驱动器,诸如CD-ROM、DVD-ROM或其它光学介质的盘。在这种情况下,每个都可以通过一个或多个数据媒体接口连接到总线。如下面将进一步描绘和描述的,存储器906可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置为执行本申请的各种实施例的功能。
具有一组(至少一个)程序模块918的程序/实用程序916可以作为示例而非限制地存储在存储器906中,操作系统、一个或多个应用程序、其它程序模块和程序数据也同样。操作系统、一个或多个应用程序、其它程序模块和程序数据中的每一个或它们的某种组合可以包括网络环境的实现。程序模块918通常执行如本文所述的本申请的各种实施例的功能和/或方法。
所属领域的技术人员应当明白,本申请的各方面可体现为系统、方法或计算机程序产品。因此,本申请的各方面可以采取完全硬件实施例、完全软件实施例(包括固件、常驻软件、微代码等)的形式或者组合软件和硬件方面的实施例,这些实施例在这里通常可以被称为“电路”“模块”或“系统”。本申请的各方面可以采取体现在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质具有包含在其上的计算机可读程序代码。
计算机系统/服务器902还可以与一个或多个外部设备920通信,外部设备例如是键盘、指示设备、显示器922;一个或多个使用户能够与计算机系统/服务器902交互的设备;和/或使计算机系统/服务器902能够与一个或多个其它计算设备通信的任何设备(例如,网卡,调制解调器等)。这种通信可以通过I/O接口924进行。此外,计算机系统/服务器902还可以经由网络适配器926与诸如局域网(LAN)、一般广域网(WAN)和/或公共的网络(例如因特网)的一个或多个网络通信。如图所示,网络适配器926经由总线与计算机系统/服务器902的其它组件通信。应当理解,尽管未予示出,但是其它硬件和/或软件组件可以与计算机系统/服务器902结合使用。示例包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动器阵列,RAID系统、磁带驱动器和数据存档存储系统等。
尽管在附图中示出了系统、方法和非暂时性计算机可读介质中的至少一个的示例性实施例,并且在前面的详细描述中进行了描述,但是应该理解,本申请不限于所公开的实施例,而是能够进行如下所述的权利要求所阐述和限定的许多重新排列、修改和替换。例如,各附图的系统的功能可以由本文描述的一个或多个模块或组件或在分布式架构中执行,并且可以包括发射器、接收器或发射器-接收器对。例如,由各个模块执行的全部或部分功能可以由这些模块中的一个或多个执行。此外,本文描述的功能可以在不同时间并且与模块或组件内部或外部的各种事件相关地执行。此外,可以通过多个协议和/或通过以下的至少一个在模块之间发送在各个模块之间发送的信息:数据网络、因特网、语音网络、因特网协议网络、无线设备、有线设备。而且,可以直接和/或经由一个或多个其它模块发送或接收由任何模块发送或接收的消息。
本领域技术人员将理解,“系统”可以体现为个人计算机、服务器、控制台、个人数字助理(PDA)、蜂窝电话、平板计算设备、智能手机或任何其它合适的计算设备或设备的组合。将上述功能呈现为由“系统”执行并不旨在以任何方式限制本申请的范围,而是旨在提供许多实施例的示例。实际上,本文公开的方法、系统和装置可以以与计算技术一致的本地化和分布式形式实现。
应当注意,本说明书中描述的一些系统特征被呈现为模块,以便更具体地强调它们的实现独立性。例如,模块可以实现为包括定制的超大规模集成(VLSI)电路或门阵列的硬件电路,诸如逻辑芯片、晶体管或其它分立元件的现成半导体。模块还可以在诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备、图形处理单元等的可编程硬件设备中实现。
模块还可以至少部分地以软件实现,以由各种类型的处理器执行。所识别的可执行代码单元可以例如包括计算机指令的一个或多个物理或逻辑块,其可以例如被组织为对象、过程或功能。然而,所识别的模块的可执行文件不需要物理地位于一起,而是可以包括存储在不同位置的不同指令,当逻辑上连接在一起时,这些指令包括模块并实现模块的所述目的。此外,模块可以存储在计算机可读介质上,该计算机可读介质可以是例如硬盘驱动器、存设备、随机存取存储器(RAM)、磁带或用于存储数据的任何其它此类介质。
实际上,可执行代码的模块可以是单个指令或多个指令,甚至可以分布在几个不同的代码段上,不同的程序中以及若干个存储器设备上。类似地,操作数据可以在本文中在模块内被识别和示出,并且可以以任何合适的形式体现并且被组织在任何合适类型的数据结构中。操作数据可以作为单个数据集收集,或者可以分布在包括不同存储设备的不同位置上,并且可以至少部分地仅作为系统或网络上的电子信号存在。
容易理解的是,如本文附图中一般描述和例示的那样,本申请的组件可以以各种不同的配置来布置和设计。因此,实施例的详细描述不旨在限制所要求保护的本申请的范围,而仅仅代表本申请的所选实施例。
本领域普通技术人员将容易理解,可以以不同顺序的步骤和/或使用与所公开的配置不同的配置中的硬件元件来实现上述内容。因此,尽管已经基于这些优选实施例描述了本申请,但是对于本领域技术人员来说显而易见的是,某些修改、变化和替代构造将是显而易见的。
虽然已经描述了本申请的优选实施例,但是应该理解,所描述的实施例仅仅是说明性的,本申请的范围仅由所附的权利要求在考虑各种等同物和修改(例如协议、硬件设备、软件平台等)的全部范围的情况下限定。
Claims (16)
1.一种计算系统,包括:
网络接口,被配置为接收应用于在区块链分类账上存储的区块中的一个区块子集的结构化查询语言(SQL)请求;
高速缓存,被配置为存储在所述区块链分类账上存储的区块中的一部分区块;以及
处理器,被配置为识别所述SQL请求所应用于的、未存储在所述高速缓存中的一个或多个区块,并且从所述区块链分类账检索所识别的未存储在所述高速缓存中的一个或多个区块,
其中,所述处理器还被配置为执行合并所述SQL请求所应用于的所述高速缓存中的一个或多个区块和从所述区块链分类账检索的所述一个或多个区块的SQL操作,并且控制所述网络接口将合并的区块发送到与所接收的SQL请求相关联的计算系统。
2.根据权利要求1所述的计算系统,其中,所述处理器被配置为从所述区块链分类账检索所述子集中的当前未存储在所述高速缓存中的一个或多个区块。
3.根据权利要求2所述的计算系统,其中所述处理器还被配置为执行谓词下推,其中将所述一个或多个高速缓存的区块从所述请求中过滤掉以识别剩余的所述一个或多个非高速缓存的区块。
4.根据权利要求2所述的计算系统,其中,所述处理器还被配置为通过SQL UNION操作将高速缓存中的所述一个或多个区块与从所述区块链分类账检索的所述一个或多个非高速缓存的区块进行组合。
5.根据权利要求1所述的计算系统,其中所述高速缓存包括列式高速缓存表,在所述列式高速缓存表中,不同类型的区块数据存储在相应的列中。
6.根据权利要求5所述的计算系统,其中所述列式高速缓存表中的列中的一个列包括对应于分布式账本上的区块的块编号的块索引值。
7.根据权利要求1所述的计算系统,其中,所述处理器还被配置为响应于接收到标识多个区块的索引的SQL插入命令,从所述区块链分类账获取所述多个区块,并且将所述多个区块存储在所述高速缓存中。
8.一种计算机实现的方法,包括:
接收应用于在区块链分类账上存储的区块中的一个区块子集的结构化查询语言(SQL)请求;
在高速缓存中存储在所述区块链分类账上的存储的区块中的一部分区块;
识别所述SQL请求所应用于的、未存储在所述高速缓存中的一个或多个区块,并且从所述区块链分类账检索所识别的未存储在所述高速缓存中的一个或多个区块;
执行合并所述SQL请求所应用于的所述高速缓存中的一个或多个区块和从所述区块链分类账检索的所述一个或多个区块的SQL操作;以及
将所述合并的区块发送到与所接收的SQL请求相关联的计算系统。
9.根据权利要求8所述的方法,其中,所述检索包括从所述区块链分类账检索所述子集中的当前未存储在所述高速缓存中的一个或多个区块。
10.根据权利要求9所述的方法,其中所述检索还包括执行谓词下推,其中将所述一个或多个高速缓存的区块从所述请求中过滤掉以识别剩余的所述一个或多个非高速缓存的区块。
11.根据权利要求9所述的方法,还包括通过SQL UNION操作将高速缓存中的所述一个或多个区块与从所述区块链分类账检索的所述一个或多个非高速缓存的区块进行组合。
12.根据权利要求8所述的方法,其中所述高速缓冲存储器包括列式高速缓冲存储器表,其中不同类型的区块数据存储于相应列中。
13.根据权利要求12所述的方法,其中所述列式高速缓存表中的所述列中的一个列包括对应于所述分布式账本上的所述区块的块编号的块索引值。
14.根据权利要求8所述的方法,还包括响应于接收到标识所述多个区块的索引的SQL插入命令,从所述区块链分类账获取多个区块并且将所述多个区块存储在所述高速缓存中。
15.一种计算机程序产品,包括其中体现有计算机可读程序指令的计算机可读介质,所述程序指令在由处理器读取时使所述处理器执行如权利要求8至14的任何一项所述的方法所包含的步骤。
16.一种装置,包括一个或多个模块,所述一个或多个模块被配置得用于实现如权利要求8至14的任何一项所述的方法所包含的对应步骤。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/451,995 US11093495B2 (en) | 2019-06-25 | 2019-06-25 | SQL processing engine for blockchain ledger |
US16/451,995 | 2019-06-25 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112131254A true CN112131254A (zh) | 2020-12-25 |
Family
ID=73851555
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010535740.0A Pending CN112131254A (zh) | 2019-06-25 | 2020-06-12 | 用于区块链分类账的sql处理引擎 |
Country Status (2)
Country | Link |
---|---|
US (1) | US11093495B2 (zh) |
CN (1) | CN112131254A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113342850A (zh) * | 2021-05-28 | 2021-09-03 | 昆明理工大学 | 一种基于区块图的联盟网络模型及其应用 |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11836130B2 (en) * | 2019-10-10 | 2023-12-05 | Unisys Corporation | Relational database blockchain accountability |
US11507554B2 (en) * | 2019-12-26 | 2022-11-22 | Yahoo Assets Llc | Tree-like metadata structure for composite datasets |
CN113726875A (zh) | 2020-07-08 | 2021-11-30 | 支付宝(杭州)信息技术有限公司 | 一种基于区块链一体机的交易处理方法及装置 |
CN112492002B (zh) | 2020-07-08 | 2023-01-20 | 支付宝(杭州)信息技术有限公司 | 一种基于区块链一体机的交易转发方法及装置 |
CN111541726B (zh) | 2020-07-08 | 2021-05-18 | 支付宝(杭州)信息技术有限公司 | 一种基于区块链一体机的重放交易识别方法及装置 |
CN111539829B (zh) | 2020-07-08 | 2020-12-29 | 支付宝(杭州)信息技术有限公司 | 一种基于区块链一体机的待过滤交易识别方法及装置 |
CN111541789A (zh) * | 2020-07-08 | 2020-08-14 | 支付宝(杭州)信息技术有限公司 | 一种基于区块链一体机的数据同步方法及装置 |
CN113239078B (zh) * | 2021-05-17 | 2022-09-20 | 国网河南省电力公司信息通信公司 | 一种基于联盟链的数据快速查询方法 |
CN113297849B (zh) * | 2021-05-17 | 2023-05-09 | 陕西合友网络科技有限公司 | 基于区块链技术的财务预提费用管理方法 |
CN114564500A (zh) * | 2022-02-28 | 2022-05-31 | 蚂蚁区块链科技(上海)有限公司 | 在区块链系统中实现结构化数据存储和查询的方法和系统 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB0409674D0 (en) | 2004-04-30 | 2004-06-02 | Anlysoft Dev Ltd | Method and apparatus for automatically creating a cross-functional data warehouse and OLAP cube |
US11521290B2 (en) * | 2013-05-22 | 2022-12-06 | Patrick Damien O'Brien | Systems and methods for storing contract information on multiple blockchain ledgers |
US10410604B2 (en) * | 2015-09-03 | 2019-09-10 | Synthro Inc. | Systems and techniques for aggregation, display, and sharing of data |
CN105469212A (zh) | 2015-11-30 | 2016-04-06 | 国家电网公司 | 一种基于二维码的变电设备带电检测数据管理装置 |
US10691763B2 (en) * | 2016-11-11 | 2020-06-23 | International Business Machines Corporation | Trustable web searching verification in a blockchain |
IL302367A (en) * | 2017-01-23 | 2023-06-01 | Kamran Hasan Syed | BCHAIN E3A Universal Connections |
CN106874440B (zh) | 2017-02-07 | 2019-11-12 | 杭州秘猿科技有限公司 | 一种基于sql数据库的区块链状态存储方法 |
US10891234B2 (en) * | 2018-04-04 | 2021-01-12 | Sap Se | Cache partitioning to accelerate concurrent workloads |
CN108959402A (zh) | 2018-06-06 | 2018-12-07 | 广州链块科技有限公司 | 一种基于sql引擎对区块链进行开发的装置及方法 |
CN109542926B (zh) | 2018-11-06 | 2021-04-09 | 北京新唐思创教育科技有限公司 | 区块处理方法及计算机存储介质 |
US11824864B2 (en) * | 2019-01-31 | 2023-11-21 | Salesforce, Inc. | Systems, methods, and apparatuses for implementing a declarative and metadata driven blockchain platform using distributed ledger technology (DLT) |
US11803537B2 (en) * | 2019-01-31 | 2023-10-31 | Salesforce, Inc. | Systems, methods, and apparatuses for implementing an SQL query and filter mechanism for blockchain stored data using distributed ledger technology (DLT) |
US11876910B2 (en) * | 2019-01-31 | 2024-01-16 | Salesforce, Inc. | Systems, methods, and apparatuses for implementing a multi tenant blockchain platform for managing Einstein platform decisions using distributed ledger technology (DLT) |
US11531686B2 (en) * | 2019-02-04 | 2022-12-20 | Apex Data Solutions, Llc | Computing system providing blockchain-facilitated semantic interoperability between multiple disparate systems of record (SORs) and related methods |
-
2019
- 2019-06-25 US US16/451,995 patent/US11093495B2/en active Active
-
2020
- 2020-06-12 CN CN202010535740.0A patent/CN112131254A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113342850A (zh) * | 2021-05-28 | 2021-09-03 | 昆明理工大学 | 一种基于区块图的联盟网络模型及其应用 |
CN113342850B (zh) * | 2021-05-28 | 2024-03-19 | 昆明理工大学 | 一种基于区块图的联盟网络模型及其应用 |
Also Published As
Publication number | Publication date |
---|---|
US11093495B2 (en) | 2021-08-17 |
US20200409952A1 (en) | 2020-12-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114514732B (zh) | 用于区块链dag结构的共识协议的方法、计算系统和可读介质 | |
CN112131254A (zh) | 用于区块链分类账的sql处理引擎 | |
US11200260B2 (en) | Database asset fulfillment chaincode deployment | |
CN111951003A (zh) | 用于管理对用户数据的同意的认知系统 | |
CN111985003A (zh) | 数据库恶意对等体识别 | |
US11251938B2 (en) | Blockchain verification using non-consecutive blocks | |
US11645268B2 (en) | Database world state performance improvement | |
US11354198B2 (en) | Snapshot for world state recovery | |
US11269863B2 (en) | Index structure for blockchain ledger | |
CN115699054A (zh) | 区块链的更快查看改变 | |
CN112241919A (zh) | 具有数据流控制的多域区块链网络 | |
CN115211093A (zh) | 数据对象的有效阈值存储 | |
US11194770B2 (en) | Database mergeable ledgers | |
CN114450708A (zh) | 基于现有链码的链码推荐 | |
US11303446B2 (en) | Prevention of majority attacks | |
US11475365B2 (en) | Verification of stochastic gradient descent | |
CN112733159A (zh) | 用于区块链的自由搭乘节点识别 | |
CN112052474A (zh) | 蓝光拷贝服务 | |
US20210126787A1 (en) | Optimal endorser node determination based on state | |
US11379474B2 (en) | Computation of containment relationships | |
US11792022B2 (en) | Resolution of conflicting data | |
US20210314155A1 (en) | Trusted ledger stamping | |
CN116361823A (zh) | 用于隐私保护的区块链的选择性审计处理 | |
AU2021253009B2 (en) | Contextual integrity preservation | |
US20210256442A1 (en) | Computation of containment relationships |
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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20220302 Address after: British Virgin Islands Applicant after: Green City Plaza Co.,Ltd. Address before: USA New York Applicant before: International Business Machines Corp. |
|
TA01 | Transfer of patent application right |