首页 / 区块链数据压缩和存储

区块链数据压缩和存储实质审查 发明

技术领域

[0001] 本公开内容总体上涉及区块链技术、以及与该区块链技术相关的硬件和软件。更具体地,本公开内容涉及用于根据各种环境进行区块链数据压缩和存储的系统和方法。

相关背景技术

[0002] 区块链可以用于涉及比特币、以太坊、莱特币、门罗币和/或各种其他分布式加密货币的交易。虚拟货币系统可以提供不受监管的数字金钱,该数字金钱可以由该虚拟货币的虚拟货币开发商创建的分布式软件发行和控制,而不是由发行和控制法定货币的中央银行或公共当局发行和控制。例如,比特币是一种分散式虚拟货币,无需中介即可提供对等交易,其中这些对等交易由比特币网络节点验证并且被记录在称为区块链的公共分布式账本中。随着时间的推移,由于更多的交易被网络节点验证并且作为区块添加到区块链中,因此区块链的存储需求不断增长。因此,区块链变得存储很密集且更难以维护。此外,与相对较小的区块链相比,在对等网络上分布大型区块链会利用网络资源并增加传输时间。申请人认识到有机会改进区块链上信息的存储管理,特别是可能包括大量历史交易的更大的区块链。

具体实施方式

[0019] 根据一些实施方式,图1至图6和图14至图15将对区块链操作的某些方面进行描述。根据一些实施方式,图7至图13将对与区块链存储管理有关的更具体的方面进行描述。
[0020] 在以下对各种实施方式的描述中,参考了上述附图,附图形成各种实施方式的一部分,并且通过图示的方式示出了可以实践本文描述的各个方面的各种实施方式。应当理解的是,可以利用其他实施方式,并且可以在不脱离本文描述的范围的情况下进行结构和功能修改。各个方面能够具有其他实施方式并且能够以各种不同的方式实践或执行。
[0021] 从广义上讲,区块链是指支持在对等网络中以分布式的方式存储、维护和更新可信账本的框架。例如,在加密货币应用程序中,诸如比特币或以太坊、瑞波币、达世币、莱特币、多吉币、大零币、泰达币、比特币现金、艾达币、恒星币、EOS、NEO、NEM、比特股、德赛币、Augur、Komodo、PIVX、Waves、斯蒂姆币、门罗币、Golem、Stratis、字节币、Ardor,或数字货币交易所,诸如比特币基地、Kraken、CEX.IO、Shapeshift、Poloniex、Bitstamp、Coinmama、Bisq、LocalBitcoins、Gemini,以及其他分布式账本,代表了加密货币单位在实体之间转移的每笔交易。例如,使用数字货币交易所,用户可以购买任何值的数字货币或将任何持有的数字货币兑换成全球货币或其他数字货币。每笔交易都可以通过分布式账本进行验证,并且只有经验证的交易才会被添加到账本中。账本连同区块链的许多方面都可以被称为“去中心化”,因为通常不存在中央机构。为此,账本的准确性和完整性在单一的中央位置处不会受到攻击。为了保护账本的完整性,修改所有或大部分存储账本的位置变得很困难。这在很大程度上是因为与构成对等网络的节点相关联的个人对账本的准确性具有既得利益。
[0022] 尽管在分布式账本中维护加密货币交易可能是当今区块链技术最公认的用途,但账本可以被用在各种不同的领域中。事实上,区块链技术适用于可以访问任何类型的数据并确保数据的准确性的任何应用程序。例如,供应链可以在区块链账本中得到维护,其中每个部件在各方之间以及位置之间的转移可以被记录在账本中以供以后检索。这样做可以更容易地识别缺陷部件的来源以及其他此类缺陷部件的交付地点。类似地,可以以相似的方式从农场到杂货店再到购买者跟踪食物项目。
[0023] 现在将参考附图对本公开内容的实施方式进行详细描述。
[0024] 应当理解的是,本文使用的措辞和术语是为了描述的目的,而不应被视为限制。相反,本文使用的短语和术语将被赋予其最广泛的解释和含义。“包括”和“包含”及其变型的使用意在涵盖其后列出的项目及其等同物以及附加项目及其等同物。
[0025] 在区块链系统中,区块链的大小可能会快速增长。可能需要计算/存储容量(即,更快的处理器、更大的存储部件)来支持区块链的扩展。在某些情况下,区块可能会在被添加到链之前被压缩。在某些情况下,当区块变得陈旧或不相关时,这些区块可能会被消除,例如,在区块链的开头处的区块可能会被消除。然而,在某些情况下,在区块链的开头处的区块的消除可能是在区块链达到不希望的大小之后。在其他情况下,存储在区块链的早期区块中的所有数据可能都是相关的,以及因此可能永远不可以消除这些区块。
[0026] 本公开内容的系统和方法描述了一种区块链压缩系统,当区块链满足区块链压缩条件时,该区块链压缩系统可以通过对区块链的区块集的散列根值进行计算来压缩区块链。区块链的区块集或区块链的一部分可以被用作Merkle树的数据。包括Merkle树的根散列值所基于的区块的区块链部分可以被存储在服务提供者的数据库中。可以基于服务提供者满足了存储条件来选择存储区块链部分的服务提供者。区块链网络的节点可以生成新纪元创世区块,该新纪元创世区块包括存储有区块链部分的数据库地址和这些区块的根散列值。新纪元创世区块可能是分配给其他节点的区块链,并且可以在该新纪元创世区块上向区块链添加附加的区块。对与区块链的存储部分相关的信息的任何查询都可能导致从新纪元创世区块中检索数据库地址和根散列值,并且调用数据库地址与根散列值以完成查询。因此,区块链可以定期被压缩和分发,并且可以通过引用存储在新纪元创世区块中的根散列值和新纪元创世区块中的数据库地址来访问任何先前的压缩区块。因此,本公开内容的系统和方法降低了传输和分发大型区块链的网络成本。此外,本公开内容的区块链通过分发区块链的压缩版本降低了节点的存储要求。
[0027] 计算架构
[0028] 如上所述,在区块链框架中的分布式账本在对等网络中被存储、维护和更新。在一个示例中,分布式账本维护着许多区块链交易。图1示出了用于促进区块链交易的示例性区块链压缩系统100。区块链压缩系统100包括经由网络140互连的第一客户端设备120、第二客户端设备125、第一服务器150以及物联网(IoT)设备155。第一客户端设备120、第二客户端设备125以及第一服务器150可以是参考图15更详细地描述的计算设备1505。IoT设备155可以包括各种设备中的任何一种,包括车辆、家用电器、嵌入式电子产品、软件、传感器、致动器、恒温器、灯泡、门锁、冰箱、RFID植入物、RFID标签、起搏器、可穿戴设备、智能家居设备、相机、跟踪器、泵、POS设备、以及连同被配置成连接和交换数据的连接硬件一起的固定和移动通信设备。网络140可以是各种可用网络中的任何一种,诸如因特网,并且代表全球网络和网关的集合以支持连接到网络140的设备之间的通信。区块链压缩系统100还可以包括一个或更多个分布式或对等(P2P)网络,诸如第一区块链网络130a、第二区块链网络130b和第三区块链网络130c(统称为区块链网络130)。如图1所示,网络140可以包括第一区块链网络130a和第二区块链网络130b。第三区块链网络130c可以与下面参考图2所描述的私有区块链相关联,并且因此,第三区块链网络130c与第一区块链网络130a和第二区块链网络103b分开地示出。每个区块链网络130可以包括如参考图2更详细地描述的多个互连的设备(或节点)。如上所述,账本或区块链是分布式数据库,用于维护包括任何类型信息的日渐增长的记录列表。如参考图3更详细地描述的区块链可以至少被存储在一个或更多个区块链网络130的多个节点(或设备)处。
[0029] 在一个示例中,基于区块链的交易通常可以涉及实体之间的数据或值的转移,诸如图1中的第一客户端设备120的第一用户110和第二客户端设备125的第二用户115。服务器150可以包括一个或更多个应用程序,例如,交易应用程序,所述交易应用程序被配置成通过利用与区块链网络130中之一相关联的区块链来促进实体之间的交易。作为示例,第一用户110可以经由在第一客户端设备120上执行的用户应用程序来请求或发起与第二用户115的交易。交易可以与从第一用户110到第二用户115的值或数据的转移有关。第一客户端设备120可以向服务器150发送交易的请求。服务器150可以将所请求的交易发送到区块链网络130中之一以如下所讨论的进行验证和批准。
[0030] 区块链网络
[0031] 图2示出了包括多个互连节点或设备205a至205h(统称为节点205)的示例性区块链网络200。节点205中的每个节点均可以包括参考图15更详细地描述的计算设备1505。尽管图2示出了单个节点205,但是节点205中的每个节点均可以包括多个设备(例如,池)。区块链网络200可以与区块链220相关联。节点205中的一些或所有节点都可以复制并保存区块链220的相同副本。例如,图2示出了节点205b至205e和205g至205h存储有区块链220的副本。节点205b至205e和205g至205h可以独立地更新它们各自的区块链220的副本,如下所讨论的。
[0032] 区块链节点类型
[0033] 区块链节点,例如,节点205,可以是全节点或轻量级节点。全节点,诸如节点205b至205e和205g至205h,可以通过存储整个区块链220的副本并确保邮寄到区块链220的交易有效来充当区块链网络200中的服务器。全节点205b至205e和205g至205h可以在区块链220上发布新区块。轻量级节点,诸如节点205a和205f,可能比全节点具有更少的计算资源。例如,IoT设备通常充当轻量级节点。轻量级节点可以与其他节点205通信,向全节点205b至205e和205g至205h提供信息,以及查询由全节点205b至205e和205g至205h存储的区块链
220的区块的状态。然而,在该示例中,如图2所示,轻量级节点205a和205f可能没有存储区块链220的副本,以及因此可能不会在区块链220上发布新区块。
[0034] 在本公开内容的各种实施方式中,区块链220可以是压缩版本并且可以包括当前的分布式区块链,该当前的分布式区块链包括最新区块和区块链部分220(1)、220(2)、220(3)、220(4)、220(5)、220(6)和/或直到220(n),这些区块链部分可以各自由一个或更多个全节点205b至205e和205g至205h来存储。然而,在其他实施方式中,区块链部分220(1)至220(n)可以附加地或替代地由服务器150和/或服务器152来存储。此外,在一些实施方式中,节点205a至205h中的每个节点可以是与拥有该节点的服务提供者相关联。
[0035] 区块链网络类型
[0036] 区块链网络200及其关联的区块链220可以是公共的(无许可的)、联合的或联盟的、或者私有的。如果区块链网络200是公共的,则任何实体都可以读取和写入相关联的区块链220。然而,如果区块链网络200及其相关联的区块链220由单个实体或组织控制,则区块链网络200及其相关联的区块链220可以是联合的或联盟的。此外,可以限制能够对互联网访问的节点205中的任何节点参与区块链220上的交易验证。如果对区块链网络200和区块链220的访问仅限于特定的授权实体,例如组织或个人团体,则区块链网络200及其相关联的区块链220可以是私有的(许可的)。此外,区块链220的读取许可可以是公共的或受限的,而写入许可可以仅限于控制实体或授权实体。
[0037] 区块链
[0038] 如上所讨论的,区块链220可以与区块链网络200相关联。图3示出了示例性区块链300。区块链300可以包括多个区块305a、305b和305c(统称为区块305)。区块链300包括第一区块(未示出),有时被称为创世区块。区块305中的每个区块均可以包括一个或多个已提交和验证的交易的记录。区块链300的区块305可以链接在一起并且以密码方式进行保护。在某些情况下,可以利用随时间动态变化的后量子密码算法来减轻量子计算破坏当前密码方案的能力。下面提供了存储在区块链块中的多种类型的数据字段的示例。区块链300的副本可以例如作为文件由节点205b至205e和205g至205h本地存储在云中、电力网上或存储在数据库中。
[0039] 区块
[0040] 区块305中的每个区块可以包括一个或更多个数据字段。区块链300内的区块305的组织和对应的数据字段可以是特定于实现方式的。作为示例,区块305可以包括相应的标头320a、320b和320c(统称为标头320)和区块数据375a、375b和375c(统称为区块数据375)。标头320可以包括与它们的相应区块305相关联的元数据。例如,标头320可以包括相应的区块编号325a、325b和325c。如图3中所示,区块305a的区块编号325a是N‑1,区块305b的区块编号325b是N,以及区块305c的区块编号325c是N+1。区块305的标头320可以包括数据字段,该数据字段包含区块大小(未示出)。
[0041] 区块305可以链接在一起且以密码方式进行保护。例如,区块N(区块305b)的标头320b包括包含前一个区块N‑1的标头320a的散列表示的数据字段(先前区块散列330b)。用于生成散列表示的散列算法可以是例如产生固定长度的输出的安全散列算法256(SHA‑
256)。在这个示例中,散列算法是单向散列函数,其中基于散列函数的输出来确定散列函数的输入在计算上是困难的。附加地,区块N+1(区块305c)的标头320c包括包含区块N(区块
305b)的标头320b的散列表示的数据字段(先前区块散列330c)。
[0042] 区块305的标头320还可以包括包含区块数据的散列表示的数据字段,诸如区块数据散列370a至370c。区块数据散列370a至370c可以例如通过Merkle树并且通过存储散列或通过使用基于所有区块数据的散列来生成。区块305的标头320可以包括相应的随机数360a、360b和360c。在某些实现方式中,随机数360a至360c的值是与区块的散列连结(或附加到区块的散列)的任意字符串。标头320可以包括其他数据,诸如难度目标。
[0043] 区块305可以包括相应的区块数据375a、375b和375c(统称为区块数据375)。区块数据375可以包括也已经经由共识模型(如下所述)集成到区块链220中的经验证的交易的记录。如上所讨论的,区块数据375可以包括除了经验证的交易之外的多种不同类型的数据。区块数据375可以包括任何数据,诸如文本、音频、视频、图像或文件,这些数据可以以数字方式表示并以电子方式存储。
[0044] 区块链交易
[0045] 在一个示例中,基于区块链的交易通常可能涉及数据或值的转移或实体之间的交互,并且在下文中进行更详细的描述。返回参考图1,服务器150可以包括一个或更多个应用程序,例如,交易应用程序,交易应用程序被配置成促进实体之间的区块链交易。实体可以包括用户、设备等。第一用户110可以经由在第一客户端设备120上执行的用户应用程序来请求或发起与第二用户115的交易。交易可以与从第一用户110到第二用户115的值或数据的转移有关。值或数据可以表示金钱、合同、财产、记录、权利、状态、供应、需求、警报、触发或可以以数字形式表示的任何其他资产。交易可以表示第一用户110与第二用户115之间的交互。
[0046] 图4是由交易应用程序生成的交易465的视图。交易465可以包括公钥415、与第一用户110相关联的区块链地址430、数字签名455以及交易输出信息460。交易应用程序可以通过将密码散列函数410应用到私钥405而根据第一用户110的私钥405得到公钥415。密码散列函数410可以是基于AES、SHA‑2、SHA‑3、RSA、ECDSA、ECDH(椭圆曲线密码术)或DSA(有限域密码术)的,然而可以使用其他密码模型。有关密码算法的更多信息可以在联邦信息处理标准出版物(FIPS PUB 180‑3)、安全散列标准中找到。交易应用程序可以通过将散列函数420应用于公钥415来得到第一用户110的地址或标识符,诸如区块链地址430。简而言之,散列函数是可以被用于将任意大小的数据映射到固定大小的数据的函数。该值也可以被称为摘要、散列值、散列码、或散列。为了指示第一用户110是交易465的发起者,交易应用程序可以使用第一用户110的私钥405生成用于交易数据435的数字签名455。交易数据435可以包括关于将被转移的资产和提及资产来源的信息,诸如资产被转移给第一用户110的先前交易或对发起资产的事件的识别。生成数字签名455可以包括将散列函数440应用于交易数据
435,产生散列化的交易数据445。可以使用第一用户110的私钥405(经由加密函数450)来对散列化的交易数据445和交易数据435进行加密,产生数字签名455。交易输出信息460可以包括资产信息470和第二用户的地址或标识符,诸如区块链地址475。交易465可以从第一客户端设备120发送到服务器150。
[0047] 正在利用的特定类型的密码算法可能会基于诸如时间长度、隐私担忧等的各种因素而动态地变化。例如,正在利用的密码算法的类型可以每年、每周、每天等都在改变。算法的类型也可能基于隐私的变化级别而改变。例如,内容所有者能够通过利用更强大的算法来实现更高级别的保护或隐私。
[0048] 区块链地址
[0049] 区块链网络可以利用区块链地址来指示使用区块链的实体或交易中的起点和终点。例如,第一用户110的区块链地址,如图4中作为发送方的区块链地址430所示出的,可以包括基于将密码散列函数420应用于公钥415而根据第一用户110的公钥415得到的字符的字母数字字符串。用于得到地址的方法可以变化并且可以特定于区块链网络的实现方式。在一些示例中,区块链地址可以被转换为QR码表示、条形码、代币或其他视觉表示或图形描述,以使地址能够被移动设备、可穿戴设备、传感器、相机等光学扫描。除了地址或QR码之外,有许多用于识别区块链中表示的个人、对象等的方法。例如,可以通过生物特征信息(诸如指纹、视网膜扫描、语音、面部识别码、温度、心率、个人独有的手势/动作等)以及通过其他类型的身份信息(诸如帐号、家庭住址、社会安全号码、正式姓名等)来识别个人。
[0050] 广播交易
[0051] 服务器150可以从区块链网络130的用户接收交易。交易可以经由桌面应用程序、智能手机应用程序、数字钱包应用程序、网络服务、或其他软件应用程序被提交至服务器150。服务器150可以将交易发送或广播到区块链网络130。图5示出了由服务器150向区块链网络130广播的示例性交易502。交易502可以被广播到区块链网络130的多个节点205。通常,一旦交易502被广播或提交到区块链网络130,它就可以被节点205中的一个或更多个节点接收。一旦交易502被区块链网络130的一个或更多个节点205接收到,它就可以由接收节点205传播到区块链网络130的其他节点205。
[0052] 区块链网络可以根据规则集运行。规则可以指定节点可以接受交易的条件、节点可以接受的交易类型、节点对于接受和处理交易而接收的补偿类型等。例如,节点可以接受基于交易历史、信誉、计算资源、与服务提供者的关系等的交易。规则可以指定将交易广播到节点的条件。例如,交易可以基于与节点的地理、历史、声誉、市场条件、记事表/延迟、技术平台相关的标准而被广播到一个或更多个特定节点。规则可以被动态地修改或更新(例如,打开或关闭)以解决诸如延迟、可扩展性和安全条件等的问题。交易可以作为对与这些节点关联的实体的一种补偿形式(例如,通过接收用于将一个或更多个交易的区块添加到区块链的补偿)被广播到节点的子集。
[0053] 交易验证——用户认证和交易数据完整性
[0054] 由于诸如延迟等的问题,并非所有全节点205都可以同时接收到经广播的交易502。此外,并非所有接收到经广播的交易502的全节点205都可以选择对交易502进行验证。
节点205可以选择对特定交易进行验证,例如,基于与交易502相关联的交易费用来进行验证。交易502可以包括发送者的区块链地址505、公钥510、数字签名515以及交易输出信息
520。节点205可以对交易502是否合法或是否符合预定义的规则集进行验证。节点205还可以基于建立用户真实性和交易数据完整性来对交易502进行验证。用户真实性可以通过确定由交易502指示的发送者实际上是否为交易502的实际发起者来建立。用户真实性可以经由密码术(例如,使用诸如公钥和私钥的成对密钥的非对称密钥密码术)来证明。当建立用户真实性时,可以考虑附加因素,诸如用户声誉、市场条件、历史、交易速度等。可以通过确定与交易502相关联的数据是否以任何方式被修改来建立交易502的数据完整性。返回参考图4,当交易应用程序创建交易465时,它可以通过包括数字签名455来指示第一用户110是交易465的发起者。
[0055] 节点205可以使用公钥510对数字签名515进行解密。解密的结果可以包括散列化的交易数据540和交易数据530。节点205可以基于将散列函数545应用到交易数据530来生成散列化的交易数据550。节点205可以在第一散列化的交易数据540与第二散列化的交易数据550之间执行比较565。如果比较565的结果570指示匹配,则可以建立交易502的数据完整性并且节点205可以指示交易502已经被成功验证。否则,交易502的数据可能已经以某种方式被修改并且节点205可以指示交易502没有被成功地验证。
[0056] 每个全节点205可以构建其自己的区块并且将经验证的交易添加到该区块。因此,不同全节点205的区块可以包括不同的经验证的交易。作为示例,全节点205a可以创建包含交易“A”、“B”和“C”的第一区块。另一全节点205b可以创建包含交易“C”、“D”和“E”的第二区块。这两个区块都可以包括有效交易。然而,仅一个区块可以添加到区块链中,否则这两个区块可以共同具有的交易(诸如交易“C”)可能会被记录两次,从而导致在交易执行两次时出现诸如重复支付等的问题。上述示例中可能出现的一个问题是交易“C”、“D”和“E”在被添加到区块链时可能会被过度延迟。这可以通过以下讨论的多种不同方式来解决。
[0057] 保护密钥
[0058] 可以使用诸如数字钱包等的软件来管理和保护私钥、公钥以及地址。私钥也可以使用硬件来存储和保护。数字钱包还可以使用户能够进行交易和管理余额。数字钱包可以在线或离线、以及以软件或硬件、或者以硬件和软件两者来存储或维护。没有公钥/私钥,用户无法证明资产的所有权。此外,有权访问用户公钥/私钥的任何人都可以访问用户的资产。虽然资产可以被记录在区块链上,但在没有私钥的情况下,用户可能无法访问它们。
[0059] 代币
[0060] 代币可以指区块链中属于区块链地址的条目。该条目可以包括指示资产的所有权的信息。代币可以表示金钱、合同、财产、记录、访问权利、状态、供应、需求、警报、触发、声誉、票或可以以数字形式表示的任何其他资产。例如,代币可以指与用于特定目的的加密货币相关的条目,或者可以代表诸如法定货币或不动产等的现实世界资产的所有权。代币合约是指代表被编码在智能合约中的规则集的密码代币。拥有与区块链地址相对应的私钥的人可以访问该地址处的代币。因此,区块链地址可以代表拥有代币的人的身份。仅区块链地址的所有者可以将代币发送给另一人。所有者可以经由所有者的钱包来访问代币。代币的所有者可以经由区块链交易将代币发送或转移给用户。例如,所有者可以用私钥签署与代币的转移相对应的交易。当用户收到代币时,代币可以被记录在用户的区块链地址处的区块链中。
[0061] 建立用户身份
[0062] 虽然数字签名可以提供交易与被转移资产的所有者之间的链接,但它可能无法提供与所有者的真实身份的链接。在某些情况下,可能需要建立与数字签名相对应的公钥的所有者的真实身份。例如,基于生物特征数据、密码、个人信息等,可以对公钥的所有者的真实身份进行验证。生物特征数据可以包括任何物理识别信息,诸如指纹、面部和眼睛图像、语音样本、DNA、人体移动、手势、步态、表情、心率特征、温度等。
[0063] 发布和验证区块
[0064] 如上所讨论的,全节点205可以各自构建它们自己的包括不同交易的区块。节点可以通过将经验证的交易添加到区块中,直到区块达到可以由区块链规则指定的特定大小来构建区块。然而,仅一个区块可以被添加到区块链中。要添加到区块链的区块和区块的排序可以基于共识模型来确定。在工作量证明模型中,两个节点可以通过解决复杂的数学难题来竞争以将各自的区块添加到区块链。例如,这样的难题可以包括确定如上所讨论的随机数,使得要添加到区块链的区块的散列值(使用预定的散列算法)(包括随机数)具有满足范围限制的值。如果两个节点同时解决难题,则可能会创建“分叉”。当全节点205解决了难题时,它可以发布其区块以由区块链网络130的节点205的任何验证节点进行验证。
[0065] 在工作量证明共识模型中,例如,通过运行检查或搜索存储在区块链中的当前账本,节点对交易进行验证。该节点将为区块链创建新区块,该区块将包括一个或更多个经验证的交易的数据(参见,例如,图3的区块305)。在诸如比特币等的区块链实现方式中,区块的大小受到限制。返回参考图3,在该示例中,区块305将包括表示区块链中当前最后区块的散列的先前区块散列330。该区块还可以包括它自己的交易数据的散列370(例如,所谓的Merkle散列)。根据特定算法,可以对来自区块的所有数据或选定数据进行散列化以创建最终散列值。根据工作量证明模型的实施方式,节点将寻求修改区块的数据,使得最终散列值小于预设值。这是通过添加被称为随机数360的数据值来实现的。因为最终散列值不能基于其输入而被预测,因此无法对导致最终散列值小于预设值的随机数360的适当值进行估计。因此,在该实施方式中,在节点处需要计算密集型操作,以通过“蛮力”试错法来确定适当的随机数值。一旦确定了成功的随机数值,完整的区块就会被发布到区块链网络进行验证。如果由区块链网络中的大多数节点进行验证过,则完整的区块会被添加到每个参与节点处的区块链中。当节点的区块没有被添加到区块链时,该区块被丢弃,并且节点将继续构建新的区块。被丢弃的区块中的交易可能会返回到队列中并且等待被添加到下一区块中。当交易被丢弃或返回队列时,与被丢弃的交易相关联的资产不会丢失,因为资产的记录将存在于区块链中。然而,当交易返回到队列时,它会导致完成交易的延迟。减少完成交易的时间可能很重要。区块链规则集,或对于节点处理返回交易的重新枚举/补偿,可以确定未来如何处理返回的交易。当交易被放入池中时,它可以具有优先级,但是规则可能指示交易优先级必须超过阈值级别。可以增大返回的或被丢弃的交易的优先级。另一种减少完成交易的时间的方法是使系统、服务提供者、交易参与者或商家为节点处理返回的交易支付额外的奖励。例如,服务提供者可以基于地理位置或基于批量折扣的角度来识别首选矿工的网络。可以通过将返回的交易路由到特定的首选节点来优化完成交易的时间。交易可能与如下地址相关联,该地址限制了如果交易由于被包含在被丢弃的区块中而被返回,则首选节点中的哪个节点将对该交易进行处理。可以将值与交易相关联,使得它转到特定地理位置中的首选矿工。此外,可以基于预设规则对返回的交易进行处理。例如,规则可以指示承诺处理特定数量的返回的交易以接收额外的奖励或补偿。
[0066] 区块链确认
[0067] 在包含交易的区块被添加到区块链之后,可以针对该交易生成区块链确认。区块链确认可以是被添加到区块链的在包含该交易的区块之后的多个区块。例如,当交易被广播到区块链时,将不存在与该交易相关联的区块链确认。如果该交易未通过验证,则包含该交易的区块将不会被添加到区块链中,并且该交易将继续没有与该交易相关联的区块链确认。然而,如果包含该交易的区块被验证过,则区块中的每个交易都将具有与该交易相关联的区块链确认。因此,当区块被验证过时,区块中的交易将具有与该交易相关联的一个区块链确认。当区块被添加到区块链时,区块中的每个交易都会具有与该交易相关联的两个区块链确认。随着额外的验证区块被添加到区块链中,与该区块相关联的区块链确认的数量将会增加。因此,与交易相关联的区块链确认的数量可以指示重写交易或撤销交易的难度。更高值的交易在执行交易之前可能需要更大量的区块链确认。
[0068] 共识模型
[0069] 如上所讨论的,区块链网络可以确定全节点205中的哪个全节点将下一区块发布到区块链。在无许可的区块链网络中,节点205可以竞争以确定哪个节点发布下一区块。基于共识模型,可以选择节点205来将其区块发布为区块链中的下一区块。例如,所选择的或获胜的节点205可以接收诸如交易费用等的奖励,用于例如发布其区块。可以使用各种共识模型,例如,工作量证明模型、股权证明模型、委托股权证明模型、循环模型、权威证明或身份证明模型以及经过时间证明模型。
[0070] 在工作量证明模型中,节点可以通过成为第一个解决计算密集型数学问题(例如,上述数学难题)的节点来发布下一区块。该解决方案用作“证明”节点花费了适当的努力来发布区块。在区块被接受之前,该解决方案可以由全节点进行验证。然而,工作量证明模型可能容易受到下文所述的51%攻击。股权证明模型的计算强度通常低于工作量证明模型。与对具有解决数学问题的计算资源的任何节点开放的工作量证明模型不同,股权证明模型对在系统中拥有股权的任何节点开放。股权可以是区块链网络节点(用户)可能已投资到系统中的一定数量的加密货币。节点发布下一区块的可能性可以与其股权成比例。由于此模型使用的资源较少,因此区块链可能会放弃奖励作为发布下一区块的激励。循环模型通常由许可的区块链网络使用。使用此模型,节点可以轮流发布新的区块。在经过时间证明模型中,每个发布节点都向其计算机系统内的安全硬件请求等待时间。发布节点可能会在等待时间的持续时间内变为空闲状态,以及然后创建区块并将其发布到区块链网络。作为示例,在需要速度和/或可扩展性的情况下(例如,在企业环境的背景下),混合区块链网络可能会在完全或部分地许可和无许可之间切换。网络可能会基于诸如延迟、安全性、市场条件等的各种因素进行切换。
[0071] 分叉
[0072] 如上所讨论的,共识模型可以用于确定区块链上的事件的顺序,诸如哪个节点能够添加下一区块以及哪个节点的交易首先得到验证。当存在与事件的排序相关联的冲突时,结果可能是区块链中的分叉。分叉可能导致两个版本的区块链同时存在。共识方法通常解决与事件的排序相关联的冲突,从而防止分叉的发生。在某些情况下,分叉可能是不可避免的。例如,使用工作量证明共识模型,竞争解决难题的节点中仅一个节点可能会通过首先解决其难题而获胜。随后获胜节点的区块由网络进行验证。如果获胜节点的区块被网络成功地验证,则它将是被添加到区块链的下一区块。然而,可能会出现两个节点可能同时解决各自难题的情况。在这种情况下,两个获胜节点的区块都可以被广播到网络。由于不同的节点可能会接收到不同获胜节点的通知,因此接收到第一节点作为获胜节点的通知的节点可能会将第一节点的区块添加到他们的区块链的副本中。接收到第二节点作为获胜节点的通知的节点可能会将第二节点的区块添加到他们的区块链的副本中。这导致了两个版本的区块链或分叉。这种类型的分叉可以通过工作量证明共识模型的最长链规则来解决。根据最长链规则,如果存在两个版本的区块链,则网络中具有较大量区块的链可以被认为是有效的区块链。区块链的另一个版本可能被视为无效并且被丢弃或孤立。由于由不同节点创建的区块可能包括不同的交易,因此分叉可能导致交易被包含在一个版本的区块链中,而不是包含在另一个版本中。在被丢弃的区块链的区块中的交易可能会被返回到队列中并等待被添加到下一区块。
[0073] 在某些情况下,分叉可能源于与区块链实现方式相关联的改变,例如,区块链协议和/或软件的改变。由于对大量用户的影响,分叉对于无需许可和全球分布式区块链网络可能比私有区块链网络更具破坏性。向后兼容的区块链实现方式的改变或更新可能会导致软分叉。当出现软分叉时,一些节点可能会执行更新区块链实现方式,而其他节点可能不会。然而,没有更新到新的区块链实现方式的节点可能会继续与更新后的节点进行交易。
[0074] 对不向后兼容的区块链实现方式的改变可能会导致硬分叉。虽然硬分叉通常是有意的,但它们也可能是由无意的软件缺陷/错误引起的。在这种情况下,网络中的所有发布节点可能需要更新到新的区块链实现方式。虽然没有更新到新的区块链实现方式的发布节点可能会根据先前的区块链实现方式继续发布区块,但这些发布节点可能会拒绝基于新的区块链实现方式创建的区块并且继续接受基于先前的区块链实现方式创建的区块。因此,在区块链的不同硬分叉版本上的节点可能无法相互交互。如果所有节点都移动到新的区块链实现方式,则先前的版本可能会被丢弃或废弃。然而,将网络中的所有节点更新为新的区块链实现方式可能不切实际或不可行,例如,在更新使由某些节点使用的专用硬件失效的情况下。
[0075] 基于区块链的应用程序:加密货币
[0076] 加密货币是兑换的媒介,该兑换的媒介可以以电子方式创建并存储在区块链中,诸如图1中的区块链网络130a中的区块链。比特币是加密货币的一个示例,然而存在其他几种加密货币。各种加密技术可以被用于创建加密货币的单位和对交易进行验证。作为示例,第一用户110可以拥有10个单位的加密货币。区块链网络130a中的区块链可以包括指示第一用户110拥有10个单位的加密货币的记录。第一用户110可以经由在第一客户端设备120上执行的钱包应用程序启动10个单位的加密货币到第二用户115的转移。钱包应用程序可以存储和管理第一用户110的私钥。钱包设备的示例包括个人电脑、膝上型电脑、智能手机、个人数字助理(PDA)等。
[0077] 图6是示出用于在诸如图1中的第一客户端设备120的第一用户110与第二客户端设备125的第二用户115等的实体之间执行区块链交易的示例方法600的步骤的流程图。方法600的步骤可以由图1中所示的任何计算设备执行。替代性地或附加地,方法600的一些或所有步骤可以由一个或更多个其他计算设备来执行。方法600的步骤可以被修改、省略和/或以其他顺序执行,以及/或者添加其他步骤。
[0078] 在步骤605处,钱包应用程序可以生成用于将10个单位的加密货币从第一用户110转移到第二用户115的交易数据。钱包应用程序可以使用第一用户110的私钥生成用于交易的公钥。为了指示第一用户110是交易的发起者,还可以使用第一用户110的私钥生成用于交易的数字签名。如参考图4所讨论的,交易数据可以包括诸如发送者的区块链地址430、数字签名455、交易输出信息460、以及发送者的公钥415等的信息。交易数据可以从第一客户端设备120发送到服务器150。
[0079] 服务器150可以接收来自第一客户端设备120的交易数据。在步骤610处,服务器150可以将交易广播到区块链网络130a。可以由区块链网络130a的一个或更多个节点205接收该交易。在步骤615处,在接收到交易后,节点205可以例如基于与交易相关联的交易费用来选择对交易进行验证。如果交易未被节点205中的任何节点选择来进行验证,则可以将交易放置在队列中并且等待被节点205选择。
[0080] 在步骤620处,选择了该交易的节点205中的每个节点可以对该交易进行验证。对交易进行验证可以包括确定交易是否合法或是否符合该交易的预定义的规则集、建立用户真实性、以及建立交易数据完整性。在步骤625处,如果交易被节点205成功地验证,则将经验证的交易添加到由该节点205构建的区块。如上所讨论的,由于不同的节点205可以选择对不同的交易进行验证,因此不同的节点205可以构建或组装包含不同的经验证的交易的区块。因此,与第一用户110向第二用户115转移10个单位的加密货币相关联的交易可以被包括在一些区块中,而不是其他区块中。
[0081] 在步骤635处,区块链网络130a可以等待区块被发布。经验证的交易可以被添加到由节点205组装的区块,直到它达到由区块链指定的最小大小。如果区块链网络130a使用工作量证明共识模型,则节点205可以通过解决复杂的数学难题来竞争将它们各自的区块添加到区块链的权利。首先解决其难题的节点205赢得发布其区块的权利。作为补偿,获胜节点可以被奖励与交易相关联的交易费用(例如,来自第一用户110的钱包)。可替代性地或另外地,获胜节点可以被奖励补偿,作为从区块链网络添加到与获胜节点关联的账户的加密货币的量(例如,“新”单位的加密货币进入流通)。后一种补偿并且将新单元的加密货币释放到流通中的方法有时被称为“挖矿”。在步骤640处,如果区块尚未被发布,则方法600返回到步骤635并且等待区块被发布。然而,在步骤640处,如果区块已经被发布,则方法600进行到步骤645。
[0082] 在步骤645处,将经发布的区块广播到区块链网络130a以进行验证。在步骤650处,如果区块被大多数节点205验证,则在步骤655处,将经验证的区块添加到区块链220。然而,在步骤650处,如果区块没有被大多数节点205验证过,则方法600进行到步骤675。在步骤675处,将区块丢弃并且在被丢弃的区块中的交易返回到队列。队列中的交易可以由一个或更多个节点205选择用于下一区块。构建被丢弃的区块的节点205可以构建新的下一区块。
[0083] 在步骤660处,如果交易被添加到区块链220,则服务器150可以等待接收用于交易的最小数量的区块链确认。在步骤665处,如果还没有接收到用于交易的最小数量的确认,则过程可以返回到步骤660。然而,如果在步骤665处,已经接收到最小数量的确认,则过程进行到步骤670。在步骤670处,可以执行交易并且可以将来自第一用户110的资产转移到第二用户115。例如,在交易接收到至少三个确认后,可以将第一用户110拥有的10个单位的加密货币从第一用户110的金融账户转移到第二用户115的金融账户。
[0084] 匿名和隐私
[0085] 如上所讨论的,在区块链交易的验证期间使用私钥/公钥对来建立用户真实性提供了一些隐私,因为它不会泄露用户身份。然而,存储在区块链上的交易可能对公众是可见的。已经示出,用户身份可能来自公开可用的交易信息。
[0086] 区块链大小
[0087] 根据区块链中记录事件的频率,区块链的大小可能会快速增长。可能需要计算/存储容量(即,更快的处理器、更大的存储部件)来支持区块链的扩展。在某些情况下,区块可能会在被添加到链之前被压缩。在某些情况下,当区块变得陈旧或不相关时,这些区块可能会被消除,例如,在区块链的开头处的区块可能会被消除。作为示例,用有效地模拟1000笔交易的散列的新区块“替换”前1000笔交易的方法可能有助于管理区块链大小。然而,在某些情况下,在区块链的开头处的区块的消除可能是在区块链达到不希望的大小之后。在其他情况下,存储在区块链的早期区块中的所有数据可能都是相关的,以及因此消除这些区块可能永远不切实际。本公开内容的系统和方法解决了区块链系统的这些问题。
[0088] 现在参考7,根据各种实施方式图示出了区块链压缩的方法700。在各种实施方式中,可以由图1的区块链压缩系统100中包括的任何合适的计算机系统和/或计算机系统的组合执行关于图7描述的操作。然而,为了方便和易于解释,下面描述的操作将简单地关于图2的区块链网络200的节点205b至205e、205g和/或205h进行讨论,该区块链网络200可以是图1的区块链网络130a、130b和/或130c中的任何一者。此外,下面讨论的各种操作元素可以被修改、省略和/或以与所指示的不同的方式或不同的顺序使用。因此,在一些实施方式中,一个或更多个全节点205b至205e、205g和/或205h可以执行下面描述的一个或更多个方面,而另一系统可以执行一个或更多个其他方面。
[0089] 方法700开始于步骤702,在步骤702中,进行关于是否已经满足与具有多个第一区块的区块链相关联的区块链压缩条件的确定。在一个实施方式中,在步骤702处,在节点205a至205h中的一个或更多个节点上的压缩应用程序可以确定是否存在压缩条件(在各种实施方式中,压缩条件可以指示区块链中某些较旧区块的存储应该根据本文的技术进行管理)。因此,当区块链220包括预定数量的区块时,节点205a至205h中的一个或更多个节点可以确定存在压缩条件。在其他实施方式中,节点205a至205h中的一个或更多个节点可以确定当区块链220达到预定大小时(例如,1GB、10GB、100GB或将从本公开内容的教导中受益的任何其他区块链大小)存在压缩条件。在又一实施方式中,节点205a至205h中的一个或更多个节点可以确定当预定时间段(例如,1天、1周、1个月、6个月、1年或任何其他持续时间)已经过去时存在压缩条件。在又一实施方式中,节点205a至205h中的一个或更多个节点可以确定当检测到区块链网络200上的预定延迟时间时存在压缩条件。在又一实施方式中,当从客户端设备120和/或125以及/或者服务器150和/或152中的任一个接收到压缩通知时,节点205a至205h中的一个或更多个节点可以确定存在压缩条件。虽然描述了压缩条件的具体示例,但是拥有本公开内容的本领域技术人员将认识到其他压缩条件也可以落入本公开内容的范围内。此外,当满足了上述压缩条件中的一个或更多个压缩条件时,可以满足压缩条件。
[0090] 如果在步骤702处不存在压缩条件,则方法700可以继续监视区块链压缩系统100直到存在压缩条件。如果在步骤702处存在压缩条件,则方法700然后进行到步骤704,在各种实施方式中,在步骤704中,使用散列树将区块链的多个第一区块压缩成根散列值。在实施方式中,在步骤704处,在节点205b至205e、205g和/或205h中的一个或更多个节点上的压缩应用程序可以响应于在步骤702中满足了区块链压缩条件来对区块链220中的多个第一区块进行压缩。例如,节点205b至205e、205g和/或205h可以对它们各自的区块链副本220进行压缩。然而,在其他示例中,可以由节点205b至205e、205g和/或205h选出节点205b至205e、205g和/或205h中的一个节点,以对区块链220执行压缩操作。在各种实施方式中,执行压缩操作的节点数量取决于压缩技术。例如,对于交错,一个节点将负责压缩操作,并且将传达哪个节点负责哪种类型的压缩区块。但是,对于Merkle散列,不需要指定的协调器节点,因此每个单独的节点都可以自己执行压缩操作。
[0091] 参考图8和图9,图示了步骤702和704的示例。图8图示出了区块链220,该区块链220可以包括区块805、810、815和820。区块805可以是创世区块或新纪元创世区块,如下文进一步详细讨论的。区块810、815和820可以分别是图3的区块305a、305b和305c。节点205b至205e、205g和/或205h中的一个或更多个节点可以监视区块链220,直到满足区块链压缩条件。在简化的示例中,当区块链220具有4个区块(例如,区块805、810、815和820)或在创世区块805之后的3个块(例如,区块805、810、815)时,可以在步骤702中满足区块链压缩条件。
在各种实施方式中,节点205b至205e、205g和205h中的至少一个节点可以生成图9的Merkle树900(本文也称为散列树)的根散列值,该根散列值是其中Merkle树900的每个叶节点
905a、905b、905c和905d是每个数据区块(例如,区块链220的每个区块805至820可以是相应的数据区块)的散列的树结构。每个非叶节点910a和910b都可以是其子节点的散列,这些子节点可以根据Merkle树900的大小而为叶节点或其他非叶节点。这导致称为Merkle根的单个散列,该单个散列在本文被称为根散列值915。在具体示例中,节点205b可以通过使用上述散列算法之一对区块805进行散列化来生成叶节点905a。同样地,节点205b可以通过对区块810进行散列化来生成叶节点905b,通过对区块815进行散列化来生成叶节点905c,以及通过对区块820进行散列化来生成叶节点905d。然后节点205b可以通过使用散列算法对叶节点905a和叶节点905b进行散列化来生成非叶节点910a。类似地,节点205b可以通过对叶节点905c和叶节点905d进行散列化来生成非叶节点910b。然后节点205b可以通过对非叶节点910a和910b进行散列化来生成根散列值915(例如,根节点)。在图示的示例中,Merkle树
900是二叉散列树,因为每个非叶节点910a和910b以及根节点915都具有两个子节点。然而,本领域技术人员将认识到每个非叶节点可以是任意数量的子节点的散列。此外,本领域的技术人员将认识到Merkle树900可以具有多于一级的非叶节点,这取决于叶节点的数量。
[0092] 然后,方法700进行到步骤706,在各种实施方式中,在步骤706中,对用于存储多个第一区块的数据库进行确定(例如,可以选择控制一个或更多个数据库的实体来将多个第一区块进行归档)。在实施方式中,在步骤706处,一个或更多个节点205b至205e、205g和/或205h上的压缩应用程序可以确定节点205a至205h中的哪些节点和/或与节点205a至205h中的一个或更多个节点相关联的服务提供者(例如,图1的服务器150的服务提供者或服务器
152的服务提供者)将存储作为响应于满足了压缩条件而被压缩的区块链220的多个第一区块的未压缩副本。在本公开内容的各种实施方式中,区块链220的原始数据或原始区块805至820可以由节点205a至205h中的一个或更多个节点以及/或者由服务器150和/或152来存储。要在其上存储区块链220的区块805至820的节点205a至205h以及/或者服务器150和/或
152可以根据各种机制来确定。例如,区块链220的区块805至820可以以循环方式存储,使得每次满足了压缩条件时,区块链220的经受压缩条件的区块可以通过节点205a至205h以及/或者服务器150和/或152以预定义的顺序来存储。
[0093] 在其他示例中,选择在其上存储区块805至820的节点205a至205h以及/或者服务器150和/或152可以是基于存储在那些区块805至820中的交易的。例如,如果与节点205a至205h中的节点相关联的以及/或者与服务器150和/或152相关联的服务提供者(例如,经由钱包地址)被识别为已经进行了存储在区块805至820的区块数据375a至375c中的最多交易和/或预定阈值的交易的服务提供者,然后可以选择与该服务提供者相关联的节点或节点
205a至205h的服务器设备或服务器150和152来存储区块805至820。相应地,如果区块链上TM
的特定区块具有100笔交易,其中90笔对应于PayPal 交易,则可能会选择受PayPal(贝宝)控制的数据库来对该区块进行归档。这可以提供额外的存储节省,因为某些机构实体(诸如PayPal(贝宝))可能出于其他原因也需要保留这类交易的副本。
[0094] 在其他实施方式中,区块805至820可以被拍卖给对区块805至820具有最高出价的服务提供者。区块链压缩系统100可以激励各种服务提供者,这些服务提供者被区块链压缩系统100包括并且操作一个或更多个区块链网络130a至130c以对区块805至820进行存储和管理。服务提供者可能期望存储他们经常访问的区块或其他人经常访问的区块,因为可能存在与验证存储在这些区块中的数据相关联的费用或用于其他实体以其他方式访问这些区块的费用,如下文进一步讨论的。虽然节点205a至205h中之一、多个专用存储数据库中的专用数据库、或服务器150和152中之一可以存储区块805至820,但拥有本公开内容的本领域技术人员将认识到节点205a至205h中的多于一个节点、多个专用存储数据库中的多于一个专用数据库和/或服务器150和152中的多于一个服务器可以出于冗余目的而对区块805至820进行存储。例如,如果存在对区块805至820或对区块805至820的副本之一的攻击或改变,则可以使用冗余副本来恢复存储的区块并且对改变进行校正。在确定其中存储有区块链的多个区块的一个或更多个数据库后,然后方法700进行到步骤708,在该步骤708中将多个第一区块存储在该数据库中。在特定示例中,数据库可以使用具有作为区块或交易散列的密钥的密钥值存储。
[0095] 然后方法700进行到步骤710,根据各种实施方式,在步骤710中生成第一新纪元创世区块,该第一新纪元创世区块包括第一根散列值和用于控制第一数据库的第一实体的数据库标识符。在实施方式中,在步骤710处并且参考图10,节点205b至205e、205g和205h中的一个或更多个节点的压缩应用程序可以生成用于区块链220的新纪元创世区块1000。通常,新纪元创世区块1000表示区块链的前一部分(例如,从先前的新纪元创世区块和压缩条件链接的多个区块)作为该区块链部分的根散列值,或者新纪元创世区块可以表示整个区块链的单个区块,在该单个区块中区块链被识别为根散列值。新纪元创世区块还可以包括一个或更多个数据库的位置信息,在该一个或更多个数据库中存储有由新纪元创世区块1000表示的区块链的先前区块。
[0096] 例如,新纪元创世区块1000可以包括一个或更多个数据字段。新纪元创世区块1000可以包括标头1020a和区块数据1075a。标头1020可以包括与新纪元创世区块1000相关联的元数据。例如,标头1020a可以包括区块编号1025a。在一些实施方式中并且继续上述示例,其中区块810至820可以是图3的区块305a至305c。区块编号1025a可以是N+2。区块1000的标头1020a可以包括包含区块大小的数据字段(未示出)。
[0097] 区块1000可以链接在一起并且与其表示的数据区块一起以密码方式进行保护。例如,区块1000的标头1020a包括包含先前区块N+1的标头320c的散列表示的数据字段(先前区块散列1030a)。用于生成散列表示的散列算法可以是例如产生固定长度的输出的安全散列算法256(SHA‑256)。在该示例中,散列算法是单向散列函数,其中基于散列函数的输出来确定散列函数的输入在计算上是困难的。
[0098] 新纪元创世区块1000的标头1020a还可以包括包含区块数据1075a的散列表示的数据字段,诸如区块数据散列1070a。区块数据散列1070a可以例如通过Merkle树并且通过存储散列或通过使用基于所有区块数据的散列来生成。区块1000的标头1020a可以包括随机数1060a。在某些实现方式中,随机数1060a的值是与区块的散列连结(或附加到区块的散列)的任意字符串。标头1020a可以包括其他数据,诸如难度目标。
[0099] 区块1000的标头1020a还可以包括包含区块链220的经受压缩条件的区块的根散列值1080的数据字段,诸如图8中所示的区块805至820的、图9中所示的根散列值915。如上所讨论的,例如,通过Merkle树基于先前的区块805至820,可以生成根散列值1080。区块1000的标头1020a可以包括数据库地址1090,该数据库地址1090对存储有区块805至820的地址进行识别。
[0100] 新纪元创世区块1000可以包括区块数据1075a。区块数据1075a可以包括也已经经由共识模型(如上所述)集成到区块链220中的经验证的交易的记录。如上所讨论的,区块数据1075a可以包括除了经验证的交易之外的多种不同类型的数据。区块数据1075a可以包括任何数据,诸如文本、音频、视频、图像或文件,这些数据可以以数字方式表示并以电子方式存储。
[0101] 根据各种实施方式,然后方法700进行到步骤712,在步骤712中,对包括第一新纪元创世区块和任何先前的新纪元创世区块的区块链进行存储。在实施方式中,在步骤712处,节点205b至205e、205g和/或205h中的一个或更多个节点可以存储新纪元创世区块1000的副本。新纪元创世区块1000的副本可以被分发到区块链网络200上的节点205b至205e、205g和/或205h中的任何节点。例如,如果节点205b生成新纪元创世区块1000,则节点205b可以将新纪元创世区块1000分发给区块链网络200中的节点205a至205h中的任何节点。然后接收到新纪元创世区块1000的节点205a和/或直到205h可以存储新纪元创世区块1000。
包括区块805至820的区块链220的先前分布式副本可以从具有该区块链的副本的各种节点中删除或去除。这可能会减少区块链的功能副本所需的存储量(特别是因为许多不同的区块链的副本可能会被分发到数千甚至数百万个不同的设备)。因此,区块链网络200中的节点可以将区块链(例如,如本文所述的新纪元创世区块和/或任何先前的新纪元创世区块)存储在区块链网络中的其他节点中。因此,新纪元创世区块1000被分发到区块链网络200上的所有节点205b至205e、205g和/或205h,使得它们可以在该节点的基础上构建。该系统将用新纪元创世区块创建区块链的分叉,并以此为基础构建。一旦大量区块(例如,10个或任何其他数量的区块)被构建到区块链的新副本上,则节点将开始用新的创世区块引用区块链。
[0102] 然后方法700可以进行到步骤714,在步骤714中,在各种实施方式中,将第一新纪元区块添加到第一新纪元创世区块。在实施方式中,在步骤714处,区块链压缩系统100可以执行图6的方法600,其中交易完成并且被添加到区块链220的区块。节点205b至205e和/或205g至205h可以执行图6的步骤655,其将第一新纪元区块添加到第一新纪元创世区块
1000。如图11所图示出的,可以将具有区块编号n+3的区块1105添加到新纪元创世区块
1000。图6的方法600可以重复其中节点205b至205e和/或205g至205h添加具有区块编号n+4的区块1110、具有区块编号n+5的区块1115、具有区块编号n+6的区块1120等,直到在方法
700的步骤702处检测到另一压缩条件。
[0103] 在方法700的各种实施方式中,在步骤704处,用于确定Merkle树900的根散列值915的数据可以包括第一创世区块或任何新纪元创世区块(例如,新纪元创世区块1000)。这样,在创建新纪元创世区块1000之后,区块链220实际上仅具有分发在节点205b至205e、
205g和/或205h之间的一个区块。如下所讨论的,为了访问任何先前区块集的数据,存储有用于生成根散列值1080的区块链220的区块链部分的节点将基于新纪元创世区块1000被访问。该节点将根据最后的新纪元创世区块1000确定节点205b至205e、205g和/或205h中的存储有区块链220的先前区块链部分的节点等等,直到找到数据。例如并参考图2,如果区块链部分220(n)是包括新纪元创世区块(n)1000的区块链220的最新压缩,则在该区块链部分
220(n)中包括的新纪元创世区块(n‑1)可以包括存储在节点205g处的区块链部分220(6)的根散列值1080和数据库地址1090。在存储在节点205g处的区块链部分220(6)中包括的新纪元创世区块(n‑2)可以包括存储在节点220e处的区块链部分220(5)的根散列值和节点220e的地址。各种区块链部分220(1)至220(n)可以经由在那些部分中包括的新纪元创世区块的根散列值链接在一起。
[0104] 然而,在其他示例中,用于确定Merkle树900的根散列值915的数据可能不包括第一创世区块或任何新纪元创世区块(例如,新纪元创世区块1000或当该区块805是创世区块或新纪元创世区块时),并且可能仅包括继创世区块或新纪元创世区块之后的区块或这些后续区块的一部分。新纪元创世区块1000中的标头1020a可以包括先前创世区块散列数据字段(未示出)。这样,在创建新纪元创世区块1000之后,区块链220提供新纪元创世区块的压缩区块链,其中每个新纪元创世区块都具有每个新纪元创世区块表示的区块链部分中包括的区块的根散列值和在其上存储有新纪元创世区块表示的那些区块的数据库的数据库地址。参考图12中的示例性区块链220,在每次执行方法700之后,可以将新纪元创世区块1205和1210添加到新纪元创世区块1000。这样,分发给节点205b至205e、205g和/或205h的区块链220可以包括用于每个区块链部分220(1)至220(n)的新纪元创世区块。
[0105] 在其他实施方式中,继新纪元创始区块1000之后的区块中的每个区块均可以被压缩或者在这些区块被用作用于确定后续新纪元创世区块的根散列值的数据之前对其执行数据裁剪技术。可以执行数据压缩或裁剪以进一步减少在各种数据库中存储区块链220的区块所需的存储量。在图8和图9中图示出的示例中,区块805、810、815和/或820中的一个或更多个区块可以由节点205b至205e、205g和/或205h上的压缩应用程序来压缩。在各种实施方式中,可以使用增量编码来对区块数据375a、375b和/或375c进行编码。例如,可以将区块305a中的区块数据375a编码成使得区块数据375a的参考和差异被存储在区块305a中。此外,可以执行修改操作(例如,对数据的会导致数据的长度或数量的改变(例如,增加或减少)的改变)。另外,可以执行修改操作(例如,对数据的不会导致数据的长度或数量的改变(例如,增加或减少)的改变)。也可以考虑删除或移动数据的其他数据裁剪技术。
[0106] 在其他实施方式中,可以对区块数据375a、375b和/或375c执行数据压缩技术。例如,区块305b中的区块数据375b中的部分或全部可以用诸如例如Lempel‑Ziv‑Markov链算法(LZMA)的压缩算法来压缩并且可选地用SHA3‑512进行散列化。然而,SHA3‑512可能是可选的,因为区块305b是散列化的。此外,拥有本公开内容的本领域技术人员将认识到可以设想其他压缩算法。
[0107] 在各种实施方式中,可以使用用于容错和性能可扩展性的交错技术来对区块数据375a、375b和/或375c进行裁剪。例如,可以使用擦除编码类机制来执行交错。共享分段分配还可以减少存储中的冗余,因为存在指向查找表的引用/指针。擦除编码类机制可以提供数据的高可用性并且去除数据冗余。指向共享分段查找的指针可能仅去除数据冗余。虽然描述了区块链220的各个区块的特定压缩和裁剪技术,但是拥有本公开内容的本领域技术人员将认识到可以设想其他压缩和裁剪技术并且落在本公开内容的范围内。
[0108] 现在参考图13,根据各种实施方式图示出了访问区块链上的数据的方法1300。在各种实施方式中,可以由图1的区块链压缩系统100中包括的任何合适的计算机系统和/或计算机系统的组合执行关于图13描述的操作。然而,为了方便和易于解释,下面描述的操作将简单地关于图2的区块链网络200的节点205b至205e、205g和/或205h进行讨论,该区块链网络200可以是图1的区块链网络130a、130b和/或130c中的任何一个。此外,下面讨论的各种操作元素可以被修改、省略和/或以与所指示的不同的方式或不同的顺序使用。因此,在一些实施方式中,节点205a至205h中的一个或更多个节点可以执行下面描述的一个或更多个方面,而另一系统可以执行一个或更多个其他方面。
[0109] 方法1300可以开始于步骤1302处,在步骤1302中,接收对在区块链的多个第一区块中的第一区块中包括的数据执行数据动作的请求。在实施方式中,在步骤1302处,节点205a至205h中的节点可以接收对存储在由节点205a至205h中的一个或更多个节点管理的数据库处的区块链部分220(1)或直到220(n)中的数据执行数据动作的请求。在一些实施方式中,所请求的数据动作可以与未在区块链220的当前分布式版本中提供的数据(例如,当前的新创世节点和链接到当前新创世节点的后续区块)相关联。例如,在步骤1302之前,用户110可以经由例如在第一客户端设备120上执行的区块链查询应用程序来查询区块链数据以对交易进行验证。查询可以包括与交易相关联的识别信息(例如,交易标识符、公钥、关键字、序列号和/或对于拥有本公开内容的本领域技术人员来说明显的任何其他识别信息)。第一客户端设备120可以经由应用程序编程接口(API)向在节点205a至205h中的一个或更多个节点上执行的查询应用程序提供请求。
[0110] 然后方法1300可以进行到步骤1304,在步骤1304中,进行关于任何当前新纪元创世区块或与新纪元创世区块链接的任何后续新纪元区块是否包括所请求的信息的确定。在实施方式中,在步骤1304处,在例如节点205b上执行的查询应用程序可以在区块链220的当前分布式版本中搜索交易,该当前分布式版本包括新纪元创世区块1000和随后链接到新纪元创世区块1000的任何后续新纪元区块,诸如,例如图11中所图示出的区块1105、1110、1115和/或1120。在实施方式中,查询应用程序可以使用针对所请求的数据/交易的识别信息来查询区块1000、1105、1110、1115、1120。如果区块中的任何区块包括正被请求的数据,则方法1300可以进行到步骤1306,在步骤1306中,查询应用程序基于查询请求来执行动作。
例如,查询应用程序可以经由第一客户端设备120向用户110返回所请求的数据。在其他示例中,可以经由第一客户端设备120向用户110提供数据所在的区块。在其他示例中,可以返回散列树中提供存储有数据的区块的根散列的节点的各种散列级别,使得客户端设备120可以重建数据所在的区块的散列,以对该区块的散列与区块链220中该区块的散列进行验证。
[0111] 如果在方法1300的步骤1304处确定当前新纪元创世区块或与新纪元创世区块链接的任何后续新纪元区块不包括所请求的数据,则方法1300可以进行到步骤1308,在步骤1308中,从数据库访问多个第一区块,其中多个第一区块没有设置在区块链的当前分布式版本中,并且多个第一区块被存储在与实体相关联的数据库中。在实施方式中,在步骤1308处,在接收到来自客户端设备120的查询请求的节点上的查询应用程序可以查询新纪元创世区块1000的根散列值1080和其中存储有区块链220的先前区块链部分的数据库地址
1090。节点(例如,节点205b)上的查询应用程序可以使用数据库地址1090以将查询请求转发到或生成到数据库地址1090(例如,节点205h)中识别的节点,该数据库地址1090存储用于生成新纪元创世区块1000的区块链220的先前部分(例如,区块链220(n))。查询请求可以经由API通过查询应用程序在节点之间进行。接收到查询请求的节点(例如,存储有区块链部分220(n)的节点205h)可以经由其查询应用程序来查询由根散列值1080识别的区块链部分220(n)、以及/或者查询区块链部分220(n)和/或可以被存储在节点205h处的任何其他区块链部分中的用于识别信息的任何区块数据。
[0112] 如果所查询的数据不在区块链部分220(n)中,则节点205h可以将查询转发到具有图示出的示例中的先前区块链部分220(n‑1)或220(6)的节点。节点205h可以在区块链部分220(n)中的新纪元创世区块1000的标头1020a中识别先前的区块链部分220(6)。例如,在区块链部分220(n)中的新纪元创世区块1000的标头1020a可以包括区块链部分220(6)的根散列值和存储有区块链部分220(6)的节点205g的数据库地址1090。
[0113] 接收到查询请求的节点205g可以经由其查询应用程序来查询由区块链部分220(6)中的新纪元创世区块1000中的根散列值1080识别的区块链部分220(6)、以及/或者查询区块链部分220(6)和/或可以被存储在节点205g处的任何其他区块链部分中的用于识别信息的任何区块数据。如果查询请求中的数据不位于区块链部分220(6)中,则节点205g的查询应用程序可以使用位于区块链部分220(6)中的新纪元创世区块中的根散列值1080和数据库地址1090进一步查询其他区块链部分。节点220a至220h可以继续搜索区块链220的先前部分,直到找到识别信息。
[0114] 以上示例说明了创世区块或新纪元创世区块何时被包括为用于Merkle树的数据,该数据被用于创建区块链220的区块集的根散列值。然而,如果创世区块和/或新纪元创世区块不被提供作为用于Merkle树的数据,则然后在步骤1308处,呈现图12中所示出的示例,其中新纪元创世区块被链接到先前新纪元创世区块。接收到查询请求的节点的查询应用程序可以查询在用于生成在该新纪元创世区块中找到的根散列值1080的区块链部分的数据库地址1090以及根散列值1080中识别的每个节点。例如,节点205a可以查询在新纪元创世区块1210中识别的节点,以查询区块链220的部分,该部分用于生成在新纪元创世区块1210中包括的根散列值。如果该区块链部分不包括识别信息,则节点205a可以查询在新纪元创世区块1205中识别的节点。如果与在新纪元创世区块1205中识别的根散列值相关联的区块链部分不包括识别信息,则该节点205a可以查询新纪元创世区块1000中识别的节点等,直到找到识别信息。
[0115] 方法1300然后进行到步骤1310,在步骤1310中,基于查询请求来对数据执行动作。在实施方式中,在步骤1310处,查询应用程序可以基于在查询请求中包括的数据动作请求来执行一个或更多个动作。例如,数据动作可以包括查询应用程序,该查询应用程序经由第一客户端设备120向用户110返回所请求的数据。在其他示例中,数据动作可以包括可以经由第一客户端设备120将数据所在的区块返回到用户110。在其他示例中,可以返回散列树中提供存储有数据的区块的根散列的节点的各种散列级别,使得客户端设备120可以重建数据所在的区块的散列以对该区块的散列与区块链220中该区块的散列进行验证。在其他示例中,可以返回非叶节点910a或910b中的任何一个以及叶节点905a至905d中的任何一个,它们需要重建根散列节点以对区块链部分220(1)和/或直到220(n)进行验证,使得客户端设备120可以重建数据所在的区块链部分220(1)和/或直到220(n)的根散列节点,以对返回的根散列值是由新纪元创世区块1000中的根散列值1080表示的数据进行验证。例如,如果用户110具有在区块805中的区块数据,在用户110还具有叶节点905b的值和非叶节点
910b的值的情况下,则用户110可以重构根散列值915。这样,节点的查询应用程序可以响应于客户端设备120的数据动作请求,提供识别信息中识别的数据所在的第一区块以及Merkle树900中需要的其他散列值,以得到根散列值,使得新纪元创世区块1000中的根散列值915可以被发出数据动作请求的用户110验证。
[0116] 在方法1300的各种实施方式中,当节点205b至205e、205g和/或205h中的节点接收到查询请求、在其数据库中定位查询请求中识别的数据、并且执行与查询请求相关联的动作时,节点205b至205e、205g和/或205h中的节点可以接收托管费用,用于存储和提供该查询/数据动作请求的信息。支付可以通过与每个节点相关联的各种节点帐户或针对与节点相关联的每个实体进行。在一些实施方式中,可以使用用于区块链220的加密货币进行支付,并且交易可以被记录在区块链220中。然而,在其他示例中,在区块链220中没有任何交易记录的情况下,资金的支付可以经由查询应用程序通过一个实体的账户或另一实体的账户之间的转移资金。托管费用可以用于激励一个或更多个实体或节点205a至205h以托管各种区块链部分,这些区块链部分通过对区块进行散列而被压缩以获得表示该区块链部分的Merkle树的根散列值。
[0117] 因此,本公开内容的系统和方法描述了区块链压缩,当区块链满足区块链压缩条件时,该区块链压缩可以通过计算区块链的区块集的散列根值来压缩区块链。区块集或区块链的一部分可以被用作Merkle树的数据。包括Merkle树的根散列值所基于的区块的区块链部分可以被存储在实体数据库中。区块链网络的节点可以生成新纪元创世区块,该新纪元创世区块包括存储有区块的数据库地址和表示这些区块的根散列值。新纪元创世区块可能是分配给其他节点的区块链,并且可以在该新纪元创世区块上向区块链添加附加的区块。因此,区块链可以定期被压缩和分发,并且可以通过引用新纪元创世区块中的根散列值和新纪元创世区块中的数据库地址来访问任何先前的压缩区块。因此,本公开内容的系统和方法降低了传输和分发大型区块链的网络成本。此外,本公开内容的区块链通过分发区块链的压缩版本而降低了节点的存储要求。
[0118] 计算设备
[0119] 图14示出了系统1400。系统1400可以包括经由网络1440进行通信的至少一个客户端设备1410、至少一个数据库系统1420和/或至少一个服务器系统1430。应当理解的是,所示的网络连接是说明性的并且可以使用在计算机之间建立通信链接的任何方式。假设存在诸如以下的各种网络协议中的任何一种:TCP/IP、以太网、FTP、HTTP等,以及诸如以下各者的各种无线通信技术:GSM、CDMA、WiFi和LTE,并且本文描述的各种计算设备可以被配置成使用这些网络协议或技术中的任何一种进行通信。本文描述的任何设备和系统可以全部或部分地使用关于图14描述的一个或更多个计算系统来实现。
[0120] 客户端设备1410可以使用如本文描述的一个或更多个客户端应用程序(未示出)来访问服务器应用程序和/或资源。客户端设备1410可以是移动设备,诸如膝上型电脑、智能电话、移动电话或平板电脑,或者计算设备,诸如台式计算机或服务器、可穿戴设备、嵌入式设备。替代性地,客户端设备1410可以包括其他类型的设备,诸如游戏机、相机/录像机、视频播放器(例如,结合DVD、蓝光、红色激光、光学和/或流式传输技术)、智能电视,以及其他联网设备(如适用)。
[0121] 数据库系统1420可以被配置成对服务器系统1430的信息进行维护、存储、检索和更新。此外,数据库系统可以定期地或根据请求向服务器系统1430提供信息。在这方面,数据库系统1420可以是能够跨节点集群对大量数据进行存储、维护和更新的分布式数据库。数据库系统1420可以提供多种数据库,包括,但不限于,关系数据库、分层数据库、分布式数据库、内存数据库、平面文件数据库、XML数据库、NoSQL数据库、图形数据库和/或它们的组合。
[0122] 服务器系统1430可以被配置有能够与如本文所述的客户端应用程序和数据库系统1420接口的服务器应用程序(未示出)。在这方面,服务器系统1430可以是独立服务器、公司服务器、或者位于服务器场或云计算机环境中的服务器。根据一些示例,服务器系统1430可以是托管在能够支持多个虚拟服务器的硬件上的虚拟服务器。
[0123] 网络1440可以包括任何类型的网络。例如,网络1440可以包括局域网(LAN)、广域网(WAN)、无线电信网络和/或任何其他通信网络、或者它们的组合。应当理解的是,所示的网络连接是说明性的并且可以使用在计算机之间建立通信链接的任何方式。假设存在诸如以下的各种网络协议中的任何一种:TCP/IP、以太网、FTP、HTTP等,以及诸如以下的各种无线通信技术:GSM、CDMA、WiFi和LTE,并且本文描述的各种计算设备可以被配置成使用这些网络协议或技术中的任何一种进行通信。
[0124] 在系统1400中传输到各种计算设备和从各种计算设备传输的数据可以包括安全且敏感的数据,诸如机密文档、客户个人身份信息以及账户数据。因此,可能需要使用安全网络协议和加密来保护这类数据的传输,以及/或者保护数据在存储在各种计算设备上时的完整性。例如,可以使用基于文件的集成方案或基于服务的集成方案来在各种计算设备之间传输数据。可以使用各种网络通信协议来传输数据。可以在文件传输中使用安全数据传输协议和/或加密来保护数据的完整性,例如文件传输协议(FTP)、安全文件传输协议(SFTP)和/或良好隐私(PGP)加密。在许多实施方式中,一个或更多个网络服务可以在各种计算设备内实现。Web服务可以由授权的外部设备和用户访问,以支持系统1400中的各种计算设备之间的数据的输入、提取和操控。为支持个性化显示系统而构建的网络服务可以是跨域的和/或跨平台的,并且可以为企业使用而构建。可以使用安全套接字层(SSL)或传输层安全(TLS)协议来传输数据,以提供计算设备之间的安全连接。网络服务可以使用WS安全标准、使用XML加密提供安全的SOAP消息来实现。专用硬件可以用于提供安全的网络服务。例如,安全网络设备可能包括内置功能,诸如硬件加速的SSL和HTTPS、WS安全和/或防火墙。
这样的专用硬件可以被安装和配置在一个或更多个计算设备前面的系统1400中,使得任何外部设备可以直接与专用硬件进行通信。
[0125] 现在转到图15,对可以与一个或更多个计算系统一起使用的计算设备1505进行描述。计算设备1505可以包括用于控制计算设备1505及其相关联部件的整体操作的处理器1503,这些相关联部件包括RAM 1506、ROM 1507、输入/输出设备15011、通信接口1511和/或存储器1515。数据总线可以与(一个或更多个)处理器1503、RAM 1506、ROM 1507、存储器
1515、I/O设备1509和/或通信接口1511进行互连。在一些实施方式中,计算设备1506可以表示、并入和/或包括各种设备,诸如台式计算机、计算机服务器、移动设备(诸如膝上型计算机、平板计算机、智能电话)、任何其他类型的移动计算设备等,和/或任何其他类型的数据处理设备。
[0126] 输入/输出(I/O)设备1509可以包括麦克风、小键盘、触摸屏和/或手写笔运动、手势,计算设备1500的用户可以通过它们提供输入,并且输入/输出(I/O)设备1509还可以包括用于提供音频输出的扬声器和用于提供文本、视听和/或图形输出的视频显示设备中的一个或更多个。软件可以被存储在存储器1515内以向处理器1503提供指令,从而允许计算设备1500执行各种动作。例如,存储器1515可以存储由计算设备1500使用的软件,诸如操作系统1517、应用程序1519和/或相关联的内部数据库1521。存储器1515中的各种硬件存储器单元可以包括易失性和非易失性、可移动的、以及以任何方法或技术实现的不可移动介质,用于存储信息,诸如计算机可读指令、数据结构、程序模块或其他数据。存储器1515可以包括一个或更多个物理持久性存储器设备和/或一个或更多个非持久性存储器设备。存储器1515可以包括,但不限于,随机存取存储器(RAM)1506、只读存储器(ROM)1507、电可擦除可编程只读存储器(EEPROM)、快闪存储器或其他存储器技术、光盘存储设备、磁带盒、磁带、磁盘存储设备或其他磁存储设备,或可以用于存储所需信息并且可以由处理器1503访问的任何其他介质。
[0127] 通信接口1511可以包括一个或更多个收发器、数字信号处理器和/或附加电路和软件,用于使用本文所述的任何协议经由任何有线或无线网络进行通信。
[0128] 处理器1503可以包括单个中央处理单元(CPU),该单个中央处理单元可以是单核或多核处理器,或者处理器1503可以包括多个CPU。(一个或更多个)处理器1503和相关联的部件可以允许计算设备1500执行一系列计算机可读指令以执行本文描述的一些过程或所有过程。虽然在图15中未示出,在计算设备1500中的存储器1515或其他部件内的各种元件可以包括一个或更多个高速缓存,例如由处理器1503使用的CPU高速缓存、由操作系统1517使用的页面高速缓存、硬盘驱动器的磁盘高速缓存,和/或用于对来自数据库1521的内容进行高速缓存的数据库高速缓存。对于包括CPU高速缓存的实施方式,CPU高速缓存可以由一个或更多个处理器1503使用以减少存储器延迟时间和访问时间。处理器1503可以从CPU高速缓存检索数据或将数据写入CPU高速缓存而不是读取/写入存储器1515,这可以提高这些操作的速度。在一些示例中,可以创建数据库高速缓存,其中来自数据库1521的某些数据被高速缓存在与数据库分离的存储器中(诸如在RAM 1506中或在分离的计算设备上)的分离的较小数据库中。例如,在多个分层应用程序中,应用程序服务器上的数据库高速缓存可以减少数据检索和数据操控时间,因为不需要通过网络与后端数据库服务器进行通信。这些类型的高速缓存和其他类型的高速缓存可以被包括在各种实施方式中,并且可以在本文描述的设备、系统和方法的某些实现方式中提供潜在优势,诸如更快的响应时间和在传输和接收数据时对网络条件的更少依赖。
[0129] 尽管单独描述了计算设备1505的各种部件,但是在不脱离本发明的情况下,各种部件的功能可以与通信中的单个部件和/或多个计算设备组合和/或由通信中的单个部件和/或多个计算设备组合执行。
[0130] 尽管已经用特定于结构特征和/或方法动作的语言描述了主题,但是应当理解的是,所附权利要求中限定的主题不一定限于上述特定特征或动作。相反,上述具体特征和动作被描述为所附权利要求的示例性实现方式。

当前第1页 第1页 第2页 第3页
相关技术
压缩存储相关技术
数据压缩相关技术
苏里亚特·贡达韦利发明人的其他相关专利技术