一种自动切换区块链共识协议的方法、系统和装置与流程

文档序号:22397201发布日期:2020-09-29 18:07阅读:167来源:国知局
一种自动切换区块链共识协议的方法、系统和装置与流程

本说明书涉及区块链领域,特别涉及一种自动切换区块链共识协议的方法、系统和装置。



背景技术:

区块链是基于共识协议的分布式、去中心化的数据库。区块链平台在运行过程中,需要根据运行环境(节点数量、网络环境、账户安全等)的改变对共识协议进行灵活的切换和升级,同时保证基于不同共识协议生产的历史区块的兼容性。

因此,希望提供一种自动切换区块链共识协议的方法、系统和装置。



技术实现要素:

本说明书实施例的一个方面提供一种自动切换区块链共识协议的方法,包括:接收与共识协议切换相关的交易请求,并基于交易请求调用共识协议切换的智能合约,将智能合约中共识协议切换的触发条件和目标共识协议的标识写入账本;根据账本判断当前环境是否满足所述共识协议切换的触发条件,当判断结果为满足时,调用目标共识协议;基于目标共识协议执行交易的共识。

本说明书实施例的另一个方面提供一种自动切换区块链共识协议的系统,所述系统位于区块链节点上。所述系统包括:记录模块,用于接收与共识协议切换相关的交易请求,并基于交易请求调用共识协议切换的智能合约,将智能合约中共识协议切换的触发条件和目标共识协议的标识写入账本;调用模块,用于根据账本判断当前环境是否满足所述共识协议切换的触发条件,当判断结果为满足时,调用目标共识协议;执行模块,用于基于目标共识协议执行交易的共识。

本说明书另一个方面提供一种自动切换区块链共识协议的装置,包括处理器,所述处理器用于执行实现自动切换区块链共识协议的方法。

附图说明

本说明书将以示例性实施例的方式进一步说明,这些示例性实施例将通过附图进行详细描述。这些实施例并非限制性的,在这些实施例中,相同的编号表示相同的结构,其中:

图1是根据本说明书一些实施例所示的自动切换区块链共识协议的系统的应用场景示意图;

图2是根据本说明书一些实施例所示的自动切换区块链共识协议的方法的示例性流程图;

图3是根据本说明书一些实施例所示的共识协议切换的智能合约的示意图;

图4是根据本说明书一些实施例所示的已经标准化的共识协议的示意图;

图5是根据本说明书一些实施例所示的节点调用已经标准化的目标共识协议的示意图;

图6是根据本说明书一些实施例所示的新节点对区块链进行验证的方法的示例性流程图。

具体实施方式

为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本说明书的一些示例或实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图将本说明书应用于其它类似情景。除非从语言环境中显而易见或另做说明,图中相同标号代表相同结构或操作。

应当理解,本说明书中所使用的“系统”、“装置”、“单元”和/或“模组”是用于区分不同级别的不同组件、元件、部件、部分或装配的一种方法。然而,如果其他词语可实现相同的目的,则可通过其他表达来替换所述词语。

如本说明书和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其它的步骤或元素。

本说明书中使用了流程图用来说明根据本说明书的实施例的系统所执行的操作。应当理解的是,前面或后面操作不一定按照顺序来精确地执行。相反,可以按照倒序或同时处理各个步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步操作。

图1是根据本说明书一些实施例所示的自动切换区块链共识协议的系统的应用场景示意图。

区块链本质上是一种去中心化的分布式账本,一条完整的区块链通常由多方节点共同维护,每个节点享有对等或不对等的权利,节点间通过共识协议进行交互,共识协议是区块链的核心构成要素,通过共识协议可以起到数据、状态同步、防止节点作恶等重要作用。在实际场景中,线上平台在运行过程中可能会遇到由于运行环境改变需要更改共识协议的情况,例如,节点数量、网络环境、安全等情况,需要对共识协议进行灵活的切换和升级。示例的,联盟中的节点数目不断增加,已经超过了当前共识协议能够高效运行所支持的最大节点数。

当前,切换正在运行中的区块链的共识协议存在以下特点:(1)需要停止服务来进行程序或配置的升级;(2)未记录共识协议切换时的相关信息,当在区块链系统中加入新节点时,新节点从其他节点同步区块时无法获知校验同步区块的共识协议;(3)共识协议切换的交易被写入区块链就不可撤销,必然会在下一区块立刻生效,没有为共识协议切换预留一个缓冲时间以应对突发的情况和事件,灵活性不够高。

如图1所示,应用场景图100可以包括区块链,区块链包括若干个区块链节点(例如,110-1、110-2、110-3和110-4)、网络(120)和用户终端(例如,130-1和130-2)。自动切换区块链共识协议的系统部署在节点上。

在一些实施例中,若干个节点110-1、110-2、110-3、110-4通过网络120相连,构成区块链。在一些实施例中,可以将一方的计算设备、一方的服务器或者一个具有计算和存储能力的系统等作为一个节点。在一些实施例中,节点可以接收调用智能合约的交易请求。在一些实施例中,节点可以存储数据,其中,数据存储于节点中的区块和/或账本中。例如,节点可以将交易数据存储在区块中。又例如,节点可以将执行智能合约的结果数据写入账本中。节点可以将存储的数据在众多其它节点上同步记录。在一些实施例中,节点可以通过查询账本中存储的数据,切换共识协议。

在一些实施例中,网络120可促进数据和/或信息的交换,数据或信息可以包括节点设备输入的数据内容、存储的数据内容等。在一些实施例中,自动切换区块链共识协议的系统中的一个或多个节点(例如,110-1、110-2、110-3、110-4、…)可通过网络120发送数据和/或信息给区块链系统中的其他节点。在一些实施例中,网络120可是任意类型的有线或无线网络。例如,网络120可包括缆线网络、有线网络、光纤网络、电信网络、内部网络、网际网络、区域网络(lan)、广域网络(wan)、无线区域网络(wlan)、都会区域网络(man)、公共电话交换网络(pstn)、蓝牙网络、zigbee网络、近场通讯(nfc)网络等或以上任意组合。在一些实施例中,网络120可包括一个或多个网络进出点。例如,网络120可包含有线或无线网络进出点,如基站和/或网际网络交换点120-1、120-2、…,通过这些进出点,自动切换区块链共识协议的系统中的若干个个节点可连接到网络120上以交换数据和/或信息。

用户终端指用户所使用的一个或多个终端设备或软件。在一些实施例中,使用用户终端的可以是一个或多个用户,可以包括直接使用服务的用户,也可以包括其他相关用户。在一些实施例中,用户终端与节点通过网络120相连。在一些实施例中,一个节点(例如,节点110-1、110-2等)对应一个或者多个用户终端(例如,用户终端130-1、130-2等)。在一些实施例中,用户终端可以是移动设备、平板计算机、膝上型计算机、台式计算机等其他具有输入和/或输出功能的设备中的一种或其任意组合。在一些实施例中,使用用户终端的用户可以通过发起调用能合约的交易请求,来实现自动切换共识协议。

在一些实施例中,为了切换区块链中的共识协议,可以在区块链中多个节点中的每一个(例如,节点110-1,110-2等)上部署自动切换区块链共识协议的系统。在一些实施例中,自动切换区块链共识协议的系统可以由记录模块、调用模块、执行模块和校验模块组成。

记录模块,用于接收与共识协议切换相关的交易请求,并基于交易请求调用共识协议切换的智能合约,将智能合约中共识协议切换的触发条件和目标共识协议的标识写入账本。关于记录模块的详细描述参见步骤210及其相关描述。

在一些实施例中,记录模块还用于当共识协议切换完成后,在账本中记录切换成目标共识协议的切换参数。在一些实施例中,记录模块还用于基于原始共识协议,对交易请求进行共识;当交易请求完成共识后,将共识协议切换的触发条件和目标共识协议的标识写入账本。在一些实施例中,原始共识协议为已经标准化的共识协议。

调用模块,用于根据账本判断当前环境是否满足共识协议切换的触发条件,当判断结果为满足时,调用目标共识协议。关于调用模块的详细描述参见步骤220及其相关描述。

在一些实施例中,当前环境至少反映以下一种或多种信息:当前区块的块高、当前时间、当前区块链中至少一个账户的账户金额、当前区块链中节点数量和当前区块链中至少一个节点对切换的投票结果。

在一些实施例中,当前环境包括当前区块链中至少一个节点对切换的投票结果,调用模块还用于:获取投票将所述原始共识协议切换为目标共识协议相关的投票交易请求;调用投票的智能合约,确定将原始共识协议切换为目标共识协议的投票结果;判断投票结果是否满足触发条件。

在一些实施例中,目标共识协议为已经标准化的共识协议,已经标准化的共识协议包括:创建模块,所述创建模块用于创建区块;填充模块,所述填充模块用于将交易填充至区块并完成区块的打包;广播模块,所述广播模块用于确定具有广播资格的节点,具有广播资格的节点将生成的区块广播给其他节点;验证模块,所述验证模块用于验证区块。

在一些实施例中,调用模块还用于:发起目标共识协议的调用请求,所述调用请求对应于所述创建模块、所述填充模块、所述广播模块和所述验证模块中一个或多个;基于至少一个接口,根据调用请求调用对应的模块,以及获取对应的模块执行的结果。

执行模块,用于基于目标共识协议执行交易的共识。关于执行模块的详细描述参见步骤230及其相关描述。

在一些实施例中,自动切换区块链共识协议的系统100还包括校验模块。

校验模块,用于在所述区块链中加入新节点,所述新节点对所述区块进行验证,包括:从所述新节点的账本中读取所述目标共识协议切换的切换参数;基于生成所述区块时的相关信息和所述切换参数,确定验证所述区块的共识协议。关于新节点对区块进行验证参见图6及其相关描述。

图2是根据本说明书一些实施例所示的自动切换区块链共识协议的方法的示例性流程图。在一些实施例中,该自动切换区块链共识协议的方法200可以由区块链的节点执行。如图2所示,该自动切换区块链共识协议的方法200可以包括:

步骤210,接收与共识协议切换相关的交易请求,并基于交易请求调用共识协议切换的智能合约,将智能合约中共识协议切换的触发条件和目标共识协议的标识写入账本。具体地,该步骤210可以由记录模块执行。

区块链是分布式、去中心化的数据库。共识协议是区块链交易(transaction)达成分布式共识的算法。在一些实施例中,共识协议可以包括但不限于:工作量证明(proofofwork,pow)、权益证明(proofofstate,pos)、权威证明(proof-of-authority,poa)拜占庭容错(byzantinefault-tolerant,bft)、实用拜占庭容错(practicalbyzantinefaulttolerance,pbft)、委托拜占庭容错(delegatedbyzantinefaulttolerance,dbft)等。例如,当有新的交易需要存储在区块链时,基于共识协议创建区块,并将新的交易写入创建的区块中,完成区块的打包后,确定具有广播资格的节点,由具有广播资格的节点将写入新交易的区块广播到其他节点,其他节点再基于共识协议对该区块进行验证,将通过验证的区块存储至区块链中。原始共识协议是在共识协议切换前,区块链节点遵循的规则。目标共识协议是在共识协议切换后,区块链节点遵循的规则。可以理解,共识协议切换是将区块链中所有节点遵循的规则从原始共识协议切换为目标共识协议。

共识协议切换的智能合约是部署在区块链系统中用于切换共识协议的代码。在一些实施例中,共识协议切换的智能合约至少包括目标共识协议的标识和共识协议切换的触发条件。

目标共识协议的标识可以用于表示目标共识协议的相关信息,例如,版本号、类型、特点等。在一些实施例中,目标共识协议的标识可以包括用于表示目标共识协议类别的编号。例如,1可以表示目标共识协议为工作量证明(proofofwork,pow),2可以表示目标共识协议为实用拜占庭容错(practicalbyzantinefaulttolerance,pbft),3表示目标共识协议为委托拜占庭容错(delegatedbyzantinefaulttolerance,dbft)。在一些实施例中,目标共识协议的标识还可以包括用于表示目标共识协议版本的版本号。例如,对于同一类别的目标共识协议,基于4次升级可以对应4个版本号:1.0、2.0、3.0和4.0。可以理解,通过将原始目标共识协议切换为同一类别、不同版本号的目标共识协议,基于方法200可以完成对区块链系统的升级。例如,原始共识协议的标识为2-3.0,目标共识协议的编号为2-4.0,表示将pbft的共识协议从3.0升级为4.0。

共识协议切换的触发条件是切换共识协议切换时,区块链需要满足的条件,可以理解的,共识协议切换的触发条件是区块链开始基于目标共识协议进行共识时,需要满足的条件。在一些实施例中,触发条件可以涉及一个或者多个方面的信息,例如,时间、块高、区块链中的账户金额、区块链用户的意愿或/和节点数量等。示例的,为了在区块链中存储新的交易,可以将以下一种或多种的组合作为触发条件:当前区块的块高等于或大于预设块高、当前时间不早于预设时间点、当前区块链中至少一个账户的账户金额超过或不超过预设金额(或者区块链中账户金额超过或不超过预设金额的账户数量或数量占比超过预设值)、当前区块链的节点数量超过预设值以及同意切换的节点数量或节点数量占比超过预设值等。其中,用户是否同意切换可以通过投票确定,即通过投票的智能合约执行次数确定。关于区块链中用户投票的更多细节参见后文。触发条件还可以根据需求涉及其他方向的信息,本实施例不做限制。

在一些实施例中,共识协议切换的智能合约可以存储在区块链的区块中。共识协议切换的智能合约存储在区块中的方式可以是多种,例如,共识协议切换的智能合约可以预置在区块链系统程序中,每加入一个新节点,可以自动将共识协议切换的智能合约加载到节点的区块中,也可以作为交易请求写入区块链的区块中,还可以预先存储在节点的账本中,本实施例不做限制。

触发智能合约调用和执行的条件可以是智能合约被外部交易调用,或者被其他智能合约调用。在一些实施例中,交易请求可以作为共识协议切换的智能合约调用或执行的条件。交易请求也可以是区块链节点接收到的、包含切换共识协议相关的请求。在一些实施例中,交易请求中可以包括共识协议切换的智能合约的存储地址,即节点可以通过地址获取共识协议切换的智能合约。

在一些实施例中,交易请求可以由用户(例如,用户通过用户终端)发起。对于区块链上某一节点而言,其接收到的交易请求,也可以由其他节点发起。关于交易请求的发起方式,本说明书不不作限制。

在一些实施例中,节点接收交易请求后,调用共识协议切换的智能合约,并在虚拟机中执行。可以理解的,共识协议切换的智能合约中包含了共识协议切换的触发条件,因此即使执行了共识协议切换的智能合约,共识协议并未真正切换。由于智能合约中共识协议的切换是基于共识协议切换的触发条件生效,并非智能合约执行后生效,共识协议切换的智能合约执行的结果与智能合约中记录的内容相同。

在一些实施例中,交易请求共识后,共识协议切换的触发条件和目标共识协议的标识可以被写入节点的账本。例如,共识协议切换的智能合约执行完毕,节点基于原始共识协议对交易请求共识后,共识协议切换的触发条件和目标共识协议的标识可以被写入节点的账本。

在一些实施例中,原始共识协议为已经标准化的共识协议。已经标准化的原始共识协议是将原始共识协议封装为多个模块的共识协议,且多个模块在执行相应功能时是基于原始共识协议。具体参见步骤220中对已经标准化的共识协议的介绍,以及图5中对通过接口调用已经标准化的共识协议的介绍,在此不再赘述。

示例地,如图3所示,一个共识协议切换的智能合约可以对应一个目标共识协议和共识协议切换的触发条件。例如,智能合约x对应的目标共识协议为共识协议2,共识协议切换的触发条件为块高为6。共识协议切换的智能合约调用并完成执行后,会存入节点的账本中。在一些实施例中,共识协议切换的智能合约在节点的账本中存储的顺序可以按交易请求接收到的时间顺序排列,例如,智能合约a对应的交易请求最先被接收到,其排在第一个;智能合约b对应的交易请求是第二个被接收到,其排在第二个;智能合约x是最新调用的,其排在最后。

在一些实施例中,节点可以按照排列的先后顺序读取共识协议切换的智能合约中共识协议切换的触发条件,为了保证每一个共识协议切换的智能合约中的目标共识协议能够真正生效,排在前面的智能合约中共识协议切换的触发条件达到的时间,要早于排在后面的智能合约中共识协议切换的触发条件达到的时间。例如,排在前面的智能合约中共识协议切换的触发条件中的块高要小于排在后面的智能合约中共识协议切换的触发条件中的块高。在一些实施例中,当不同的共识协议切换的智能合约中共识协议切换的触发条件相同时,可以按照对应的交易请求接收到的时间先后顺序确定切换为哪个共识协议切换的智能合约中的目标共识协议。例如,切换为时间在后对应的智能合约中的目标共识协议。可以理解的,在触发条件相同的目标共识协议中,选择切换为时间在后对应的智能合约中的目标共识协议,即可以用后发起的交易请求对应的目标共识协议替换先发起的交易请求对应的目标共识协议,从而实现替换或撤销先发起的交易请求对应的目标共识协议的效果。关于撤销或替换目标共识协议的详细描述可以参见步骤230,在此不再赘述。

步骤220,根据账本判断当前环境是否满足共识协议切换的触发条件,当判断结果为满足时,调用目标共识协议。具体地,该步骤220可以由调用模块执行。

如前所述,需要基于共识协议切换的智能合约中共识协议切换的触发条件确定是否切换到目标共识协议,即,判断当前环境是否满足切换智能合约中共识协议切换的触发条件,满足则说明切换真正生效,即,调用目标共识协议。不满足则继续调用原始共识协议。其中,共识协议切换的触发条件可以从节点的账本中读取。

当前环境可以指确定是否切换到目标共识协议时,区块链涉及的任何信息,例如,区块的信息、区块链节点的信息、区块链中账户的信息以及区块链的用户信息。在一些实施例中,当前环境至少反映以下一种或多种信息:当前区块的块高、当前时间、当前所述区块链中至少一个账户的账户金额、当前所述区块链中节点数量和当前所述区块链中至少一个节点对切换的投票结果。根据步骤210中对触发条件的说明,当前环境的类型与触发条件涉及的信息类型可以存在对应关系。因此,可以基于当前环境和触发条件,判断是否触发共识协议的切换,具体的,当前环境满足触发条件即可切换。例如,节点从节点的账本中获取的触发条件中预设块高为100,若当前块高也为100,则满足。又例如,节点从节点的账本中获取的触发条件中预设时间点为2021年1月1日00:00:00,若当前时间为2020年9月9日00:12:02,则不满足。又例如,节点从节点的账本中获取的触发条件为任意一个账户金额超过100万,若当前区块链中账户甲的账户金额为120万,则满足。其他触发条件以此类推,不再赘述。

如前所述,当前环境包括当前区块链中至少一个节点对切换的投票结果,相应地,触发条件可以是节点对切换共识协议的投票结果是否满足预设值。在一些实施例中,可以通过调用智能合约(即,投票的智能合约)来实现投票。具体的,节点可以获取投票将原始共识协议切换为目标共识协议相关的投票交易请求。投票交易请求可以触发投票的智能合约调用或执行,从而确定将原始共识协议切换为目标共识协议的投票结果。可以理解,当共识协议切换的智能合约中共识协议切换的触发条件涉及投票,则投票交易请求共识所用的共识协议为切换之前的共识协议,例如,原始共识协议。投票的智能合约调用和执行一次,作为一次投票。在一些实施例中,同一个节点多次调用投票的共识协议可以作为一次投票。在一些实施例中,可以基于投票的次数统计投票结果,例如,投票的数量(即,代表同意切换的节点数量)或投票的节点数量占所有节点数量的比例等。

在一些实施例中,目标共识协议可以是已经标准化的共识协议。已经标准化的共识协议是将共识协议封装成多个模块,其中,每个模块执行相应的功能,例如,已经标准化的目标共识协议是将目标共识协议封装为多个模块。通过执行所有模块可以完成共识过程,将区块存储在区块链中。在一些实施例中,已经标准化的共识协议包括:创建模块、填充模块、广播模块和验证模块,其中,创建模块用于创建区块,包括区块头和区块体(例如,创建存储交易的区块);填充模块用于将交易填充至区块并完成区块的打包,打包可以包括:将区块内的交易按照一定的数据结构(如,默克尔树、压缩前缀默克尔树)进行排列(例如,将交易填充至区块,并打包);广播模块用于确定具有广播资格的节点,具有广播资格的节点将其生成的区块广播给其他节点;验证模块用于验证区块。可以理解,还可以通过其他方式封装共识协议,例如,将创建模块和填充模块封装为一个模块等,本实施例不做限制。如图4所示,存储交易的区块为区块n(即,块高为n),节点a通过执行创建模块、填充模块和广播模块,将区块n广播给了其他节点,例如,节点b。进一步,其他节点通过验证模块对区块n进行验证。

示例性地,以原始共识协议为工作量证明,目标共识协议为实用拜占庭容错作为示例:

原始共识协议(工作量证明)的创建模块包括:多个节点在本地创建区块;填充模块包括:多个节点从交易池选择交易填充至区块,并完成区块的打包;广播模块包括:多个节点中计算出随机数的节点获取广播资格,具有广播资格的节点将其生成的区块广播给其他节点,其中,随机数要小于系统设置的目标值;以及验证模块包括:其他节点通过验证随机数是否小于目标值来验证该区块是都合法。

目标共识协议(实用拜占庭容错)的创建模块包括:轮值节点在本地创建区块,其中轮值节点是指节点基于规定的时间轮流作为具有广播资格的节点;填充模块包括:轮值节点从客户端或其他节点接收交易,填充至区块,并完成区块的打包;广播模块包括:轮值节点即具有广播资格的节点,轮值节点向其他节点发送区块;以及验证模块包括:其他节点收到区块后,对区块内容进行验证,并将自己的验证结果互相发送给其他节点,每一个节点收到其他节点的验证结果后,基于验证通过的验证结果数量,判断该区块最终是否通过验证。

在一些实施例中,区块链运行过程中,可以均基于已经标准化的共识协议进行共识,例如,已经标准化的目标共识协议,或已经标准化的原始共识协议。

关于节点基于已经标准化的共识协议进行共识的详细描述参见图5,在此不再赘述。

在一些实施例中,共识协议切换完成后,可以在账本中记录切换成目标共识协议的切换参数。

切换参数是指记录共识协议切换的信息。可以理解,切换参数代表切换成目标共识协议时区块链的相关信息。在一些实施例中,切换参数可以是切换成目标共识协议的时间或发生切换的区块的块高(即,基于已经标准化的目标共识协议共识的第一个区块的块高)。在一些实施例中,切换参数还可以是切换成目标共识协议时区块链中至少一个账户的账户金额、区块链中节点数量、区块链中至少一个节点对切换的投票结果等。其中,切换成目标共识协议的时间可以是基于目标共识协议进行共识的最开始时间,也可以是判断满足触发条件的时间等。例如,切换参数可以是:在2020年1月1日11:00切换成共识协议1。可以理解的,切换参数可以是任意形式,只要其代表了何时或何种情况切换成了哪个共识协议即可。

在一些实施例中,节点的账本还会记录切换的结果,即目标共识协议的标识。可以理解的,结合步骤210可知,从节点的账本中至少可以读取以下信息:当前使用的共识协议的标识、历史什么情况或时间下切换成何种目标共识协议、切换成不同目标共识协议的触发条件及该条件对应的目标共识协议的标识等。

如前所述,执行了共识协议切换的智能合约,共识协议并未真正切换。因此,在执行了共识协议切换的智能合约之后,共识协议真正切换为目标共识协议之前,可以用其他共识协议(以下称为修正共识协议)替换目标共识协议。可以理解的,通过上述方式,可以使得区块链不会切换为目标共识协议,相当于撤销了之前的切换请求。

在一些实施例中,可以通过再次发起交易请求将目标共识协议替换为修正共识协议。再次发起的交易请求调用的智能合约中至少包括修正共识协议的标识和共识协议切换的触发条件。值得注意的是,切换为修正共识协议的触发条件应该和切换为目标共识协议的触发条件相同才能实现替换。例如,切换目标共识协议的触发条件是预设块高为100,则切换修正共识协议的触发条件也应该是预设块高为100。如前所述,当不同的共识协议切换的智能合约的触发条件相同时,可以按照对应的交易请求接收的时间先后顺序确定切换为哪个智能合约中的目标共识协议。由此可见,因为包含修正共识协议的智能合约对应的交易请求后发起,因此切换为修正共识协议,实现了替换。

在一些实施例中,修正共识协议也可以是原始共识协议。可以理解,当修正共识协议是原始共识协议,满足触发条件时,节点仍基于原始共识协议进行操作,效果相当撤销切换到目标共识协议的请求。

步骤230,基于目标共识协议执行交易的共识。具体地,该步骤230可以由执行模块执行。

调用目标共识协议后,区块链中的节点基于目标共识协议执行交易的共识,即基于目标共识协议进行创建区块、填充区块、广播区块和验证区块等操作。关于创建区块、填充区块、广播区块和验证区块的相关描述可以参见步骤220,在此不再赘述。

例如,当前块高为100时,调用目标共识协议,节点基于目标共识协议先创建第100个区块,再将交易填充至第100个区块并完成打包,然后将第100个区块广播给其它节点,其他节点接收到第100个区块并通过验证后,完成第100个区块的共识,从而生成第100个区块。

在一些实施例中,节点可以基于已经标准化的目标共识协议执行交易的共识。具体地,节点基于至少一个接口,根据调用请求调用对应的模块,以及获取对应的模块执行的结果。节点可以基于已经标准化的目标共识协议执行交易的共识的详细描述参见图5,此处不再赘述。

图5是根据本说明书一些实施例所示的节点调用已经标准化的目标共识协议的示意图。

步骤510,发起目标共识协议的调用请求。

如前所述,可以将共识协议封装为已经标准化的共识协议,包括:创建模块、填充模块、广播模块和验证模块。调用请求是区块链节点为了获取执行已经标准化共识协议结果的请求。

在一些实施例中,调用请求对应于创建模块、填充模块、广播模块和验证模块中的一个或多个。例如,节点a需要将交易填充至创建的区块中,发起的调用请求m对应于创建模块和填充模块。又例如,区块链节点需要确定具有广播资格的节点及其发送的区块,区块链节点发起的请求n对应于广播模块。再例如,节点b对接收到的区块进行验证时,发起的调用请求t对应验证模块。

当切换为目标共识协议的触发条件满足,即可发起目标共识协议的调用请求。在一些实施例中,调用请求可以是节点发出。在一些实施例中,调用请求还可以是共识协议切换的智能合约发出。本实施例不做限制。

步骤520,基于至少一个接口,根据调用请求调用对应的模块,以及获取对应的模块执行的结果。

接口是调用请求和对应模块之间的连接。在一些实施例中,接口可以预先在接口配置信息中设置好不同的调用请求对应的模块。其中,调用请求可以包含调用的共识协议标识。例如,上述节点b调用验证模块的调用请求中,包含目标共识协议的标识1(共识协议类别号)-1.0(共识协议版本号)。接口配置信息可以至少包括:调用请求和模块的对应关系。在一些实施例中,调用请求和模块的对应关系可以通过模块的编号实现。具体地,可以基于调用请求中包含的目标共识协议的标识和调用的模块类型对模块进行编号。进一步地,接口可以基于调用请求中的目标共识协议的标识以及要调用的模块,查询模块的编号,并调用编号对应的模块。继续沿用上述示例,节点b调用的验证模块的编号为1-1.0(目标共识协议的标识)-y(模块类型),则接口根据“调用目标共识协议1-1.0的验证模块”的调用请求,在接口配置信息中查询到模块编号“1-1-1.0-y”,并调用编号“1-1-1.0-y”对应的模块。

在一些实施例中,节点可以向所有接口发送调用请求,收到调用请求的接口在配置信息中查询是否有与调用请求对应的模块,是则响应该调用请求,调用对应的模块;否则忽略该调用请求。

在一些实施例中,调用请求可以基于一个接口调用对应的一个模块。即接口与模块一一对应,如图5的第一个图所示,接口1、2、3和4分别与创建模块、填充模块、广播模块和验证模块对应。在一些实施例中,调用请求也可以基于一个接口调用对应的多个模块,即接口与模块为一对多的关系,如图5的第二个图所述,一个接口对应所有模块。

进一步地,接口可以获取对应模块执行的结果。可以理解的,当所有模块对应一个接口时,接口可以获取多个对应模块执行的多个结果。在一些实施例中,当所有模块对应一个接口时,接口可以获取多个对应模块执行的最终结果。例如,接口1调用创建模块和填充模块后,创建模块将执行的结果“区块”直接发送给填充模块,填充模块将执行的结果“打包好的区块”发送给接口1。

图6是根据本说明书一些实施例所示的新节点对区块链进行验证的方法600的示例性流程图。具体地,图6可以由验证模块执行。

在区块链系统中,可能会有新节点加入。新节点是指没有参与当前区块链系统中区块共识过程的节点。在一些实施例中,新节点可以从区块链中的已有节点获取区块,然后基于获取的区块生成新节点的账本,最后为了确认获取的区块没有被该节点篡改,需要对获取的区块进行验证。新节点的账本与已有节点的账本信息相同,同样包含切换参数。

可以理解,若生成新节点之前,区块链对共识协议进行过切换,则不同的区块可能基于不同的共识协议生成,因此需基于区块对应的共识协议进行验证。

具体地,方法600包括:

步骤610,从新节点的账本中读取目标共识协议切换的切换参数。

如前所述,新节点的账本信息包含切换参数,因此,新节点可以从新节点的账本中读取切换参数,可以获知什么情况或者时间切换为何种目标共识协议。

步骤620,基于生成所述区块时的相关信息和切换参数,确定验证所述区块的共识协议。

在一些实施例中,生成区块时的相关信息可以从新节点获取的区块、新节点的账本中读取。生成区块的相关信息参见图2及其相关描述。

新节点通过生成区块的相关信息可以获知生成区块的时间。基于切换参数也可以得到切换成目标共识协议的时间,若切换参数记录的是切换的时间,则直接读取即可,若切换参数记录的是切换的块高,则将该块高生成的时间作为切换成目标共识协议的时间即可。因此,通过生成区块的相关信息和切换参数,可以确定生成区块的时间是否不早于切换成目标共识协议的时间,进一步判断生成该区块时是否切换为了目标共识协议,确定是否用目标共识协议验证所述区块。可以理解的,不早于则用目标共识协议验证,否则用原始共识协议验证。示例的,切换参数包括:在2020年1月1日11:00切换成共识协议1,从生成区块a的相关信息中获知,交易写入区块a的时间为2020年1月1日11:01,则基于共识协议1对区块a进行验证。

在一些实施例中,新节点可以通过调用已经标准化的原始共识协议的标识或目标共识协议对应的验证模块,对该区块进行验证。

本说明书实施例还提供一种自动切换区块链共识协议的装置,包括处理器,所述处理器用于实现前述的自动切换区块链共识协议的方法。

本说明书实施例可能带来的有益效果包括但不限于:(1)通过共识协议切换的智能合约来实现共识协议的切换,可以在区块链不停止运行的情况下进行共识协议的切换;(2)将共识协议封装为多个模块,节点只需调用共识协议不同共识阶段对应模块的执行结果,从而任何共识协议在节点的共识过程均相同,进一步地实现区块链在变化的过程中(例如,节点数量增加或者公链中账户数据变化),也可以实现共识协议的切换;(3)切换参数写入账本,新加入的节点可以基于切换参数确定不同区块对应的共识协议,从而基于对应的共识协议对区块进行验证,使得本实施例的切换方法既可适用于联盟链,也可适用于公链;(4)通过在共识协议切换的智能合约中添加共识协议切换的触发条件,使得区块链可以根据运行环境(例如,时间或节点数量等)的改变,自动切换共识协议;(5)通过在共识协议切换的智能合约中添加共识协议切换的触发条件,使得执行共识协议切换的智能合约的时间与真正切换共识协议的时间不同,为共识协议切换预留了缓冲时间,使得区块链系统在缓冲时间内容可以撤销或改变切换共识协议,从而提高了系统的抗风险能力。需要说明的是,不同实施例可能产生的有益效果不同,在不同的实施例里,可能产生的有益效果可以是以上任意一种或几种的组合,也可以是其他任何可能获得的有益效果。

上文已对基本概念做了描述,显然,对于本领域技术人员来说,上述详细披露仅仅作为示例,而并不构成对本说明书的限定。虽然此处并没有明确说明,本领域技术人员可能会对本说明书进行各种修改、改进和修正。该类修改、改进和修正在本说明书中被建议,所以该类修改、改进、修正仍属于本说明书示范实施例的精神和范围。

同时,本说明书使用了特定词语来描述本说明书的实施例。如“一个实施例”、“一实施例”、和/或“一些实施例”意指与本说明书至少一个实施例相关的某一特征、结构或特点。因此,应强调并注意的是,本说明书中在不同位置两次或多次提及的“一实施例”或“一个实施例”或“一个替代性实施例”并不一定是指同一实施例。此外,本说明书的一个或多个实施例中的某些特征、结构或特点可以进行适当的组合。

此外,本领域技术人员可以理解,本说明书的各方面可以通过若干具有可专利性的种类或情况进行说明和描述,包括任何新的和有用的工序、机器、产品或物质的组合,或对他们的任何新的和有用的改进。相应地,本说明书的各个方面可以完全由硬件执行、可以完全由软件(包括固件、常驻软件、微码等)执行、也可以由硬件和软件组合执行。以上硬件或软件均可被称为“数据块”、“模块”、“引擎”、“单元”、“组件”或“系统”。此外,本说明书的各方面可能表现为位于一个或多个计算机可读介质中的计算机产品,该产品包括计算机可读程序编码。

计算机存储介质可能包含一个内含有计算机程序编码的传播数据信号,例如在基带上或作为载波的一部分。该传播信号可能有多种表现形式,包括电磁形式、光形式等,或合适的组合形式。计算机存储介质可以是除计算机可读存储介质之外的任何计算机可读介质,该介质可以通过连接至一个指令执行系统、装置或设备以实现通讯、传播或传输供使用的程序。位于计算机存储介质上的程序编码可以通过任何合适的介质进行传播,包括无线电、电缆、光纤电缆、rf、或类似介质,或任何上述介质的组合。

本说明书各部分操作所需的计算机程序编码可以用任意一种或多种程序语言编写,包括面向对象编程语言如java、scala、smalltalk、eiffel、jade、emerald、c++、c#、vb.net、python等,常规程序化编程语言如c语言、visualbasic、fortran2003、perl、cobol2002、php、abap,动态编程语言如python、ruby和groovy,或其他编程语言等。该程序编码可以完全在用户计算机上运行、或作为独立的软件包在用户计算机上运行、或部分在用户计算机上运行部分在远程计算机运行、或完全在远程计算机或处理设备上运行。在后种情况下,远程计算机可以通过任何网络形式与用户计算机连接,比如局域网(lan)或广域网(wan),或连接至外部计算机(例如通过因特网),或在云计算环境中,或作为服务使用如软件即服务(saas)。

此外,除非权利要求中明确说明,本说明书所述处理元素和序列的顺序、数字字母的使用、或其他名称的使用,并非用于限定本说明书流程和方法的顺序。尽管上述披露中通过各种示例讨论了一些目前认为有用的发明实施例,但应当理解的是,该类细节仅起到说明的目的,附加的权利要求并不仅限于披露的实施例,相反,权利要求旨在覆盖所有符合本说明书实施例实质和范围的修正和等价组合。例如,虽然以上所描述的系统组件可以通过硬件设备实现,但是也可以只通过软件的解决方案得以实现,如在现有的处理设备或移动设备上安装所描述的系统。

同理,应当注意的是,为了简化本说明书披露的表述,从而帮助对一个或多个发明实施例的理解,前文对本说明书实施例的描述中,有时会将多种特征归并至一个实施例、附图或对其的描述中。但是,这种披露方法并不意味着本说明书对象所需要的特征比权利要求中提及的特征多。实际上,实施例的特征要少于上述披露的单个实施例的全部特征。

一些实施例中使用了描述成分、属性数量的数字,应当理解的是,此类用于实施例描述的数字,在一些示例中使用了修饰词“大约”、“近似”或“大体上”来修饰。除非另外说明,“大约”、“近似”或“大体上”表明所述数字允许有±20%的变化。相应地,在一些实施例中,说明书和权利要求中使用的数值参数均为近似值,该近似值根据个别实施例所需特点可以发生改变。在一些实施例中,数值参数应考虑规定的有效数位并采用一般位数保留的方法。尽管本说明书一些实施例中用于确认其范围广度的数值域和参数为近似值,在具体实施例中,此类数值的设定在可行范围内尽可能精确。

针对本说明书引用的每个专利、专利申请、专利申请公开物和其他材料,如文章、书籍、说明书、出版物、文档等,特此将其全部内容并入本说明书作为参考。与本说明书内容不一致或产生冲突的申请历史文件除外,对本说明书权利要求最广范围有限制的文件(当前或之后附加于本说明书中的)也除外。需要说明的是,如果本说明书附属材料中的描述、定义、和/或术语的使用与本说明书所述内容有不一致或冲突的地方,以本说明书的描述、定义和/或术语的使用为准。

最后,应当理解的是,本说明书中所述实施例仅用以说明本说明书实施例的原则。其他的变形也可能属于本说明书的范围。因此,作为示例而非限制,本说明书实施例的替代配置可视为与本说明书的教导一致。相应地,本说明书的实施例不仅限于本说明书明确介绍和描述的实施。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1