本发明涉及数据处理技术领域,特别是涉及一种区块链中时间的确定方法、装置及系统。
背景技术:
区块链技术是一种去中心化且寓于分布式结构的数据存储、传输和证明的方法,用数据区块取代了目前互联网对中心服务器的依赖。在区块链底层的各个节点是通过点对点网络进行通信的,各个节点可以共同维护数据的同步。然而,各个节点的本地时间却可能不是同步的,例如节点1的本地时间是2017年11月1日12:12:12,节点2的本地时间却是2017年11月1日12:12:13,因此当在实际应用中存在时间同步的需求时,无法得到满足。例如,当某项交易需要与特定时间相关联时,就会出现不同节点处理结果不同,从而该交易因无法通过验证而导致失败。由此可知,如何提供一种统一的时间服务机制是亟待解决的。
技术实现要素:
有鉴于此,本发明提供的区块链中时间的确定方法、装置及系统,其目的在于解决现有区块链中各个节点的时间不同步的问题。
为了解决上述问题,本发明主要提供如下技术方案:
第一方面,本发明提供了一种区块链中时间的确定方法,所述方法包括:
区块链上的智能合约接收时间获取请求;
根据预设时间确定规则,确定所述区块链的当前时间;
将所述当前时间返回给发送所述时间获取请求的请求方。
可选的,所述根据预设时间确定规则,确定所述区块链的当前时间包括:
获取本次执行区块链出块的节点本地的当前时间;
将所述本次执行区块链出块的节点本地的当前时间确定为所述区块链的当前时间。
可选的,所述获取本次执行区块链出块的节点本地的当前时间包括:
当所述智能合约位于所述本次执行区块链出块的节点上时,读取所述本次执行区块链出块的节点本地的当前时间;
当所述智能合约不位于所述本次执行区块链出块的节点上时,向所述本次执行区块链出块的节点发送时间获取请求,接收所述本次执行区块链出块的节点反馈的当前时间。
可选的,所述根据预设时间确定规则,确定所述区块链的当前时间包括:
向独立于所述区块链的时间服务器发送时间获取请求;
接收所述时间服务器返回的当前时间;
将所述时间服务器返回的当前时间确定为所述区块链的当前时间。
第二方面,本发明提供了一种区块链中时间的确定方法,所述方法包括:
当需要确定区块链的当前时间时,向提供时间服务的智能合约发送时间获取请求,以便所述智能合约根据预设时间确定规则,确定所述区块链的当前时间;
接收所述智能合约发送的当前时间。
可选的,所述方法还包括:
根据所述智能合约发送的当前时间调整本地的当前时间,使得时间同步。
可选的,在向提供时间服务的智能合约发送时间获取请求之前,所述方法还包括:
判断在根据所述智能合约发送的当前时间调整本地当前时间后所经过的时长是否达到预设时长阈值;
所述向提供时间服务的智能合约发送时间获取请求包括:
若所述时长达到所述预设时长阈值,则向所述智能合约发送所述时间获取请求。
可选的,所述方法还包括:
若所述时长未达到所述预设时长阈值,则将本地的当前时间确定为所述区块链的当前时间。
第三方面,本发明提供了一种区块链中时间的确定装置,所述装置包括:
接收单元,用于区块链上的智能合约接收时间获取请求;
确定单元,用于根据预设时间确定规则,确定所述区块链的当前时间;
返回单元,用于将所述当前时间返回给发送所述时间获取请求的请求方。
可选的,所述确定单元包括:
获取模块,用于获取本次执行区块链出块的节点本地的当前时间;
第一确定模块,用于将所述本次执行区块链出块的节点本地的当前时间确定为所述区块链的当前时间。
可选的,所述获取模块,用于当所述智能合约位于所述本次执行区块链出块的节点上时,读取所述本次执行区块链出块的节点本地的当前时间;当所述智能合约不位于所述本次执行区块链出块的节点上时,向所述本次执行区块链出块的节点发送时间获取请求,接收所述本次执行区块链出块的节点反馈的当前时间。
可选的,所述确定单元包括:
发送模块,用于向独立于所述区块链的时间服务器发送时间获取请求;
接收模块,用于接收所述时间服务器返回的当前时间;
第二确定模块,用于将所述时间服务器返回的当前时间确定为所述区块链的当前时间。
第四方面,本发明提供了一种区块链中时间的确定装置,所述装置包括:
发送单元,用于当需要确定区块链的当前时间时,向提供时间服务的智能合约发送时间获取请求,以便所述智能合约根据预设时间确定规则,确定所述区块链的当前时间;
接收单元,用于接收所述智能合约发送的当前时间。
可选的,所述装置还包括:
调整单元,用于根据所述智能合约发送的当前时间调整本地的当前时间,使得时间同步。
可选的,所述装置还包括:
判断单元,用于在向提供时间服务的智能合约发送时间获取请求之前,判断在根据所述智能合约发送的当前时间调整本地当前时间后所经过的时长是否达到预设时长阈值;
所述发送单元,用于当所述时长达到所述预设时长阈值时,向所述智能合约发送所述时间获取请求。
可选的,所述装置还包括:
确定单元,用于当所述时长未达到所述预设时长阈值时,将本地的当前时间确定为所述区块链的当前时间。
第五方面,本发明提供了一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行如第一方面所述的区块链中时间的确定方法。
第六方面,本发明提供了一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行如第二方面所述的区块链中时间的确定方法。
第七方面,本发明提供了一种区块链中时间的确定装置,所述装置包括存储介质和处理器;
所述处理器,适于实现各指令;
所述存储介质,适于存储多条指令;
所述指令适于由所述处理器加载并执行如第一方面所述的区块链中时间的确定方法。
第八方面,本发明提供了一种区块链中时间的确定装置,所述装置包括存储介质和处理器;
所述处理器,适于实现各指令;
所述存储介质,适于存储多条指令;
所述指令适于由所述处理器加载并执行如第二方面所述的区块链中时间的确定方法。
第九方面,本发明提供了一种区块链中时间的确定系统,所述系统包括智能合约、获取时间的请求方;其中,所述智能合约包括如第三方面所述的装置,所述请求方包括如第四方面所述的装置。
借由上述技术方案,本发明提供的技术方案至少具有下列优点:
本发明提供的区块链中时间的确定方法、装置及系统,能够在区块链中的各个节点需要获取当前时间时,不是直接获取各自本地的当前时间,而是统一向智能合约获取当前时间,从而使得各个节点在时间上得到同步。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本发明实施例提供的一种区块链中时间的确定方法的流程图;
图2示出了本发明实施例提供的另一种区块链中时间的确定方法的流程图;
图3示出了本发明实施例提供的一种区块链中时间的确定装置的组成框图;
图4示出了本发明实施例提供的另一种区块链中时间的确定装置的组成框图;
图5示出了本发明实施例提供的另一种区块链中时间的确定装置的组成框图;
图6示出了本发明实施例提供的另一种区块链中时间的确定装置的组成框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
为了给区块链提供一种统一的时间服务机制,本发明实施例提供了一种区块链中时间的确定方法,如图1所示,所述方法包括:
101、区块链上的智能合约接收时间获取请求。
智能合约是指以数字形式定义的能够自动执行条款的合约。在区块链技术领域,智能合约特指基于预定事件触发、不可篡改、自动执行的计算机程序。智能合约一旦生成,区块链中任意一个节点往往都可以调用该智能合约,以实现某项业务或者交易。本发明实施例中的智能合约可以是专门提供时间服务的合约,也可以是包括时间服务和其他服务的合约。但是,当该智能合约是专门提供时间服务的合约时,其运算时间的效率相对包括其他服务的合约的运算效率往往要高,因此优选使用专门提供时间服务的合约。
当区块链中的某个节点需要确定当前时间时,可以向提供时间服务的智能合约发送时间获取请求,以便该智能合约接收到该时间获取请求后,能够向该节点反馈确定的当前时间。
102、智能合约根据预设时间确定规则,确定所述区块链的当前时间。
当智能合约接收到请求方发送的时间获取请求后,根据自身的处理逻辑(即预设时间确定规则),确定区块链的当前时间,并在确定时间结果后,立即将时间结果反馈给请求方。其中,预设时间确定规则可以包括多种,例如可以将某个节点的本地时间确定为所需要的时间,也可以将区块链外某个设备的时间确定为所需要的时间。
103、智能合约将所述当前时间返回给发送所述时间获取请求的请求方。
智能合约确定区块链的当前时间后,可以将该当前时间返回给请求方,以便请求方根据该当前时间来进行后续逻辑处理。
本发明实施例提供的区块链中时间的确定方法,能够在区块链中的各个节点需要获取当前时间时,不是直接获取各自本地的当前时间,而是统一向智能合约获取当前时间,从而使得各个节点在时间上得到同步。
可选的,上述步骤102中提及,智能合约确定当前时间的方法有很多,下面以以下两种确定方法为例进行阐述。
方法一:获取本次执行区块链出块的节点本地的当前时间;将所述本次执行区块链出块的节点本地的当前时间确定为所述区块链的当前时间。
其中,区块链中可能存在多个区块链出块节点(俗称“矿机”),每个区块链出块节点写入的区块不同,且同一时刻只有一个区块链出块节点出块(即生成区块)。为了使得区块链的当前时间的唯一性,本发明实施例将本次执行区块链出块的节点(即最近一次出块的区块链出块节点)本地的当前时间作为区块链的当前时间。
在实际应用中,智能合约可能存储在本次执行区块链出块的节点上,也可能存储在其他节点上。因此获取本次执行区块链出块的节点本地的当前时间的具体实现方式可以为:当获取时间的请求方请求的智能合约位于本次执行区块链出块的节点上时,智能合约接收到时间获取请求后,直接读取本地的当前时间;当所述智能合约不位于所述本次执行区块链出块的节点上时,所述智能合约接收到时间获取请求后,可以向所述本次执行区块链出块的节点发送时间获取请求,然后接收所述本次执行区块链出块的节点反馈的当前时间。
需要补充的是,在实际应用中,除了以本次执行区块链出块的节点的本地时间作为区块链的时间外,还可以以区块链中其他任一节点的本地时间作为区块链的时间。
方法二:智能合约先向独立于所述区块链的时间服务器发送时间获取请求,然后接收所述时间服务器返回的当前时间,最后将所述时间服务器返回的当前时间确定为所述区块链的当前时间。
由于相对于本次执行区块链出块的节点本地时间而言,专门计时的时间服务器计算的时间更为准确,所以若能够创建一份能够访问独立于区块链的时间服务器的智能合约,则优先使用该智能合约获取当前时间。
进一步的,依据智能合约侧所述的方法,本发明的另一个实施例还提供了一种区块链中时间的确定方法,该方法可以应用于区块链上任一个请求获取时间的节点,如图2所示,所述方法包括:
201、当需要确定区块链的当前时间时,向提供时间服务的智能合约发送时间获取请求,以便所述智能合约根据预设时间确定规则,确定所述区块链的当前时间。
当某节点需要确定区块链的当前时间时,可以向本地存储的智能合约或者本次执行区块链出块的节点上存储的相同的智能合约发送时间获取请求,以便当该智能合约接收到该时间获取请求后,可以根据预设设置的时间确定规则,来确定当前时间。其中,本发明实施例中的智能合约可以是专门提供时间服务的合约,也可以是包括时间服务和其他服务的合约。但是,当该智能合约是专门提供时间服务的合约时,其运算时间的效率相对包括其他服务的合约的运算效率往往要高,因此优选使用专门提供时间服务的合约。
202、接收所述智能合约发送的当前时间。
当接收到智能合约反馈的当前时间后,可以根据该当前时间进行后续逻辑处理,实现与时间相关的业务。
本发明实施例提供的区块链中时间的确定方法,能够在区块链中的各个节点需要获取当前时间时,不是直接获取各自本地的当前时间,而是统一向智能合约获取当前时间,从而使得各个节点在时间上得到同步。
进一步的,在实际应用中,某节点可能需要在特定时间段内频繁确定当前时间,在这种情况下,若每次都向智能合约获取时间,则操作比较繁琐,获取效率较低。为了提高时间获取效率,在从智能合约侧获取当前时间后,可以根据所述智能合约发送的当前时间调整本地的当前时间,使得时间同步。由此后续可以直接从本地获取时间,而无需从智能合约侧获取时间。
然而,随着时间的流逝,节点的本地时间往往会变慢,例如生活中常用的电脑的系统时间(即本地时间)在与网络时间同步后,过一段时间往往会变慢,导致电脑的系统时间与网络时间再次不同步。为了避免因发生上述情况而导致各个节点所使用的时间再次出现不同步,可以在向提供时间服务的智能合约发送时间获取请求之前,先判断在根据所述智能合约发送的当前时间调整本地当前时间后经过的时长是否达到预设时长阈值;若所述时长达到所述预设时长阈值,则向所述智能合约发送所述时间获取请求,以便从所述智能合约侧获取当前时间;若所述时长未达到所述预设时长阈值,则直接将本地的当前时间确定为所述区块链的当前时间。其中,预设时长阈值是根据实际经验确定的节点本地时间与智能合约所运算的时间出现差异的最短时长。
进一步的,根据上述方法实施例,本发明的另一个实施例还提供了一种区块链中时间的确定装置,如图3所示,所述装置包括:
接收单元31,用于区块链上的智能合约接收时间获取请求;
确定单元32,用于根据预设时间确定规则,确定所述区块链的当前时间;
返回单元33,用于将所述当前时间返回给发送所述时间获取请求的请求方。
可选的,如图4所示,所述确定单元32包括:
获取模块321,用于获取本次执行区块链出块的节点本地的当前时间;
第一确定模块322,用于将所述本次执行区块链出块的节点本地的当前时间确定为所述区块链的当前时间。
可选的,所述获取模块321,用于当所述智能合约位于所述本次执行区块链出块的节点上时,读取所述本次执行区块链出块的节点本地的当前时间;当所述智能合约不位于所述本次执行区块链出块的节点上时,向所述本次执行区块链出块的节点发送时间获取请求,接收所述本次执行区块链出块的节点反馈的当前时间。
可选的,如图4所示,所述确定单元32包括:
发送模块323,用于向独立于所述区块链的时间服务器发送时间获取请求;
接收模块324,用于接收所述时间服务器返回的当前时间;
第二确定模块325,用于将所述时间服务器返回的当前时间确定为所述区块链的当前时间。
所述区块链中时间的确定装置包括处理器和存储介质,上述接收单元、确定单元、返回单元等均作为程序单元存储在存储介质中,由处理器执行存储在存储介质中的上述程序单元来实现相应的功能。
本发明实施例提供的区块链中时间的确定装置,能够在区块链中的各个节点需要获取当前时间时,不是直接获取各自本地的当前时间,而是统一向智能合约获取当前时间,从而使得各个节点在时间上得到同步。
进一步的,根据上述方法实施例,本发明的另一个实施例还提供了一种区块链中时间的确定装置,如图5所示,所述装置包括:
发送单元41,用于当需要确定区块链的当前时间时,向提供时间服务的智能合约发送时间获取请求,以便所述智能合约根据预设时间确定规则,确定所述区块链的当前时间;
接收单元42,用于接收所述智能合约发送的当前时间。
可选的,如图6所示,所述装置还包括:
调整单元43,用于根据所述智能合约发送的当前时间调整本地的当前时间,使得时间同步。
可选的,如图6所示,所述装置还包括:
判断单元44,用于在向提供时间服务的智能合约发送时间获取请求之前,判断根据所述智能合约发送的当前时间调整本地当前时间的时长是否达到预设时长阈值;
所述发送单元41,用于当所述时长达到所述预设时长阈值时,向所述智能合约发送所述时间获取请求。
可选的,如图6所示,所述装置还包括:
确定单元45,用于当所述时长未达到所述预设时长阈值时,将本地的当前时间确定为所述区块链的当前时间。
所述区块链中时间的确定装置包括处理器和存储介质,上述发送单元、接收单元、调整单元、判断单元、确定单元等均作为程序单元存储在存储介质中,由处理器执行存储在存储介质中的上述程序单元来实现相应的功能。
本发明实施例提供的区块链中时间的确定装置,能够在区块链中的各个节点需要获取当前时间时,不是直接获取各自本地的当前时间,而是统一向智能合约获取当前时间,从而使得各个节点在时间上得到同步。
本发明实施例提供了一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行如智能合约侧所述的区块链中时间的确定方法。
本发明实施例提供了一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行如请求方侧所述的区块链中时间的确定方法。
存储介质可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram),存储器包括至少一个存储芯片。
本发明实施例提供了一种区块链中时间的确定装置,所述装置包括存储介质和处理器;
所述处理器,适于实现各指令;
所述存储介质,适于存储多条指令;
所述指令适于由所述处理器加载并执行如智能合约侧所述的区块链中时间的确定方法。
本发明实施例提供了一种区块链中时间的确定装置,所述装置包括存储介质和处理器;
所述处理器,适于实现各指令;
所述存储介质,适于存储多条指令;
所述指令适于由所述处理器加载并执行如请求方侧所述的区块链中时间的确定方法。
处理器中包含内核,由内核去存储介质中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来统一区块链中各个节点的时间。
进一步的,本发明的另一个实施例还提供了一种区块链中时间的确定系统,所述系统包括智能合约、获取时间的请求方;其中,所述智能合约包括如图3或图4所示的装置,所述请求方包括如图5或图6所示的装置。
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序代码:
区块链上的智能合约接收时间获取请求;
根据预设时间确定规则,确定所述区块链的当前时间;
将所述当前时间返回给发送所述时间获取请求的请求方。
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序代码:
当需要确定区块链的当前时间时,向提供时间服务的智能合约发送时间获取请求,以便所述智能合约根据预设时间确定规则,确定所述区块链的当前时间;
接收所述智能合约发送的当前时间。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器
(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。