会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 区块链账本 / 可大规模扩展的区块链账本

可大规模扩展的区块链账本

申请号 CN201780052802.9 申请日 2017-08-30 公开(公告)号 CN109923573A 公开(公告)日 2019-06-21
申请人 张建钢; 发明人 张建钢;
摘要 一种可大规模扩展的区块链账本,通过将区块链区块的加密散列的全值范围划分为可配置但大量的区块桶并在可靠的区块链挖矿节点之中大致均匀地自动分配和自动调整这些区块桶,避免了每个区块链节点以及区块链账本本身的可扩展性问题。
权利要求

1.一种可大规模扩展的区块链账本,它是对区块链的优化,以通过将区块链区块的加密散列的全值范围划分为可配置但大量的区块桶并在可靠的区块链挖矿节点之中大致均匀地自动分配和自动调整这些区块桶来实现大规模可扩展的区块链账本;

其中,在加入区块链时,新节点表示其愿意托管账本,并且当通过心跳消息或活动的丢失而检测到节点无法访问时,所有当前节点都标记此节点的不可达性。

2.根据权利要求1所述的可大规模扩展的区块链账本,其中每个节点都评估其对等节点的活动并决定本地优选的可靠的账本节点集。此外,所述自动选择和自动调整的主节点提议账本节点并向所有其他节点组多播所述提议,其他节点根据其观察评估所述提议,决定是否背书。

3.根据权利要求1所述的可大规模扩展的区块链账本,其中当从2/3的当前可靠节点收集到背书时,执行主节点发送已决定的具有背书证明的账本节点列表。收到决策后,每个节点都会验证所述决策并在必要时再平衡其区块托管。

4.根据权利要求1所述的可大规模扩展的区块链账本,其中每个账本节点都随机选择它所托管的区块桶并向所有其他节点多播其中的所有区块以证明其拥有所述区块桶中的所有区块。

5.根据权利要求1所述的可大规模扩展的区块链账本,其中每当节点需要远程区块时,该节点将基于账本扩展策略找出托管所述远程区块的当前节点,然后直接联系相应的节点以获得所述区块的数据。

6.根据权利要求1所述的可大规模扩展的区块链账本,其中分配rf(平衡和冗余因子)个节点以托管给定的区块桶,并且作为所述扩展策略的一部分,这些节点被自动选择并自动调整为优选地在每个位置具有冗余的地理分布。

说明书全文

可大规模扩展的区块链账本

相关申请案的交叉引用

本申请要求于2016年8月31日提交的题为“可大规模扩展的区块链账本”的第62/381,

950号美国专利申请的优先权,其公开内容通过引用全部并入本文中。

技术领域

[0001] 本发明属于区块链协议栈技术领域。更具体地,本发明属于可大规模扩展的区块链账本实现的技术领域。

背景技术

[0002] 传统的区块链协议栈,例如比特币、以太坊、超级账本等,都需要将完整的账本存储在每个区块链挖矿节点(也称为完整节点)上,这不仅是不必要的,而且还会造成区块链采用上的可扩展性问题。

发明内容

[0003] 本发明是对区块链的优化,以实现可大规模扩展的区块链账本。
[0004] 本发明发现了不需要所有区块链节点都存储所有区块链区块的事实,只要非本地存储的区块能够在可信任其不变性的情况下可靠地检索。
[0005] 本发明将区块链区块的加密散列的全值范围划分为可配置但大量的区块桶(表示为bb),并在可靠的区块链挖矿节点之中大致均匀地自动分配和自动调整这些区块桶。在加入区块链时,新节点表示其愿意托管账本,即作为账本节点,其由区块链上的所有当前节点标记。当通过心跳消息或活动的丢失而检测到某节点无法访问时,所有当前节点也会标记此不可达性。
[0006] 每个节点都定期评估其对等节点的活动,并决定本地首选的可靠的账本节点集。自动选择和自动调整的主节点提议账本节点并向所有其他节点多播该提议,其他节点根据其观察评估该提议,决定是否背书(乃至若该提议太远,例如超过1/3的节点不在该提议内,则提议另一个或触发主节点重选)。
[0007] 当从2/3的当前可靠节点收集到背书时,执行主节点发送已决定的具有背书证明的账本节点列表。收到决策后,每个节点都会验证该决策并在必要时再平衡其区块托管。
[0008] 每个账本节点都定期地随机选择它所托管的区块桶,并向所有其他节点多播其中的所有区块,以证明它拥有区块桶中的所有区块。
[0009] 每当某节点需要某远程区块,即它未托管或未在其缓存中的区块时,它会根据账本扩展策略找出托管它的当前节点,然后直接联系相应的节点获取该区块的数据。
[0010] 使用平衡和冗余因子(表示为rf),必须至少分配rf个节点来托管给定的区块桶;作为扩展策略的一部分,rf个节点被自动选择并自动调整为优选地在每个位置具有冗余的地理分布。

附图说明

[0011] 图1是区块链账本的定期(再)平衡的序列图,其中框100表示新节点,框110表示任何当前账本节点,框120包含定期(再)平衡流程。
[0012] 图2是账本节点的定期证明的序列图,以向所有其他节点表示其拥有其托管的随机区块桶的所有区块,其中框200为任何账本节点,框210为任何其他账本节点,框220是托管区块桶的所有区块的证明的定期流程。
[0013] 图3是节点远程检索区块的的序列图,其中框300为请求节点,框310为托管节点。

具体实施方式

[0014] 问题陈述
[0015] 区块链的主要属性是(过去)交易的不变性。为了实现这一点,发送者签署了一个交易,并且交易被连续地挖掘(分组和签名)为区块(通过区块链矿工,又名区块链验证节点),每个区块指向紧接在它之前的区块的加密散列。这样,任何交易的更改都需要更改包含它的区块以及之后的所有区块,并更新所有具有区块链副本的区块链节点,其中节点所有权在互不信任的各方之间分配。这使得交易的成功更改极不可能,因此具有不变性属性。
[0016] 所有当前区块链实现都假设所有区块链验证节点必须具有该区块链中所有区块的所有数据。由于区块链随时间而增长,随着时间的推移,账本会变得越来越大也越来越长,这导致了每个区块链节点和区块链整体上的存储存在可扩展性问题。
[0017] 事实上,只要每个区块都可靠地存储在某处并且可以在任何需要的时间进行检索,就不需要让每个区块链节点存储账本中所有区块的所有数据。这一事实启发了本发明。
[0018] 账本扩展策略
[0019] 本发明将区块链区块的加密散列的全值范围划分为可配置的大量区块桶(表示为bb),并在可靠的区块链挖矿节点(在本发明中称为账本节点)中大致均匀地自动分配和自动调整这些区块桶。
[0020] 只有可靠的节点才能用于托管区块桶。基于区块链上的节点活动,其心跳消息(如果存在)及其在节点启动和更新(稍后在本发明说明书中的详述)中表达的能力和容量,自动观察和调整节点可靠性。
[0021] 为了可靠性,本发明引入冗余因子(表示为rf),使得每个区块桶中的所有区块的所有数据完全存储在至少rf个节点上。
[0022] 为了地理可用性、地理负载平衡和减少块检索的总体延迟,如果可能,给定区块桶的rf节点在地理上自动分布。可以通过IP地址查找,网络延迟测量或显式配置自动检测地理位置和位置接近度。
[0023] 当前的账本节点列表的显著变化,例如,多于1/3的节点加入或离开,或者如果区块桶未能有rf节点托管它,则自动触发再平衡(稍后在本发明说明书中详述)。
[0024] 这不会阻止任何节点托管该区块链中所有区块的所有数据。实际上,节点可以明确地声明给定区块桶,而不必在给定区块桶的rf节点中。比如,某个授权的托管账本节点,它具有高容量存储和带宽,志愿服务或提供付费服务来托管完整账本。
[0025] 初始节点启动
[0026] 如图1的步骤a)所示,在节点启动时(或定期地),节点通过向区块链的所有节点多播一个意愿消息,即LEDGERN_VOLUN消息来表示其愿意托管账本。自签名的LEDGERN_VOLUN消息,包括其存储/CPU/RAM/带宽容量、IP地址、其账本读/写访问的入口点、完整账本或其中一部分的意图、在自动扩展平衡中作为rf节点的一部分的意图等等。节点可以是完整账本的第三方托管,免费提供服务或收费。
[0027] 收到LEDGERN_VOLUN消息后,每个区块链节点都会保存此信息,以便稍后自动进行扩展决策。
[0028] 平衡和再平衡
[0029] 如图1中的框120所示,每个区块链节点都定期评估对等节点的活动(步骤c),并且基于节点可靠性、能力/容量等在本地决定账本节点集(步骤d)。对等节点的活动包括但不限于心跳消息、从每个节点接收或通过每个节点的交易以及每个节点生成的区块等。这些活动有助于评估节点可靠性。节点能力/容量包括CPU信息,RAM(随机存取存储器),存储和带宽等。
[0030] 如果节点是区块链的主节点,并且如果新的本地首选的账本节点集与当前账本节点集明显不同,例如1/3的节点不同,或者存在未被rf节点覆盖的区块桶即不满足冗余要求,则通过自签名的LEDGERN_PROPOSE消息向区块链中的所有节点多播新的全部或部分账本节点集(步骤e)。对于每个区块桶或区块桶组,LEDGERN_PROPOSE消息包括负责托管这些区块的所有数据的rf个节点(其入口点、公钥等)、增量更新类型(添加,删除,完整)、本消息作为反提议(如果适用)而响应的之前的LEDGERN_PROPOSE消息的加密散列、时间戳、盐、其公钥等。
[0031] 收到LEDGERN_PROPOSE后,每个区块链节点验证其签名,根据其本地观察将提议与其自己的偏好进行比较。如果(可配置的)节点差异小于1/3,则它会向所有其他节点多播自签名的LEDGERN_ENDORSE消息(步骤f)。否则,它将多播其自签名的LEDGERN_PROPOSE消息(图1中未示出)作为反提议。LEDGERN_ENDORSE消息包括节点背书的LEDGERN_PROPOSE消息的加密散列、时间戳、盐及其公钥等。
[0032] 如果主节点成功收集至少2/3的节点的背书,则它会向所有区块链节点多播自签名的LEDGERN_LIST消息。LEDGERN_LIST消息包括LEDGERN_PROPOSE消息中的内容以及来自所有节点的背书列表(或每份背书的加密散列)。如果(在可配置的超时时段内)没有收集到,则它会向所有区块链节点多播自签名的LEDGERN_IGNORE消息(图1中未示出)。LEDGERN_IGNORE消息包括节点背书的LEDGERN_PROPOSE消息的加密散列、时间戳、盐及其公钥等。主节点选举机制应对LEDGERN_LIST或LEDGERN_IGNORE消息以及在给定的超时时段内任何一个的缺失进行观测,以及如果接收到LEDGERN_IGNORE消息,或者如果在没有接收到LEDGERN_LIST或LEDGERN_IGNORE消息就超时,则触发主节点重选。
[0033] 如果所有区块链节点中的2/3都背书了LEDGERN_LIST中列出的新的账本节点列表,则所有节点将基于其负责的区块桶自动平衡其区块的托管(如图1中的步骤h)所示)。对于其负责托管但尚未存储的区块,它将从托管它们的节点检索该区块。对于不再负责托管它们的区块,它可能决定将它们从本地存储中清除或在需要时清除它们。
[0034] 注意,除了上面提到的内容之外,本发明并未强制要求主节点的选举机制,只是假设主节点被公平地自动选择和自动调整并可以从恶意或无响应的主节点等恢复。这些是正常的主节点选举要求,在本发明的说明书中不再详细说明。
[0035] 定期的托管证明
[0036] 如图2的框220所示,每个账本节点(由框200表示)都定期地随机选择其负责托管的一个区块桶(如步骤a)所示),向所有其他账本节点(由框210表示)多播自签名LEDGERN_BLOCK消息以展示存储证明。LEDGERN_BLOCK消息包括随机选择的区块桶中的区块、时间戳、盐及其公钥等。
[0037] 收到LEDGERN_BLOCK消息后,每个节点都在本地更新区块桶托管状态。如果区块桶的状态未由负责托管它的至少rf节点更新,则主账本节点负责启动(再)平衡,如图1的框120所示。如果主节点未能启动此再平衡,则必须触发主节点重选。
[0038] 远程区块检索
[0039] 如图3所示,当任何节点(如框300所示)需要由其加密散列标识的本地不可用的区块时,它将为其找出该区块桶并通过查阅当前的账本扩展策略找出托管该区块的节点(如步骤a所示)。
[0040] 然后,它发送单播消息LEDGERN_BREQ以请求区块(图3中的步骤b)。LEDGERN_BREQ消息包括要请求的区块的加密散列以及可能的其他信息。
[0041] 收到LEDGERN_BREQ消息后,托管节点(如框310所示)将LEDGERN_BRES消息返回到请求节点(如框300所示)。LEDGERN_BRES消息包括响应状态(找到,未找到,非所有者)、原因和区块数据(如果找到)。