专利名称:一种区块链节点热重启的方法及装置
专利类型:发明专利
专利申请号:CN202110904098.3
专利申请(专利权)人:深圳前海微众银行股份有限公司
权利人地址:广东省深圳市前海深港合作区前湾一路1号A栋201室
专利发明(设计)人:黎宁,刘明臻,周禄,张开翔,范瑞彬,何硕彦
专利摘要:本发明公开了一种区块链节点热重启的方法及装置,包括:重启节点确定执行共识任务的第i层处于重启状态时,向代理节点发送第i代理请求;所述第i代理请求用于指示所述代理节点完成所述第i层对应的子任务;执行共识任务的各层包括网络层、共识层和执行层;所述重启节点获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果;所述重启节点若确定执行共识任务的第i+1层处于重启状态,则向代理节点发送第i+1代理请求;所述第i+1代理请求用于指示所述代理节点完成所述第i+1层对应的子任务,直至完成所述共识任务,从而减少热重启节点的共识耗时,提升共识效率。
主权利要求:
1.一种区块链节点热重启的方法,其特征在于,包括:
重启节点确定执行共识任务的第i层处于重启状态时,向代理节点发送第i代理请求;
所述第i代理请求用于指示所述代理节点完成所述第i层对应的子任务;执行共识任务的各层包括网络层、共识层和执行层;
所述重启节点获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果;
所述重启节点若确定执行共识任务的第i+1层处于重启状态,则向代理节点发送第i+1代理请求;所述第i+1代理请求用于指示所述代理节点完成所述第i+1层对应的子任务,直至完成所述共识任务。
2.如权利要求1所述的方法,其特征在于,所述重启节点获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果之前,还包括:所述重启节点记录所述第i代理请求的处理状态为未处理;并将第i代理请求缓存至请求队列;
所述重启节点获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果之后,还包括:所述重启节点在所述请求队列中,将所述第i代理请求的处理状态更新为处理成功。
3.如权利要求2所述的方法,其特征在于,所述方法还包括:所述重启节点在确定网络层重启完成时,将处理状态为处理成功的网络层对应的代理请求中的交易缓存至所述重启节点的交易池,并清空所述请求队列中网络层对应的代理请求。
4.如权利要求1所述的方法,其特征在于,重启节点确定执行共识任务的第i层处于重启状态时,向代理节点发送第i代理请求,包括:重启节点确定所述第i层为网络层,则通过与所述代理节点之间的长连接向所述代理节点发送第一代理请求;所述第一代理请求包括客户端发送的第一交易;所述第一代理请求用于指示所述代理节点广播所述第一交易;
所述重启节点获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果,包括:所述重启节点获取所述代理节点反馈的针对所述网络层对应的子任务的第一执行结果;所述第一执行结果用于确定第一交易验证通过;
所述重启节点根据所述第一执行结果,更新请求队列中所述第一代理请求的信息。
5.如权利要求1所述的方法,其特征在于,重启节点确定执行共识任务的第i层处于重启状态时,向代理节点发送第i代理请求,包括:重启节点确定所述第i层为共识层,则通过与所述代理节点之间的长连接向所述代理节点发送第二代理请求;所述第二代理请求用于指示所述代理节点确定并广播待上链区块的第一消息包;
所述重启节点获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果,包括:所述重启节点获取所述代理节点反馈的针对所述共识层对应的子任务的第一消息包及第一代理指示;所述第一代理指示用于其他共识节点确定所述代理节点有效;
所述重启节点生成针对所述第一代理指示的第二代理指示;所述第二代理指示用于其他共识节点确定所述代理节点发送的第一代理指示有效;
所述重启节点将所述第二代理指示广播至其他共识节点;
所述重启节点获取所述代理节点反馈的针对所述共识层对应的子任务的第二执行结果;所述第二执行结果用于确定所述待上链区块有效;
所述重启节点根据所述第二执行结果,更新请求队列中所述第二代理请求的信息。
6.如权利要求5所述的方法,其特征在于,所述第一代理指示为所述代理节点根据所述重启节点发送至所述代理节点的随机数进行的签名数据。
7.如权利要求1所述的方法,其特征在于,重启节点确定执行共识任务的第i层处于重启状态时,向代理节点发送第i代理请求,包括:所述重启节点确定所述i层为执行层,则通过与所述代理节点之间的长连接向所述代理节点发送第三代理请求;所述第三代理请求用于指示所述代理节点返回待上链区块中各交易的执行结果;
所述重启节点获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果,包括:所述重启节点获取所述代理节点反馈的针对所述执行层对应的子任务的第三执行结果;所述第三执行结果用于指示所述待上链区块中各交易的交易结果;
所述重启节点根据所述第三执行结果,更新所述待上链区块。
8.如权利要求1所述的方法,其特征在于,重启节点确定执行共识任务的第i层处于重启状态之前,还包括:所述重启节点获取重启指令;所述重启指令包括至少一个代理节点的地址;
根据所述至少一个代理节点的地址确定代理节点,并与所述代理节点建立长连接。
9.一种区块链节点热重启的方法,其特征在于,包括:
代理节点获取重启节点发送的第i代理请求;所述第i代理请求是所述重启节点确定执行共识任务的第i层处于重启状态时发送的;执行共识任务的各层包括网络层、共识层和执行层;
所述代理节点根据所述第i代理请求得到第i层对应的子任务,确定所述第i层对应的子任务的执行结果;
所述代理节点获取所述重启节点发送的第i+1代理请求,并根据所述第i+1代理请求得到第i+1层对应的子任务,确定所述第i+1层对应的子任务的执行结果;所述第i+1代理请求是所述重启节点确定执行共识任务的第i+1层处于重启状态时发送的;直至所述重启节点完成所述共识任务。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行权利要求1至8或权利要求9任一项所述的方法。 说明书 : 一种区块链节点热重启的方法及装置技术领域[0001] 本发明涉及金融科技(Fintech)领域,尤其涉及一种区块链节点热重启的方法及装置。背景技术[0002] 随着计算机技术的发展,越来越多的技术(例如:区块链、云计算或大数据)应用在金融领域,传统金融业正在逐步向金融科技转变,大数据技术也不例外,但由于金融、支付行业的安全性、实时性、效率等要求,也对大数据技术中区块链节点热重启提出了更高的要求。[0003] 目前,在区块链的共识过程中,共识节点轮流出块,每一轮共识仅有一个节点打包区块,例如,由A共识节点确定待上链区块的交易,由其他共识节点验证该交易,具体的包括如下步骤:[0004] 1、A共识节点生成第一消息包,并将第一消息包发送给其他共识节点;其中,第一消息包包括A共识节点交易池中第一区块的第一交易、区块高、视图编号、序号和消息摘要等信息;其中,第一区块为待上链区块。[0005] 2、其他共识节点根据第一消息包,在自身的交易池确定第一交易对应的第二交易,生成第二区块以及第二区块对应的第一签名包,并将第一代理指示包进行广播;其中,第一签名包包括第二区块中各第二交易的交易结果等信息。[0006] 3、针对任一共识节点,共识节点获取其他共识节点广播的第一签名包,根据其他共识节点的第一代理指示包验证自身的第一签名包,验证通过后,广播第一签名包;第一签名包括第二交易、视图编号、序号、等信息。[0007] 4、共识节点获取其他共识节点广播的第一签名包,根据其他共识节点的第二代理指示包验证自身的第一签名包,验证通过后,将第二区块写入区块链。[0008] 然而,若是在上述过程中,若负责打包区块的A共识节点发生了热重启,则A共识节点会结束进程并重新启动,在A共识节点完成重启后,从其他共识节点同步区块号、视图编号等信息,在同步完成后再参与共识与出块,导致区块链网络共识异常。[0009] 现有技术中节点热重启是指网络层、共识层、执行层和基础层等多层结构的依次重启,耗时长,导致热重启影响了区块链共识效率,因此,现需要一种针对于热重启的共识方法,减少热重启节点的共识耗时,提升共识效率。发明内容[0010] 本发明实施例提供一种区块链节点热重启的方法及装置,用于减少热重启节点的共识耗时,提升共识效率。[0011] 第一方面,本发明实施例提供一种区块链节点热重启的方法,包括:[0012] 重启节点确定执行共识任务的第i层处于重启状态时,向代理节点发送第i代理请求;所述第i代理请求用于指示所述代理节点完成所述第i层对应的子任务;执行共识任务的各层包括网络层、共识层和执行层;[0013] 所述重启节点获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果;[0014] 所述重启节点若确定执行共识任务的第i+1层处于重启状态,则向代理节点发送第i+1代理请求;所述第i+1代理请求用于指示所述代理节点完成所述第i+1层对应的子任务,直至完成所述共识任务。[0015] 上述技术方案中,重启节点针对网络层、共识层或执行层的重启状态,确定对应的代理请求,并将代理请求发送至代理节点,从而使代理节点代替重启节点的网络层、共识层或执行层执行对应的共识任务,以此减少了等待重启节点重启后执行共识任务的时间,减少了热重启节点的共识耗时,提升了共识效率。[0016] 可选的,所述重启节点获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果之前,还包括:[0017] 所述重启节点记录所述第i代理请求的处理状态为未处理;并将第i代理请求缓存至请求队列;[0018] 所述重启节点获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果之后,还包括:[0019] 所述重启节点在所述请求队列中,将所述第i代理请求的处理状态更新为处理成功。[0020] 上述技术方案中,代理请求中的信息包括处理状态,通过处理状态来反映代理请求的正确与否,或状态结果,以便后续在针对网络层、共识层或执行层重启完成后,同步对应层的子任务的执行结果,以减少重启节点同步区块链数据的时间,从而减少了热重启节点的共识耗时,提升了共识效率。[0021] 可选的,所述重启节点在确定网络层重启完成时,将处理状态为处理成功的网络层对应的代理请求中的交易缓存至所述重启节点的交易池,并清空所述请求队列中网络层对应的代理请求。[0022] 上述技术方案中,针对网络层重启完成时,通过将请求队列中代理请求的交易缓存至交易池,从而减少了重启节点网络层同步交易信息的时间,提升了共识效率;且根据处理状态来确定交易的准确性和合法性,保证重启节点网络层同步数据的准确性。[0023] 可选的,重启节点确定执行共识任务的第i层处于重启状态时,向代理节点发送第i代理请求,包括:[0024] 重启节点确定所述第i层为网络层,则通过与所述代理节点之间的长连接向所述代理节点发送第一代理请求;所述第一代理请求包括客户端发送的第一交易;所述第一代理请求用于指示所述代理节点广播所述第一交易;[0025] 所述重启节点获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果,包括:[0026] 所述重启节点获取所述代理节点反馈的针对所述网络层对应的子任务的第一执行结果;所述第一执行结果用于确定第一交易验证通过;[0027] 所述重启节点根据所述第一执行结果,更新请求队列中所述第一代理请求的信息。[0028] 上述技术方案中,在重启节点获取客户端发送的第一交易之后,需要将第一交易进行广播至区块链网络中,但重启节点在确定网络层处于重启状态时,也就是说网络层的功能无法使用,即无法广播第一交易,则通过长连接将第一交易发送至代理节点,由代理节点验证第一交易的合法性和准确性,从而进行广播,以此减少了节点热重启时,等待重启节点重启后广播第一交易的时间,从而减少了热重启节点的共识耗时,提升了共识效率。[0029] 可选的,重启节点确定执行共识任务的第i层处于重启状态时,向代理节点发送第i代理请求,包括:[0030] 重启节点确定所述第i层为共识层,则通过与所述代理节点之间的长连接向所述代理节点发送第二代理请求;所述第二代理请求用于指示所述代理节点确定并广播待上链区块的第一消息包;[0031] 所述重启节点获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果,包括:[0032] 所述重启节点获取所述代理节点反馈的针对所述共识层对应的子任务的第一消息包及第一代理指示;所述第一代理指示用于其他共识节点确定所述代理节点有效;[0033] 所述重启节点生成针对所述第一代理指示的第二代理指示;所述第二代理指示用于其他共识节点确定所述代理节点发送的第一代理指示有效;[0034] 所述重启节点将所述第二代理指示广播至其他共识节点;[0035] 所述重启节点获取所述代理节点反馈的针对所述共识层对应的子任务的第二执行结果;所述第二执行结果用于确定所述待上链区块有效;[0036] 所述重启节点根据所述第二执行结果,更新请求队列中所述第二代理请求的信息。[0037] 上述技术方案中,重启节点作为需要打包区块的节点时,需要通过共识层来选择交易,从而打包待上链区块,但重启节点在确定共识层处于重启状态时,也就是说共识层的功能无法使用,即无法打包、广播和共识区块,则向代理节点发送第二代理请求,以使代理节点代替重启节点确定待上链区块已经对应的第一消息包;以此减少了等待重启节点重启后打包待上链区块以及生成第一消息包的时间,减少了热重启节点的共识耗时,提升了共识效率。[0038] 为了保证代理节点的安全性,重启节点会生成针对第一代理指示的第二代理指示,并将第二代理指示广播至区块链系统,以使其他共识节点根据第二代理指示验证第一代理指示,从而确定代理节点是否合法,保证了通过代理节点代替重启节点执行网络层、共识层和执行层对应的子任务的安全性和准确性。[0039] 可选的,所述第一代理指示为所述代理节点根据所述重启节点发送至所述代理节点的随机数进行的签名数据。[0040] 上述技术方案中,第一代理指示可以是代理节点使用代理节点私钥对随机数进行签名的签名数据,第二代理指示可以是重启节点使用重启节点私钥对随机数进行签名的签名数据,从而使其他共识节点通过解密签名数据,实现第二代理指示验证第一代理指示,保证代理节点的准确性。[0041] 可选的,重启节点确定执行共识任务的第i层处于重启状态时,向代理节点发送第i代理请求,包括:[0042] 所述重启节点确定所述i层为执行层,则通过与所述代理节点之间的长连接向所述代理节点发送第三代理请求;所述第三代理请求用于指示所述代理节点返回待上链区块中各交易的执行结果;[0043] 所述重启节点获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果,包括:[0044] 所述重启节点获取所述代理节点反馈的针对所述执行层对应的子任务的第三执行结果;所述第三执行结果用于指示所述待上链区块中各交易的交易结果;[0045] 所述重启节点根据所述第二执行结果,更新所述待上链区块。[0046] 上述技术方案中,执行层用于在得到第一消息包之后,执行第一消息包中各交易,以此得到各交易的交易结果,更新待上链区块,但重启节点在确定执行层处于重启状态时,也就是说执行层的功能无法使用,即无法执行第一消息包中各交易,无法得到各交易的交易结果,则向代理节点发送第三代理请求,由代理节点确定各交易的交易结果,以使重启节点在得到包括各交易的交易结果的第三执行结果更新待上链区块,从而减少等待执行层重启完成后执行各交易的时间,减少了热重启节点的共识耗时,提升了共识效率。[0047] 可选的,共识节点确定执行共识任务的第i层处于重启状态之前,还包括:[0048] 所述重启节点获取重启指令;所述重启指令包括至少一个代理节点的地址;[0049] 根据所述至少一个代理节点的地址确定代理节点,并与所述代理节点建立长连接。[0050] 上述技术方案中,通过选择代理节点,实现由代理节点代替重启节点执行共识任务,从而减少热重启节点的共识耗时,提升了共识效率。[0051] 第二方面,本发明实施例提供一种区块链节点热重启的方法,包括:[0052] 代理节点获取重启节点发送的第i代理请求;所述第i代理请求是所述重启节点确定执行共识任务的第i层处于重启状态时发送的;执行共识任务的各层包括网络层、共识层和执行层;[0053] 所述代理节点根据所述第i代理请求得到第i层对应的子任务,确定所述第i层对应的子任务的执行结果;[0054] 所述代理节点获取所述重启节点发送的第i+1代理请求,并根据所述第i+1代理请求得到第i+1层对应的子任务,确定所述第i+1层对应的子任务的执行结果;所述第i+1代理请求是所述重启节点确定执行共识任务的第i+1层处于重启状态时发送的;直至所述重启节点完成所述共识任务。[0055] 第三方面,本发明实施例提供一种区块链节点热重启的装置,包括:[0056] 处理模块,用于确定执行共识任务的第i层处于重启状态时,向代理节点发送第i代理请求;所述第i代理请求用于指示所述代理节点完成所述第i层对应的子任务;执行共识任务的各层包括网络层、共识层和执行层;[0057] 获取模块,用于获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果;[0058] 所述处理模块,用于若确定执行共识任务的第i+1层处于重启状态,则向代理节点发送第i+1代理请求;所述第i+1代理请求用于指示所述代理节点完成所述第i+1层对应的子任务,直至完成所述共识任务。[0059] 可选的,所述处理模块还用于:[0060] 获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果之前,记录所述第i代理请求的处理状态为未处理;并将第i代理请求缓存至请求队列;[0061] 获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果之后,在所述请求队列中,将所述第i代理请求的处理状态更新为处理成功。[0062] 可选的,所述处理模块还用于:[0063] 在确定网络层重启完成时,将处理状态为处理成功的网络层对应的代理请求中的交易缓存至所述重启节点的交易池,并清空所述请求队列中网络层对应的代理请求。[0064] 可选的,所述处理模块具体用于:[0065] 确定所述第i层为网络层,则通过与所述代理节点之间的长连接向所述代理节点发送第一代理请求;所述第一代理请求包括客户端发送的第一交易;所述第一代理请求用于指示所述代理节点广播所述第一交易;[0066] 所述处理模块具体用于:[0067] 控制获取模块获取所述代理节点反馈的针对所述网络层对应的子任务的第一执行结果;所述第一执行结果用于确定第一交易验证通过;[0068] 根据所述第一执行结果,更新请求队列中所述第一代理请求的信息。[0069] 可选的,所述处理模块具体用于:[0070] 确定所述第i层为共识层,则通过与所述代理节点之间的长连接向所述代理节点发送第二代理请求;所述第二代理请求用于指示所述代理节点确定并广播待上链区块的第一消息包;[0071] 控制获取模块获取所述代理节点反馈的针对所述共识层对应的子任务的第一消息包及第一代理指示;所述第一代理指示用于其他共识节点确定所述代理节点有效;[0072] 生成针对所述第一代理指示的第二代理指示;所述第二代理指示用于其他共识节点确定所述代理节点发送的第一代理指示有效;[0073] 将所述第二代理指示广播至其他共识节点;[0074] 控制获取模块获取所述代理节点反馈的针对所述共识层对应的子任务的第二执行结果;所述第二执行结果用于确定所述待上链区块有效;[0075] 根据所述第二执行结果,更新请求队列中所述第二代理请求的信息。[0076] 所述第一代理指示为所述代理节点根据所述重启节点发送至所述代理节点的随机数进行的签名数据。[0077] 可选的,所述处理模块具体用于:[0078] 确定所述i层为执行层,则通过与所述代理节点之间的长连接向所述代理节点发送第三代理请求;所述第三代理请求用于指示所述代理节点返回待上链区块中各交易的执行结果;[0079] 控制获取模块获取所述代理节点反馈的针对所述执行层对应的子任务的第三执行结果;所述第三执行结果用于指示所述待上链区块中各交易的交易结果;[0080] 根据所述第三执行结果,更新所述待上链区块。[0081] 可选的,所述处理模块还用于:[0082] 确定执行共识任务的第i层处于重启状态之前,控制获取模块获取重启指令;所述重启指令包括至少一个代理节点的地址;[0083] 根据所述至少一个代理节点的地址确定代理节点,并与所述代理节点建立长连接。[0084] 第四方面,本发明实施例提供一种区块链节点热重启的装置,包括:[0085] 获取单元,用于获取重启节点发送的第i代理请求;所述第i代理请求是所述重启节点确定执行共识任务的第i层处于重启状态时发送的;执行共识任务的各层包括网络层、共识层和执行层;[0086] 处理单元,用于根据所述第i代理请求得到第i层对应的子任务,确定所述第i层对应的子任务的执行结果;[0087] 控制获取模块获取所述重启节点发送的第i+1代理请求,并根据所述第i+1代理请求得到第i+1层对应的子任务,确定所述第i+1层对应的子任务的执行结果;所述第i+1代理请求是所述重启节点确定执行共识任务的第i+1层处于重启状态时发送的;直至所述重启节点完成所述共识任务。[0088] 第五方面,本发明实施例还提供一种计算机设备,包括:[0089] 存储器,用于存储程序指令;[0090] 处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述区块链节点热重启的方法。[0091] 第六方面,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行上述区块链节点热重启的方法。附图说明[0092] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0093] 图1为本发明实施例提供的一种共识算法的系统架构;[0094] 图2为本发明实施例提供的一种共识算法的共识示意图;[0095] 图3为本发明实施例提供的一种系统架构;[0096] 图4为本发明实施例提供的一种区块链节点热重启的方法的流程示意图;[0097] 图5为本发明实施例提供的一种共识算法的示意图;[0098] 图6为本发明实施例提供的一种区块链节点热重启的方法的流程示意图;[0099] 图7为本发明实施例提供的一种区块链节点热重启的方法的流程示意图;[0100] 图8为本发明实施例提供的一种区块链节点热重启的装置的结构示意图;[0101] 图9为本发明实施例提供的一种区块链节点热重启的装置的结构示意图。具体实施方式[0102] 为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。[0103] 现有的区块上链过程,一般由出块节点确定待上链交易,然后打包成区块,基于区块生成第一消息包,并广播至P2P网络中,以使共识节点对第一消息包进行共识,并在共识通过后,将区块上链。[0104] 图1示例性的示出了一种共识算法的系统架构,如图1所示,出块节点获取客户端提交的交易,然后将交易缓存至交易池;其中,出块节点为区块链网络中确定的打包区块的节点;确定出块节点的算法如(block_number+current_vie)%consensus_node_num,该算法仅是一种示例,在此不做具体限定。[0105] 出块节点的共识层,用于从交易池中选取交易,并打包成区块,并基于该区块,封装成第一消息包,以共识算法为PBFT为例,则该第一消息包为第一PBFT消息包;并对第一PBFT消息包进行共识。[0106] 出块节点的网络层,用于将第一PBFT消息包广播至区块链网络中。[0107] 出块节点的执行层,用于执行区块中的各交易,得到各交易的交易结果,更新区块,将执行后的区块确定为第一区块(即待上链区块),并根据各交易结果确定第一PBFT消息包对应的第一签名包;第一签名包包括各交易的交易结果、第一区块高等信息。[0108] 出块节点的基础层,用于在第一PBFT消息包共识通过后,将第一区块写入区块链,并在区块上链后,将交易池中对应的交易删除。[0109] 其中,共识层包括三个阶段,用于共识区块,图2示例性的示出了一种共识算法的共识示意图,如图2所示,共识算法为PBFT算法,Node0为出块节点;Node1‑Node3为共识节点,且Node3为恶意节点。[0110] 在第一阶段之前,Node0节点在Node0节点的交易池中选取第一交易,打包成区块,根据该区块中的各第一交易确定出第一消息包,并通过执行层执行该区块中的第一交易,得到第一区块。[0111] 在第一阶段中,任一共识节点(Node1、Node2或Node3)接收第一消息包,验证第一消息包中的区块(执行前的区块)高等信息。在验证通过后,基于第一消息包中的各第一交易,在本地交易池中确定出对应的各第二交易,并打包区块;然后通过自身的执行层执行区块中各第二交易,得到第二交易的交易结果,确定且缓存第二区块,以及确定并广播第一签名包;所述第一签名包用于表征共识节点完成区块执行和验证。[0112] 需要说明的是,在第一阶段中,出块节点会作为共识节点,基于本地交易池中的第一交易确定并广播第一消息包对应的第一签名包。[0113] 在第二阶段中,任一共识节点(Node0、Node1、Node2或Node3)接收其他共识节点广播的第一签名包;根据其他共识节点广播的第一签名包与自身的第一签名包进行验证;在验证通过的第一签名包数量不少于2*f+1个,则广播第二签名包,且进行下一阶段;所述第二签名包用于表征至少2*f+1个节点执行了区块,且执行结果一致,可以提交执行后的区块(即第一区块和第二区块)。其中,f为共识算法中允许出现的恶意节点数量(即Node3),本实例中,f=1。[0114] 在第三阶段中,任一共识节点(Node1、Node2或Node3)接收第二签名包,通过在第一阶段中缓存的第二区块对第二签名包进行验证,记录验证通过的第二签名包数量;其中,验证通过的第二签名包数量(2*f+1)用于指示基础层将第二区块(或第一区块)写入至区块链中,即将第二区块上链。[0115] 为了更好的描述本发明的技术方案,下面对可能出现的名词进行阐述。[0116] PBFT(PracticalByzantineFaultTolerance)共识算法:PBFT共识算法可以在少数节点作恶(如伪造消息)场景中达成共识,其采用签名、签名验证、哈希等密码学算法确保消息传递过程中的防篡改性、防伪造性、不可抵赖性,将拜占庭容错算法复杂度从指数级降低到多项式级别,在一个由(3*f+1)个节点构成的系统中,只要有不少于(2*f+1)个非恶意节点正常工作,该系统就能达成一致性。[0117] P2P网络:对等网络,即对等计算机网络,是一种在对等者之间分配任务和工作负载的分布式应用架构,本发明的P2P网络是由区块链网络中的各个节点组成的。[0118] 为了更好的描述本发明,图3示例性的示出了本发明实施例所适用的一种系统架构,该系统架构包括重启节点310和代理节点320。[0119] 其中,重启节点310包括网络层、共识层、执行层和缓存模块,其中,缓存模块用于缓存重启节点发起的代理请求,如针对网络层的第一代理请求,第一代理请求包括第一交易,将第一代理请求缓存至缓存模块,相当于将第一交易缓存至缓存模块;[0120] 重启节点310在执行共识任务时,会确定网络层、共识层或执行层的状态,若处于重启状态,则向代理节点320发送对应的代理请求,以使代理节点320代替重启节点执行对应层的子任务。[0121] 代理节点320,是根据重启节点310在代理节点队列中选择的,具体的,重启节点310在获取重启指令之后,根据重启指令中的代理节点的地址确定代理节点;需要说明的是,代理节点队列中可以包括多个节点,可以根据预设条件在多个节点中确定代理节点320,如可以将Node1节点确定为代理节点320,也可以将Node2节点确定为代理节点320,在此不做具体限定。[0122] 需要说明的是,上述图3所示的结构仅是一种示例,本发明实施例对此不做限定。[0123] 基于上述描述,图4示例性的示出了本发明实施例提供的一种区块链节点热重启的方法的流程示意图,该流程可由区块链节点热重启的装置执行。[0124] 如图4所示,该流程具体包括:[0125] 步骤410,重启节点确定执行共识任务的第i层处于重启状态时,向代理节点发送第i代理请求。[0126] 本发明实施例中,所述第i代理请求用于指示所述代理节点完成所述第i层对应的子任务;执行共识任务的各层包括网络层、共识层和执行层;也就是说,i为自然数,i不大于2,也就是说i∈(0,1,2),如i=1,即第一代理请求为网络层的代理请求。[0127] 步骤420,所述重启节点获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果。[0128] 本发明实施例中,针对不同层的代理请求,重启节点会代替重启节点执行对应的子任务,如打包区块、确定第一消息包等子任务,从而得到子任务对应的执行结果。[0129] 步骤430,所述重启节点若确定执行共识任务的第i+1层处于重启状态,则向代理节点发送第i+1代理请求。[0130] 本发明实施例中,所述第i+1代理请求用于指示所述代理节点完成所述第i+1层对应的子任务,直至完成所述共识任务,也就是说,第i+1层为第i层的下一层,如第i层为网络层,则第i+1层为共识层。[0131] 在步骤410中,重启节点确定执行共识任务的第i层处于重启状态之前,需要获取重启指令,重启指令用于指示重启节点进行热重启,即重启网络层、共识层和执行层,并根据重启指令确定代理节点。[0132] 进一步地,重启节点获取重启指令;所述重启指令包括至少一个代理节点的地址;根据所述至少一个代理节点的地址确定代理节点,并与所述代理节点建立长连接。[0133] 结合上述图3进行举例,例如,节点热重启时,需要输入重启指令,例如用户点击的重启按钮等,重启指令包括有一个或多个代理节点的IP端口地址,其中,一个或多个代理节点的IP端口地址可以是预先设置在重启指令中的,也可以是用户输入的,在此不做具体限定;代理节点可以为共识节点;如IP端口地址如:Node1:“127.0.0.1:30301”,“restart127.0.0.1:30301”。[0134] 示例性的,节点在获取重启指令之后,还需要先判断该节点是否已经处于重启中,若是,则取消该重启指令,也就是说,该重启指令并非是首个重启指令;若否,则对该节点进行重启,并将该节点作为重启节点。[0135] 进一步的,重启节点根据至少一个代理节点的IP端口地址建立代理节点队列,从而在代理节点队列中确定代理节点。例如,重启节点建立空的代理节点队列,如Queue:[];然后验证各代理节点的IP端口地址的准确性(如地址的合法性、正确性等),验证通过后,与各节点进行长连接;将长连接成功的各节点加入至代理节点队列。[0136] 在代理节点队列中确定代理节点时,可以按照一定的顺序进行确定,例如,按照代理节点队列中节点的排列顺序,将队列的首个节点确定为代理节点或将队列的末尾节点确定为代理节点,在此不做具体限定。[0137] 结合上述图2进行举例,例如,重启节点是IP端口地址为“127.0.0.1:30300”的Node0节点,Node1节点是IP端口地址为“127.0.0.1:30301”的节点,验证“127.0.0.1:30301”的安全性,在验证通过后与“127.0.0.1:30301”进行长连接,在长连接成功之后将IP端口地址“127.0.0.1:30301”Node1节点添加至代理节点队列,得到Queue:“[127.0.0.1:30301]”。重启节点与节点(Node1节点)保持长连接,通过周期性的发送心跳包确定与Node1节点之间的连接状态。[0138] 假设Node1节点在代理节点队列的首个位置,则重启节点将Node1节点确定为代理节点。[0139] 示例性的,若重启节点与Node1节点断开连接,或者心跳包异常,即重启节点与Node1节点连接异常,则与Node1节点尝试重连,在满足重连条件之后(如重连失败次数大于失败阈值),将Node1节点从代理节点队列中移除,确定其他节点为代理节点。在确定出代理节点之后,将重启节点的状态设为“RESTARTING”,即“重启中”。[0140] 在本发明实施例中,代理请求(ProxyRequest)包括请求数据(ProxyData)、请求类型(ProxyType)、转发的代理节点信息(ProxyNode)和处理状态(ProxyStatus)。[0141] 其中,根据重启节点的结构层的不同,代理请求的类型也不相同,例如,重启节点的结构层包括i层,分别为网络层、共识层、执行层,如第1层为网络层,即执行共识任务的各层包括网络层、共识层和执行层,则对应的代理请求包括网络类型的代理请求、共识类型的代理请求和执行类型的代理请求。[0142] 举例来说,网络类型的代理请求为Network,则Network的请求数据可以为转发区块、连接、广播交易等的请求数据;共识类型的代理请求为Consensus,Consensus的请求数据可以为打包区块、共识区块结果等请求数据。[0143] 在执行代理请求的过程中,代理请求的处理状态为“执行中”或“未完成”;在发送代理请求等待请求结果时,若等待超时或请求结果为失败,则将代理请求的处理状态设为“错误”或“失败”等,若请求结果为成功,则将代理请求的处理状态设为“完成”或“成功”等。[0144] 在向代理节点发送代理请求时,会将代理请求缓存至请求队列,在得到代理请求对应的请求结果后,更新请求队列中代理请求的请求状态。[0145] 进一步地,所述重启节点获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果之前,记录所述第i代理请求的处理状态为未处理;并将第i代理请求缓存至请求队列;所述重启节点获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果之后,在所述请求队列中,将所述第i代理请求的处理状态更新为处理成功。[0146] 举例来说,例如,针对处理状态为未处理第i代理请求,将其缓存至请求队列,在接收代理节点返回的执行结果后,在请求队列中确定对应的代理请求,然后将该代理请求的处理状态设置为“完成”或“成功”等,请求数据设置为请求结果中的值。进一步进行举例,该代理请求为共识类型的代理请求,代理数据为打包区块,然后由代理节点代理打包区块,接收代理节点返回的区块数据,然后将代理请求的处理状态设置为“完成”,将代理请求的代理数据更新为区块数据,以此完成对请求队列中代理请求的更新。[0147] 示例性的,重启节点确定所述第i层为网络层,则通过与所述代理节点之间的长连接向所述代理节点发送第一代理请求;所述第一代理请求包括客户端发送的第一交易;所述第一代理请求用于指示所述代理节点广播所述第一交易;[0148] 获取所述代理节点反馈的针对所述网络层对应的子任务的第一执行结果;所述第一执行结果用于确定第一交易验证通过;根据所述第一执行结果,更新请求队列中所述第一代理请求的信息。[0149] 结合上述图1举例来说,重启节点在接收到客户端发送的第一交易,且确定网络层重启之后,则将网络层的状态设为重启中,确定网络类型的第一代理请求;该第一代理请求的请求数据为待广播的第一交易,然后将第一代理请求发送至代理节点。[0150] 假设,在代理节点队列中确定Node1节点为代理节点,确定第一代理请求w1,该第一代理请求w1的代理类型为:Network,处理状态为:“UNFINISHED”,请求数据为:广播第一交易d1,然后将该第一代理请求缓存至请求队列中。[0151] 进一步地,所述重启节点在确定网络层重启完成时,将状态为处理成功的网络层对应的子任务中的交易缓存至所述重启节点的交易池,并清空所述请求队列中网络层对应的子任务。[0152] 例如,代理节点在获取第一代理请求之后,根据请求数据,验证第一交易d1,如验证第一交易d1的签名、格式等,在验证通过后,将第一交易d1放入本地(即代理节点)的交易池中,然后代替重启节点将第一交易d1广播至区块链网络中,并且生成第一执行结果e1,返回至重启节点,其中,第一执行结构用于指示第一交易的合法性,即有效交易或无效交易。[0153] 重启节点在接收到第一执行结果e1之后,通过交易标识等方法在请求队列中确定对应的第一代理请求w1,将第一代理请求w1的处理状态更新为:“FINISHED”,也就是说,第一代理请求w1执行完成,且第一交易d1为合法交易。[0154] 示例性的,重启节点周期性的检测网络层的状态,若确定网络层重启完成后,将网络层的状态标记为“运行中”,即确定网络层为正常工作的状态,此时,不再需要向代理节点发送网络类型的代理请求,在请求队列中将请求类型为网络类型的第一代理请求,且处理状态为“FINISHED”的第一代理请求中的第一交易放入至重启节点的交易池中,并清空请求类型为网络类型的第一代理请求,以此同步重启节点的交易信息。[0155] 示例性的,重启节点确定所述第i层为共识层,则通过与所述代理节点之间的长连接向所述代理节点发送第二代理请求;所述第二代理请求用于指示所述代理节点确定并广播待上链区块的第一消息包;[0156] 获取所述代理节点反馈的针对所述共识层对应的子任务的第一消息包及第一代理指示;所述第一代理指示用于其他共识节点确定所述代理节点有效;[0157] 所述重启节点生成针对所述第一代理指示的生成第二代理指示;所述第二代理指示用于其他共识节点确定所述代理节点发送的第一代理指示有效;[0158] 将所述第二代理指示广播至其他重启节点;获取所述代理节点反馈的针对所述共识层对应的子任务的第二执行结果;所述第二执行结果用于确定所述待上链区块有效;根据所述第二执行结果,更新请求队列中所述第二代理请求的信息。[0159] 在本发明实施例中,在网络层的状态标记为“运行中”之后,重启节点需要重启共识层,在重启共识层时,将共识层的状态标记为“重启中”;重启节点在确定重启节点中共识层的状态为重启中或未重启完成,也就是共识层无法正常工作的状态时,重启节点生成共识类型的第二代理请求。[0160] 具体的,共识层包括两个模块,分别为第一模块(Seal)和第二模块(Engine),其中,第一模块用于将交易打包为区块,第二模块用于对区块进行共识。重启节点在热重启时,首先对第一模块进行热重启,并标记第一模块的重启状态,如“重启中”和“重启完成”,在第一模块重启完成之后,再对第二模块进行重启,并标记第二模块的重启状态,如“重启中”和“重启完成”。[0161] 进一步地,重启节点在确定第一模块的重启状态为“重启中”时,生成共识类型的第二代理请求,如请求类型为:Consensus,请求数据为:打包区块。[0162] 需要说明的是,该第二代理请求中还包括随机数,其中,随时数可以是重启节点随机选择的自然数,通过网络层传输至代理节点的。[0163] 代理节点在获取第二代理请求后,根据请求数据,在本地的交易池中选择交易,并打包区块,生成区块对应的第一消息包,然后代理节点将第一消息包广播至区块链网络中。其中,第一消息包中包括随机数的第一代理指示;第一代理指示为所述代理节点根据所述重启节点发送至所述代理节点的随机数进行的签名数据。如,第一代理指示是代理节点基于随机数,根据代理节点的私钥进行签名得到的。[0164] 第一消息包在区块链网络广播之后,其他共识节点接收第一消息包,为了保证代理节点的安全性和合法性,其他共识节点在根据第一消息包生成第一签名包之前,需要验证第一消息包,进一步地,验证第一消息包中的第一代理指示。[0165] 具体的,重启节点在确定第二模块的重启状态为“重启中”时,生成第二消息包,并将第二消息包广播至区块链网络中,其中,第二消息包包括第二代理指示;第二代理指示是重启节点基于随机数,根据重启节点的私钥进行签名得到的。[0166] 第二消息包在区块链网络广播之后,其他共识节点接收第二消息包,根据第二消息包中的第二代理指示,对第一代理指示进行验证。[0167] 进一步地,针对任一共识节点,共识节点根据代理节点的公钥解密第一代理指示,得到第一代理指示的第一随机数,共识节点根据重启节点的公钥解密第二代理指示,得到第二代理指示的第二随机数,若第一随机数与第二随机数一致,则验证通过。[0168] 共识节点在验证通过之后,基于该第一消息包在本地的交易池中选择交易,打包并执行区块,确定第二区块和对应的第一签名。[0169] 为了更好的阐述上述技术方案,图5示例性的示出了一种共识算法的示意图,如图5所示,以PBFT共识算法为例,代理节点在得到重启节点发送的第二代理请求之后,在本地的交易池中选取交易,然后打包区块,并执行区块,得到第二区块以及对应的PBFT消息包,通过自身的私钥对随机数进行签名,得到第一代理指示,然后根据PBFT消息包和第一代理指示确定第一消息包,并将第一消息包广播至区块链网络中。[0170] 重启节点在第二模块的状态为“重启中”时,根据自身的私钥对随机数进行签名,得到第二代理指示,确定第二消息包,然后将第二消息包广播至区块链网络中。[0171] 共识节点接收第一消息包之后,将第一消息包的状态设置为待验证,然后等待第二消息包,在得到第二消息包之后,通过重启节点的私钥解密第二代理指示,得到第二随机数;通过代理节点的私钥解密第一代理指示,得到第一随机数,若确定第一随机数与第二随机数一致,则验证通过,将第一消息包的状态设置为“验证成功”,以此保证代理共识的安全性。[0172] 在一种可实施的方式中,代理节点确定出包括第一代理指示的第一消息包之后,由重启节点解密第一消息包中的第一代理指示,从而验证第一消息包中的随机数,在验证通过后,根据第一消息包中的PBFT消息包确定第三消息包,然后将第三消息包广播至区块链网络中。[0173] 示例性的,所述重启节点确定所述i层为执行层,则通过与所述代理节点之间的长连接向所述代理节点发送第三代理请求;所述第三代理请求用于指示所述代理节点返回待上链区块中各交易的执行结果;[0174] 获取所述代理节点反馈的针对所述执行层对应的子任务的第三执行结果;所述第三执行结果用于指示所述待上链区块中各交易的交易结果;根据所述第二执行结果,更新所述待上链区块。[0175] 结合图2举例来说,执行层用于执行打包区块中的各交易,从而得到各交易的交易结果,确定出待上链区块和第一签名包,也就是说,若执行层在重启状态时,即执行层无法工作时,无法自行区块中各交易,即无法执行区块得到待上链区块和第一签名包,因为在区块链网络中,出块节点还作为共识节点参与共识,因此需要得到待上链区块和第一签名包。[0176] 举例来说,重启节点在得到代理节点发送的第一消息包之后,需要通过执行层执行第一消息包中的区块,此时,重启节点若确定执行层处于重启状态时,生成第三代理请求,如第三代理请求的请求类型为:Execute,请求数据为:确定待上链区块,然后将第三代理请求发送至代理节点。[0177] 代理节点在得到第三代理请求之后,根据请求类型和请求数据确定执行区块,得到待上链区块,并返回第三执行结果。[0178] 重启节点在得到第三执行结果之后,更新第三代理请求,得到更新后的待上链区块;需要说明的是,本发明实施例中共识层和执行层可以同时进行热重启,没有先后顺序。[0179] 示例性的,重启节点在确定执行层处于重启完成状态时,将在缓存队列中确定处理状态为处理成功的第三代理请求,从而得到第三代理请求中的待上链区块,然后根据块高,依次的将待上链区块返回至执行层,由执行层检验待上链区块的有效性。[0180] 本发明实施例还包括确定基础层的状态,重启节点在确定基础层重启完成后,通过基础层,在确定第一消息包共识完成后,将上述执行层验证通过的待上链区块写入至数据库中,从而实现同步重启节点的区块链网络数据。[0181] 对于处理状态为处理失败的第三代理请求,从请求队列中清空,并重新执行该第三代理请求。[0182] 为了好的阐述上述技术方案,图6示例性的示出了一种区块链节点热重启的方法的流程示意图,如图6所示,流程包括:[0183] 步骤610,获取重启指令。[0184] 节点获取重启指令,将该节点确定为重启节点,并将该节点的状态标记为“重启中”。[0185] 步骤620,确定代理节点。[0186] 重启节点建立空代理节点队列,然后重启节点根据重启指令中的各节点地址建立长连接,将建立长连接成功的节点地址加入至代理节点队列,然后按照队列顺序确定代理节点。[0187] 步骤630,确定网络层是否重启完成,若是,则执行步骤660,否则执行步骤670。[0188] 重启节点在得到客户端发送的第一交易之后,确定网络层的状态,确定网络层是否重启完成。[0189] 步骤640,确定共识层是否重启完成,若是,则执行步骤660,否则执行步骤670。[0190] 重启节点在需要打包区块时,确定共识层的状态,确定共识层是否重启完成。[0191] 步骤650,确定执行层是否重启完成,若是,则执行步骤660,否则执行步骤670。[0192] 重启节点在确定待上链区块和第一签名包时,确定执行层的状态,确定执行层是否重启完成。[0193] 步骤660,非代理重启。[0194] 若重启节点在执行网络层、共识层或执行层的共识任务时,确定对应的结构层已经重启完成,则不需要进行代理共识,可以直接通过重启完成的结构层完成共识任务。[0195] 步骤670,代理重启。[0196] 若重启节点在执行网络层、共识层或执行层的共识任务时,确定对应的结构层未重启完成,则需要进行代理共识。[0197] 具体的,针对网络层,重启节点需要根据第一交易生成第一代理请求,然后将第一代理请求缓存并通过长连接发送至代理节点;代理节点会根据第一代理请求验证第一交易,并将第一执行结果返回给重启节点,然后广播验证通过的第一交易;重启节点根据代理节点返回的第一执行结果,更新第一代理请求的处理状态,在确定网络层重启完成后,根据处理状态,将验证通过的第一交易缓存至网络层的交易池中,并将请求队列中第一代理请求清空。[0198] 针对共识层,重启节点在确定共识层中的第一模块处于重启状态时,生成第二代理请求并发送至代理节点,以使代理节点代替重启节点打包区块,生成并广播第一消息包;重启节点在确定共识层中的第一模块重启完成,且第二模块处于重启状态时,生成第二消息包,并进行广播;其他共识节点在得到第一消息包和第二消息包之后,根据第二消息包对第一消息包进行验证,在验证通过够,对第一消息包进行共识。[0199] 针对执行层,重启节点在得到代理节点广播的第一消息包之后,且确定执行层处于重启状态,则生成第三代理请求,并发送至代理节点;代理节点在得到第三代理请求之后,执行区块,确定待上链区块(及交易结果),将待上链区块作为第三执行结果,返回至重启节点;重启节点在得到第三执行结果后,将待上链区块数据更新至第三代理请求。[0200] 步骤680,区块上链。[0201] 重启节点在确定基础层重启完成之后,且确定第一消息包共识成功之后,将更新后的第三代理请求中的待上链区块缓存至数据库,即将待上链区块上链。[0202] 步骤690,断开代理。[0203] 实现断开代理的条件包括以下至少一项:重启节点不需要进行代理请求;网络层、共识层和/或执行层代理重启失败;基础层重启完成之后;[0204] 图7示例性的示出了本发明实施例提供的一种区块链节点热重启的方法的流程示意图,如图7所示,流程包括:[0205] 步骤710,获取重启节点发送的第i代理请求。[0206] 本发明实施例中,所述第i代理请求是所述重启节点确定执行共识任务的第i层处于重启状态时发送的;执行共识任务的各层包括网络层、共识层和执行层。[0207] 步骤720,所述代理节点根据所述第i代理请求得到第i层对应的子任务,确定所述第i层对应的子任务的执行结果。[0208] 步骤730,所述代理节点获取所述重启节点发送的第i+1代理请求,并根据所述第i+1代理请求得到第i+1层对应的子任务,确定所述第i+1层对应的子任务的执行结果。[0209] 本发明实施例中,所述第i+1代理请求是所述重启节点确定执行共识任务的第i+1层处于重启状态时发送的;直至所述重启节点完成所述共识任务。[0210] 在步骤720或步骤730中,根据代理请求的请求类型、请求数据来确定对应的子任务,从而确定对应的执行结果。[0211] 示例性的,针对第一代理请求,代理节点根据请求数据“广播交易”,将第一代理请求中的第一交易进行验证,并在验证完成后,将第一交易缓存至本地交易池并广播至区块链网络中。[0212] 针对第二代理请求,代理节点根据请求数据“打包区块”,在本地的交易池中选取交易并打包区块,然后结合重启节点发送的随机数确定出对应的第一消息包,并将第一消息包广播至区块链网络中。[0213] 其他共识节点在得到第一消息包和重启节点发送的第二消息包之后,验证第一消息包,并在验证通过后,对第一消息包进行共识,代理节点在第一消息包共识通过后,返回第二执行结果,第二执行结果用于确定待上链区块是否有效。[0214] 针对第三代理请求,代理节点根据请求数据“执行区块”,将待上链区块数据作为第三执行结果返回至重启节点,以使重启节点更新待上链区块,至此,代理节点代替重启节点完成了共识过程,从而减少了热重启节点的共识耗时,提升了共识效率。[0215] 基于相同的技术构思,图8示例性的示出了本发明实施例提供的一种区块链节点热重启的装置的结构示意图,该装置可以执行区块链节点热重启的方法。[0216] 如图8所示,该装置具体包括:[0217] 处理模块810,用于确定执行共识任务的第i层处于重启状态时,向代理节点发送第i代理请求;所述第i代理请求用于指示所述代理节点完成所述第i层对应的子任务;执行共识任务的各层包括网络层、共识层和执行层;[0218] 获取模块820,用于获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果;[0219] 所述处理模块810,用于若确定执行共识任务的第i+1层处于重启状态,则向代理节点发送第i+1代理请求;所述第i+1代理请求用于指示所述代理节点完成所述第i+1层对应的子任务,直至完成所述共识任务。[0220] 可选的,所述处理模块810还用于:[0221] 获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果之前,记录所述第i代理请求的处理状态为未处理;并将第i代理请求缓存至请求队列;[0222] 获取所述代理节点反馈的针对所述第i层对应的子任务的执行结果之后,在所述请求队列中,将所述第i代理请求的处理状态更新为处理成功。[0223] 可选的,所述处理模块810还用于:[0224] 在确定网络层重启完成时,将处理状态为处理成功的网络层对应的代理请求中的交易缓存至所述重启节点的交易池,并清空所述请求队列中网络层对应的代理请求。[0225] 可选的,所述处理模块810具体用于:[0226] 确定所述第i层为网络层,则通过与所述代理节点之间的长连接向所述代理节点发送第一代理请求;所述第一代理请求包括客户端发送的第一交易;所述第一代理请求用于指示所述代理节点广播所述第一交易;[0227] 所述处理模块810具体用于:[0228] 控制获取模块820获取所述代理节点反馈的针对所述网络层对应的子任务的第一执行结果;所述第一执行结果用于确定第一交易验证通过;[0229] 根据所述第一执行结果,更新请求队列中所述第一代理请求的信息。[0230] 可选的,所述处理模块810具体用于:[0231] 确定所述第i层为共识层,则通过与所述代理节点之间的长连接向所述代理节点发送第二代理请求;所述第二代理请求用于指示所述代理节点确定并广播待上链区块的第一消息包;[0232] 控制获取模块820获取所述代理节点反馈的针对所述共识层对应的子任务的第一消息包及第一代理指示;所述第一代理指示用于其他共识节点确定所述代理节点有效;[0233] 生成针对所述第一代理指示的第二代理指示;所述第二代理指示用于其他共识节点确定所述代理节点发送的第一代理指示有效;[0234] 将所述第二代理指示广播至其他重启节点;[0235] 控制获取模块820获取所述代理节点反馈的针对所述共识层对应的子任务的第二执行结果;所述第二执行结果用于确定所述待上链区块有效;[0236] 根据所述第二执行结果,更新请求队列中所述第二代理请求的信息。[0237] 所述第一代理指示为所述代理节点根据所述重启节点发送至所述代理节点的随机数进行的签名数据。[0238] 可选的,所述处理模块810具体用于:[0239] 确定所述i层为执行层,则通过与所述代理节点之间的长连接向所述代理节点发送第三代理请求;所述第三代理请求用于指示所述代理节点返回待上链区块中各交易的执行结果;[0240] 控制获取模块820获取所述代理节点反馈的针对所述执行层对应的子任务的第三执行结果;所述第三执行结果用于指示所述待上链区块中各交易的交易结果;[0241] 根据所述第三执行结果,更新所述待上链区块。[0242] 可选的,所述处理模块810还用于:[0243] 确定执行共识任务的第i层处于重启状态之前,控制获取模块820获取重启指令;所述重启指令包括至少一个代理节点的地址;[0244] 根据所述至少一个代理节点的地址确定代理节点,并与所述代理节点建立长连接。[0245] 基于相同的技术构思,图9示例性的示出了本发明实施例提供的一种区块链节点热重启的装置的结构示意图,该装置可以执行区块链节点热重启的方法。[0246] 如图9所示,该装置具体包括:[0247] 获取单元910,用于获取重启节点发送的第i代理请求;所述第i代理请求是所述重启节点确定执行共识任务的第i层处于重启状态时发送的;执行共识任务的各层包括网络层、共识层和执行层;[0248] 处理单元920,用于根据所述第i代理请求得到第i层对应的子任务,确定所述第i层对应的子任务的执行结果;[0249] 控制获取单元910获取所述重启节点发送的第i+1代理请求,并根据所述第i+1代理请求得到第i+1层对应的子任务,确定所述第i+1层对应的子任务的执行结果;所述第i+1代理请求是所述重启节点确定执行共识任务的第i+1层处于重启状态时发送的;直至所述重启节点完成所述共识任务。[0250] 基于相同的技术构思,本发明实施例还提供一种计算机设备,包括:[0251] 存储器,用于存储程序指令;[0252] 处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述区块链节点热重启的方法。[0253] 基于相同的技术构思,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行上述区块链节点热重启的方法。[0254] 本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD‑ROM、光学存储器等)上实施的计算机程序产品的形式。[0255] 本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。[0256] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。[0257] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。[0258] 显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
专利地区:广东
专利申请日期:2021-08-06
专利公开日期:2024-07-26
专利公告号:CN113765671B