1.本发明一般地涉及区块链技术领域。更具体地,本发明涉及一种用于对区块链中节点进行升级的方法、设备和计算机程序产品。
背景技术:2.本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述可包括可以探究的概念,但不一定是之前已经想到或者已经探究的概念。因此,除非在此指出,否则在本部分中描述的内容对于本技术的说明书和权利要求书而言不是现有技术,并且并不因为包括在本部分中就承认是现有技术。
3.联盟链是由多个联盟方节点组成的分布式网络系统,由于没有中心服务器,而且各个节点各自运行在自己的服务器上。因此,当区块链系统有版本更新需求(例如修复缺陷或者增加新的功能等需求)时,需要确保链上整体的同步更新,否则就可能出现区块链网络节点不一致的情况。
4.然而,现有技术通常需要节点运维工作人员手动更新节点,还需要各个节点的运行方通过线上或者线下的方式统一商定升级的时间窗口,然后统一更新节点程序。可以看出,现有节点升级技术不仅依赖于节点方运维人员,而且升级需要各个联盟方商定升级时间,使得整个升级过程局限性大且操作繁琐。
技术实现要素:5.为了至少解决上述背景技术部分所描述的技术问题,本发明提出了一种用于对区块链中节点进行升级的方案。利用本发明的方案无需引入过多人工干预,即可实现区块链中节点的动态升级。鉴于此,本发明在如下的多个方面提供解决方案。
6.本发明的第一方面提供了一种用于对区块链中节点进行升级的方法,其中所述区块链包括多个节点,所述方法包括在节点处执行以下操作:监听所述区块链上是否有关于升级节点版本的提案交易;以及响应于监听到所述提案交易,基于所述提案交易触发升级节点版本的操作。
7.在一个实施例中,其中所述节点处配置一用于监控节点运行状态的守护进程,其中通过所述守护进程执行监听所述提案交易并在触发升级节点版本过程中执行以下操作:根据所述提案交易完成新版本的更新;以及触发其监控的节点启用新版本中的预定功能。
8.在一个实施例中,其中根据所述提案交易完成新版本的更新包括:根据所述提案交易获取所述新版本;以及控制其监控的节点退出旧版本并启动所述新版本。
9.在一个实施例中,其中所述提案交易包括新版本的安装信息和校验信息,其中根据所述提案交易获取所述新版本包括:根据所述安装信息下载所述新版本;检测所述校验信息与预设基准信息是否匹配;以及响应于所述校验信息与所述预设基准信息匹配,确定获取到所述新版本。
10.在一个实施例中,其中控制其监控的节点退出旧版本且启动所述新版本包括:监
听所述区块链关于所述提案交易的投票是否通过;以及响应于监听到关于所述提案交易的投票通过,执行退出旧版本且启动所述新版本的操作。
11.在一个实施例中,其中所述新版本存储在升级目录中,且所述多个节点包括具有投票权限的目标节点,其中监听所述区块链关于所述提案交易的投票是否通过包括:监听所述区块链上目标节点是否对所述提案交易进行投票,其中所述目标节点在确定所述升级目录中存在所述新版本时执行所述投票操作;以及在监听到所述目标节点对所述提案交易进行投票后,确定监听到关于所述提案交易的投票通过。
12.在一个实施例中,其中所述提案交易还包括启用所述预定功能的标识信息,其中触发其监控的节点启用新版本中的预定功能包括:监听所述提案交易是否生效;监听所述区块链上当前落账的区块是否具有所述标识信息;以及响应于监听到所述提案交易生效且当前落账的区块具有所述标识信息,触发其监控的节点启用所述预定功能。
13.在一个实施例中,其中监听所述提案交易是否生效以及当前落账的区块是否具有所述标识信息包括:在监听到区块链上有区块落账时,通过预定回调函数判断所述提案交易是否生效以及当前落账的区块是否具有所述标识信息。
14.本发明的第二方面提供了一种设备,包括:处理器;以及存储器,其存储用于对区块链中节点进行升级的计算机指令,当所述计算机指令由所述处理器运行时,使得所述设备执行前文第一方面以及在下文多个实施例中所述的方法。
15.本发明的第三方面提供了一种计算机程序产品,包括用于对区块链中节点进行升级的程序指令,当所述程序指令由处理器执行时,使得实现前文第一方面以及在下文多个实施例中所述的方法。
16.利用本发明所提供的方案,通过监听到的关于升级节点版本的提案交易来触发对节点的版本升级操作,无需引入过多人工干预,即可实现对节点的动态升级。由此,本发明的方案可以有效克服现有区块链节点升级技术的局限性,并简化整个节点升级过程,从而确保区块链中节点能够及时按需更新。另外,在一些实施例中,对节点的升级包括新版本的更新和新版本中预定功能的触发启用,使得本发明的节点升级方案更加贴合实际升级需求。
附图说明
17.通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,并且相同或对应的标号表示相同或对应的部分,其中:
18.图1是示出根据本发明实施例的区块链网络的架构图;
19.图2是示出根据本发明实施例的用于对区块链中节点进行升级的一个方法的流程图;
20.图3是示出根据本发明实施例的用于对区块链中节点进行升级的另一方法的流程图;
21.图4是示出根据本发明实施例的用于对区块链中节点进行升级的再一方法的流程图;以及
22.图5是示出根据本发明实施例的区块链系统的结构图。
具体实施方式
23.下面将结合本发明实施方式中的附图,对本发明实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式是本发明一部分实施方式,而不是全部的实施方式。基于本发明中的实施方式,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。
24.应当理解,本发明的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本发明的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
25.还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施方式的目的,而并不意在限定本发明。如在本发明说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本发明说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
26.如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
[0027]
下面结合附图来详细描述本发明的具体实施方式。
[0028]
为了能够更好地理解本发明的方案,以下将结合图1对区块链进行简单说明。
[0029]
图1是示出根据本发明实施例的区块链的架构图100。该区块链可以包括多个节点(例如图1中的节点a、节点b、节点c和节点d),需要说明的是,图1所展示的节点仅是示例性说明,并不对区块链中节点的数量进行限制。前述的节点可以包括验证节点和非验证节点,其中验证节点可以理解为会参与交易共识的节点,而非验证节点并不参与交易共识,可用于转发交易和维护账本等。在一些实施例中,前述的区块链的节点程序中可以加入提案治理模块,该提案治理模块可以包含链上治理委员会。而该链上治理委员会可以由委员会节点组成。需要说明的是,这里的委员会节点可以理解为是验证节点中管理权限更高的部分节点,其可以发起提案(例如委员会节点变更、升级等提案)等。以下将重点介绍对该区块链中节点进行升级的方案。
[0030]
图2是示出根据本发明实施例的用于对区块链中节点进行升级的方法200的流程图。需要说明的是,该区块链可以包括多个节点,可以在有升级需求的节点处执行图2中所示的步骤。这里的有升级需求的节点可以根据设计和应用需求来确定,例如可以针对每个节点,或者仅针对部分节点。可以理解的是,这里的区块链和节点可以具有与前文结合图1所描述的区块链和节点相同的通用属性,并且通过本发明的方案得到进一步性能优化和提升。
[0031]
如图2所示,在步骤s201处,可以监听区块链上是否有关于升级节点版本的提案交易。在一些实施场景中,在区块链上的节点有升级需求时(例如节点中存在缺陷或者需要增加功能等),可以通过区块链中的节点来发起前述的提案交易。在一个实施例中,可以通过前述的任一验证节点来发布该提案交易。可替换地,在另一个实施例中,还可以通过前述的
委员会节点来发起该提案交易。需要说明的是,这里对提案交易的发起过程的描述仅是示例性说明,本发明的方案并不受此限制。
[0032]
接着,在步骤s202处,响应于监听到前述的提案交易,可以基于该提案交易触发升级节点版本的操作。在一些实施例中,前述的提案交易中可以包含程序新版本的相关信息(例如版本号、链接地址等)。通过该提案交易来触发对节点的升级操作,整个过程无需引入过多人工干预,可以有效克服现有区块链节点升级技术的局限性,并且简化整个节点升级过程。
[0033]
图3是示出根据本发明实施例的用于对区块链中节点进行升级的方法300的流程图。需要说明的是,方法300可以理解为是图2中方法200的一种可能的示例性描述以及进一步补充。这里的区块链可以包括多个节点,可以在有升级需求的节点处配置一用于监控节点运行状态的守护进程。需要说明的是,这里的区块链和节点可以具有与前文结合图1和图2所描述的区块链和节点相同的通用属性,因此前文结合图1和图2所描述的细节同样适用于下文。
[0034]
如图3所示,在步骤s301处,可以通过前述的守护进程监听区块链上是否有关于升级节点版本的提案交易。在一些实施例中,该守护进程可以与其监控的节点之间进行通信,例如可以通过与该节点的通信来监听区块链上的提案交易。如前所述,该提案交易可以由区块链上的任一验证节点或委员会节点发起。
[0035]
接着,在步骤s302处,可以根据前述的提案交易完成新版本的更新。其中,新版本的更新可以涉及对新版本的获取以及控制守护进程监控的节点退出旧版本并启动该新版本。具体地,在一些实施例中,前述的提案交易中可以包括安装信息(例如版本号、链接地址等信息)和校验信息(例如程序hash值等)。由此,可以通过该安装信息下载新版本,然后检测校验信息与预设基准信息是否匹配,在校验信息与预设基准信息匹配时确定获取到前述的新版本。通过校验信息对下载的新版本进行校验来判断新版本是否被损坏(例如被恶意篡改),可以有效规避受损版本带来的风险,从而提高区块链系统的安全性。
[0036]
在一些实施例中,在完成对前述的新版本的获取之后,可以监听区块链关于提案交易的投票是否通过,以及在监听到关于提案交易的投票通过时,执行退出旧版本且启动新版本的操作。具体地,区块链中的节点可以包括具有投票权限的目标节点(例如任一验证节点或委员会节点)。在获取到前述的新版本之后,可以存储在升级目录中。目标节点在确定该升级目录中存在新版本时执行投票操作,守护进程可以通过其监控的节点来监听并解析区块链上的区块和投票交易。该守护进程在确定当前有目标节点投票赞成时,可以通过信号将原有节点进程退出并且将升级后的节点程序运行起来。本发明的方案中目标节点在确定升级目录有新版本才执行投票操作,可以有效避免升级过程的一些误操作(例如发起对未知版本的投票等)。
[0037]
接着,在步骤s303处,可以触发其监控的节点启用新版本中的预定功能。在一些实施例中,前述的提案交易还可以包括启用预定功能的标识信息(例如区块号或区块时间戳)。具体地,可以监听前述的提案交易是否生效。例如,守护进程监听到区块链上超过预定数量的验证节点或委员会节点通过对该提案交易的投票时,可以确定该提案交易生效。接着,可以监听区块链上当前落账的区块是否具有标识信息(例如具有前述的区块号或区块时间戳),并在监听到提案交易生效且当前落账的区块具有标识信息时,触发其监控的节点
启用预定功能。至此,完成升级节点版本的操作。需要说明的是,这里对预定功能的触发的描述仅是示例性说明,本发明的方案并不受此限制。例如,在具体实施时,可以通过预定回调函数(例如isactive函数)来判断提案交易是否生效以及当区块是否具有前述的区块号或区块时间戳。
[0038]
图4是示出根据本发明实施例的用于对区块链中节点进行升级的方法400的流程图。可以理解的是,方法400可以是图2和图3中方法的一种可能的应用实例。因此,前文结合图1至图3中相关的细节描述同样也适用于下文。
[0039]
如图4所示,区块链中的节点程序中可以加入提案治理模块,还可以在区块落账时加入时间通知模块,以及可以增加一个独立的守护进程。该守护进程可以与节点通信,节点会将已经落账的区块当作事件通知给守护程序,守护程序同时也负责节点启动停止等外围工作。而提案治理模块,如前所述,可以包含链上治理委员会。治理委员会由验证节点组成,委员会节点可以发起提案和对提案投票。例如,发起的提案可以包括委员会节点升级等。
[0040]
在区块链中的节点有升级需求时,例如节点当前版本为1.0.0,由于节点中存在某种缺陷,需要通过升级节点解决问题,开发者开发出了1.0.1版本解决了缺陷。节点的版本号可以通过硬编码的方式写入到了节点的源代码当中,然后通过节点与守护进程之间的交互实现节点版本的升级。
[0041]
具体地,在节点侧:
[0042]
在步骤s401处,可以通过委员会节点在链上发起一笔提案交易。该提案交易的类型为升级节点,具体可以包含程序获取链接、版本号、程序hash值以及触发升级的区块号。需要说明的是,这里对提案交易的描述仅是示例性的,例如还有用区块时间戳来代替区块号等。
[0043]
在守护进程侧:
[0044]
在步骤s402处,守护进程可以获取链上的区块和交易信息。当守护进程判断交易为升级提案时,会自动获取链接下载新版本的程序,并判断程序hash值是否一致,然后在确定一致时放到升级目录中与版本号对应的目录(例如upgrade目录)。
[0045]
在节点侧:
[0046]
在步骤s403处,委员会节点可以获取节点管理员发起的投票交易。委员会节点管理员可以对提案进行投票,例如节点管理员可以向自身的委员会节点发起投票交易。接着,在步骤s404处,委员会节点验证管理员身份,如果验证通过,则通知守护进程。否则,直接返回失败。然后,委员会节点会检查升级目录,若升级程序不存在,则返回失败。如果节点程序存在,则委员会节点可以用自己的私钥对提案进行签名投赞成票。
[0047]
在守护进程侧:
[0048]
在步骤s405处,守护进程通过解析区块和交易,判断出当前委员会节点已经投票,则通过信号将原有进程退出并且将升级后的节点程序运行起来。
[0049]
需要说明的是,前述的节点虽然已经更新,但是新的功能暂时并未启用。而触发新功能启用的条件有两个:一是提案得到了多数委员会节点的投票通过;二是区块号已经到了提案中定义的功能生效的区块号,则新功能会生效。在实际应用时,可以通过“版本更新表”数据结构的设计来实现。具体地,该数据结构中主要包含当前节点的版本号、版本号的hash值以及是否被启用。而开发者可以在代码更新的地方通过if语句来判断当前版本是否
已经生效以及新功能或者缺陷修复的代码逻辑。例如if(vt(“v_1_0_1”).isactive()==true){...},该代码表示当前版本是1.0.1并且已经生效时,才能执行后续的代码逻辑。
[0050]
在一些实施例中,提案经过多数委员会节点投票后,提案通过并将链上提案的状态变更为已通过。当区块链落账时,会判断当前区块号是否已经达到提案生效区块号,并在确定已到达提案生效区块号时,将版本更新表中对应提案的版本设置为激活状态。至此新版本的功能才会启用,即前文例子的isactive()才会返回true。在实际应用时,该功能的实现可以通过在区块落账时,增加一个回调函数来负责判断提案是否生效以及变更版本更新表中版本是否启用的值。由此,本发明的方案可以通过链上治理和守护进程来实现区块链节点的动态升级,无需统一时间窗口以及运维人员同时操作等,有效简化了节点升级操作。
[0051]
图5是示出根据本发明实施例的区块链系统500的示意框图。该区块链系统500可以包括根据本发明实施例的设备501以及其外围设备和外部网络,该设备501中可安装区块链的节点程序,和/或监督该节点程序的守护进程。如前所述,该设备501可以实现关于升级节点版本的提案交易的监听以及触发升级节点版本的操作等,以实现前述结合图2至图4所述的本发明的方案。
[0052]
如图5中所示,设备501可以包括cpu5011,其可以是通用cpu、专用cpu或者其他信息处理以及程序运行的执行单元。进一步,设备501还可以包括大容量存储器5012和只读存储器rom 5013,其中大容量存储器5012可以配置用于存储各类数据以及区块链所需的各种程序,rom5013可以配置成存储对于设备501的加电自检、系统中各功能模块的初始化、系统的基本输入/输出的驱动程序及引导操作系统所需的数据。
[0053]
进一步,设备501还包括其他的硬件平台或组件,例如示出的tpu(tensor processing unit,张量处理单元)5014、gpu(graphic processing unit,图形处理器)5015、fpga(field programmable gate array,现场可编程逻辑门阵列)5016和mlu(memory logic unit),存储器逻辑单元)5017。可以理解的是,尽管在设备501中示出了多种硬件平台或组件,但这里仅仅是示例性的而非限制性的,本领域技术人员可以根据实际需要增加或移除相应的硬件。例如,设备501可以仅包括cpu作为公知硬件平台和另一硬件平台作为本发明的测试硬件平台。
[0054]
本发明的设备501还包括通信接口5018,从而可以通过该通信接口5018连接到局域网/无线局域网(lan/wlan)505,进而可以通过lan/wlan连接到本地服务器506或连接到因特网(“internet”)507。替代地或附加地,本发明的设备501还可以通过通信接口5018基于无线通信技术直接连接到因特网或蜂窝网络,例如基于第三代(“3g”)、第四代(“4g”)或第5代(“5g”)的无线通信技术。此外,设备501还可以根据需求与外部设备508和509通信。
[0055]
设备501的外围设备可以包括显示装置502、输入装置503以及数据传输接口504。在一个实施例中,显示装置502可以例如包括一个或多个扬声器和/或一个或多个视觉显示器。输入装置503可以包括例如键盘、鼠标、麦克风、姿势捕捉相机,或其他输入按钮或控件,其配置用于接收数据的输入或用户指令。数据传输接口504可以包括例如串行接口、并行接口或通用串行总线接口(“usb”)、小型计算机系统接口(“scsi”)、串行ata、火线(“firewire”)、pci express和高清多媒体接口(“hdmi”)等,其配置用于与其他设备或系统的数据传输和交互。
[0056]
本发明的设备501的上述cpu 5011、大容量存储器5012、只读存储器rom 5013、tpu 5014、gpu 5015、fpga 5016、mlu 5017和通信接口5018可以通过总线5019相互连接,并且通过该总线与外围设备实现数据交互。在一个实施例中,通过该总线5019,cpu 5011可以控制设备501中的其他硬件组件及其外围设备。
[0057]
在工作中,本发明的设备501的处理器cpu 5011可以通过输入装置503或数据传输接口504获取关于升级节点版本的提案交易,并调取存储于存储器5012中的计算机程序指令或代码对获取到的提案交易进行处理,以便基于所述提案交易触发升级节点版本的操作。。
[0058]
从上面关于本发明模块化设计的描述可以看出,本发明的系统可以根据应用场景或需求进行灵活地布置而不限于附图所示出的架构。进一步,还应当理解,本发明示例的执行操作的任何模块、单元、组件、服务器、计算机或设备可以包括或以其他方式访问计算机可读介质,诸如存储介质、计算机存储介质或数据存储设备(可移除的)和/或不可移动的)例如磁盘、光盘或磁带。计算机存储介质可以包括以用于存储信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质,例如计算机可读指令、数据结构、程序模块或其他数据。基于此,本发明也公开了一种计算机可读存储介质,其上存储有用于对区块链中节点进行升级的计算机可读指令,该计算机可读指令被一个或多个处理器执行时,实现在前结合附图所描述的方法和操作。
[0059]
虽然本说明书已经示出和描述了本发明的多个实施方式,但对于本领域技术人员显而易见的是,这样的实施方式是仅以示例的方式提供的。本领域技术人员在不偏离本发明思想和精神的情况下想到许多更改、改变和替代的方式。应当理解在实践本发明的过程中,可以采用本文所描述的本发明实施方式的各种替代方案。所附权利要求书旨在限定本发明的保护范围,并因此覆盖这些权利要求范围内的模块组成、等同或替代方案。