基于区块共识的链节点间时间同步方法、设备及存储介质与流程

未命名 07-13 阅读:151 评论:0


1.本发明涉及区块链节点时钟同步技术领域,具体涉及一种基于区块共识的链节点间时间同步方法。


背景技术:

2.区块链节点时间是区块链节点正常运行的关键因素,它与出块共识等相关。区块链间节点时间不一致会导致验证难以通过,区块共识等停滞。在公有链中,节点处于公共网络,可以与时间服务器(如window时间服务器)连通,各节点能够同步时间服务器时间,从而达到区块链节点间时钟同步。而对于联盟链,节点大都处于局域网或者内部网络,无法与公共网络通信,故而难以通过时间服务器来使各节点时间同步。因此联盟链区块链节点时钟同步问题亟待解决。在现有方案中,大都依赖于节点所在服务器本地的时钟同步,如将其中一个节点服务器作为时间服务器,其他节点服务器定时同步该服务器时间。该方法不够灵活,也需要额外的工作量来校准时间。此外,在专利文献《基于网络共识结合vrf算法的区块链节点时间同步方法》中,先对节点分片,在每个分片中通过vrf算法进行提案节点选举,然后利用分片内网络共识得出一个共识后的时间结果,作为该分片对应的系统时间,最后每个分片对应的系统时间再次进行网络共识,得到整个p2p网络最终的系统时间。该方法基于两次的网络同步适于公链但对于联盟链来说过于复杂。


技术实现要素:

3.本发明提出的一种基于区块共识的链节点间时间同步方法,可解决内部网络中联盟链节点间时间一致性问题。
4.为实现上述目的,本发明采用了以下技术方案:一种基于区块共识的链节点间时间同步方法,包括以下流程:时间同步流程、时间同步状态检测流程和时间节点切换流程;所述时间同步流程根据初始化配置中的时间节点和时间视图,进入时间同步流程,并完成同步节点的时间同步;所述时间同步状态检测流程负责检测时间节点是否正常地定期发送消息包clock,即是判断时间节点是否离线;所述时间节点切换流程用于解决时间节点出现离线故障时切换下一个时间视图里的时间节点。
5.进一步的,所述时间同步流程包括初始化子模块和节点时间同步子模块;初始化子模块,用于将参与时间同步的区块链节点分为时间节点和同步节点,时间节点是被当前时间视图内所有节点都依赖的时间基准节点,同步节点是同步时间基准节点时间的其他节点;在程序启动后,读取时间数据库,若不存在时间节点和时间视图,则读取链配置文件中的时间节点和时间视图,并写入时间数据库;初始化时间视图为1,且各节点的链配置
文件中时间节点和时间视图必须一致,保证初始数据一致性;节点时间同步子模块,用于查询时间数据库中当前时间视图和当前时间节点,若当前时间节点为本地节点时,则本地节点/时间节点将定期构造udp消息包clock{view ,from,timestamp},发送给该节点已连接的同步节点;clock消息包中view指当前视图,from指当前视图下的时间节点,timestamp指当前时间节点的时间;若当前时间节点不是本地节点,则不发送消息包clock,等待接收消息包clock;同步节点接收到消息包clock时,需要先验证view是否是当前存储的视图,from是否是当前视图下的时间节点;若验证不通过,则忽略消息包clock;若验证通过,则继续比较timestamp与本地时间local的差值diff,即diff=timestamp-local;差值diff绝对值在系统设定可容忍时间差范围内,则无需节点更新时间;否则,则缓存差值diff并写入时间数据库,再次读取节点当前时间时,则为本地时间加上时间差值,即本地时间local’+差值diff。
6.进一步的,所述时间同步状态检测流程分为同步状态设置与维护子模块、同步状态检测子模块;同步状态设置与维护子模块,用于当同步节点定期收到有效的消息包clock时,说明时间节点正常在线,而同步节点在设定的时间内未收到消息包clock时,说明当前时间节点可能已经离线;在该模块中,引入同步状态标志wait来维护当前的时间同步状态,wait=false表示同步节点正常接收到时间节点的消息包clock,时间节点正常工作;wait=true表示同步节点在一定时间内未接收到时间节点的消息包clock,时间节点可能离线,需要切换时间节点;同步状态检测子模块,用于设置一个倒计时的计时器,时间为t;每当同步节点收到有效的消息包clock时,设置同步状态标志wait=false,且计时器从t开始倒计时;若当t为0时,同步节点还收到有效的消息包clock,则设置同步状态标志wait=true,此时检测到当前时间节点可能出现离线故障。
7.进一步的,所述时间节点切换模块分为时间节点切换消息写入区块子模块和待切换时间节点确定子模块;时间节点切换消息写入区块子模块,用于当同步节点作为打包节点在进行打包出块时,检查同步状态标志wait;若wait=true,则构造数据switch{view,clocknode}填入区块的extra字段中;switch{view,clocknode}表示提议下一个视图中的时间节点,其中,view为当前时间视图加1,clocknode为该同步节点;该消息随着区块被打包上链;待切换时间节点确定子模块,用于当各个同步节点或者是共识节点都检测到wait=true,即当前视图的时间节点可能离线后,都会执行上述时间节点切换消息写入区块子模块,即这些节点都可能打包下一个区块;但在下一个高度最终只有一个区块被确定;各节点检查被最终确定的区块的extra字段中是否包含switch数据;当switch数据存在,验证view是否为当前时间视图的下一个时间视图以及clocknode不能为当前时间节点;验证通过后,各节点更新时间数据库中当前时间视图和时间节点,并设置wait=false,进入时间同步流程模块。
8.另一方面,本发明还公开一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如上述方法的
步骤。
9.再一方面,本发明还公开一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如上述方法的步骤。
10.由上述技术方案可知,本发明的基于区块共识的链节点间时间同步方法,主要模块有时间同步流程模块、时间同步状态检测模块和时间节点切换模块。进一步地,时间同步流程模块分为初始化子模块、节点时间同步子模块;时间同步状态检测模块分为同步状态设置与维护子模块、同步状态检测子模块;时间节点切换模块分为时间节点切换消息写入区块子模块和待切换时间节点确定子模块。
11.具体的说,本发明的优点如下:(1)不改变本地服务器时间,实现区块链节点时间同步;(2)实时时间节点离线检测,实时完成时间节点动态平滑切换,无需用户操作;(3)利用原有区块共识网络,对时间节点切换达成一致,兼容性强且易实施。
附图说明
12.图1是本发明实施例的同步流程图;图2是本发明实施例的检测流程图;图3是本发明实施例的切换流程图。
具体实施方式
13.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。
14.如图1所示,本实施例所述的基于区块共识的链节点间时间同步方法,主要模块有时间同步流程模块、时间同步状态检测模块和时间节点切换模块。进一步地,时间同步流程模块分为初始化子模块、节点时间同步子模块;时间同步状态检测模块分为同步状态设置与维护子模块、同步状态检测子模块;时间节点切换模块分为时间节点切换消息写入区块子模块和待切换时间节点确定子模块。
15.以下分别具体说明:时间同步流程模块该模块根据初始化配置中的时间节点和时间视图,进入时间同步流程,并完成同步节点的时间同步。
16.初始化子模块,将参与时间同步的区块链节点分为时间节点和同步节点,时间节点是被当前时间视图内所有节点都依赖的时间基准节点,同步节点是同步时间基准节点时间的其他节点。在程序启动后,读取时间数据库,若不存在时间节点和时间视图,则读取链配置文件中的时间节点和时间视图,并写入时间数据库。初始化时间视图为1,且各节点的链配置文件中时间节点和时间视图必须一致,保证初始数据一致性。
17.节点时间同步子模块,查询时间数据库中当前时间视图和当前时间节点,若当前时间节点为本地节点时,则本地节点/时间节点将定期构造udp消息包clock{view ,from,timestamp},发送给该节点已连接的同步节点。clock消息包中view指当前视图,from指当
前视图下的时间节点,timestamp指当前时间节点的时间。若当前时间节点不是本地节点,则不发送消息包clock,等待接收消息包clock。同步节点接收到消息包clock时,需要先验证view是否是当前存储的视图,from是否是当前视图下的时间节点。若验证不通过,则忽略消息包clock。若验证通过,则继续比较timestamp与本地时间local差值diff,即diff=timestamp-local。diff绝对值在系统设定可容忍时间差范围内,则无需节点更新时间。否则,则缓存diff并写入时间数据库。再次读取节点当前时间时,则为本地时间加上时间差值,即local’+diff。
18.时间同步状态检测模块该模块是负责检测时间节点是否正常地定期发送消息包clock,即是判断时间节点是否离线。
19.同步状态设置与维护子模块,当同步节点定期收到有效的消息包clock时,说明时间节点正常在线,而同步节点在设定的时间内未收到消息包clock时,说明当前时间节点可能已经离线。在该模块中,引入同步状态标志wait来维护当前的时间同步状态。wait=false表示同步节点正常接收到时间节点的消息包clock,时间节点正常工作。wait=true表示同步节点在一定时间内未接收到时间节点的消息包clock,时间节点可能离线,需要切换时间节点。
20.同步状态检测子模块,设置一个倒计时的计时器,时间为t。每当同步节点收到有效的消息包clock时,设置同步状态标志wait=false,且计时器从t开始倒计时。若当t为0时,同步节点还收到有效的消息包clock,则设置同步状态标志wait=true,此时检测到当前时间节点可能出现离线故障。
21.时间节点切换模块该模块主要是解决时间节点出现离线等故障时切换下一个时间视图里的时间节点问题。
22.时间节点切换消息写入区块子模块,当同步节点作为打包节点在进行打包出块时,检查同步状态标志wait。若wait=true,则构造数据switch{view,clocknode}填入区块的extra字段中。switch{view,clocknode}表示提议下一个视图中的时间节点,其中,view为当前时间视图加1,clocknode一般为该同步节点。该消息随着区块被打包上链。
23.待切换时间节点确定子模块,当各个同步节点(或者是共识节点)都检测到wait=true,即当前视图的时间节点可能离线后,都会执行上述时间节点切换消息写入区块子模块,即这些节点都可能打包下一个区块。但在下一个高度最终只有一个区块被确定。各节点检查被最终确定的区块的extra字段中是否包含switch数据。当switch数据存在,验证view是否为当前时间视图的下一个时间视图以及clocknode不能为当前时间节点。验证通过后,各节点更新时间数据库中当前时间视图和时间节点,并设置wait=false,进入时间同步流程模块。
24.总的来说,本发明的优点如下:(1)不改变本地服务器时间,实现区块链节点时间同步;(2)实时时间节点离线检测,实时完成时间节点动态平滑切换,无需用户操作;(3)利用原有区块共识网络,对时间节点切换达成一致,兼容性强且易实施。
25.又一方面,本发明还公开一种计算机可读存储介质,存储有计算机程序,所述计算
机程序被处理器执行时,使得所述处理器执行如上述任一方法的步骤。
26.再一方面,本发明还公开一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如上述任一方法的步骤。
27.在本技术提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一方法的步骤。
28.可理解的是,本发明实施例提供的系统与本发明实施例提供的方法相对应,相关内容的解释、举例和有益效果可以参考上述方法中的相应部分。
29.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink) dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
30.以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
31.以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

技术特征:
1.一种基于区块共识的链节点间时间同步方法,其特征在于,包括以下流程:时间同步流程、时间同步状态检测流程和时间节点切换流程;所述时间同步流程根据初始化配置中的时间节点和时间视图,进入时间同步流程,并完成同步节点的时间同步;通过时间同步状态检测流程检测时间节点是否正常地定期发送消息包clock,即是判断时间节点是否离线;通过时间节点切换流程解决时间节点出现离线故障时切换下一个时间视图里的时间节点。2.根据权利要求1所述的基于区块共识的链节点间时间同步方法,其特征在于:所述时间同步流程包括初始化子模块和节点时间同步子模块;初始化子模块,用于将参与时间同步的区块链节点分为时间节点和同步节点,时间节点是被当前时间视图内所有节点都依赖的时间基准节点,同步节点是同步时间基准节点时间的其他节点;在程序启动后,读取时间数据库,若不存在时间节点和时间视图,则读取链配置文件中的时间节点和时间视图,并写入时间数据库;初始化时间视图为1,且各节点的链配置文件中时间节点和时间视图必须一致,保证初始数据一致性;节点时间同步子模块,用于查询时间数据库中当前时间视图和当前时间节点,若当前时间节点为本地节点时,则本地节点/时间节点将定期构造消息包clock{view ,from,timestamp},发送给该节点已连接的同步节点; view指当前视图,from指当前视图下的时间节点,timestamp指当前时间节点的时间;若当前时间节点不是本地节点,则不发送消息包clock,等待接收消息包clock;同步节点接收到消息包clock时,需要先验证view是否是当前存储的视图,from是否是当前视图下的时间节点;若验证不通过,则忽略消息包clock;若验证通过,则继续比较timestamp与本地时间local的差值diff,即diff=timestamp-local;差值diff绝对值在系统设定可容忍时间差范围内,则无需节点更新时间;否则,则缓存差值diff并写入时间数据库,再次读取节点当前时间时,则为本地时间加上时间差值,即本地时间local’+差值diff。3.根据权利要求1所述的基于区块共识的链节点间时间同步方法,其特征在于:所述时间同步状态检测流程分为同步状态设置与维护子模块、同步状态检测子模块;同步状态设置与维护子模块,用于当同步节点定期收到有效的消息包clock时,说明时间节点正常在线,而同步节点在设定的时间内未收到消息包clock时,说明当前时间节点可能已经离线;引入同步状态标志wait来维护当前的时间同步状态,wait=false表示同步节点正常接收到时间节点的消息包clock,时间节点正常工作;wait=true表示同步节点在一定时间内未接收到时间节点的消息包clock,时间节点可能离线,需要切换时间节点;同步状态检测子模块,用于设置一个倒计时的计时器,时间为t;每当同步节点收到有效的消息包clock时,设置同步状态标志wait=false,且计时器从t开始倒计时;若当t为0时,同步节点还收到有效的消息包clock,则设置同步状态标志wait=true,此时检测到当前时间节点可能出现离线故障。4.根据权利要求1所述的基于区块共识的链节点间时间同步方法,其特征在于:所述时
间节点切换模块分为时间节点切换消息写入区块子模块和待切换时间节点确定子模块;时间节点切换消息写入区块子模块,用于当同步节点作为打包节点在进行打包出块时,检查同步状态标志wait;若wait=true,则构造数据switch{view,clocknode}填入区块的extra字段中;switch{view,clocknode}表示提议下一个视图中的时间节点,其中,view为当前时间视图加1,clocknode为该同步节点;该消息随着区块被打包上链;待切换时间节点确定子模块,用于当各个同步节点或者是共识节点都检测到wait=true,即当前视图的时间节点可能离线后,都会执行上述时间节点切换消息写入区块子模块,即这些节点都可能打包下一个区块;但在下一个高度最终只有一个区块被确定;各节点检查被最终确定的区块的extra字段中是否包含switch数据;当switch数据存在,验证view是否为当前时间视图的下一个时间视图以及clocknode不能为当前时间节点;验证通过后,各节点更新时间数据库中当前时间视图和时间节点,并设置wait=false,进入时间同步流程模块。5.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如权利要求1至4中任一项所述方法的步骤。6.一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如权利要求1至4中任一项所述方法的步骤。

技术总结
本发明的一种基于区块共识的链节点间时间同步方法、设备及存储介质,包括:时间同步流程、时间同步状态检测流程和时间节点切换流程;时间同步流程根据初始化配置中的时间节点和时间视图,进入时间同步流程,并完成同步节点的时间同步;时间同步状态检测流程负责检测时间节点是否正常地定期发送消息包Clock,即是判断时间节点是否离线;时间节点切换流程用于解决时间节点出现离线故障时切换下一个时间视图里的时间节点。本发明可不改变本地服务器时间,实现区块链节点时间同步;可实时时间节点离线检测,实时完成时间节点动态平滑切换,无需用户操作;同时利用原有区块共识网络,对时间节点切换达成一致,兼容性强且易实施。兼容性强且易实施。兼容性强且易实施。


技术研发人员:李晓风 许金林 赵赫 张晓婷 盛念祖 周桐
受保护的技术使用者:安徽中科晶格技术有限公司
技术研发日:2023.06.07
技术公布日:2023/7/12
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐