对区块链系统中的分片进行缩容的方法及装置转让专利
申请号 : CN202111019552.3
文献号 : CN113468132B
文献日 : 2021-12-21
发明人 : 郑子彬 , 徐泉清 , 郑沛霖 , 闫莺 , 张辉
申请人 : 支付宝(杭州)信息技术有限公司
摘要 :
权利要求 :
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中任一项所述的方法。
说明书 :
对区块链系统中的分片进行缩容的方法及装置
技术领域
背景技术
的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。由于区
块链具有去中心化、信息不可篡改、自治性等特性,区块链也受到人们越来越多的重视和应
用。
者们提出了各种各样的方案来尝试提升区块的吞吐量,这一过程称为“扩容”。区块链分片
技术是一种用于对区块链进行扩容的方案。区块链分片的基本思路是将区块链网络中的节
点分成若干个相对独立的子网络,每个子网络构成一个区块链,一个子网络也就是一个分
片(shard)。通过多个分片的并行处理,可提升整个网络的吞吐量。
要一种自动缩容的方法。
发明内容
点;所述第一节点和所述第二节点部署有目标合约,所述方法包括:
点;所述第一节点和所述第二节点部署有目标合约,所述方法由所述第一节点执行,所述方
法包括:
点;所述第一节点和所述第二节点部署有目标合约,所述方法由所述第二节点执行,所述方
法包括:
点;所述第一节点和所述第二节点部署有目标合约,所述装置应用于所述第一节点,所述装
置包括:
点;所述第一节点和所述第二节点部署有目标合约,所述装置应用于所述第一节点,所述装
置包括:
点;所述第一节点和所述第二节点部署有目标合约,所述装置应用于所述第二节点,所述装
置包括:
中任一项所述的方法。
约状态,并将目标合约状态传输至第二节点,由属于待合并的第二分片的第二节点将目标
合约状态合并至第二分片的世界状态中,从而有选择地将在第一分片中的部分世界状态迁
移至第二分片的世界状态中,以对区块链系统中的分片进行的缩容。实现了区块链系统的
自动缩容,解决了区块链系统中分片数量不能随交易数量减少而动态缩容的问题。也实现
了状态热迁移,从而避免了在缩容的过程中对区块的业务产生中断的情况。
附图说明
领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的
附图。
具体实施方式
所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附
权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是
指并包含一个或多个相关联的列出项目的任何或所有可能组合。
本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第
一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……
时”或“响应于确定”。
方向上来说,可以分为链上扩容和链下扩容两个方向。链上扩容通常包括扩块、隔离见证、
分片、共识层改进这些方案。链下扩容通常包括状态通道、侧链、链下计算这些方案。分片技
术是属于链上扩容的一种方案。分片概念源于数据库领域,本意是指数据库中数据的水平
分区(将表的不同行分到不同的分区),每个分片都保存在一个单独的数据库服务器实例
上,以分散负载。
种分片方式,就是将整个区块链网络划分成多个子网络,也就是多个分片。这样,区块链网
络中的多个分片可以并行处理网络中不同的交易。交易分片是将交易按某种规则分配到不
同分片,其思路为按一定规则将交易分配到同一个分片处理,这样既能够达到并行处理的
目的又能避免双花问题。交易分片的前提是先进行网络分片。在所有的分片机制当中,状态
分片是最具挑战的分片方式。状态分片的关键是将整个存储区分开,让不同的分片存储不
同的部分,每个节点只负责存储自己的分片数据,而不是存储完整的区块链状态。状态分片
能够解决存储能力瓶颈问题。
用效率的角度出发,需要一种在区块链业务低谷期自动缩容的技术。
中心设备。各个集合之间通过各自的中心设备进行通信,而属于相同分片的分片节点之间
也可以通过该中心设备进行通信。另外,该中心设备还可以接收交易,并对接收到的交易进
行共识,共识之后将交易分别分配给不同分片的分片节点。其中,上述分片节点以及中心设
备可以实现为任何具有计算、处理能力的装置、服务器或设备集群等。
中可以包括任意数目的分片和成员方。下文中将以图1a‑图1c所示的区块链系统为例进行
描述,可以理解,本说明书实施例不限于应用于图1a‑图1c所示的区块链系统,而可以应用
于任意区块链系统。
片节点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相互之间可以进行通信。
设的缩容条件,则需要将原有的分片进行删减,并将删减掉的分片中的待迁移世界状态迁
移至未删减的分片中。
中,分片可以分为待删减的第一分片和待合并的第二分片。在一种实现方式中,可以由中心
设备确定第一分片和第二分片,并通知第一分片的第一分片节点和第二分片的第二分片节
点。在另一种实现方式中,还可以预先分配好第一分片和第二分片,并通知第一分片节点和
第二分片节点。
少一个状态输出函数。并通过调用各个目标合约各自对应的至少一个状态输出函数,获取
该第一分片的待迁移世界状态。
应的状态输入函数,将待迁移世界状态迁移到该第二分片的世界状态中。
片进行缩容的过程。
片3为例,在确定满足预设的缩容条件之后,中心设备A分别向分片节点1A和分片节点3A发
送缩容请求。分片节点3A响应于接收到缩容请求,查找部署于分片3中的各个目标合约各自
对应的至少一个状态输出函数。然后,通过调用各个状态输出函数,获取分片3的待迁移世
界状态。并且,如图1b所示,分片节点3A与分片节点1A建立连接,分片节点3A将分片3的待迁
移世界状态传输至分片节点1A,分片节点1A通过调用相应的状态输入函数,将待迁移世界
状态迁移到分片1的世界状态中。最后,如图1c所示,中心设备A断开与分片节点3A的连接,
撤销删减掉分片3,从而完成缩容的过程。其它成员方以此类推,在此不再赘述。
二分片的第二节点,其中,第一分片为待删减的分片,第二分片为待合并的分片,第一节点
和第二节点部署有目标合约,该方法包括以下步骤:
点设备,可以理解,本实施例对区块链系统的系统构架方面不限定。
对区块链系统的分片进行缩容,即满足缩容的条件。
可以确定满足缩容的条件,需要对区块链系统的分片进行缩容。即将第一分片中的至少部
分世界状态迁移至区块链系统中的第二分片,并撤销删减掉区块链系统中的第一分片。
到的整数,Nshard表示目标分片个数。
片,第一分片的数目可以与第二分片的数目相同,也可以不同。针对任意一个第一分片,其
对应的第二分片(即合并该第一分片的至少部分世界状态的第二分片)可以是预先规定好
的,也可以是随机分配的。具体来说,可以根据预设的规则划分第一分片和第二分片,例如,
可以根据分片的通信质量或计算速度,确定第一分片和第二分片。又例如,还可以将通过前
次扩容增加的分片作为第一分片,将前次扩容之前就存在的节点作为第二分片。可以理解,
还可以通过其它任意合理的方式划分第一分片和第二分片,本实施例对第一分片和第二分
片的具体划分方式方面不限定。
目标合约在第一分片中的目标合约状态,并将目标合约状态传输给第二节点)。可选地,中
心设备也可以向第二节点发送缩容请求,使第二节点执行与第二节点相应的缩容操作(即
将第一节点传输的目标合约状态合并至第二分片的世界状态)。
与第一节点或第二节点相应的缩容操作。
状态迁移。而又有部分智能合约(如用于查询数据,或者用于验证权限的智能合约等)在执
行之后不会改变世界状态,这部分智能合约在缩容过程中就可能不需要进行状态迁移。因
此,部署于第一分片的目标合约的数目可以是一个,也可以是多个。在部署目标合约时,可
以将目标合约部署到区块链系统的每个分片中,同时,还可以将目标合约的合约地址进行
保存。
状态输出函数及各自对应的状态输入函数记录于该目标合约中。其中,针对任一种数据类
型,对应的设置一个状态输出函数和一个状态输入函数。该状态输出函数可以用于从第一
分片的状态数据库里该目标合约对应的世界状态中取出该数据类型的状态数据。该状态输
入函数可以用于将该状态输出函数取出的状态数据插入到第二分片的状态数据库里该目
标合约对应的世界状态中。
可以定义为OUTPUT_BOOL,数据类型对应于布尔类型的状态输入函数的函数名可以定义为
INPUT_BOOL。另一方面,任一数据类型对应的状态输出函数的输入参数可以包括目标合约
涉及的该数据类型的任一变量对应的偏移量,该变量对应的偏移量可以是该变量的变量标
识,也可以是该变量在该数据类型中所对应的编号(例如整数编号)等。该状态输出函数的
返回结果可以是该变量对应的状态值。该状态输出函数对应的状态输入函数的输入参数可
以包括该变量对应的偏移量,以及该变量对应的状态值。需要说明的是,不同数据类型的变
量可以对应相同的偏移量。
目标合约的合约地址,利用目标合约包括的各个状态输出函数,获取目标合约在第一分片
中的目标合约状态。具体地,针对任一状态输出函数,第一节点可以将多组第一参数分别输
入各个状态输出函数,从而获取目标合约涉及的多个变量各自对应的各个状态值,作为目
标合约状态。其中,任一组第一参数与目标合约涉及的一个变量对应,即该第一参数可以包
括该变量对应的偏移量。
中心设备,由中心设备将目标合约状态发送给第二节点。
界状态中。具体来说,首先,第二节点可以基于目标合约状态,确定多组第二参数,并确定与
状态输出函数对应的状态输入函数。其中,任一组第二参数包括目标合约涉及的一个变量
对应的状态值。然后,将多组第二参数分别输入至状态输入函数,以使目标合约状态合并至
第二分片的世界状态中。其中,状态输入函数可以包括插入逻辑,例如,状态输出函数输出
一个变量对应的状态值,该状态值为从第一分片对应的世界状态的状态树的数组中的一个
元素,则该状态输出函数对应的状态输入函数可以把该状态值作为元素插入到另一个世界
状态的状态树的数组中,也可以将该状态值与另一个世界状态的状态树的数组中的指定元
素进行预设计算,将得到的结果作为元素插入到另一个世界状态的状态树的数组中。可以
理解,可以根据具体需要设定插入逻辑,本实施例对具体插入逻辑的内容方面不限定。
合约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的偏移量。
约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的循环调用。
输出变量e对应的状态值Ve。当输入参数为1(变量f的偏移量)时,状态输出函数OUTPUT_
ADDRESS输出变量f对应的状态值Vf。当输入参数为2时报错,结束对状态输出函数OUTPUT_
ADDRESS的循环调用。
量c对应的状态值Vc,变量e对应的状态值Ve以及变量f对应的状态值Vf。并且,第一节点还
可以获取该目标合约状态的关联信息,并将该目标合约状态及其关联信息传输至第二节
点。该目标合约状态的关联信息可以包括合约A的合约地址,合约A包括的状态输出函数,以
及状态输出函数的输入参数与输出的状态值之间的对应关系。
态输入函数对应的多组输入参数,例如,状态输入函数INPUT_BOOL对应的多组输入参数可
以包括(0,Va),(1,Vb)和(2,Vc),状态输入函数INPUT_ADDRESS对应的多组输入参数可以包
括(0,Ve)和(1,Vf)。然后,利用合约A的合约地址以及多组输入参数,分别调用相应的状态
输入函数,从而将该目标合约状态合并至第二分片的世界状态中。
中属于第一分片的第一节点,并销毁与第一节点相关的虚拟机资源,从而完成与中心设备
相应的缩容操作。
状态,并将目标合约状态传输至第二节点,由属于待合并的第二分片的第二节点将目标合
约状态合并至第二分片的世界状态中,从而有选择地将在第一分片中的部分世界状态迁移
至第二分片的世界状态中,以对区块链系统中的分片进行的缩容。实现了区块链系统的自
动缩容,解决了区块链系统中分片数量不能随交易数量减少而动态缩容的问题。也实现了
状态热迁移,从而避免了在缩容的过程中对区块的业务产生中断的情况。
示的操作才能实现期望的结果。相反,流程图中描绘的步骤可以改变执行顺序。附加地或备
选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个
步骤执行。
点,第二分片中包括第二节点,第一节点和第二节点部署有目标合约,该装置应用于第一节
点,该装置可以包括:接收模块401,获取模块402和传输模块403。
标合约状态,目标合约状态包括目标合约涉及的多个变量各自对应的各个状态值。
员方,第一成员方包括第一中心设备。
系统中的分片进行缩容的方案。
点,第二分片中包括第二节点,第一节点和第二节点部署有目标合约,该装置应用于第二节
点,该装置可以包括:接收模块501和合并模块502。
别输入至状态输入函数,以使目标合约状态合并至第二分片的世界状态中。
系统中的分片进行缩容的方案。
说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以
不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的
需要选择其中的部分或者全部模块来实现本说明书一个或多个实施例方案的目的。本领域
普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
缩容的方法。
的对区块链系统中的分片进行缩容的方法。
施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例
的部分说明即可。
执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺
序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可
以的或者可能是有利的。
楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组
成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计
约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功
能,但是这种实现不应认为超出本申请的范围。其中,软件模块可以置于随机存储器(RAM)、
内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD‑
ROM、或技术领域内所公知的任意其它形式的存储介质中。
的保护范围,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含
在本申请的保护范围之内。