对区块链系统中的分片进行扩容的方法及装置转让专利

申请号 : CN202111019550.4

文献号 : CN113468200B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 郑子彬徐泉清郑沛霖闫莺张辉

申请人 : 支付宝(杭州)信息技术有限公司

摘要 :

本说明书提供一种对区块链系统中的分片进行扩容的方法及装置,该区块链系统包括第一分片,第一分片包括第一节点;该方法包括:第一节点接收包括将要执行的第一区块的信息的扩容请求;在执行完成第一区块之后,第一节点将第一区块对应的第一世界状态发送给第二节点;并执行至少一个第二区块,记录各个第二区块对应的各个状态更改信息;在对第一世界状态发送完成之后,第一节点将各个状态更改信息发送给第二节点;第二节点属于待增加到区块链系统中的第二分片;第二节点基于接收的第一世界状态和各个状态更改信息,获取第二分片的初始世界状态。从而实现了区块链系统的自动扩容,解决了区块链系统中分片数量不能随交易数量增加而动态扩容的问题。

权利要求 :

1.一种对区块链系统中的分片进行扩容的方法,所述区块链系统包括第一分片,所述第一分片中包括第一节点;所述方法应用于所述第一节点,所述方法包括:接收扩容请求,所述扩容请求中包括将要执行的第一区块的信息;

在执行完成所述第一区块之后,将所述第一区块对应的第一世界状态发送给第二节点;并执行至少一个第二区块,记录各个第二区块对应的各个状态更改信息;所述第二区块为所述第一区块之后的区块;

在对所述第一区块对应的第一世界状态发送完成之后,将各个所述状态更改信息发送给所述第二节点,以使所述第二节点基于所述第一世界状态和各个所述状态更改信息,获取第二分片的初始世界状态;所述第二节点属于待增加到区块链系统中的第二分片。

2.根据权利要求1所述的方法,其中,所述区块链系统包括多个成员方,各个成员方包括各自的中心设备以及多个分片的部分分片节点;所述第一节点和所述第二节点属于所述多个成员方中的第一成员方;所述第一成员方包括第一中心设备;

其中,所述接收扩容请求,包括:从所述第一中心设备接收扩容请求。

3.根据权利要求2所述的方法,还包括:所述扩容请求为所述第一中心设备在确定满足预设条件时发送的;其中,所述预设条件包括:当前所述区块链系统包括的分片个数小于目标分片个数;所述目标分片个数基于所述区块链系统在预设时段内执行的交易总数而确定。

4.根据权利要求3所述的方法,其中,所述目标分片个数与目标比值正相关,所述目标比值为所述交易总数与预设交易数的比值。

5.根据权利要求1所述的方法,其中,所述将所述第一区块对应的第一世界状态发送给所述第二节点,包括:从状态数据库中导出所述第一区块对应的第一世界状态,并将该导出的所述第一世界状态发送给所述第二节点。

6.根据权利要求5所述的方法,其中,所述从状态数据库中导出所述第一区块对应的第一世界状态,包括:将所述第一世界状态作为临时文件存储在所述第一分片的分片节点的磁盘空间中。

7.一种对区块链系统中的分片进行扩容的装置,所述区块链系统包括第一分片,所述第一分片中包括第一节点;所述装置应用于所述第一节点,所述装置包括:接收模块,用于接收扩容请求,所述扩容请求中包括将要执行的第一区块的信息;

第一发送模块,用于在执行完成所述第一区块之后,将所述第一区块对应的第一世界状态发送给第二节点;

记录模块,用于执行至少一个第二区块,记录各个第二区块对应的各个状态更改信息;

所述第二区块为所述第一区块之后的区块;

第二发送模块,用于在对所述第一世界状态发送完成之后,将各个所述状态更改信息发送给所述第二节点,以使所述第二节点基于所述第一世界状态和各个所述状态更改信息,获取第二分片的初始世界状态;所述第二节点属于待增加到区块链系统中的第二分片。

8.根据权利要求7所述的装置,其中,所述区块链系统包括多个成员方,各个成员方包括各自的中心设备以及多个分片的部分分片节点;所述第一节点和所述第二节点属于所述多个成员方中的第一成员方;所述第一成员方包括第一中心设备;

其中,所述接收模块被配置用于:从所述第一中心设备接收扩容请求。

9.根据权利要求8所述的装置,其中,所述扩容请求为所述第一中心设备在确定满足预设条件时发送的;所述预设条件包括:当前所述区块链系统包括的分片个数小于目标分片个数;所述目标分片个数基于所述区块链系统在预设时段内执行的交易总数而确定。

10.根据权利要求9所述的装置,其中,所述目标分片个数与目标比值正相关,所述目标比值为所述交易总数与预设交易数的比值。

11.根据权利要求7所述的装置,其中,所述第一发送模块被配置用于:从状态数据库中导出所述第一区块对应的第一世界状态,并将该导出的所述第一世界状态发送给所述第二节点。

12.根据权利要求11所述的装置,其中,所述第一发送模块通过如下方式从状态数据库中导出所述第一区块对应的第一世界状态:将所述第一世界状态作为临时文件存储在所述第一分片的分片节点的磁盘空间中。

13.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令所述计算机执行权利要求1‑6中任一项所述的方法。

14.一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1‑6中任一项所述的方法。

说明书 :

对区块链系统中的分片进行扩容的方法及装置

技术领域

[0001] 本说明书一个或多个实施例涉及区块链技术领域,特别涉及一种对区块链系统中的分片进行扩容的方法及装置。

背景技术

[0002] 区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成
的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。由于区
块链具有去中心化、信息不可篡改、自治性等特性,区块链也受到人们越来越多的重视和应
用。
[0003] 目前限制区块链技术大规模落地应用的一个很重要因素是性能,主要包括吞吐量,吞吐量一般可以通过每秒交易笔数(Transaction Per Second,简称TPS)来度量。开发
者们提出了各种各样的方案来尝试提升区块的吞吐量,这一过程称为“扩容”。区块链分片
技术是一种用于对区块链进行扩容的方案。区块链分片的基本思路是将区块链网络中的节
点分成若干个相对独立的子网络,每个子网络构成一个区块链,一个子网络也就是一个分
片(shard)。通过多个分片的并行处理,可提升整个网络的吞吐量。
[0004] 目前来说,区块链系统中分片的数量往往是不变的,因此,在区块链上业务急剧增长时,需要对整个系统进行停机、人工扩容,降低了系统的可用性。而如果在业务初期就采
用大量分片数,又会造成资源的浪费。因此,区块链分片技术需要一种自动扩容的方法。

发明内容

[0005] 为了解决上述技术问题之一,本说明书一个或多个实施例提供一种对区块链系统中的分片进行扩容的方法及装置。
[0006] 根据第一方面,提供一种对区块链系统中的分片进行扩容的方法,所述区块链系统包括第一分片,所述第一分片中包括第一节点;所述方法包括:
[0007] 所述第一节点接收扩容请求,所述扩容请求中包括将要执行的第一区块的信息;
[0008] 在执行完成所述第一区块之后,所述第一节点将所述第一区块对应的第一世界状态发送给所述第二节点;并执行至少一个第二区块,记录各个第二区块对应的各个状态更
改信息;所述第二区块为所述第一区块之后的区块;
[0009] 在对所述第一区块对应的第一世界状态发送完成之后,所述第一节点将各个所述状态更改信息发送给第二节点;所述第二节点属于待增加到区块链系统中的第二分片;
[0010] 所述第二节点基于接收的所述第一世界状态和各个所述状态更改信息,获取所述第二分片的初始世界状态。
[0011] 根据第二方面,提供一种对区块链系统中的分片进行扩容的方法,所述区块链系统包括第一分片,所述第一分片中包括第一节点;所述方法应用于所述第一节点,所述方法
包括:
[0012] 接收扩容请求,所述扩容请求中包括将要执行的第一区块的信息;
[0013] 在执行完成所述第一区块之后,将所述第一区块对应的第一世界状态发送给所述第二节点;并执行至少一个第二区块,记录各个第二区块对应的各个状态更改信息;所述第
二区块为所述第一区块之后的区块;
[0014] 在对所述第一区块对应的第一世界状态发送完成之后,将各个所述状态更改信息发送给第二节点;所述第二节点属于待增加到区块链系统中的第二分片。
[0015] 根据第三方面,提供一种对区块链系统中的分片进行扩容的装置,所述区块链系统包括第一分片,所述第一分片中包括第一节点;所述装置应用于所述第一节点,所述装置
包括:
[0016] 接收模块,用于接收扩容请求,所述扩容请求中包括将要执行的第一区块的信息;
[0017] 第一发送模块,用于在执行完成所述第一区块之后,将所述第一区块对应的第一世界状态发送给所述第二节点;
[0018] 记录模块,用于执行至少一个第二区块,记录各个第二区块对应的各个状态更改信息;所述第二区块为所述第一区块之后的区块;
[0019] 第二发送模块,用于在对所述第一世界状态发送完成之后,将各个所述状态更改信息发送给第二节点;所述第二节点属于待增加到区块链系统中的第二分片。
[0020] 根据第四方面,提供一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述第二方面中任一项所述的方法。
[0021] 根据第五方面,提供一种及计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述第二方面中任一项所
述的方法。
[0022] 本说明书的实施例提供的技术方案可以包括以下有益效果:
[0023] 本说明书的实施例提供的对区块链系统中的分片进行扩容的方法和装置,在满足预设条件时,将将要执行的第一区块对应的第一世界状态发送给新增分片的第二节点,并
在发送第一世界状态的过程中,继续执行第一区块之后的第二区块,并记录第二区块对应
的状态更改信息,在对第一世界状态发送完成之后,将记录的第二区块对应的状态更改信
息发送给新增分片的第二节点,使得第二节点能够基于第一世界状态和各个状态更改信
息,获取第二分片的初始世界状态,从而完成扩容。实现了区块链系统的自动扩容,解决了
区块链系统中分片数量不能随交易数量增加而动态扩容的问题。也实现了状态热迁移,从
而避免了在扩容的过程中对区块的业务产生中断的情况。
[0024] 应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。

附图说明

[0025] 为了更清楚地说明本申请实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本
领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的
附图。
[0026] 图1a是本说明书根据一示例性实施例示出的一种区块链系统的架构图;
[0027] 图1b是本说明书根据一示例性实施例示出的另一种区块链系统的架构图;
[0028] 图1c是本说明书根据一示例性实施例示出的另一种区块链系统的架构图;
[0029] 图2是本说明书根据一示例性实施例示出的一种对区块链系统中的分片进行扩容的方法的交互流程图;
[0030] 图3是本说明书根据一示例性实施例示出的一种对区块链系统中的分片进行扩容的装置的框图。

具体实施方式

[0031] 这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中相同数字表示相同或相似的要素。以下示例性实施例中
所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附
权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
[0032] 在本说明书中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包
括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是
指并包含一个或多个相关联的列出项目的任何或所有可能组合。
[0033] 应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离
本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第
一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……
时”或“响应于确定”。
[0034] 目前限制区块链技术大规模落地应用的一个很重要因素是性能,主要包括吞吐量,为了提升区块的吞吐量,开发者们提出了各种各样的方案进行扩容。从扩容采用技术的
方向上来说,可以分为链上扩容和链下扩容两个方向。链上扩容通常包括扩块、隔离见证、
分片、共识层改进这些方案。链下扩容通常包括状态通道、侧链、链下计算这些方案。分片技
术是属于链上扩容的一种方案。分片概念源于数据库领域,本意是指数据库中数据的水平
分区(将表的不同行分到不同的分区),每个分片都保存在一个单独的数据库服务器实例
上,以分散负载。
[0035] 分片技术根据不同的分片机制可以划分为三种:网络分片(network sharding),交易分片(transaction sharding),状态分片(state sharding)。网络分片是最基础的一
种分片方式,就是将整个区块链网络划分成多个子网络,也就是多个分片。这样,区块链网
络中的多个分片可以并行处理网络中不同的交易。交易分片是将交易按某种规则分配到不
同分片,其思路为按一定规则将交易分配到同一个分片处理,这样既能够达到并行处理的
目的又能避免双花问题。交易分片的前提是先进行网络分片。在所有的分片机制当中,状态
分片是最具挑战的分片方式。状态分片的关键是将整个存储区分开,让不同的分片存储不
同的部分,每个节点只负责存储自己的分片数据,而不是存储完整的区块链状态。状态分片
能够解决存储能力瓶颈问题。
[0036] 如图1a‑图1c所示,是根据一示例性实施例示出的一种区块链系统的架构图。
[0037] 在图1a中,区块链系统可以包括分片1和分片2,其中,不同分片的互信的多个节点可以形成一个集合,该集合可包括分别属于2个分片的2个分片节点以及1个中心设备。各个
集合之间通过各自的中心设备进行通信,而属于相同分片的分片节点之间也可以通过该中
心设备进行通信。另外,该中心设备还可以接收交易,并对接收到的交易进行共识,共识之
后将交易分别分配给不同分片的分片节点。其中,上述分片节点以及中心设备可以实现为
任何具有计算、处理能力的装置、服务器或设备集群等。
[0038] 上述区块链系统可以为联盟链系统,该系统中可以包括成员方A,成员方B,成员方C和成员方D。可以理解,图1a仅是示例性的示出两个分片和四个成员方,实际上区块链系统
中可以包括任意数目的分片和成员方。下文中将以图1a‑图1c所示的区块链系统为例进行
描述,可以理解,本说明书实施例不限于应用于图1a‑图1c所示的区块链系统,而可以应用
于任意区块链系统。
[0039] 其中,从分片角度来说,分片节点1A,分片节点1B,分片节点1C和分片节点1D均属于分片1。分片节点2A,分片节点2B,分片节点2C和分片节点2D均属于分片2。从成员方的角
度来说,分片节点1A和分片节点2A均属于成员方A,该两个分片节点可以通过中心设备A进
行通信。分片节点1B和分片节点2B均属于成员方B,该两个分片节点可以通过中心设备B进
行通信。分片节点1C和分片节点2C均属于成员方C,该两个分片节点可以通过中心设备C进
行通信。分片节点1D和分片节点2D均属于成员方D,该两个分片节点可以通过中心设备D进
行通信。并且,中心设备A,中心设备B,中心设备C和中心设备D相互之间可以进行通信。
[0040] 具体地,各个中心设备(包括中心设备A,中心设备B,中心设备C和中心设备D)分别可以根据区块链系统在预设时段内执行的交易总数确定是否满足预设的扩容条件,若确定
满足预设的扩容条件,则需要针对原有的每个分片,相应的新增一个新的分片。例如,针对
分片1,相应的新增一个新的分片3,即在每个成员方,新增一个分片3的分片节点。针对分片
2,相应的新增一个新的分片4,即在每个成员方,新增一个分片4的分片节点。在确定满足预
设的扩容条件之后,各个中心设备可以分别向各自对应的两个分片节点发送扩容请求。例
如,中心设备A分别向分片节点1A和分片节点2A发送扩容请求,中心设备B分别向分片节点
1B和分片节点2B发送扩容请求,中心设备C分别向分片节点1C和分片节点2C发送扩容请求,
中心设备D分别向分片节点1D和分片节点2D发送扩容请求。
[0041] 任意一个分片节点接收到扩容请求之后,可以与新增分片的分片节点建立连接,并从状态数据库中获取已存储的最新的世界状态,并将该最新的世界状态传输至新增分片
的分片节点。同时,该分片节点还可以将正在执行的交易产生的状态更改信息进行缓存。当
该最新的世界状态传输完成之后,可以将缓存的状态更改信息也传输至新增分片的分片节
点。例如,如图1b所示,在成员方A中,分片节点1A接收到扩容请求之后,可以与新增分片3的
分片节点3A建立连接,并将获取的最新的世界状态以及缓存的状态更改信息传输至分片节
点3A。分片节点2A接收到扩容请求之后,可以与新增分片4的分片节点4A建立连接,并将获
取的最新的世界状态以及缓存的状态更改信息传输至分片节点4A。其它成员方以此类推,
在此不再赘述。
[0042] 状态更改信息传输完成后,新增分片的分片节点基于接收到的世界状态和各个状态更改信息,得到该新增分片的初始世界状态。同时,与原分片节点断开连接,与中心设备
建立连接,并通知中心设备完成扩容。如图1c所示,在成员方A中,状态更改信息传输完成
后,分片节点3A得到分片3的初始世界状态,与分片节点1A断开连接,与中心设备A建立连
接,并通知中心设备A完成扩容。分片节点4A得到分片4的初始世界状态,与分片节点2A断开
连接,与中心设备A建立连接,并通知中心设备A完成扩容。其它成员方以此类推,在此不再
赘述。
[0043] 下面将结合具体的实施例对本说明书提供的方案进行详细描述。
[0044] 如图2所示,图2是根据一示例性实施例示出的一种对区块链系统中的分片进行扩容的方法的交互流程图。该区块链系统包括中心设备和属于第一分片的第一节点,第二节
点属于待增加到区块链系统中的第二分片,该方法包括以下步骤:
[0045] 在步骤201中,中心设备确定满足预设条件。
[0046] 在本实施例中,中心设备可以是图1a‑图1c所示的区块链系统构架中的中心设备,也可以是其它区块链系统构架中的设备,例如,中心设备可以是区块链系统中中继链的节
点设备,可以理解,本实施例对区块链系统的系统构架方面不限定。
[0047] 在本实施例中,满足预设条件即为满足扩容的条件,中心设备可以通过计算当前区块链系统对资源的需求量,来确定是否需要增加资源。若确定需要增加资源,则说明需要
对区块链系统的分片进行扩容,即满足扩容的条件。
[0048] 具体来说,中心设备可以首先基于区块链系统在预设时段内执行的交易总数,确定目标分片个数。当中心设备确定当前区块链系统包括的分片个数小于目标分片个数时,
可以确定满足预设条件,即满足扩容的条件,需要对区块链系统的分片进行扩容。
[0049] 其中,该目标分片个数与目标比值正相关,目标比值为该交易总数与预设交易数的比值。例如,可以通过如下公式计算目标分片个数:
[0050] k=⌈log2(Ntx/△Ntx)⌉;
[0051] Nshard=2k;
[0052] 其中,Ntx表示在预设时段内区块链系统实际执行的交易总数,△Ntx表示在预设时段内区块链系统中单个分片正常运行时所执行的交易数,k表示向上取整log2(Ntx/△Ntx)得
到的整数,Nshard表示目标分片个数。
[0053] 可以理解,计算目标分片个数的方式并不限于上述实例,还可以通过其它任意合理的方式计算目标分片个数,本实施例对计算目标分片个数的具体方式方面不限定。
[0054] 在步骤203中,中心设备向第一节点发送扩容请求。
[0055] 在本实施例中,中心设备响应于确定满足预设条件,向第一节点发送扩容请求,该扩容请求中包括将要执行的第一区块的信息。该第一区块为还未执行将要执行的区块,例
如,当前正在执行区块m(m为区块高度),第一区块的信息可以是指示第一区块与当前区块
的高度差n(n≥1且为整数)的信息,因此,第一区块为区块高度为m+n的区块。可以理解,第
一区块的信息可以是任意形式的信息,本实施例对第一区块的信息的具体形式方面不限
定。
[0056] 在步骤205中,第一节点从扩容请求中获取第一区块的信息。
[0057] 在步骤207中,第一节点执行第一区块。
[0058] 在步骤209中,第一节点在执行完成第一区块之后,向第二节点发送第一区块对应的第一世界状态。
[0059] 在本实施例中,第一节点响应于接收到扩容请求,从扩容请求中获取第一区块的信息,并基于该第一区块的信息确定第一区块。第一节点与待增加的第二分片中的第二节
点建立连接,同时,继续执行当前区块,直至执行完成第一区块。在确定执行完成第一区块
之后,向第二节点发送第一区块对应的第一世界状态。
[0060] 例如,当前区块为区块1,第一节点从扩容请求中获取第一区块的信息,该第一区块的信息指示第一区块为当前区块之后的第2个区块,即区块3。第一节点基于该第一区块
的信息确定第一区块为区块3,同时,继续执行区块1以及区块2,直至执行完成区块3,然后,
向第二节点发送区块3对应的第一世界状态。
[0061] 具体来说,第一节点执行第一区块(例如区块高度为k)的过程可以包括以下过程:各个联盟方的中心设备通过共识确定属于区块高度为k的多个交易,然后,各个联盟方的中
心设备将该多个交易分别按照预设的规则分发给各自的分片节点。其中,各个联盟方中属
于第一分片的第一节点接收到h个交易。各个第一节点都执行完成该h个交易之后,生成第
一区块的区块体和区块头,存储第一区块,并基于该h个交易的执行结果对应的状态更改信
息,更新第一区块的世界状态,得到第一区块对应的第一世界状态。该第一世界状态为第一
区块对应的完整的世界状态,若第一区块产生了对前一个区块的世界状态更改的状态更改
信息,该第一世界状态即为前一个区块的利用状态更改信息更改前一个区块的世界状态之
后,得到的完整的世界状态。
[0062] 在一种实现方式中,第一节点可以直接从状态数据库中取出第一区块对应的第一世界状态,并发送给第二节点。在另一种实现方式中,第一节点可以先从状态数据库中导出
第一区块对应的第一世界状态,将导出的第一世界状态作为临时文件,存储在第一分片的
分片节点的磁盘空间中。然后,再将存储在该磁盘空间中的临时文件慢慢发送给第二节点。
本实现方式将导出的第一世界状态作为临时文件,先存储在磁盘空间再发送给第二节点,
能够减少对网络资源的占用。
[0063] 在步骤211中,第一节点执行至少一个第二区块,并记录各个第二区块对应的各个状态更改信息。
[0064] 在步骤213中,第一节点在对第一区块对应的第一世界状态发送完成之后,向第二节点发送各个状态更改信息。
[0065] 在本实施例中,第二区块为第一区块之后的至少一个区块,例如,第一区块为区块3,则区块4、区块5、区块6等,都可以叫做第二区块。
[0066] 在本实施例中,第一节点在执行完成第一区块之后,向第二节点发送第一区块对应的第一世界状态。由于第一世界状态数据量比较大,向第二节点发送第一世界状态的过
程需要较长的时间,因此,在发送第一世界状态的过程中,第一节点可以继续执行至少一个
第二区块,并在缓存中记录各个第二区块各自对应的各个状态更改信息。所以,实现了状态
热迁移,不会对区块的业务产生中断。其中,状态更改信息为用于更新世界状态的信息。例
如,状态更改信息可以是在执行区块中的各个交易时,产生的各个对变量的写入信息。
[0067] 在本实施例中,当第一节点对第一区块对应的第一世界状态发送完成之后,可以将在缓存中记录的各个状态更改信息发送给第二节点。第一世界状态加上各个状态更改信
息,可以得到当前区块对应的世界状态。例如,第一区块为区块3,在第一节点对区块3对应
的世界状态发送完成时,已经执行完区块5,在缓存中记录有区块4和区块5各自对应的各个
状态更改信息。第一节点将区块4和区块5各自对应的各个状态更改信息发送给第二节点,
则区块3对应的世界状态加上区块4和区块5各自对应的各个状态更改信息,可以得到区块5
对应的世界状态。
[0068] 在步骤215中,第二节点基于第一世界状态和各个状态更改信息,获取第二分片的初始世界状态。
[0069] 在本实施例中,第二节点可以基于第一世界状态和各个状态更改信息,获取第二分片的初始世界状态。然后,第二节点与第一节点断开连接,与中心设备建立连接,并通知
中心设备完成扩容。中心设备在接收到扩容完成的通知之后,可以根据预定的分片规则,将
交易分配给新生成的分片进行处理。
[0070] 本说明书的上述实施例提供的对区块链系统中的分片进行扩容的方法,在满足预设条件时,将将要执行的第一区块对应的第一世界状态发送给新增分片的第二节点,并在
发送第一世界状态的过程中,继续执行第一区块之后的第二区块,并记录第二区块对应的
状态更改信息,在对第一世界状态发送完成之后,将记录的第二区块对应的状态更改信息
发送给新增分片的第二节点,使得第二节点能够基于第一世界状态和各个状态更改信息,
获取第二分片的初始世界状态,从而完成扩容。实现了区块链系统的自动扩容,解决了区块
链系统中分片数量不能随交易数量增加而动态扩容的问题。也实现了状态热迁移,从而避
免了在扩容的过程中对区块的业务产生中断的情况。
[0071] 应当注意,尽管在上述实施例中,以特定顺序描述了本说明书实施例的方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所
示的操作才能实现期望的结果。相反,流程图中描绘的步骤可以改变执行顺序。附加地或备
选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个
步骤执行。
[0072] 与前述对区块链系统中的分片进行扩容的方法实施例相对应,本说明书还提供了对区块链系统中的分片进行扩容的装置的实施例。
[0073] 如图3所示,图3是本说明书根据一示例性实施例示出的一种对区块链系统中的分片进行扩容的装置框图,该区块链系统包括第一分片,第一分片中包括第一节点,该装置应
用于第一节点,该装置可以包括:接收模块301,第一发送模块302,记录模块303和第二发送
模块304。
[0074] 其中,接收模块301,用于接收扩容请求,该扩容请求中包括将要执行的第一区块的信息。
[0075] 第一发送模块302,用于在执行完成第一区块之后,将第一区块对应的第一世界状态发送给第二节点。
[0076] 记录模块303,用于执行至少一个第二区块,记录各个第二区块对应的各个状态更改信息,该第二区块为第一区块之后的区块。
[0077] 第二发送模块304,用于在对第一世界状态发送完成之后,将各个状态更改信息发送给第二节点,该第二节点属于待增加到区块链系统中的第二分片。
[0078] 在一些实施方式中,该区块链系统包括多个成员方,各个成员方包括各自的中心设备以及多个分片的部分分片节点。第一节点和第二节点属于多个成员方中的第一成员
方,第一成员方包括第一中心设备。
[0079] 其中,接收模块301被配置用于:从第一中心设备接收扩容请求。
[0080] 在另一些实施方式中,上述扩容请求为第一中心设备在确定满足预设条件时发送的,上述预设条件包括:当前区块链系统包括的分片个数小于目标分片个数,目标分片个数
基于区块链系统在预设时段内执行的交易总数而确定。
[0081] 在另一些实施方式中,目标分片个数与目标比值正相关,目标比值为交易总数与预设交易数的比值。
[0082] 在另一些实施方式中,第一发送模块302被配置用于:从状态数据库中导出第一区块对应的第一世界状态,并将该导出的第一世界状态发送给第二节点。
[0083] 在另一些实施方式中,第一发送模块302通过如下方式从状态数据库中导出第一区块对应的第一世界状态:将第一世界状态作为临时文件存储在第一分片的分片节点的磁
盘空间中。
[0084] 应当理解,上述装置可以预先设置在第一节点中,也可以通过下载等方式而加载到第一节点中。上述装置中的相应模块可以与第一节点中的模块相互配合以实现对区块链
系统中的分片进行扩容的方案。
[0085] 对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件
说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以
不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的
需要选择其中的部分或者全部模块来实现本说明书一个或多个实施例方案的目的。本领域
普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0086] 本说明书一个或多个实施例还提供了一种计算机可读存储介质,该存储介质存储有计算机程序,计算机程序可用于执行上述图2实施例提供的对区块链系统中的分片进行
扩容的方法。
[0087] 本说明书一个或多个实施例还提供了一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述图2实施例提供
的对区块链系统中的分片进行扩容的方法。
[0088] 本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实
施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例
的部分说明即可。
[0089] 上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来
执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺
序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可
以的或者可能是有利的。
[0090] 本领域普通技术人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清
楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组
成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计
约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功
能,但是这种实现不应认为超出本申请的范围。其中,软件模块可以置于随机存储器(RAM)、
内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD‑
ROM、或技术领域内所公知的任意其它形式的存储介质中。
[0091] 以上所述的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施方式而已,并不用于限定本申请
的保护范围,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含
在本申请的保护范围之内。