背景技术:
区块链是维护有序分类账条目的连续增长列表的分布式数据库。每个条目包括时间戳以及对先前块的链接。当参与者之间发生交易)时,创建分类账条目以识别那些参与者以及交易的详细信息,诸如数据转换、权限转移、日志记录等。
附图说明
在附图中,相同的标号表示相同的组件或块。以下的详细描述参考图,其中:
图1是示例分布式分类账区块链的框图;
图2是示例局部分类账系统;
图2是用于提供区块链的分布式局部分类账的创建的示例方法的流程图;以及
图3是用于提供局部分类账的示例计算设备的框图。
具体实施方式
在一些情况下,交易的详细信息可以被记录在区块链储存器中。区块链通常是分布式的,并且由多个参与者所控制的多个位置存储。由于这种分布,区块链本身就对数据的修改具有抵抗力。一旦被记录,分类账条目中的数据就不能被追溯性地修改。通过使用对等网络和分布式时间戳服务器,可以自主地对区块链数据库进行管理。因此,区块链是一种分布式分类账,该分布式分类账可以有效地并且以可验证且永久的方式记录两方之间的交易。
区块链技术的实现需要创建公共分类账、时间戳,使得区块链社区中的每个参与者可以验证正确的创造者身份以及交易的历史。由于区块链大小随着每个新的创造者/节点或每个新的交易而增长,因此保留公共分类账的大量多个副本可能会需要越来越大量的数字存储空间。因此,区块链技术的分布式分类账需求给数据存储以及处理带宽带来了很大的负担。通过在交易参与者和/或创造者之间分发内容表(toc)和局部分类账存储,可以大大提高分类账存储的效率并且减轻数据存储瓶颈,因为toc小于分类账本身。这种方法还维护了连续分布式分类账验证的能力,而这种能力是区块链技术实现的要求。
随着区块链的大小在连续交易中增长,由于需要维护交易的整个区块链分类账的大量副本,因此存储需求呈指数级增长。完整的副本旨在被存储在每个位置和/或由每个交易参与者存储。因此,与区块链相关联的交易的每个新参与者都会增加每个参与者的存储需求。
通过使每个参与者仅存储与其自身的交易相关联的那些分类账条目,从而大大减少了这些存储需求。每个存储位置可以使用内容表(toc)来跟踪其他区块链参与者以及这些参与者的交易分类账条目的存储位置,而不用维护整个区块链的完整副本。toc可以具有被存储在每个局部分类账位置处的单独副本,和/或权威副本可以由一个和/或多个位置存储,而其他的局部分类账位置维护对那些权威副本的链接和/或指针。因为局部分布式分类账保持静态,因此toc可能是唯一需要时间戳的组件,这仅改变toc指定的位置和节点。当前的区块链分布式分类账记住每个交易的“谁”和“什么”。分布式局部分类账记住每个交易的“谁”,但仅存储与该参与者相关的“什么”。
图1是示例分布式分类账区块链100的框图。区块链100可以与多个参与者110(a)至110(e)相关联。参与者110(a)至110(e)可以包括例如用户、节点、计算设备、过程、存储设备、应用等。参与者110(a)至110(e)中的每一个可以存储多个分类账条目120(a)至120(d)中的至少一个、以及内容表(toc)130。每个参与者110(a)至110(e)各自存储与该参与者相关的分类账条目、以及针对完整区块链的toc130。例如,节点110(a)可以表示用户设备,并且节点110(b)可以表示打印机。从节点110(a)发送到节点110(b)的打印作业可以被存储在区块链100中作为在节点110(a)和110(b)处的分类账条目120(a)。可以更新内容表130以反映所有的节点110(a)至110(e)上的新分类账条目。稍后的交易可以包括打印机(即,节点110(b))将包括分类账条目120(a)中的交易的作业日志提交给由节点110(d)表示的分析过程。与在先交易有关的数据的这种使用也可以被包括在区块链100中,并且被记录在存储于节点110(b)和110(d)处的分类账条目120(b)中。
类似地,节点110(c)可以表示第二用户,并且节点110(e)可以表示第二打印机,其中第二打印作业被记录在区块链100中作为存储在节点110(c)和110(e)处的分类账条目120(c)。第二打印机节点110(e)可以向由节点110(d)表示的分析过程提交类似的作业日志,其详细信息可以被记录在节点110(d)和110(e)处的分类账条目120(d)中。再者,针对在分类账条目120(c)和120(d)中记录的交易,在所有的节点110(a)至110(e)上更新toc130。节点110(a)至110(e)中的任意一个可以通过根据存储在toc130中的位置以及所有者的详细信息而从其他节点请求分类账条目来重建整个区块链100。toc130还可以包括错误检查、以及例如针对整个区块链100的校验和的验证信息。
图2是示例局部分类账系统200的框图。系统200可以包括计算设备210,该计算设备210包括存储器215。计算设备210可以包括例如通用和/或专用计算机、服务器、大型机、台式机、膝上型电脑、平板电脑、智能电话、游戏机、打印机、和/或能够提供与提供本文所描述的实施方式相一致的计算能力的任何其他系统。计算设备210可以在存储器215中存储交易引擎220和分类账引擎225。
系统200的引擎220、225中的每一个可以包括用于实现相应引擎的功能的硬件和编程的任何组合。在本文所描述的示例中,可以以多种不同的方式来实现硬件和编程的这种组合。例如,用于引擎的编程可以是存储在非暂时性机器可读存储介质上的处理器可执行指令,并且用于引擎的硬件可以包括执行这些指令的处理资源。在这样的示例中,机器可读存储介质可以存储指令,当该指令由处理资源执行时,实现引擎220、225。在这样的示例中,系统200可以包括用于存储指令的机器可读存储介质、以及执行该指令的处理资源,或者机器可读存储介质可以是独立的,但是可以访问系统200和处理资源。
交易引擎220可以接收两个参与者之间的数据交易的记录,并且创建与该数据交易的记录相关联的分类账条目。例如,节点110(a)和节点110(b)可以参与一个交易,导致交易记录230被存储在区块链100的分类账条目120(a)中。交易引擎220可以对交易记录230进行处理以适当地包含在区块链100中,例如通过用先前分类账条目的哈希打包记录来创建有效的区块链链接,以便创建分类账条目。
分类账引擎225可以将分类账条目附加到与区块链相关联的多个局部分类账的子集,并且更新与和区块链相关联的多个局部分类账中的每一个相关联的内容表。例如,节点110(a)和110(b)可以存储针对其交易新创建的分类账条目120(a),而与区块链100相关联的其他节点可以存储该条目也可以不存储该条目。在一些实施方式中,交易参与者可能更喜欢存储区块链100的所有节点,而其他参与者仅存储与其交易相关的那些分类账条目。因此,每个节点可以维护完整的分类账或者可以维护包括小于与区块链相关联的所有分类账条目的局部分类账。
在一些实施方式中,多个局部分类账中的每一个可以包括内容表的副本。通过分类账引擎225来更新与和区块链相关联的多个局部分类账中的每一个相关联的内容表可以包括:将内容表的更新后副本分发给多个局部分类账中的每一个、和/或可以包括将与新分类账条目相关联的信息分发给多个局部分类账中的每一个以更新内容表。在一些实施方式中,多个局部分类账中的每一个包括对内容表的权威副本的链接。例如,与区块链相关联的第一参与者节点(例如,节点110(a))可以维护内容表130的权威副本。在一些实施方式中,包括局部分类账的每个节点可以维护内容表的链接和/或副本,并且可以周期性地验证其副本与内容表的权威副本相匹配。例如,节点可以请求提供权威副本和/或请求例如校验和和/或数字签名的验证数据。
内容表可以包括多个局部分类账中的每一个的位置的目录(例如,存储位置,诸如设备210的存储器215)和/或区块链中的多个分类账条目的顺序。在一些实施方式中,内容表可以包括与区块链中的多个分类账条目的正确顺序相关联的校验和。
尽管图2中描绘了一个计算设备210,但是系统200的某些实施方式可以包括一个以上的计算设备210。至少一个计算设备可以被采用并被布置在例如至少一个服务器库、计算机库、数据中心和/或其他布置中。例如,计算设备一起可以包括云计算资源、网格计算资源和/或任何其他分布式计算布置。这样的计算设备可以位于单个安装中、和/或可以分布在许多不同的地理位置中。
图3是用于提供区块链的分布式局部分类账的创建的示例方法300的流程图。尽管下面参考计算设备210描述了方法300的执行,但是用于执行方法300的其他适当组件也可以被采用。
方法300可以在阶段305中开始并且前进到阶段315,在阶段315处,计算设备210可以为多个局部分类账创建内容表(toc)。例如,多个节点110(a)至110(e)可以被识别为负责存储区块链100的部分。计算设备210可以针对由区块链100记录的每个交易检查每个分类账条目,并且确定在每个交易中涉及了节点110(a)至110(e)中的哪些节点。在图1的示例中,分类账条目120(a)可以被分配给参与者节点110(a)和110(b),分类账条目120(b)可以被分配给参与者节点110(b)和110(d),等等。可以建立针对区块链100中的每个参与者的存储位置,例如特定的网络附加存储设备和/或在设备存储器上。然后可以使用分类账条目的位置以及正确的交易顺序来建立toc文件、数据库条目、或其他记录类型。
然后,方法300可以前进到阶段320,在阶段320处,计算设备210可以将多个局部分类账中的每一个分配给相关存储设备。区块链100的分类账可以包括关于由节点110(a)至110(e)表示的多个交易参与者之间的多个交易的信息。多个交易参与者中的每一个可以为与其所关联的交易相关联的局部分类账提供相关存储设备。将多个局部分类账中的每一个分配给相关存储设备可以包括:识别多个交易中的每一个中的参与者。例如,分类账条目120(a)可以被分配给节点110(a)和110(c)的存储位置并且被存储在那些存储位置处,该节点110(a)和110(c)作为其详细信息被记录在分类账条目120(a)中的交易中的参与者。
然后,方法300可以前进到阶段325,在阶段325处,计算设备210可以将内容表提供给针对多个局部分类账中的每一个的相关存储设备。在一些实施方式中,多个局部分类账中的每一个可以包括内容表的副本。内容表的提供可以包括将内容表的更新后副本分发给多个局部分类账中的每一个,和/或可以包括将与新分类账条目相关联的信息分发给多个局部分类账中的每一个以更新内容表。在一些实施方式中,多个局部分类账中的每一个包括对内容表的权威副本的链接。例如,与区块链相关联的第一参与者节点(例如,节点110(a))可以维护内容表130的权威副本。在一些实施方式中,包括局部分类账的每个节点可以维护内容表的链接和/或副本,并且可以周期性地验证其副本与内容表的权威副本相匹配。例如,节点可以请求提供权威副本和/或请求例如校验和和/或数字签名的验证数据。
内容表可以包括多个局部分类账中的每一个的位置的目录(例如,存储位置,诸如设备210的存储器215)和/或区块链中的多个分类账条目的顺序。在一些实施方式中,内容表可以包括与区块链中的多个分类账条目的正确顺序相关联的校验和。
然后,方法300可以前进到阶段330,在阶段330处,计算设备210可以响应于与区块链的分类账相关联的交易,更新第一局部分类账和第二局部分类账。例如,节点110(a)和节点110(b)可以参与交易,这导致交易记录230被存储在区块链100的分类账条目120(a)中。交易引擎220可以对交易记录230进行处理以适当地包含在区块链100中,例如通过用先前分类账条目的哈希打包记录来创建有效的区块链链接,以便创建分类账条目。
然后,方法300可以前进到阶段335,在阶段335处,计算设备210可以根据交易,更新存储在针对多个局部分类账中的每一个的相关存储设备中的内容表。通过分类账引擎225来更新与和区块链相关联的多个局部分类账中的每一个相关联的内容表可以包括:将内容表的更新后副本分发给多个局部分类账中的每一个、和/或可以包括将与新分类账条目相关联的信息分发给多个局部分类账中的每一个以更新内容表。在一些实施方式中,多个局部分类账中的每一个包括对内容表的权威副本的链接。
然后,方法300可以在阶段350处结束。
图4是用于提供区块链的局部分类账的示例计算设备400的框图。计算设备400可以包括处理器410以及包括非暂时性机器可读存储介质的存储器415。存储器415可以包括多个处理器可执行指令,例如接收数据交易记录指令432、创建分类账条目指令434、附加分类账条目指令436、以及更新内容表指令438。在一些实施方式中,指令432、434、436、438可以与单个计算设备400相关联、和/或可以在不同的计算设备之间例如经由直接连接、总线或网络被可通信地耦接。
处理器410可以包括中央处理单元(cpu)、基于半导体的微处理器、诸如复杂可编程逻辑器件(cpld)和/或现场可编程门阵列(fpga)的可编程组件、或适用于检索并执行存储在机器可读存储介质420中的指令的任何其他硬件设备。特别地,处理器110可以获取、解码并执行指令432、434、436、438。
可执行指令432、434、436、438可以包括逻辑,该逻辑存储在机器可读存储介质415的任何部分和/或组件中并且可由处理器410执行。机器可读存储介质415可以包括易失性和/或非易失性存储器、以及数据存储组件。易失性组件是在断电时不保留数据值的组件。非易失性组件是在断电时保留数据的组件。
机器可读存储介质415可以包括例如随机存取存储器(ram)、只读存储器(rom)、硬盘驱动器、固态驱动器、usb闪存驱动器、经由存储卡读取器访问的存储卡、经由所关联的软盘驱动器访问的软盘、经由光盘驱动器访问的光盘、经由适当的磁带驱动器访问的磁带、和/或其他存储器组件、和/或这些存储器组件中的任意两种和/或更多种的组合。此外,ram可以包括例如静态随机存取存储器(sram)、动态随机存取存储器(dram)、和/或磁随机存取存储器(mram)及其他此类设备。rom可以包括例如可编程只读存储器(prom)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)、和/或其他类似的存储器设备。
接收数据交易记录指令432可以接收两个参与者之间的数据交易的记录。例如,节点110(a)和节点110(b)可以参与一个交易,这导致交易记录230被存储在区块链100的分类账条目120(a)中。交易引擎220可以对交易记录230进行处理以适当地包含在区块链100中,例如通过用先前分类账条目的哈希打包记录来创建有效的区块链链接,以便创建分类账条目。
创建分类账条目指令434可以创建与数据交易的记录相关联的分类账条目。例如,创建分类账条目指令434可以对交易记录230进行处理以适当地包含在区块链100中,例如通过用先前分类账条目的哈希打包记录来创建有效的区块链链接,以便创建分类账条目,例如分类账条目120(a)。
附加分类账条目指令436可以将分类账条目附加到与区块链相关联的多个局部分类账的子集。例如,分类账条目可以在特定参与者的节点处被添加到与区块链相关联的多个局部分类账的子集。例如,节点110(a)和110(b)可以存储针对其交易新创建的分类账条目120(a),而与区块链100相关联的其他节点可以存储该条目也可以不存储该条目。在一些实施方式中,交易参与者可能更喜欢存储区块链100的所有节点,而其他参与者仅存储与其交易相关的那些分类账条目。因此,每个节点可以维护完整的分类账或者可以维护包括小于与区块链相关联的所有分类账条目的局部分类账。
更新内容表指令438可以更新与和区块链相关联的多个局部分类账中的每一个相关联的内容表。例如,在一些实施方式中,多个局部分类账中的每一个可以包括内容表的副本。通过分类账引擎225来更新与和区块链相关联的多个局部分类账中的每一个相关联的内容表可以包括:将内容表的更新后副本分发给多个局部分类账中的每一个、和/或可以包括将与新分类账条目相关联的信息分发给多个局部分类账中的每一个以更新内容表。在一些实施方式中,多个局部分类账中的每一个包括对内容表的权威副本的链接。例如,与区块链相关联的第一参与者节点(例如,节点110(a))可以维护内容表130的权威副本。在一些实施方式中,包括局部分分类账的每个节点可以维护内容表的链接和/或副本,并且可以周期性地验证其副本与内容表的权威副本相匹配。例如,节点可以请求提供权威副本和/或请求例如校验和和/或数字签名的验证数据。
内容表可以包括多个局部分类账中的每一个的位置的目录(例如,存储位置,诸如设备210的存储器215)和/或区块链中的多个分类账条目的顺序。在一些实施方式中,内容表可以包括与区块链中的多个分类账条目的正确顺序相关联的校验和。
所公开的示例可以包括用于文档元素重定位的系统、设备、计算机可读存储介质以及方法。出于解释的目的,参考图中示出的组件来描述某些示例。然而,所示出的组件的功能可能重叠,并且可能存在于更少或更多数量的元件和组件中。此外,所示出的元件的全部或部分功能可以共存或者分布在几个地理上分散的位置中。此外,所公开的示例可以在各种环境中实现,并且不限于所示示例。
此外,如说明书和所附权利要求中所使用的,单数形式“一”、“该”和“所述”旨在也包括复数形式,除非上下文另有说明。可替代地,尽管本文可以使用术语第一、第二等来描述各种元件,但是这些元件不应受这些术语的限制。相反,这些术语仅被用于将一个元件与另一个元件区分开来。
此外,结合图描述的操作的序列是示例而非旨在进行限制。在不脱离所公开的示例的范围的情况下,附加或更少的操作或者操作的组合可以被采用或者可以被改变。因此,本公开仅仅阐述了实施方式的可能示例,并且可以对所描述的示例进行诸多改变和修改。所有这些修改和改变旨在被包括在本公开的范围内并由所附权利要求所保护。