具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。术语“第一”、“第二”、“第三”、“第四”等仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、装置、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本申请的各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
实施例一
图1是本发明实施例提供的区块链节点热升级方法的流程图。所述区块链节点热升级方法应用于计算机设备。所述区块链节点热升级方法用于对区块链系统中的至少一个区块链节点进行热升级。所述计算机设备可以是区块链系统中的节点,也可以不是区块链系统中的节点。所述计算机设备与区块链系统中的一个或多个节点通信连接。根据不同的需求,该流程图中步骤的顺序可以改变,某些步骤可以省略。
参阅1所示,所述区块链节点热升级方法具体包括以下步骤:
101,将目标功能模块从区块链程序中抽离出来编译成初始版本的动态库。
所述目标功能模块是预先选择的,优选的,可以选择所述区块链程序中更新频率较高的功能模块,例如交易池、虚拟机、P2P等功能模块。所述区块链程序的主程序中保留比较底层的、不太会更新的功能模块。
例如,区块链程序中的交易池(mempool)经常需要进行更新,将交易池这个功能模块从区块链程序中抽离出来编译成初始版本的动态库mempool.0.0.1.so,mempool.0.0.1.so对应的版本号为0.0.1。
102,在对区块链的创世块进行初始化时,将所述初始版本的动态库对应的初始版本号写入所述创世块中,使得区块链节点在初次启动所述区块链程序时,根据所述创世块中的所述初始版本号加载所述初始版本的动态库。
例如,在对区块链的创世块进行初始化时,将交易池的初始版本的动态库mempool.0.0.1.so对应的版本号0.0.1写入所述创世块中。区块链节点在初次启动所述区块链程序时,根据所述创世块中的所述初始版本号加载交易池的初始版本的动态库mempool.0.0.1.so。
需要说明的是,区块链由多个相连的区块构成,每个区块记录了一段时间内区块链系统中的交易情况。第一个被构建的区块称为创世块,创世块拥有一个唯一的ID标识号。
103,当需要对所述目标功能模块进行更新时,将更新后的目标功能模块编译成更新版本的动态库。
例如,当需要对交易池进行更新时,将更新后的交易池编译成更新版本的动态库,如mempool.0.0.2.so,该更新版本的动态库对应的新版本号是0.0.2。
104,构造一笔用于更新所述目标功能模块的交易并传播所述交易,所述交易携带所述更新版本的动态库对应的新版本号和生效高度,使得所述区块链节点获取所述交易,获取与所述新版本号对应的所述更新版本的动态库,在所述生效高度加载所述更新版本的动态库。
所述传播所述交易包括:
将所述交易广播给所述区块链节点;或者
将所述交易打包进入区块,所述区块经区块链系统共识后链入区块链中。
所述生效高度是所述更新后的目标功能模块要生效的区块高度。
区块高度是区块链接在主链的个数,也就是连接在区块链上的块数。区块高度指明区块在区块链中的位置。
例如,在当前区块高度为100时构造一笔用于更新交易池的交易,将所述更新交易池的交易广播给所述区块链节点,所述更新交易池的交易携带的新版本号为0.0.2,生效高度为200。
计算机设备可以将所述交易发送给一个区块链节点,通过所述区块链节点将所述交易广播给所有的区块链节点。
若所述交易被打包进入区块,所述区块经区块链系统共识后链入区块链中,则区块链节点同步已通过区块链系统共识的区块,解析所述区块以获取所述交易。
区块链节点获取与所述新版本号对应的所述目标功能模块的更新版本的动态库,在所述生效高度加载所述更新版本的动态库,从而实现对所述区块链程序的热更新。例如,区块链节点获取与新版本号0.0.2对应的更新版本的动态库mempoo.0.0.2.so,在生效高度200加载该更新版本的动态库mempoo.0.0.2.so。
区块链节点可以通过多种方式获取与所述新版本号对应的所述目标功能模块的更新版本的动态库。例如,所述交易携带有更新版本的动态库的地址,区块链节点按照该地址下载更新版本的动态库。又如,区块链节点主动监控是不是有更新版本的动态库,发现有更新版本的动态库就主动下载该更新版本的动态库。
优选的,计算机设备可以生成所述更新版本的动态库的索引信息,将所述索引信息发送给区块链节点。区块链节点根据所述索引信息可以获取所述更新版本的动态库。
在一实施例中,区块链节点接收到所述交易后,验证所述交易是否合法,若所述交易合法,则根据所述交易中携带的所述更新版本的动态库对应的新版本号和生效高度加载所述更新版本的动态库。
所述验证所述交易是否合法包括:
判断所述交易携带的新版本号是否高于所述区块链节点的所述目标功能模块的当前版本号;和/或
判断所述交易携带的生效高度是否高于当前区块高度;和/或
判断所述交易的签名是否有效。
若所述交易携带的新版本号高于所述区块链节点的所述目标功能模块的当前版本号,和/或所述交易携带的生效高度高于当前区块高度,和/或所述交易的签名有效,则确定所述交易合法。
所述区块链节点可以记录所述目标功能模块的当前版本号,每次重新加载动态库就更新所述目标功能模块的当前版本号。例如,当加载交易池的初始版本的动态库mempool.0.0.1.so时,记录交易池的当前版本号为0.0.1。当加载交易池的更新版本的动态库mempoo.0.0.2.so时,更新交易池的当前版本号为0.0.2。因此,根据记录的所述目标功能模块的当前版本号,可以判断所述交易携带的新版本号是否高于该当前版本号。
若所述交易不合法,则可以不加载更新版本的动态库。
实施例一的区块链节点热升级方法将目标功能模块从区块链程序中抽离出来编译成初始版本的动态库;在对区块链的创世块进行初始化时,将所述初始版本的动态库对应的初始版本号写入所述创世块中,使得区块链节点在初次启动所述区块链程序时,根据所述创世块中的所述初始版本号加载所述初始版本的动态库;当需要对所述目标功能模块进行更新时,将更新后的目标功能模块编译成更新版本的动态库;构造一笔用于更新所述目标功能模块的交易并传播所述交易,所述交易携带所述更新版本的动态库对应的新版本号和生效高度,使得所述区块链节点获取所述交易,获取与所述新版本号对应的所述更新版本的动态库,在所述生效高度加载所述更新版本的动态库。所述区块链节点热升级方法实现了区块链程序的热升级,避免了由于区块链程序升级造成区块链节点的服务中断,以及避免了依赖该区块链节点的其他服务的中断。
在另一实施例中,所述将所述交易广播给所述区块链节点之前,所述方法还包括:
对所述区块链节点进行认证。
若所述区块链节点通过认证,则将所述交易广播给所述区块链节点。否则,若所述区块链节点未通过认证,则不将所述交易广播给所述区块链节点。
对所述区块链节点进行认证可以包括:根据所述区块链节点的私钥的签名对所述区块链节点进行认证。
可以预先对每个区块链节点生成公私钥对或公钥基础设施(Public KeyInfrastructure,PKI)证书(内含公钥)和私钥,私钥保存在区块链节点上,公钥或PKI证书公开给认证系统及其它区块链节点。
对所述区块链节点进行认证还可以包括:根据所述区块链节点的硬件令牌芯片对所述区块链节点进行认证。
根据所述区块链节点的硬件令牌芯片对所述区块链节点进行认证包括:
(1)通过所述区块链节点中的硬件令牌芯片运算得到第一认证信息。
所述通过所述硬件令牌芯片运算得到第一认证信息包括:
获取所述区块链节点的启动时间;
采用预先存储的密码算法对所述启动时间及随机数进行运算,得到所述第一认证信息。
所述随机数是所述硬件令牌芯片使用专门算法生成的一个不可预测的数字。由于在第一认证信息中加入了时间、随机数等不确定因素,第一认证信息则只能被使用一次,使得攻击者无法通过窃取口令或重放攻击来获取第一认证信息,因而通过硬件令牌芯片运算得到的第一认证信息安全性较高。
区块链系统的认证服务器在接收到认证请求时,产生一个随机数,采用相同的密码算法进行密码运算,通过比对所产生的随机数与接收到的认证请求中的随机数是否相同,来确定所述认证请求是否有效。若所述认证服务器比对所产生的随机数与接收到的认证请求中的随机数相同,确定所述认证请求有效。若所述认证服务器比对所产生的随机数与接收到的认证请求中的随机数不相同,确定所述认证请求无效。
(2)生成包含有所述第一认证信息的第二认证信息。
在一实施例中,所述生成包含有所述第一认证信息的第二认证信息包括:
获取预先存储的目标字段,其中,所述目标字段包括通信协议;
根据消息标准规定的结构对所述目标字段及所述第一认证信息进行封装生成所述第二认证信息。
所述目标字段可以包括但不限于:消息版本号、认证目的、计算机设备标识、计算机的网际协议(Internet Protocol Address,IP)地址、计算机的媒体访问控制(MediaAccess Control Address,MAC)地址及通信协议等。
(3)根据预设格式对所述第二认证信息进行编码。
对所述第二认证信息进行编码可以包括对所述第二认证信息进行压缩或者加密。
(4)发送携带有编码后的第二认证信息的认证请求至区块链系统中的认证服务器。
(5)接收所述认证服务器对所述认证请求进行验证后返回的认证结果。
若所述认证服务器验证所述认证请求合法时,则确认所述区块链节点为可信节点,并向所述区块链节点返回区块链节点认证成功的认证结果。若所述认证服务器验证所述认证请求非法时,则确认所述区块链节点为不可信节点,并向所述区块链节点返回区块链节点认证失败的认证结果。
所述认证服务器对所述认证请求进行验证取决于令牌算法,比如基于公钥基础设施(Public Key Infrastructure,PKI)技术的KEY的令牌、基于质询/响应的令牌及基于动态口令的令牌等。具体验证方法属于现有技术,在此不再赘述。
实施例二
图2是本发明另一实施例提供的区块链节点热升级方法的流程图。所述区块链节点热升级方法应用于区块链节点。所述区块链节点热升级方法用于对区块链中的至少一个区块链节点进行热升级。根据不同的需求,该流程图中步骤的顺序可以改变,某些步骤可以省略。
所述区块链节点可以是桌上型计算机、笔记本、掌上电脑及云端服务器等。
参阅2所示,所述区块链节点热升级方法具体包括以下步骤:
201,在初次启动区块链程序时,根据创世块中目标功能模块的动态库的初始版本号加载所述目标功能模块的初始版本的动态库。
目标功能模块是所述区块链程序中会进行更新的功能模块,例如交易池、虚拟机、P2P等功能模块。
区块链节点可以与计算机设备通信连接。计算机设备预先将目标功能模块从区块链程序中抽离出来编译成初始版本的动态库。所述目标功能模块是预先选择的,优选的,可以选择所述区块链程序中更新频率较高的功能模块,例如交易池、虚拟机、P2P等功能模块。所述区块链程序的主程序中保留比较底层的、不太会更新的功能模块。
例如,区块链程序中的交易池(mempool)经常需要进行更新,将交易池这个功能模块从区块链程序中抽离出来编译成初始版本的动态库mempool.0.0.1.so,mempool.0.0.1.so对应的版本号为0.0.1。
需要说明的是,区块链由多个相连的区块构成,每个区块记录了一段时间内区块链系统中的交易情况。第一个被构建的区块称为创世块,创世块拥有一个唯一的ID标识号。
计算机设备可以在对区块链的创世块进行初始化时,将所述初始版本的动态库对应的初始版本号写入所述创世块中。例如,计算机设备在对区块链的创世块进行初始化时,将交易池的初始版本的动态库mempool.0.0.1.so对应的版本号0.0.1写入所述创世块中。区块链节点在初次启动所述区块链程序时,根据所述创世块中的所述初始版本号加载交易池的初始版本的动态库mempool.0.0.1.so。
202,获取用于更新所述目标功能模块的交易,所述交易携带所述目标功能模块的更新版本的动态库对应的新版本号和生效高度。
所述生效高度是所述更新后的目标功能模块要生效的区块高度。
区块高度是区块链接在主链的个数,也就是连接在区块链上的块数。区块高度指明区块在区块链中的位置。
计算机设备可以构造所述交易,将所述交易广播给所述区块链节点。所述区块链节点接收所述交易。
例如,在当前区块高度为100时,计算机设备构造一笔用于更新交易池的交易,将所述更新交易池的交易广播给所述区块链节点,所述更新交易池的交易携带的新版本号为0.0.2,生效高度为200。
计算机设备可以将所述交易发送给一个区块链节点,通过所述区块链节点将所述交易广播给所有的区块链节点。
或者,计算机设备可以将所述交易打包进区块,验证人节点验证通过后,区块入链。
在一实施例中,所述获取用于更新所述目标功能模块的交易包括:
同步已通过区块链系统共识的区块,解析所述区块以获取用于更新所述目标功能模块的交易。
203,获取所述目标功能模块的更新版本的动态库。
当需要对所述目标功能模块进行更新时,计算机设备将更新后的目标功能模块编译成更新版本的动态库。区块链节点获取所述目标功能模块的更新版本的动态库。
例如,当需要对交易池进行更新时,计算机设备将更新后的交易池编译成更新版本的动态库,如mempool.0.0.2.so,区块链节点获取更新版本的动态库mempool.0.0.2.so。
区块链节点可以通过多种方式获取与所述新版本号对应的所述目标功能模块的更新版本的动态库。例如,所述交易携带有更新版本的动态库的地址,区块链节点按照该地址下载更新版本的动态库。又如,区块链节点主动监控是不是有更新版本的动态库,发现有更新版本的动态库就主动下载该更新版本的动态库。
优选的,计算机设备可以生成所述更新版本的动态库的索引信息,将所述索引信息发送给区块链节点。区块链节点根据所述索引信息可以获取所述更新版本的动态库。
在一实施例中,所述区块链节点在获取到所述交易后,验证所述交易是否合法,若所述交易合法,则执行204,在所述生效高度加载所述更新版本的动态库。
所述验证所述交易是否合法包括:
判断所述交易携带的新版本号是否高于所述区块链节点的所述目标功能模块的当前版本号;和/或
判断所述交易携带的生效高度是否高于当前区块高度;和/或
判断所述交易的签名是否有效。
若所述交易携带的新版本号高于所述区块链节点的所述目标功能模块的当前版本号,和/或所述交易携带的生效高度高于当前区块高度,和/或所述交易的签名有效,则确定所述交易合法。
所述区块链节点可以记录所述目标功能模块的当前版本号,每次重新加载动态库就更新所述目标功能模块的当前版本号。例如,当加载交易池的初始版本的动态库mempool.0.0.1.so时,记录交易池的当前版本号为0.0.1。当加载交易池的更新版本的动态库mempoo.0.0.2.so时,更新交易池的当前版本号为0.0.2。因此,根据记录的所述目标功能模块的当前版本号,可以判断所述交易携带的新版本号是否高于该当前版本号。
若所述交易不合法,则可以舍弃所述交易,流程结束。
204,在所述生效高度加载所述更新版本的动态库。
所述区块链节点在所述生效高度加载所述更新版本的动态库,从而实现对所述区块链程序的热更新。例如,所述区块链节点在生效高度200加载更新版本的动态库mempoo.0.0.2.so。
实施例二的区块链节点热升级方法应用于区块链节点,所述方法在初次启动区块链程序时,根据创世块中目标功能模块的动态库的初始版本号加载所述目标功能模块的初始版本的动态库;获取用于更新所述目标功能模块的交易,所述交易携带所述目标功能模块的更新版本的动态库对应的新版本号和生效高度;在所述生效高度加载所述更新版本的动态库。所述区块链节点热升级方法实现了区块链程序的热升级,避免了由于区块链程序升级造成区块链节点的服务中断,以及避免了依赖该区块链节点的其他服务的中断。
实施例三
图3为本发明实施例提供的区块链节点热升级装置的结构图。所述区块链节点热升级装置30应用于计算机设备。所述区块链节点热升级装置30用于对区块链系统中的至少一个区块链节点进行热升级。所述计算机设备可以是区块链系统中的节点,也可以不是区块链系统中的节点。所述计算机设备与区块链系统中的一个或多个节点通信连接。
如图3所示,所述区块链节点热升级装置30可以包括:第一编译单元301、写入单元302、第二编译单元303、构造单元304。
第一编译单元301,用于将目标功能模块从区块链程序中抽离出来编译成初始版本的动态库。
所述目标功能模块是预先选择的,优选的,可以选择所述区块链程序中更新频率较高的功能模块,例如交易池、虚拟机、P2P等功能模块。所述区块链程序的主程序中保留比较底层的、不太会更新的功能模块。
例如,区块链程序中的交易池(mempool)经常需要进行更新,将交易池这个功能模块从区块链程序中抽离出来编译成初始版本的动态库mempool.0.0.1.so,mempool.0.0.1.so对应的版本号为0.0.1。
写入单元302,用于在对区块链的创世块进行初始化时,将所述初始版本的动态库对应的初始版本号写入所述创世块中,使得区块链节点在初次启动所述区块链程序时,根据所述创世块中的所述初始版本号加载所述初始版本的动态库。
例如,在对区块链的创世块进行初始化时,将交易池的初始版本的动态库mempool.0.0.1.so对应的版本号0.0.1写入所述创世块中。区块链节点在初次启动所述区块链程序时,根据所述创世块中的所述初始版本号加载交易池的初始版本的动态库mempool.0.0.1.so。
需要说明的是,区块链由多个相连的区块构成,每个区块记录了一段时间内区块链系统中的交易情况。第一个被构建的区块称为创世块,创世块拥有一个唯一的ID标识号。
第二编译单元303,用于当需要对所述目标功能模块进行更新时,将更新后的目标功能模块编译成更新版本的动态库。
例如,当需要对交易池进行更新时,将更新后的交易池编译成更新版本的动态库,如mempool.0.0.2.so,该更新版本的动态库对应的新版本号是0.0.2。
构造单元304,用于构造一笔用于更新所述目标功能模块的交易并传播所述交易,所述交易携带所述更新版本的动态库对应的新版本号和生效高度,使得所述区块链节点获取所述交易,获取与所述新版本号对应的所述更新版本的动态库,在所述生效高度加载所述更新版本的动态库。
所述传播所述交易包括:
将所述交易广播给所述区块链节点;或者
将所述交易打包进入区块,所述区块经区块链系统共识后链入区块链中。
所述生效高度是所述更新后的目标功能模块要生效的区块高度。
区块高度是区块链接在主链的个数,也就是连接在区块链上的块数。区块高度指明区块在区块链中的位置。
例如,在当前区块高度为100时构造一笔用于更新交易池的交易,将所述更新交易池的交易广播给所述区块链节点,所述更新交易池的交易携带的新版本号为0.0.2,生效高度为200。
计算机设备可以将所述交易发送给一个区块链节点,通过所述区块链节点将所述交易广播给所有的区块链节点。
若所述交易被打包进入区块,所述区块经区块链系统共识后链入区块链中,则区块链节点同步已通过区块链系统共识的区块,解析所述区块以获取所述交易。
区块链节点获取与所述新版本号对应的所述目标功能模块的更新版本的动态库,在所述生效高度加载所述更新版本的动态库,从而实现对所述区块链程序的热更新。例如,区块链节点获取与新版本号0.0.2对应的更新版本的动态库mempoo.0.0.2.so,在生效高度200加载该更新版本的动态库mempoo.0.0.2.so。
区块链节点可以通过多种方式获取与所述新版本号对应的所述目标功能模块的更新版本的动态库。例如,所述交易携带有更新版本的动态库的地址,区块链节点按照该地址下载更新版本的动态库。又如,区块链节点主动监控是不是有更新版本的动态库,发现有更新版本的动态库就主动下载该更新版本的动态库。
优选的,计算机设备可以生成所述更新版本的动态库的索引信息,将所述索引信息发送给区块链节点。区块链节点根据所述索引信息可以获取所述更新版本的动态库。
在一实施例中,区块链节点接收到所述交易后,验证所述交易是否合法,若所述交易合法,则根据所述交易中携带的所述更新版本的动态库对应的新版本号和生效高度加载所述更新版本的动态库。
所述验证所述交易是否合法包括:
判断所述交易携带的新版本号是否高于所述区块链节点的所述目标功能模块的当前版本号;和/或
判断所述交易携带的生效高度是否高于当前区块高度;和/或
判断所述交易的签名是否有效。
若所述交易携带的新版本号高于所述区块链节点的所述目标功能模块的当前版本号,和/或所述交易携带的生效高度高于当前区块高度,和/或所述交易的签名有效,则确定所述交易合法。
所述区块链节点可以记录所述目标功能模块的当前版本号,每次重新加载动态库就更新所述目标功能模块的当前版本号。例如,当加载交易池的初始版本的动态库mempool.0.0.1.so时,记录交易池的当前版本号为0.0.1。当加载交易池的更新版本的动态库mempoo.0.0.2.so时,更新交易池的当前版本号为0.0.2。因此,根据记录的所述目标功能模块的当前版本号,可以判断所述交易携带的新版本号是否高于该当前版本号。
若所述交易不合法,则可以不加载更新版本的动态库。
实施例三的区块链节点热升级装置30将目标功能模块从区块链程序中抽离出来编译成初始版本的动态库;在对区块链的创世块进行初始化时,将所述初始版本的动态库对应的初始版本号写入所述创世块中,使得区块链节点在初次启动所述区块链程序时,根据所述创世块中的所述初始版本号加载所述初始版本的动态库;当需要对所述目标功能模块进行更新时,将更新后的目标功能模块编译成更新版本的动态库;构造一笔用于更新所述目标功能模块的交易并传播所述交易,所述交易携带所述更新版本的动态库对应的新版本号和生效高度,使得所述区块链节点获取所述交易,获取与所述新版本号对应的所述更新版本的动态库,在所述生效高度加载所述更新版本的动态库。所述区块链节点热装置30方法实现了区块链程序的热升级,避免了由于区块链程序升级造成区块链节点的服务中断,以及避免了依赖该区块链节点的其他服务的中断。
在另一实施例中,所述区块链节点热装置30还包括:
认证单元,用于在将所述交易广播给所述区块链节点之前,对所述区块链节点进行认证。
若所述区块链节点通过认证,则所述构造单元304将所述交易广播给所述区块链节点。否则,若所述区块链节点未通过认证,则不将所述交易广播给所述区块链节点。
对所述区块链节点进行认证可以包括:根据所述区块链节点的私钥的签名对所述区块链节点进行认证。
可以预先对每个区块链节点生成公私钥对或公钥基础设施(Public KeyInfrastructure,PKI)证书(内含公钥)和私钥,私钥保存在区块链节点上,公钥或PKI证书公开给认证系统及其它区块链节点。
对所述区块链节点进行认证还可以包括:根据所述区块链节点的硬件令牌芯片对所述区块链节点进行认证。
根据所述区块链节点的硬件令牌芯片对所述区块链节点进行认证包括:
(1)通过所述区块链节点中的硬件令牌芯片运算得到第一认证信息。
所述通过所述硬件令牌芯片运算得到第一认证信息包括:
获取所述区块链节点的启动时间;
采用预先存储的密码算法对所述启动时间及随机数进行运算,得到所述第一认证信息。
所述随机数是所述硬件令牌芯片使用专门算法生成的一个不可预测的数字。由于在第一认证信息中加入了时间、随机数等不确定因素,第一认证信息则只能被使用一次,使得攻击者无法通过窃取口令或重放攻击来获取第一认证信息,因而通过硬件令牌芯片运算得到的第一认证信息安全性较高。
区块链系统的认证服务器在接收到认证请求时,产生一个随机数,采用相同的密码算法进行密码运算,通过比对所产生的随机数与接收到的认证请求中的随机数是否相同,来确定所述认证请求是否有效。若所述认证服务器比对所产生的随机数与接收到的认证请求中的随机数相同,确定所述认证请求有效。若所述认证服务器比对所产生的随机数与接收到的认证请求中的随机数不相同,确定所述认证请求无效。
(2)生成包含有所述第一认证信息的第二认证信息。
在一实施例中,所述生成包含有所述第一认证信息的第二认证信息包括:
获取预先存储的目标字段,其中,所述目标字段包括通信协议;
根据消息标准规定的结构对所述目标字段及所述第一认证信息进行封装生成所述第二认证信息。
所述目标字段可以包括但不限于:消息版本号、认证目的、计算机设备标识、计算机的网际协议(Internet Protocol Address,IP)地址、计算机的媒体访问控制(MediaAccess Control Address,MAC)地址及通信协议等。
(3)根据预设格式对所述第二认证信息进行编码。
对所述第二认证信息进行编码可以包括对所述第二认证信息进行压缩或者加密。
(4)发送携带有编码后的第二认证信息的认证请求至区块链系统中的认证服务器。
(5)接收所述认证服务器对所述认证请求进行验证后返回的认证结果。
若所述认证服务器验证所述认证请求合法时,则确认所述区块链节点为可信节点,并向所述区块链节点返回区块链节点认证成功的认证结果。若所述认证服务器验证所述认证请求非法时,则确认所述区块链节点为不可信节点,并向所述区块链节点返回区块链节点认证失败的认证结果。
所述认证服务器对所述认证请求进行验证取决于令牌算法,比如基于公钥基础设施(Public Key Infrastructure,PKI)技术的KEY的令牌、基于质询/响应的令牌及基于动态口令的令牌等。具体验证方法属于现有技术,在此不再赘述。
实施例四
图4为本发明另一实施例提供的区块链节点热升级装置的结构图。所述区块链节点热升级装置40应用于区块链节点。所述区块链节点热升级装置40用于对区块链系统中至少一个区块链节点进行热升级。
如图4所示,所述区块链节点热升级装置40可以包括:第一加载单元401、第一获取单元402、第二获取单元403、第二加载单元404。
第一加载单元401,用于在初次启动区块链程序时,根据创世块中目标功能模块的动态库的初始版本号加载所述目标功能模块的初始版本的动态库。
目标功能模块是所述区块链程序中会进行更新的功能模块,例如交易池、虚拟机、P2P等功能模块。
区块链节点可以与计算机设备通信连接。计算机设备预先将目标功能模块从区块链程序中抽离出来编译成初始版本的动态库。所述目标功能模块是预先选择的,优选的,可以选择所述区块链程序中更新频率较高的功能模块,例如交易池、虚拟机、P2P等功能模块。所述区块链程序的主程序中保留比较底层的、不太会更新的功能模块。
例如,区块链程序中的交易池(mempool)经常需要进行更新,将交易池这个功能模块从区块链程序中抽离出来编译成初始版本的动态库mempool.0.0.1.so,mempool.0.0.1.so对应的版本号为0.0.1。
需要说明的是,区块链由多个相连的区块构成,每个区块记录了一段时间内区块链系统中的交易情况。第一个被构建的区块称为创世块,创世块拥有一个唯一的ID标识号。
计算机设备可以在对区块链的创世块进行初始化时,将所述初始版本的动态库对应的初始版本号写入所述创世块中。例如,计算机设备在对区块链的创世块进行初始化时,将交易池的初始版本的动态库mempool.0.0.1.so对应的版本号0.0.1写入所述创世块中。区块链节点在初次启动所述区块链程序时,根据所述创世块中的所述初始版本号加载交易池的初始版本的动态库mempool.0.0.1.so。
第一获取单元402,用于获取用于更新所述目标功能模块的交易,所述交易携带所述目标功能模块的更新版本的动态库对应的新版本号和生效高度。
所述生效高度是所述更新后的目标功能模块要生效的区块高度。
区块高度是区块链接在主链的个数,也就是连接在区块链上的块数。区块高度指明区块在区块链中的位置。
计算机设备可以构造所述交易,将所述交易广播给所述区块链节点。所述区块链节点接收所述交易。
例如,在当前区块高度为100时,计算机设备构造一笔用于更新交易池的交易,将所述更新交易池的交易广播给所述区块链节点,所述更新交易池的交易携带的新版本号为0.0.2,生效高度为200。
计算机设备可以将所述交易发送给一个区块链节点,通过所述区块链节点将所述交易广播给所有的区块链节点。
或者,计算机设备可以将所述交易打包进区块,验证人节点验证通过后,区块入链。
在一实施例中,所述获取用于更新所述目标功能模块的交易包括:
同步已通过区块链系统共识的区块,解析所述区块以获取用于更新所述目标功能模块的交易。
第二获取单元403,用于获取所述目标功能模块的更新版本的动态库。
当需要对所述目标功能模块进行更新时,计算机设备将更新后的目标功能模块编译成更新版本的动态库。区块链节点获取所述目标功能模块的更新版本的动态库。
例如,当需要对交易池进行更新时,计算机设备将更新后的交易池编译成更新版本的动态库,如mempool.0.0.2.so,区块链节点获取更新版本的动态库mempool.0.0.2.so。
区块链节点可以通过多种方式获取与所述新版本号对应的所述目标功能模块的更新版本的动态库。例如,所述交易携带有更新版本的动态库的地址,区块链节点按照该地址下载更新版本的动态库。又如,区块链节点主动监控是不是有更新版本的动态库,发现有更新版本的动态库就主动下载该更新版本的动态库。
优选的,计算机设备可以生成所述更新版本的动态库的索引信息,将所述索引信息发送给区块链节点。区块链节点根据所述索引信息可以获取所述更新版本的动态库。
在一实施例中,所述区块链节点在获取到所述交易后,验证所述交易是否合法。
所述验证所述交易是否合法包括:
判断所述交易携带的新版本号是否高于所述区块链节点的所述目标功能模块的当前版本号;和/或
判断所述交易携带的生效高度是否高于当前区块高度;和/或
判断所述交易的签名是否有效。
若所述交易携带的新版本号高于所述区块链节点的所述目标功能模块的当前版本号,和/或所述交易携带的生效高度高于当前区块高度,和/或所述交易的签名有效,则确定所述交易合法。
所述区块链节点可以记录所述目标功能模块的当前版本号,每次重新加载动态库就更新所述目标功能模块的当前版本号。例如,当加载交易池的初始版本的动态库mempool.0.0.1.so时,记录交易池的当前版本号为0.0.1。当加载交易池的更新版本的动态库mempoo.0.0.2.so时,更新交易池的当前版本号为0.0.2。因此,根据记录的所述目标功能模块的当前版本号,可以判断所述交易携带的新版本号是否高于该当前版本号。
若所述交易不合法,则可以舍弃所述交易。
第二加载单元404,用于在所述生效高度加载所述更新版本的动态库。
所述区块链节点在所述生效高度加载所述更新版本的动态库,从而实现对所述区块链程序的热更新。例如,所述区块链节点在生效高度200加载更新版本的动态库mempoo.0.0.2.so。
实施例四的区块链节点热升级装置40应用于区块链节点,所述区块链节点热升级装置40在初次启动区块链程序时,根据创世块中目标功能模块的动态库的初始版本号加载所述目标功能模块的初始版本的动态库;获取用于更新所述目标功能模块的交易,所述交易携带所述目标功能模块的更新版本的动态库对应的新版本号和生效高度;在所述生效高度加载所述更新版本的动态库。所述区块链节点热升级装置40实现了区块链程序的热升级,避免了由于区块链程序升级造成区块链节点的服务中断,以及避免了依赖该区块链节点的其他服务的中断。
实施例五
本实施例提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述区块链节点热升级方法实施例中的步骤,例如图1所示的101-104或者图2所示的201-204。
实施例六
图5为本发明实施例提供的计算机设备的示意图。所述计算机设备5包括存储器50、处理器51、总线53以及存储在所述存储器50中并可在所述处理器51上运行的计算机程序52。所述处理器51执行所述计算机程序52时实现上述区块链节点热升级方法实施例一中的步骤,例如图1所示的101-104。或者,所述处理器51执行所述计算机程序52时实现上述装置实施例三中各模块/单元的功能,例如图3中的单元301-304。
示例性的,所述计算机程序52可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器50中,并由所述处理器51执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序52在所述计算机设备5中的执行过程。
所述计算机设备5可以是PC(Personal Computer,个人电脑),也可以是智能手机、平板电脑、掌上电脑、便携计算机、智能路由器、矿机、网络存储设备等终端设备。
所称处理器51可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器51也可以是任何常规的处理器等,所述处理器51是所述计算机设备5的控制中心,利用各种接口和线路连接整个计算机设备5的各个部分。
所述存储器50可用于存储所述计算机程序52和/或模块/单元,所述处理器51通过运行或执行存储在所述存储器50内的计算机程序和/或模块/单元,以及调用存储在存储器50内的数据,实现所述计算机设备5的各种功能。所述存储器50可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据计算机设备5的使用所创建的数据。此外,存储器50可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(SmartMedia Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件。
所述总线53以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。所述总线53可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
进一步地,计算机设备5还可以包括网络接口,网络接口可选的可以包括有线接口和/或无线接口(如WI-FI接口、蓝牙接口等),通常用于在该计算机设备5与其他电子设备之间建立通信连接。
可选地,该计算机设备5还可以包括用户接口,用户接口可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在计算机设备5中处理的信息以及用于显示可视化的用户界面。
本领域技术人员可以理解,所述示意图5仅仅是计算机设备5的示例,并不构成对计算机设备5的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件。
实施例七
图6为本发明实施例提供的区块链节点的示意图。所述区块链节点6包括存储器60、处理器61、总线63以及存储在所述存储器60中并可在所述处理器61上运行的计算机程序62。所述处理器61执行所述计算机程序62时实现上述区块链节点热升级方法实施例二中的步骤,例如图2所示的201-204。或者,所述处理器61执行所述计算机程序62时实现上述装置实施例四中各模块/单元的功能,例如图4中的401-404。
示例性的,所述计算机程序62可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器60中,并由所述处理器61执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序62在所述区块链节点6中的执行过程。
所述区块链节点6可以是PC(Personal Computer,个人电脑),也可以是智能手机、平板电脑、掌上电脑、便携计算机、智能路由器、矿机、网络存储设备等终端设备。
本领域技术人员可以理解,所述示意图5仅仅是区块链节点6的示例,并不构成对区块链节点6的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令。在计算机设备上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机设备可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。