基于预编译合约的链节点时间同步方法、设备及存储介质技术

技术编号:38130238 阅读:14 留言:0更新日期:2023-07-08 09:37
本发明专利技术的一种基于预编译合约的链节点时间同步方法、设备及存储介质,包括设置链节点时间模块、时间节点管理合约模块和时间同步处理模块;通过链节点时间模块维护链节点的时间,并对链上提供当前时间查询接口;通过时间节点管理合约模块,预编译于链上的时间节点管理合约,该合约为节点提供选择/切换时间节点的途径;通过时间同步处理模块,解决时间节点出现离线故障时切换下一个时间视图里的时间节点问题。本发明专利技术可不改变本地服务器时间,实现区块链节点时间同步;同时,时间节点切换由多共识节点投票触发,时间节点选择比较灵活;整体兼容性强,实现复杂度低。实现复杂度低。实现复杂度低。

【技术实现步骤摘要】
基于预编译合约的链节点时间同步方法、设备及存储介质


[0001]本专利技术涉及区块链节点时钟同步
,具体涉及一种基于预编译合约的链节点时间同步方法。

技术介绍

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

技术实现思路

[0003]本专利技术提出的一种基于预编译合约的链节点时间同步方法,可解决内部网络中联盟链节点间时间一致性问题。
[0004]为实现上述目的,本专利技术采用了以下技术方案:一种基于预编译合约的链节点时间同步方法,包括设置链节点时间模块、时间节点管理合约模块和时间同步处理模块;通过链节点时间模块维护链节点的时间,并对链上提供当前时间查询接口;通过时间节点管理合约模块,预编译于链上的时间节点管理合约,该合约为节点提供选择/切换时间节点的途径;通过时间同步处理模块,解决时间节点出现离线故障时切换下一个时间视图里的时间节点问题。
[0005]进一步的,所述链节点时间模块包括时间延迟数值设置与维护子模块、节点时间查询子模块;对于时间延迟数值设置与维护子模块,链节点不再仅使用节点所在服务器时间,而是封装一层时间结构,表示链节点时间;;其中,包含服务器时间和时间延迟数值,即chainTime{now,delay},now表示节点所在服务器时间,delay表示与时间节点的时间延迟;当与时间节点有时间延迟时,需要更新delay,保证链节点时间基本同步;同时,delay数值除了缓存于内存,还需要存储到硬盘,为防止节点重启时delay为0;
节点时间查询子模块,链节点时间模块对链节点提供当前节点时间查询接口,将节点所在服务器时间now与最新同步到的时间延迟delay累加,作为该节点的当前节点时间,提供给该节点的其他模块使用。进一步的,所述时间节点管理合约模块包括当前时间节点集维护、时间节点指针集合维护、时间节点投票方法和时间节点确定算法;所述当前时间节点集合维护,通过时间节点管理合约中维护了当前可用时间节点集合availableNodeSet,即联盟链的共识节点集合;所述联盟链的共识节点集合保证了只有共识节点才能作为时间节点参与到链节点的时间同步,以共识节点的活性保障时间节点的活性;所述时间节点指针集合维护,通过时间节点管理合约中还维护了三个指针,当前时间节点指针currentPointer、切换时间节点指针集合switchPointerMap和切换时间节点提案时间指针timePointer;当前时间节点指针currentPointer表示当前确定且正在工作的时间节点,指向可用时间节点集合中的节点;切换时间节点指针集合switchPointerMap维护当前正在被投票的下轮时间节点集合;该集合由map结构构成;节点指针为map的key,指向可用时间节点集合中的节点,节点选票数量为map的value;切换时间节点提案时间指针timePointer标志着下轮时间节点首次被提案的时间指针,指向第一个调用时间节点投票方法并写入切换时间节点指针集合switchPointerMap第一个项的交易的时间戳和被投票的节点;所述时间节点投票方法是由各节点调用的,对可用时间节点集中的节点进行投票,来确定下一个时间节点;最后,根据时间节点确定算法判断切换时间节点指针集合switchPointerMap中是否有时间节点被确定为下一轮时间节点;若已有节点被确定为下轮时间节点,则抛出切换时间节点时间事件。
[0006]进一步的,所述时间节点确定算法中包括三个参数:切换时间节点提案时间指针timePointer、可用时间节点集合中节点数量availableNodeNumber和当前调用该合约方法的交易时间戳timestamp;设置到期时间阈值maturity;若当前合约交易时间戳timestamp减去有切换时间节点的提案时间指针timePointer的差值小于到期时间阈值maturity,则统计切换时间节点指针集合switchPointerMap中各节点的选票,若存在节点的选票超过可用时间节点集合中总节点数的一半,则该节点当选为新轮时间节点;若差值大于等于到期时间阈值maturity,则检查切换时间节点指针集合switchPointerMap中各节点的选票,选票数量高的当选为时间节点,若存在选票数量相同,则最先被提案的节点当选为时间节点;所述时间节点确定算法最慢在到期时间阈值maturity后,能决出最新一轮时间节点;决出最新一轮时间节点,更新合约中维护的当前时间节点指针currentPointer。
[0007]进一步的,所述时间同步处理模块分为时间节点处理子模块和非时间节点处理子模块;
所述时间节点处理子模块,用于当节点接收到切换时间节点时间事件时,检查本节点是否是切换时间节点时间事件中的确定的下轮时间节点,若是,则向其他节点发送同步时间消息syncNodeMessage{txid,timestamp},其中txid表示切换时间节点提案通过而触发切换时间节点时间事件的交易id,timestamp表示新一轮时间节点的同步时间,通过查询时间节点模块获得;所述非时间节点处理子模块,对于一直处于同一区块链网络中节点,用于当节点接收到切换时间节点时间事件时,检查本节点是否是切换时间节点时间事件中的确定的下轮时间节点,若不是,则等待接收新轮时间节点的同步时间消息syncNodeMessage;当接收到同步时间消息syncNodeMessage时,验证txid是否真实已上链;验证通过后,比较timestamp与本地服务器时间进行节点时间模块中delay数值的更新,完成时间同步。
[0008]进一步的,还包括所述非时间节点处理子模块,对于新加入网络中的节点,会进行链数据的同步,但无法接收到同步时间消息syncNodeMessage;则采取主动询时方式,当完成同步后,查询时间节点管理合约中记录的当前时间节点指针和可用时间节点集合,获取到当前时间节点,然后构造请求时间消息requestTimeMessage{from}并发送给时间节点,其中,from表示请求本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于预编译合约的链节点时间同步方法,其特征在于,包括设置链节点时间模块、时间节点管理合约模块和时间同步处理模块;通过链节点时间模块维护链节点的时间,并对链上提供当前时间查询接口;通过时间节点管理合约模块,预编译于链上的时间节点管理合约,该合约为节点提供选择/切换时间节点的途径;通过时间同步处理模块,解决时间节点出现离线故障时切换下一个时间视图里的时间节点问题。2.根据权利要求1所述的基于预编译合约的链节点时间同步方法,其特征在于:所述链节点时间模块包括时间延迟数值设置与维护子模块、节点时间查询子模块;对于时间延迟数值设置与维护子模块,链节点不再仅使用节点所在服务器时间,而是封装一层时间结构,表示链节点时间;其中,包含服务器时间和时间延迟数值,即chainTime{now,delay},now表示节点所在服务器时间,delay表示与时间节点的时间延迟;当与时间节点有时间延迟时,需要更新delay,保证链节点时间基本同步;同时,delay数值除了缓存于内存,还需要存储到硬盘,为防止节点重启时delay为0;节点时间查询子模块,链节点时间模块对链节点提供当前节点时间查询接口,将节点所在服务器时间now与最新同步到的时间延迟delay累加,作为该节点的当前节点时间,提供给该节点的其他模块使用。3.根据权利要求1所述的基于预编译合约的链节点时间同步方法,其特征在于:所述时间节点管理合约模块包括当前时间节点集维护、时间节点指针集合维护、时间节点投票方法和时间节点确定算法;所述当前时间节点集合维护,通过时间节点管理合约中维护了当前可用时间节点集合availableNodeSet,即联盟链的共识节点集合;所述联盟链的共识节点集合保证了只有共识节点才能作为时间节点参与到链节点的时间同步,以共识节点的活性保障时间节点的活性;所述时间节点指针集合维护,通过时间节点管理合约中还维护了三个指针,当前时间节点指针currentPointer、切换时间节点指针集合switchPointerMap和切换时间节点提案时间指针timePointer;当前时间节点指针currentPointer表示当前确定且正在工作的时间节点,指向可用时间节点集合中的节点;切换时间节点指针集合switchPointerMap维护当前正在被投票的下轮时间节点集合;该集合由map结构构成;节点指针为map的key,指向可用时间节点集合中的节点,节点选票数量为map的value;切换时间节点提案时间指针timePointer标志着下轮时间节点首次被提案的时间指针,指向第一个调用时间节点投票方法并写入切换时间节点指针集合switchPointerMap第一个项的交易的时间戳和被投票的节点;所述时间节点投票方法是由各节点调用的,对可用时间节点集中的节点进行投票,来确定下一个时间节点;最后,根据时间节点确定算法判断切换时间节点指针集合switchPointerMap中是否有时间节点被确定为下一轮时间节点;若已有节点被确定为下轮时间节点,则抛出切换时间
节点时间事件。4.根据权利要求3所述的基于预编译合约的链节点时间同步方法,其特征在于:所述时间节点确定算法中包括三个参数:切换时间节点提案时间指针timePointer、可用时间节点集合中节点数量availableNodeNumber和当前调用该合约方法的交易时间戳timestamp;设置到期时间阈值maturity;若当前合约交易时间戳timestamp减去有切换时间节点的提案时间指针timePointer的差值小于到期时间阈值maturity,则统计切换时间节点指针集合switchPointerMap中各节点的选票,若存在节点的选票超过可用时间节点集合中总节点数的一半,则该节点当选为新轮时间节点;若差值大于等于到期时间阈值maturity,则检查切换时间节点指针集合switchPointerMap中各节点的选票,选票数量高的当选为时间节点,若存在选票数量相同,则最先被提案的节点当选为时间节点;所述时间节点确定算法最慢在到期时间阈值matu...

【专利技术属性】
技术研发人员:李晓风许金林赵赫张晓婷盛念祖周桐
申请(专利权)人:安徽中科晶格技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1