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

申请号 : CN202111019552.3

文献号 : CN113468132B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

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

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

摘要 :

本说明书提供一种对区块链系统中的分片进行缩容的方法及装置,该区块链系统包括第一分片和第二分片,所述第一分片中包括第一节点,所述第二分片中包括第二节点;所述第一节点和所述第二节点部署有目标合约,所述方法包括:所述第一节点接收缩容请求,获取所述目标合约在所述第一分片中的目标合约状态,并将所述目标合约状态传输至所述第二节点;所述第二节点将所述目标合约状态合并至所述第二分片的世界状态中。从而实现了区块链系统的自动缩容,解决了区块链系统中分片数量不能随交易数量减少而动态缩容的问题。

权利要求 :

1.一种对区块链系统中的分片进行缩容的方法,所述区块链系统包括第一分片和第二分片,所述第一分片中包括第一节点,所述第二分片中包括第二节点;所述第一节点和所述第二节点部署有目标合约,所述方法由所述第一节点执行,所述方法包括:接收缩容请求;

获取所述目标合约在所述第一分片中的目标合约状态;

将所述目标合约状态传输至所述第二节点,使所述第二节点将所述目标合约状态合并至所述第二分片的世界状态中。

2.根据权利要求1所述的方法,其中,所述获取所述目标合约在所述第一分片中的目标合约状态,包括:

利用所述目标合约包括的状态输出函数,获取所述目标合约状态。

3.根据权利要求2所述的方法,其中,所述状态输出函数为针对一种数据类型设置的函数。

4.根据权利要求2所述的方法,其中,在所述利用所述目标合约包括的状态输出函数,获取所述目标合约状态之前,还包括:基于部署合约时存储的合约地址,确定所述目标合约。

5.根据权利要求2所述的方法,其中,所述利用所述目标合约包括的状态输出函数,获取所述目标合约状态,包括:

将多组第一参数分别输入所述状态输出函数;任一组所述第一参数与所述目标合约涉及的一个变量对应;

获取所述状态输出函数输出的所述目标合约状态;所述目标合约状态包括所述目标合约涉及的多个变量各自对应的各个状态值。

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

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

7.一种对区块链系统中的分片进行缩容的方法,所述区块链系统包括第一分片和第二分片,所述第一分片中包括第一节点,所述第二分片中包括第二节点;所述第一节点和所述第二节点部署有目标合约,所述方法由所述第二节点执行,所述方法包括:接收所述第一节点发送的所述目标合约在所述第一分片中的目标合约状态;

将所述目标合约状态合并至所述第二分片的世界状态中。

8.根据权利要求7所述的方法,其中,所述目标合约状态为所述第一节点利用所述目标合约包括的状态输出函数获取的;

其中,所述将所述目标合约状态合并至所述第二分片的世界状态中,包括:利用所述目标合约包括的状态输入函数,将所述目标合约状态合并至所述第二分片的世界状态中;所述状态输入函数与所述状态输出函数对应。

9.根据权利要求8所述的方法,其中,所述状态输出函数及所述状态输入函数为针对一种数据类型设置的函数。

10.根据权利要求8所述的方法,其中,所述利用所述目标合约包括的状态输入函数,将所述目标合约状态合并至所述第二分片的世界状态中,包括:基于所述目标合约状态,确定多组第二参数;任一组所述第二参数包括所述目标合约涉及的一个变量对应的状态值;

将所述多组第二参数分别输入至所述状态输入函数,以使所述目标合约状态合并至所述第二分片的世界状态中。

11.一种对区块链系统中的分片进行缩容的方法,所述区块链系统包括第一分片和第二分片,所述第一分片中包括第一节点,所述第二分片中包括第二节点;所述第一节点和所述第二节点部署有目标合约,所述方法包括:所述第一节点接收缩容请求,获取所述目标合约在所述第一分片中的目标合约状态,并将所述目标合约状态传输至所述第二节点;

所述第二节点将所述目标合约状态合并至所述第二分片的世界状态中;

其中,所述区块链系统包括多个成员方,各个成员方包括各自的中心设备以及多个分片的部分分片节点;所述第一节点和所述第二节点属于所述多个成员方中的第一成员方;

所述第一成员方包括第一中心设备;

其中,所述第一节点接收缩容请求,包括:所述第一节点从所述第一中心设备接收缩容请求;

其中,所述方法还包括:所述第一中心设备在确定满足预设条件时,向所述第一节点发送缩容请求;

其中,所述预设条件包括:当前所述区块链系统包括的分片个数大于目标分片个数;所述目标分片个数基于所述区块链系统在预设时段内执行的交易总数而确定。

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

13.根据权利要求11所述的方法,还包括:所述第一中心设备在向所述第一节点发送缩容请求之后,停止向所述第一节点发送修改状态的交易。

14.根据权利要求11所述的方法,还包括:所述第二节点在将所述目标合约状态合并至所述第二分片的世界状态中之后,向所述第一中心设备发送用于指示完成缩容操作的指示信息;

所述第一中心设备响应于接收到所述指示信息,断开与所述第一节点的连接,以撤销所述第一分片。

15.一种对区块链系统中的分片进行缩容的装置,所述区块链系统包括第一分片和第二分片,所述第一分片中包括第一节点,所述第二分片中包括第二节点;所述第一节点和所述第二节点部署有目标合约,所述装置应用于所述第一节点,所述装置包括:接收模块,用于接收缩容请求;

获取模块,用于获取所述目标合约在所述第一分片中的目标合约状态;

传输模块,用于将所述目标合约状态传输至所述第二节点,使所述第二节点将所述目标合约状态合并至所述第二分片的世界状态中。

16.一种对区块链系统中的分片进行缩容的装置,所述区块链系统包括第一分片和第二分片,所述第一分片中包括第一节点,所述第二分片中包括第二节点;所述第一节点和所述第二节点部署有目标合约,所述装置应用于所述第二节点,所述装置包括:接收模块,用于接收所述第一节点发送的所述目标合约在所述第一分片中的目标合约状态;

合并模块,用于将所述目标合约状态合并至所述第二分片的世界状态中。

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

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

说明书 :

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

技术领域

[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] 合并模块,用于将所述目标合约状态合并至所述第二分片的世界状态中。
[0027] 根据第七方面,提供一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述第二方面或第三方面中任一项所述的方法。
[0028] 根据第八方面,提供一种及计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述第二方面或第三方面
中任一项所述的方法。
[0029] 本说明书的实施例提供的技术方案可以包括以下有益效果:
[0030] 本说明书的实施例提供的对区块链系统中的分片进行缩容的方法和装置,在满足预设条件时,由属于待删减的第一分片的第一节点,获取目标合约在第一分片中的目标合
约状态,并将目标合约状态传输至第二节点,由属于待合并的第二分片的第二节点将目标
合约状态合并至第二分片的世界状态中,从而有选择地将在第一分片中的部分世界状态迁
移至第二分片的世界状态中,以对区块链系统中的分片进行的缩容。实现了区块链系统的
自动缩容,解决了区块链系统中分片数量不能随交易数量减少而动态缩容的问题。也实现
了状态热迁移,从而避免了在缩容的过程中对区块的业务产生中断的情况。
[0031] 应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。

附图说明

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

具体实施方式

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